的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
你可以在[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
是的,你需要编写你自己的'Monitor'和'Transaction'类。 – Paebbels
非常感谢您的帮助(再次)以及您的例子,这些非常有用。 它帮了我很多。 – user1654361