如何指定Cocotb中记分板的比较功能?

2024-07-07 09:12:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想扩展Cocotb的Endian Swapper示例,以便它也检查被测设备(DUT)输出的包的内容。在provided example code中,生成预期输出的model函数将未修改的输入事务附加到预期输出列表中。此列表作为记分板的参数提供。在

为了理解记分板是如何工作的,以及model函数为什么没有附加字节交换的事务,我在DUT中引入了一个设计错误。在endian_swapper.vhdl的以下代码块中

if (byteswapping = '0') then
    stream_out_data      <= stream_in_data;
else
    stream_out_data      <= byteswap(stream_in_data);
end if;

我刚刚将第一行中的if条件转换为:(byteswapping /= '0')。在

重新运行测试台后,我本以为测试会失败,但它仍然通过了:

^{pr2}$

似乎在创建scoreboard时缺少比较函数:

self.scoreboard = Scoreboard(dut)
self.scoreboard.add_interface(self.stream_out, self.expected_output)

在调用add_interface时,它应该有第三个参数,但是这个参数没有文档记录。在

那么,如何指定这个比较函数,以便检查包的内容呢?在

我使用QuestaSim进行模拟,并使用make SIM=questa执行了测试台。我还清理了运行之间的构建目录。在


Tags: 函数self内容列表datastream参数model
2条回答

如果我在使用Icarus时应用了以下差异,则测试将如预期失败:

diff  git a/examples/endian_swapper/hdl/endian_swapper.sv b/examples/endian_swapper/hdl/endian_swapper.sv
index 810d3b7..a85db0d 100644
 - a/examples/endian_swapper/hdl/endian_swapper.sv
+++ b/examples/endian_swapper/hdl/endian_swapper.sv
@@ -119,7 +119,7 @@ always @(posedge clk or negedge reset_n) begin
             stream_out_startofpacket <= stream_in_startofpacket;
             stream_out_endofpacket   <= stream_in_endofpacket;

-            if (!byteswapping)
+            if (byteswapping)
                 stream_out_data      <= stream_in_data;
             else 
                 stream_out_data      <= byteswap(stream_in_data);

我没有访问Questa的权限,但我会看看在VHDL模拟器上会发生什么。我的直觉是在进行更改后再次检查您是否运行了make clean,并检查Questa是否以某种方式缓存了构建的RTL库。在

正确的是,记分板的add_interface方法有一些未记录的关键字参数:

  • compare_fn可以是任何可调用函数
  • reorder_depth是一个整数,允许对事务进行重新排序

然而,{supply是一个monitor}机制,当它被一个monitor}接收时,它将被一个monitor}调用。它是不可伸缩的,而且只是由于历史原因(因此没有文档记录)。在

更好的方法是将Scoreboard类子类化,并根据以下原型定义自定义compare方法:

^{pr2}$

其中gotexp是已接收和预期的事务,log是对监视器的logger实例的引用(以提供更有意义的消息)。在

Endian交换程序示例的顶层作为SystemVerilog代码和VHDL代码提供。如果不是由编译选项指定,则默认使用verilog代码。在

如果我跑:

make SIM=questa TOPLEVEL_LANG=vhdl

正如在Quick Start Guide中给出的,一切都按预期工作。在这种情况下,不需要指定比较函数。在

相关问题 更多 >