我有一个verilog模块的串行输出,我想使用system-verilog来测试testbench .
输出被称为'SO'将输出类似8'hC6的东西,给出正确的串行输入'SI',其值为8'h9A .
是否有一种简单的方法来编码/解码串行IO而无需明确描述每个信号?
例如:
assert property @(posedge clk) $rose(EN) |-> ##[1:3] SI ##1 !SI[*2] ##1 SI[*2] ##1 !SI ##1 SI ##1 !SI
##[1:3] SO[*2] ##1 !SO[*3] ##1 SO[*2] ##1 !SO;
它看起来像乱七八糟的混乱,几乎无法读取 . 我非常想写
8'h9A ##[1:3] 8'hC6
但显然这不起作用 . 任何建议或例子都非常受欢迎 . 提前致谢 .
2 回答
尝试一个序列并参考IEEE Std 1800-2012 section 16.10(局部变量):
这相当于提供的断言,更具可读性 .
请注意
local
关键字,它将expected
视为变量而不是参考,并允许您传递常量(例如8'h9A
,8'hC6
)并仍允许您进行网络引用 . 有关更多信息,请参见IEEE Std 1800-2012 section 16.8.2(序列声明中的局部变量形式参数) .这是一个简单的测试平台来证明这个断言 . 我正在驾驶
SO
因为我没有真正的DUT而且我想展示通过和失败的情况 .您通常不使用断言来描述对数据项的检查,而是使用控制信号 . 在这种情况下你需要的是将你的整个输入流收集到一个16位向量中,收集你的整个输出流并检查你在SO行上得到的东西是否符合你应该得到的东西(对SI的内容进行了一些转换)线) .
我的SystemVerilog生锈了,但我会给你一个我的意思的快速例子 . 请注意,它不可编译 .
希望它能给你一个想法 .