示例#1
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);
 }
示例#2
0
        /// <summary>
        /// Constructs a new testbechn.
        /// </summary>
        /// <param name="userLogic">component under test</param>
        public AXILiteSlaveUserLogicTestbench(AXILiteSlaveUserLogic userLogic)
        {
            user_logic = userLogic;

            _sig_Bus2IP_Clk    = new SLSignal();
            _sig_Bus2IP_Resetn = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_Bus2IP_Data = new SLVSignal(userLogic.SLVDWidth)
            {
                InitialValue = StdLogicVector.Xs(userLogic.SLVDWidth)
            };
            _sig_Bus2IP_BE = new SLVSignal(userLogic.SLVDWidth / 8)
            {
                InitialValue = StdLogicVector._0s(userLogic.SLVDWidth / 8)
            };
            _sig_Bus2IP_RdCE = new SLVSignal(userLogic.NumRegs)
            {
                InitialValue = StdLogicVector._0s(userLogic.NumRegs)
            };
            _sig_Bus2IP_WrCE = new SLVSignal(userLogic.NumRegs)
            {
                InitialValue = StdLogicVector._0s(userLogic.NumRegs)
            };
            _sig_IP2Bus_Data = new SLVSignal(userLogic.SLVDWidth)
            {
                InitialValue = StdLogicVector._0s(userLogic.SLVDWidth)
            };
            _sig_IP2Bus_RdAck = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_IP2Bus_WrAck = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_IP2Bus_Error = new SLSignal()
            {
                InitialValue = '0'
            };

            userLogic.Bus2IP_Clk    = _sig_Bus2IP_Clk;
            userLogic.Bus2IP_BE     = _sig_Bus2IP_BE;
            userLogic.Bus2IP_Clk    = _sig_Bus2IP_Clk;
            userLogic.Bus2IP_Data   = _sig_Bus2IP_Data;
            userLogic.Bus2IP_RdCE   = _sig_Bus2IP_RdCE;
            userLogic.Bus2IP_Resetn = _sig_Bus2IP_Resetn;
            userLogic.Bus2IP_WrCE   = _sig_Bus2IP_WrCE;
            userLogic.IP2Bus_Data   = _sig_IP2Bus_Data;
            userLogic.IP2Bus_Error  = _sig_IP2Bus_Error;
            userLogic.IP2Bus_RdAck  = _sig_IP2Bus_RdAck;
            userLogic.IP2Bus_WrAck  = _sig_IP2Bus_WrAck;

            _clockGen = new Clock(new Time(10.0, ETimeUnit.ns))
            {
                Clk = _sig_Bus2IP_Clk
            };
        }
示例#3
0
 private StdLogicVector CreateVector()
 {
     StdLogicVector[] r = new StdLogicVector[4];
     r[0] = StdLogicVector._0s(MaxWidth);
     r[1] = StdLogicVector._1s(MaxWidth);
     r[2] = StdLogicVector.DCs(MaxWidth);
     r[3] = StdLogicVector.Xs(MaxWidth);
     return(r[0].Concat(r[1].Concat(r[2].Concat(r[3]))));
 }
示例#4
0
        public virtual void AssembleStagedDecoderSync(int[] syms, int selWidth,
                                                      LiteralReference lrCWSelSlice, IAutoBinder binder, IAlgorithmBuilder pbuilder,
                                                      bool registered)
        {
            if (NumSymbols < 2)
            {
                return;
            }

            CreateSelSymbol(binder, registered);

            pbuilder.Switch(lrCWSelSlice);

            for (int i = 0; i < syms.Length; i++)
            {
                var selValue = StdLogicVector.FromUInt((uint)i, selWidth);
                pbuilder.Case(LiteralReference.CreateConstant(selValue));

                int sym    = syms[i];
                var symbol = _selSymbols.GetValue(sym - 1);
                pbuilder.Store(
                    _symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Next),
                    LiteralReference.CreateConstant(symbol));

                pbuilder.EndCase();
            }

            pbuilder.DefaultCase();
            {
                pbuilder.Store(
                    _symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Next),
                    LiteralReference.CreateConstant(StdLogicVector.Xs(NumSymbols)));
            }
            pbuilder.EndCase();

            if (registered)
            {
                pbuilder.Store(
                    _symbold.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Next),
                    _symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Cur));
            }

            pbuilder.EndSwitch();
        }
示例#5
0
        public virtual void AssembleStagedDecoderComb(
            ValueFlowCoder vfc,
            LiteralReference lrCWSelSlice,
            IAlgorithmBuilder pbuilder, SLVSignal cwSignal,
            HashSet <ISignalOrPortDescriptor> sensitivity,
            bool registered)
        {
            if (NumSymbols == 0)
            {
                foreach (var target in Targets)
                {
                    pbuilder.Store(target, LiteralReference.CreateConstant(target.Desc.InitialValue));
                }
            }
            else if (NumSymbols == 1)
            {
                var pflow = BwdEnc[0];
                foreach (var flow in pflow.Flows)
                {
                    ImplementFlow(vfc, flow, pbuilder, cwSignal, sensitivity);
                }
            }
            else
            {
                var symbol = registered ? _symbold : _symbol;
                pbuilder.Switch(symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Cur));

                for (int i = 0; i < NumSymbols; i++)
                {
                    var selValue = _selSymbols.GetValue(i);
                    var pflow    = BwdEnc[i];

                    pbuilder.Case(LiteralReference.CreateConstant(selValue));
                    foreach (var flow in pflow.Flows)
                    {
                        ImplementFlow(vfc, flow, pbuilder, cwSignal, sensitivity);
                    }
                    pbuilder.EndCase();
                }

                var nulls = StdLogicVector._0s(NumSymbols);
                pbuilder.Case(LiteralReference.CreateConstant(nulls));
                {
                    foreach (var target in Targets)
                    {
                        int width = Marshal.SerializeForHW(target.Desc.InitialValue).Size;
                        pbuilder.Store(target,
                                       LiteralReference.CreateConstant(StdLogicVector._0s(width)));
                    }
                }
                pbuilder.EndCase();

                pbuilder.DefaultCase();
                {
                    foreach (var target in Targets)
                    {
                        int width = Marshal.SerializeForHW(target.Desc.InitialValue).Size;
                        pbuilder.Store(target,
                                       LiteralReference.CreateConstant(StdLogicVector.Xs(width)));
                    }
                }
                pbuilder.EndCase();

                pbuilder.EndSwitch();
            }
        }
示例#6
0
        /// <summary>
        /// Creates an instance.
        /// </summary>
        /// <param name="userLogic">component under test</param>
        public AXIMasterUserLogicTestbench(AXIMasterUserLogic userLogic)
        {
            user_logic = userLogic;

            _sig_Bus2IP_Clk    = new SLSignal();
            _sig_Bus2IP_Resetn = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_Bus2IP_Data = new SLVSignal(userLogic.SLVDWidth)
            {
                InitialValue = StdLogicVector.Xs(userLogic.SLVDWidth)
            };
            _sig_Bus2IP_BE = new SLVSignal(userLogic.SLVDWidth / 8)
            {
                InitialValue = StdLogicVector._0s(userLogic.SLVDWidth / 8)
            };
            _sig_Bus2IP_RdCE = new SLVSignal(userLogic.NumRegs)
            {
                InitialValue = StdLogicVector._0s(userLogic.NumRegs)
            };
            _sig_Bus2IP_WrCE = new SLVSignal(userLogic.NumRegs)
            {
                InitialValue = StdLogicVector._0s(userLogic.NumRegs)
            };
            _sig_IP2Bus_Data = new SLVSignal(userLogic.SLVDWidth)
            {
                InitialValue = StdLogicVector._0s(userLogic.SLVDWidth)
            };
            _sig_IP2Bus_RdAck = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_IP2Bus_WrAck = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_IP2Bus_Error = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_ip2bus_mstrd_req = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_ip2bus_mstwr_req = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_ip2bus_mst_addr = new SLVSignal(userLogic.MasterAXIAddrWidth)
            {
                InitialValue = StdLogicVector.Us(userLogic.MasterAXIAddrWidth)
            };
            _sig_ip2bus_mst_be = new SLVSignal(userLogic.NativeDataWidth / 8)
            {
                InitialValue = StdLogicVector._1s(userLogic.NativeDataWidth / 8)
            };
            _sig_ip2bus_mst_length = new SLVSignal(userLogic.LengthWidth)
            {
                InitialValue = StdLogicVector._0s(userLogic.LengthWidth)
            };
            _sig_ip2bus_mst_type = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_ip2bus_mst_lock = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_ip2bus_mst_reset = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mst_cmdack = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mst_cmplt = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mst_error = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mst_rearbitrate = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mst_cmd_timeout = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mstrd_d   = new SLVSignal(userLogic.NativeDataWidth);
            _sig_bus2ip_mstrd_rem = new SLVSignal(userLogic.NativeDataWidth / 8)
            {
                InitialValue = StdLogicVector._0s(userLogic.NativeDataWidth / 8)
            };
            _sig_bus2ip_mstrd_sof_n = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mstrd_eof_n = new SLSignal()
            {
                InitialValue = '0'
            };
            _sig_bus2ip_mstrd_src_rdy_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_bus2ip_mstrd_src_dsc_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_ip2bus_mstrd_dst_rdy_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_ip2bus_mstrd_dst_dsc_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_ip2bus_mstwr_d   = new SLVSignal(userLogic.NativeDataWidth);
            _sig_ip2bus_mstwr_rem = new SLVSignal(userLogic.NativeDataWidth / 8)
            {
                InitialValue = StdLogicVector._0s(userLogic.NativeDataWidth / 8)
            };
            _sig_ip2bus_mstwr_src_rdy_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_ip2bus_mstwr_src_dsc_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_ip2bus_mstwr_sof_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_ip2bus_mstwr_eof_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_bus2ip_mstwr_dst_rdy_n = new SLSignal()
            {
                InitialValue = '1'
            };
            _sig_bus2ip_mstwr_dst_dsc_n = new SLSignal()
            {
                InitialValue = '1'
            };

            userLogic.Bus2IP_Clk             = _sig_Bus2IP_Clk;
            userLogic.Bus2IP_BE              = _sig_Bus2IP_BE;
            userLogic.Bus2IP_Clk             = _sig_Bus2IP_Clk;
            userLogic.Bus2IP_Data            = _sig_Bus2IP_Data;
            userLogic.Bus2IP_RdCE            = _sig_Bus2IP_RdCE;
            userLogic.Bus2IP_Resetn          = _sig_Bus2IP_Resetn;
            userLogic.Bus2IP_WrCE            = _sig_Bus2IP_WrCE;
            userLogic.IP2Bus_Data            = _sig_IP2Bus_Data;
            userLogic.IP2Bus_Error           = _sig_IP2Bus_Error;
            userLogic.IP2Bus_RdAck           = _sig_IP2Bus_RdAck;
            userLogic.IP2Bus_WrAck           = _sig_IP2Bus_WrAck;
            userLogic.ip2bus_mstrd_req       = _sig_ip2bus_mstrd_req;
            userLogic.ip2bus_mstwr_req       = _sig_ip2bus_mstwr_req;
            userLogic.ip2bus_mst_addr        = _sig_ip2bus_mst_addr;
            userLogic.ip2bus_mst_be          = _sig_ip2bus_mst_be;
            userLogic.ip2bus_mst_length      = _sig_ip2bus_mst_length;
            userLogic.ip2bus_mst_type        = _sig_ip2bus_mst_type;
            userLogic.ip2bus_mst_lock        = _sig_ip2bus_mst_lock;
            userLogic.ip2bus_mst_reset       = _sig_ip2bus_mst_reset;
            userLogic.bus2ip_mst_cmdack      = _sig_bus2ip_mst_cmdack;
            userLogic.bus2ip_mst_cmplt       = _sig_bus2ip_mst_cmplt;
            userLogic.bus2ip_mst_error       = _sig_bus2ip_mst_error;
            userLogic.bus2ip_mst_rearbitrate = _sig_bus2ip_mst_rearbitrate;
            userLogic.bus2ip_mst_cmd_timeout = _sig_bus2ip_mst_cmd_timeout;
            userLogic.bus2ip_mstrd_d         = _sig_bus2ip_mstrd_d;
            userLogic.bus2ip_mstrd_rem       = _sig_bus2ip_mstrd_rem;
            userLogic.bus2ip_mstrd_sof_n     = _sig_bus2ip_mstrd_sof_n;
            userLogic.bus2ip_mstrd_eof_n     = _sig_bus2ip_mstrd_eof_n;
            userLogic.bus2ip_mstrd_src_rdy_n = _sig_bus2ip_mstrd_src_rdy_n;
            userLogic.bus2ip_mstrd_src_dsc_n = _sig_bus2ip_mstrd_src_dsc_n;
            userLogic.ip2bus_mstrd_dst_rdy_n = _sig_ip2bus_mstrd_dst_rdy_n;
            userLogic.ip2bus_mstrd_dst_dsc_n = _sig_ip2bus_mstrd_dst_dsc_n;
            userLogic.ip2bus_mstwr_d         = _sig_ip2bus_mstwr_d;
            userLogic.ip2bus_mstwr_rem       = _sig_ip2bus_mstwr_rem;
            userLogic.ip2bus_mstwr_src_rdy_n = _sig_ip2bus_mstwr_src_rdy_n;
            userLogic.ip2bus_mstwr_src_dsc_n = _sig_ip2bus_mstwr_src_dsc_n;
            userLogic.ip2bus_mstwr_sof_n     = _sig_ip2bus_mstwr_sof_n;
            userLogic.ip2bus_mstwr_eof_n     = _sig_ip2bus_mstwr_eof_n;
            userLogic.bus2ip_mstwr_dst_rdy_n = _sig_bus2ip_mstwr_dst_rdy_n;
            userLogic.bus2ip_mstwr_dst_dsc_n = _sig_bus2ip_mstwr_dst_dsc_n;

            _clockGen = new Clock(new Time(10.0, ETimeUnit.ns))
            {
                Clk = _sig_Bus2IP_Clk
            };
        }