什么是upward reference?
SOC环境搭建中,无论是interface的实例化和连接,还是对DUT的信号进行操作时,都会用到Cross-module reference, 也就是常见的在testbench中使用RTL的信号,如:
module TB;
...
pcie_wrapper DUT();
...
wire pcie_rst;
//引用DUT中的RTL信号
assign pcie_rst = TB.DUT.pcie_top.rst;
...
endmodule
诸如此类的用法必不可少,每个验证环境都会使用cross-module reference的方式,使用或者监测DUT的内部信号。更常见的处理方式是定义hierarchy宏,这样易于维护和复用。比如上面的例子中,更常见的做法是定义一个宏,然后再使用:
module TB;
`define PCIE_WRAPPER_HIER TB.DUT
`define PCIE_TOP_HIER `PCIE_WRAPPER_HIER.pcie_top
...
assign pcie_rst = `PCIE_TOP_HIER.rst;
...
endmodule
当然,环境的宏定义会有专门的文件管理,一般不会在TB中直接定义和使用,上述例子仅作示意说明。
上述例子中的cross-module reference,其实是一种full path reference的方式。