模块内的模糊内部的参数

Ahm*_*lah 5 verilog

我已经阅读了有关参数以及如何在模块实例化时重新定义它们但是如果我在模块内的模块内部有一个参数说我有一个名为gen的小模块怎么办?

module gen(input,output);
parameter n=2;
parameter m=10;
//do something
endmodule
Run Code Online (Sandbox Code Playgroud)

该模块在名为top的另一个模块中实例化

module top(inputs,output);
gen gen1(inputs,output);
//do something
endmodule;   
Run Code Online (Sandbox Code Playgroud)

我试图在大模块上制作一个测试平台,我需要重新定义两个参数nm

module tb;
reg input;
wire output;
top top1(input,output)
endmodule;
Run Code Online (Sandbox Code Playgroud)

我怎么能在verilog中写出来?

Ari*_*Ari 4

一种解决方案是重新定义每个级别的参数:

module gen(input,output);
parameter n=2;
parameter m=10;
//do something
endmodule


module top(inputs,output);
parameter n=2;
parameter m=10;
gen #(.n(n), .m(m)) gen1(inputs,output);
//do something
endmodule

module tb;
reg input;
wire output;
top #(.n(n), .m(m)) top1(input,output);
endmodule
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是保留当前的模块定义并defparam在测试台中使用以分层覆盖参数的值:

module tb;
reg input;
wire output;
defparam top1.gen1.m = 4;
defparam top1.gen1.n = 5;
top top1(input,output);
endmodule
Run Code Online (Sandbox Code Playgroud)