原创 子模块参数修改方法总结

2010-6-7 14:33 1495 3 3 分类: FPGA/CPLD

方法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


经过试验,参数可以传递.


采用参数化设计,可以提高所设计模块的通用性,不同场合设置不同参数,使用灵活,减少重复工作。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条