Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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);
 }