【问题标题】:Can I provide macro/reference as parameter for hierarchical access in testbench? (SystemVerilog)我可以提供宏/参考作为测试台中分层访问的参数吗? (SystemVerilog)
【发布时间】:2021-07-12 15:32:51
【问题描述】:

我有一些模块,我想从 PRINTER 模块中打印一些电线。我有两个不同的测试平台,它们对这些模块的包装略有不同,请参见下面的代码。是否可以使用相同的PRINTER 打印print_me_aprint_me_b 使用分层引用?

我知道测试台中的所有分层引用,并且我知道我可以扩展 PRINTER 来代替输入,然后在那里连接相对引用,但是如果我想扩展 PRINTER 内的分层引用更容易添加很多新的打印,然后我只需要更改PRINTER

鉴于下面的结构,我无法真正利用bind 使其在两个测试平台中都工作。我尝试使用MOD_A.print_me_aMOD_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


    【解决方案1】:

    您可以在您的 PRINTER 模块中使用端口并将它们与相关的分层引用连接起来。

    module PRINTER(input wire a,b);
       initial $display(a);
       initial $display(b);
    endmodule
    
    module TOP_TB();
       TOP_MOD top_mod();
    
       bind top_mod PRINTER top_tb_printer(
           known_name_wrap_a.known_name_a.print_me_a,
           known_name_b.print_me_b
           );
    endmodule
    
    module OTHER_TB();
       MOD_A known_name_a();
       MOD_B known_name_b();
    
       PRINTER other_tb_printer(
           known_name_a.print_me_a
           known_name_b.print_me_b);
    endmodule
    

    【讨论】:

    • 谢谢,是的,我知道我可以使用与引用连接的输入,我可能在描述中对此不够清楚,但我想知道这是唯一的方法还是我可以使用参数、宏或类似的东西以其他方式进行。但我的猜测是这是不可能的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多