protected async Task <StdLogicVector> ReadBus(int reg) { StdLogicVector value; _sig_Bus2IP_RdCE.Next = StdLogicVector.OneHot(user_logic.NumRegs, user_logic.NumRegs - reg - 1); for (int t = 0; t < 100; t++) { await Tick; if (_sig_IP2Bus_RdAck.Cur == '1' || _sig_IP2Bus_Error.Cur == '1') { break; } } if (_sig_IP2Bus_Error.Cur == '1') { Console.WriteLine("Bus read error @reg " + reg); } if (_sig_IP2Bus_Error.Cur == '0' && _sig_IP2Bus_RdAck.Cur == '0') { Console.WriteLine("Timeout @reg " + reg); } _sig_Bus2IP_RdCE.Next = StdLogicVector._0s(user_logic.NumRegs); value = _sig_IP2Bus_Data.Cur; return(value); }
protected async Task WriteBus(int reg, StdLogicVector be, StdLogicVector data) { _sig_Bus2IP_WrCE.Next = StdLogicVector.OneHot(user_logic.NumRegs, user_logic.NumRegs - reg - 1); _sig_Bus2IP_BE.Next = be; _sig_Bus2IP_Data.Next = data; for (int t = 0; t < 100; t++) { await Tick; if (_sig_IP2Bus_WrAck.Cur == '1' || _sig_IP2Bus_Error.Cur == '1') { break; } } if (_sig_IP2Bus_Error.Cur == '1') { Console.WriteLine("Bus write error @reg " + reg); } if (_sig_IP2Bus_Error.Cur == '0' && _sig_IP2Bus_WrAck.Cur == '0') { Console.WriteLine("Timeout @reg " + reg); } _sig_Bus2IP_WrCE.Next = StdLogicVector._0s(user_logic.NumRegs); _sig_Bus2IP_BE.Next = StdLogicVector._0s(user_logic.SLVDWidth / 8); _sig_Bus2IP_Data.Next = StdLogicVector.Xs(user_logic.SLVDWidth); }