cocotb的公共汽车监控器

时间:2016-11-23 17:14:51

标签: vhdl monitor verification 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?

感谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

StreamBusMonitor基于BusMonitor中定义的cocotb/monitors/__init__.py

类定义的开头如下所示:

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)

"o"构造函数中的StreamBusMonitorname参数。这用于在传递给Bus构造函数时确定信号的全名。

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

宣布StreamBusMonitor的信号并覆盖BusMonitor的{​​{1}}和_signals值。所以这里定义的信号是:

_optional_signals

基本上有class StreamBusMonitor(BusMonitor): """ streaming bus monitor """ _signals = ["valid", "data"] 附加到名称(前缀为"o"加入信号,总线名称是默认行为,按_)来确定总线信号名称设计,以及设计层次结构中正确对象的句柄是cocotb/bus.py参数。

这是有道理的,因为声明的信号是上面的信号,VHDL中的信号是:

entity

至于沟通渠道,现在有一个gitter渠道:

https://gitter.im/cocotb

和LibreCores建立的邮件列表:

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