我想扩展 Cocotb 的Endian Swapper示例,以便它还检查被测设备 (DUT) 输出的包的内容。在提供的示例代码中,生成预期输出的函数将未修改的输入事务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')
。
重新运行测试台后,我预计测试会失败,但它仍然通过:
# 62345.03ns INFO cocotb.regression regression.py:209 in handle_result Test Passed: wavedrom_test
# 62345.03ns INFO cocotb.regression regression.py:170 in tear_down Passed 33 tests (0 skipped)
# 62345.03ns INFO cocotb.regression regression.py:176 in tear_down Shutting down...
似乎在记分板的创建中缺少比较功能:
self.scoreboard = Scoreboard(dut)
self.scoreboard.add_interface(self.stream_out, self.expected_output)
在 的调用中应该有第三个参数add_interface
,但是这个参数没有记录。
那么,如何指定此比较功能,以便还检查包内容?
我正在使用 QuestaSim 进行模拟,并使用make SIM=questa
. 我还清理了运行之间的构建目录。