Verilog 模块内模件内的参数

Verilog 模块内模件内的参数,verilog,Verilog,我已经读过关于参数以及如何在模块实例化时重新定义它们的内容,但是如果我在模块内的模块中有一个参数,比如说我有一个名为gen的小模块,该怎么办 module gen(input,output); parameter n=2; parameter m=10; //do something endmodule 该模块在另一个名为top的模块中实例化 module top(inputs,output); gen gen1(inputs,output); //do something endmodule

我已经读过关于参数以及如何在模块实例化时重新定义它们的内容,但是如果我在模块内的模块中有一个参数,比如说我有一个名为gen的小模块,该怎么办

module gen(input,output);
parameter n=2;
parameter m=10;
//do something
endmodule
该模块在另一个名为top的模块中实例化

module top(inputs,output);
gen gen1(inputs,output);
//do something
endmodule;   
我正试图在大模块上做一个测试台,我需要重新定义两个参数nm

module tb;
reg input;
wire output;
top top1(input,output)
endmodule;

我怎样才能在verilog中写出来?

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

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;
另一种解决方案是保留当前模块定义,并在测试台中使用
defparam
以分层方式覆盖参数值:

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