【问题标题】:bus monitor for cocotbcocotb 总线监视器
【发布时间】:2016-11-23 17:14:51
【问题描述】:

我正在尝试将 Cocotb 设置为我的验证环境。 我一直在看示例,这些示例很有用,但我不确定我应该走的方向。

我的块可以看成:

  • 4 总线输入
  • 1 个时钟和 1 个复位作为输入
  • 2 条输出总线

输出是输入信号的组合和顺序处理的结果。

我需要进一步说明的部分是如何为我的输入和输出总线正确定义监视器,这些总线(据我了解)不符合 AvalonST

我查看了 Cocotb 提供的示例,但阻止我获得灵感的是提供的任一示例:

  • 没有监视器(如加法器)
  • 使用 AvalonST 驱动程序(如 endianswapper)

我现在的问题是:

  • 在查看平均示例时,我看到该人已经定义了自己的 StreamBusMonitor,并且我应该按照我的理解做同样的事情(监控我的 4 个输入以提供我的参考模型)。我说的对吗?
  • 我不明白StreamBusMonitor 是如何匹配信号名称的 我看到以下行:
    dut_out = StreamBusMonitor(dut, "o", dut.clk)
    但我不明白“o”的用途,以及它在 StreamBusMonitor 中的使用位置。有人可以帮我吗?
  • 我还没有找到任何官方的 Cocotb 论坛。有没有比 StackOverflow 更正式的地方可以向我的初学者提问关于 Cocotb 的问题?

感谢大家的帮助。

【问题讨论】:

标签: vhdl monitor verification cocotb


【解决方案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)

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

您可能已经知道,一个相当合理和常见的总线命名方案是总线协议信号名称附加或前置一些唯一标识符,例如“i”表示输入,“o”表示输出,或“axi_m”表示AXI master 等,这正是 cocotb 假设正在发生的事情。

声明StreamBusMonitor 的信号并覆盖BusMonitor_signals_optional_signals 值。所以这里定义的信号:

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

基本上将"o"附加到名称(前面加上_加入信号,总线名称是cocotb/bus.py的默认行为)以确定设计中的总线信号名称,以及句柄设计层次结构中的正确对象是 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

至于通讯频道,现在有一个 gitter 频道:

https://gitter.im/cocotb

以及由 LibreCores 设置的邮件列表:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    相关资源
    最近更新 更多