2016-11-23 132 views
1

我试图将Cocotb设置为我的验证环境。 我一直在寻找有用的例子,但我不知道我应该走的方向。cocotb的总线监视器

我的块可以被看作是:在输入
-4总线
-1时钟和复位1作为输入
-2总线在输出

输出是一个组合和时序处理的结果的输入信号。 我没有去更进一步的部分是如何定义正确监视我的输入和输出总线,这是(据我所知)不符合AvalonST

我看了Cocotb提供的例子,以及什么阻止我得到启发的是,无论是提供:
- 具备没有监视器(如加法)
次使用AvalonST驱动程序(如endianswapper)

我目前最大的问题是:
- 当在看意思是,我看到这个人已经定义了自己的StreamBusMonitor,并且我也应该按照我的理解去做(监视我的4个输入来供给我的参考模型)。我对么?

- 我不明白是怎么信号的名称是由StreamBusMonitor我看到以下行匹配:
dut_out = StreamBusMonitor(DUT,“O”,dut.clk)
但我不了解“o”的用途以及StreamBusMonitor使用的位置。有人能帮助我吗?

- 我还没有找到任何官方的Cocotb论坛。有没有一个更正式的地方问我关于Cocotb的初学者问题,而不是StackOverflow?

谢谢大家的帮助。

+0

你可以在[Gitter频道](https://gitter.im/vhdl/General)上提问。您还可以查看我们的[PoC-Library](https://github.com/VLSI-EDA/PoC?ts=2)中提供的3个Cocotb测试平台:[PoC.cache.par](https:// github .com/VLSI-EDA/PoC/blob/master/tb/cache/cache_par_cocotb.py?ts = 2),[PoC.sort.lur_cache](https://github.com/VLSI-EDA/PoC/blob/ master/tb/sort/sort_lru_cache_cocotb.py?ts = 2)或[PoC.sort.lru_list](https://github.com/VLSI-EDA/PoC/blob/master/tb/sort/sort_lru_list_cocotb.py?ts = 2)。 – Paebbels

+0

是的,你需要编写你自己的'Monitor'和'Transaction'类。 – Paebbels

+0

非常感谢您的帮助(再次)以及您的例子,这些非常有用。 它帮了我很多。 – user1654361

回答

0

StreamBusMonitor是基于其在cocotb/monitors/__init__.py

类定义的开头是这样定义的BusMonitor类:

class BusMonitor(Monitor): 
    """ 
    Wrapper providing common functionality for monitoring busses 
    """ 
    _signals = [] 
    _optional_signals = [] 

    def __init__(self, entity, name, clock, reset=None, reset_n=None, 
       callback=None, event=None): 
     self.log = SimLog("cocotb.%s.%s" % (entity._name, name)) 
     self.entity = entity 
     self.name = name 
     self.clock = clock 
     self.bus = Bus(self.entity, self.name, self._signals, 
         optional_signals=self._optional_signals) 
     self._reset = reset 
     self._reset_n = reset_n 
     Monitor.__init__(self, callback=callback, event=event) 

StreamBusMonitor构造的"o"name说法。当它被传递给构造函数Bus时,用于确定信号的全名。

您可能已经意识到,一个相当明智和常见的总线命名方案是总线协议信号名称,其中附加或附加了一些独特的标识符,如“i”in,“o”out或“axi_m”一个AXI大师等,这正是cocotb所假设的。

StreamBusMonitor的信号被声明并覆盖BusMonitor_signals_optional_signals值。因此,这里所定义的信号:

class StreamBusMonitor(BusMonitor): 
    """ 
    streaming bus monitor 
    """ 
    _signals = ["valid", "data"] 

主要有连接的名称(在前面加上_加入信号和总线名称是默认的行为按cocotb/bus.py),以确定在设计总线信号名称"o",并且设计层次中正确对象的句柄是entity参数。

这是合理的,所申报的信号是上述那些,并且在VHDL的信号是:

i_valid : in std_logic; 
    i_data : in t_data_array(0 to BUS_WIDTH-1); 
    o_valid : out std_logic; 
    o_data : out t_data 

至于通信信道现在有一个小胶质信道:

https://gitter.im/cocotb

和邮件列表由LibreCores设置:

https://lists.librecores.org/listinfo/cocotb