【发布时间】:2021-07-12 15:32:51
【问题描述】:
我有一些模块,我想从 PRINTER 模块中打印一些电线。我有两个不同的测试平台,它们对这些模块的包装略有不同,请参见下面的代码。是否可以使用相同的PRINTER 打印print_me_a 和print_me_b 使用分层引用?
我知道测试台中的所有分层引用,并且我知道我可以扩展 PRINTER 来代替输入,然后在那里连接相对引用,但是如果我想扩展 PRINTER 内的分层引用更容易添加很多新的打印,然后我只需要更改PRINTER。
鉴于下面的结构,我无法真正利用bind 使其在两个测试平台中都工作。我尝试使用MOD_A.print_me_a 和MOD_B.print_me_b 代替实例引用,当我使用VCS 时,这有效,但在Questa 中无效,我希望解决方案同时适用于两者。
有没有办法为PRINTER 提供分层引用或名称或一些宏作为参数,以便我可以在PRINTER 中使用相同的代码来打印两个测试台中的电线?或者我可以利用一些参数告诉我实例用于哪个测试平台generate 一些不同的宏,如 `define MOD_A_DEF known_name_wrap_a.known_name_a,以便以后在PRINTER 中常用?
module MOD_A();
wire print_me_a; // I want to print this
endmodule
module WRAP_A();
MOD_A known_name_a();
endmodule
module MOD_B();
wire print_me_b; // I want to print this
endmodule
module TOP_MOD();
WRAP_A known_name_wrap_a();
MOD_B known_name_b();
endmodule
module PRINTER();
// Pseudo code, can I access these with hierarchical ref?
$display(known_name_wrap_a.known_name_a.print_me_a) // Only works in TOP_TB
$display(known_name_a.print_me_a) // Only works in OTHER_TB
$display(known_name_b.print_me_b); // Happens to work fine in both
endmodule
module TOP_TB();
TOP_MOD top_mod();
bind top_mod
PRINTER top_tb_printer();
endmodule
module OTHER_TB();
MOD_A known_name_a();
MOD_B known_name_b();
PRINTER other_tb_printer();
endmodule
【问题讨论】:
标签: system-verilog