我必须在RTL模块中嵌入DV代码以进行验证。这个RTL模块有很多(1000s)实例。如何从测试中基于每个实例使其可控? Testbench在SystemVerilog UVM中。我想远离CDPI?
任何建议都将不胜感激
-Hawki
答案 0 :(得分:1)
使用bind
构造将模块或接口插入RTL模块。在此绑定模块中,您可以使用与RTL模块交互的方法构造一个类。每个实例都将类对象设置为uvm_config_db。然后,您的测试平台从uvm_config_db获取这些对象,您可以从测试平台调用这些对象方法。
我写了一篇DVCon 2012论文The Missing Link: The Testbench to DUT Connection,上面有一个完整的例子。
答案 1 :(得分:0)
正如戴夫在回答中所说,bind
陈述通常是最好的方式。
虽然还有其他方法,但在某些情况下可能会更方便。它们基于参数化模块。
1)使用参数直接实例化
module rtl #(bit dvflag = 0) ();
...
if (dvflag)
dv_module dv_instance(...);
...
endmodule
module dut;
rtl rtl1();
rtl #(.dvflag(1)) rtl2();
...
endmodule
2)用v2k配置语句覆盖实例。
module dut;
rtl rtl1();
rtl rtl2();
endmodule
...
config dv_cfg;
instance dut.rtl2 use #(.dvflag(1));
...
endocnfig