方法1:defparam xx.xx.参数名 = value;(红色字体的代码)可以多层次设置参数。如在顶层设置顶层中例化模块包含子模块的参数。
方法2:模块名 #(.参数1(value1),.参数2(vaule2))例化名(...);(绿色字体处) 只能向下传递一个层次参数。
或者 模块名 #(参数1,参数2...).这种情况参数顺序要和底层模块参数定义顺序对应。
推荐采用方法1
module flip_flop(indata,outdata,clk);
parameter WIDTH =4;
input [WIDTH-1:0] indata;
input clk;
output reg [WIDTH-1:0] outdata;
always @(posedge clk)
outdata <= indata;
endmodule
module test_flip_flop;
parameter WIDTH1 = 2;
reg [WIDTH1-1:0] test_indata;
reg test_clk;
wire [WIDTH1-1:0]test_outdata;
initial
begin
test_clk = 1;
test_indata = 4'b1100;
#5 test_indata = 4'b0011;
#5 test_indata = 4'b1000;
end
always #2 test_clk = ~test_clk;
//defparam m0.WIDTH = WIDTH1;//参数传递,将顶层模块参数传递到子模块的参数中
flip_flop #(.WIDTH(WIDTH1)) m0(test_indata,test_outdata,test_clk);
endmodule
经过试验,参数可以传递.
采用参数化设计,可以提高所设计模块的通用性,不同场合设置不同参数,使用灵活,减少重复工作。
文章评论(0条评论)
登录后参与讨论