Verilog ams:获取另一个模块中的参数值

时间:2017-01-16 07:11:58

标签: verilog system-verilog

我遇到了一个问题。 我想从另一个模块中的参数中获取一个值,如下所示:

dir=""

2 个答案:

答案 0 :(得分:1)

请记住,verilog参数应用于实例。所以你需要从实例中调用参数。

这是你的第一个模块

module FS0b (in2,in2,out1);
    input in1,in2;
    output out1;

    parameter real res=10000;

endmodule 

让我们在第二个模块中添加一个虚拟参数

module FS1b (in1,in2,out1);

parameter real res=10000;
    input in1,in2;
    output out1;

    wreal in1;
    wreal in2;
    wreal out1;


    assign out1=res- in1+in2;

endmodule 

并在顶层模块中实例化

module Topmodule(...);

    FS0b fs0b{...};

    defparam
    fs1b.res = fs0b.res;
    FS1b fs1b{...};

endmodule

但更好的应用是在顶层模块中定义参数,然后将其应用于层次结构:

module Topmodule(...);
    parameter real res=10000;  

    defparam
    fs0b.res = res;
    FS0b fs0b{...};


    defparam
    fs1b.res = res;
    FS1b fs1b{...};

endmodule

答案 1 :(得分:0)

verilog中的参数具有局部范围。它是在其定义的模块的本地。

您可以使用分层表示法从其他模块访问该参数,但根本不建议这样做。

相反,您可以使用verilog中的`define或系统verilog中的包来使其全局化。

module FS0b (in1,in2,out1);
    input in1,in2;
    output out1
    parameter real res=10000;
endmodule 

module FS1b (in1,in2,out1);
    input in1,in2;
    output out1;
    wire in1;
    wire in2;
    wire out1;
    assign out1= FS0b.res - in1+in2;
endmodule