带参数传递的Verilog模块设计

本文详细介绍了在Verilog设计中如何使用parameter定义模块参数,并通过实例展示如何在LED模块中通过defparam和#()语法传递不同计数器参数。学习如何根据需要调整子模块行为,提高代码灵活性和可重用性。
摘要由CSDN通过智能技术生成

在Verilog设计中,模块化有利于提升代码的可重用性,从而提升设计的效率以及可阅读性。
有时候同一个模块在不同的地方被引用时,可能需要配置不同的参数值。
为了实现这一目的,我们可以在子模块中采用“parameter” 来定义。
下面举个例子,来说明参数传递的两种方法:计数器做为子模块,负责计时。LED模块来调用计数器模块。

首先我们创建一个counter.v,带参数的变量 parameter CNT_MAX = 25’d24_999_999;

 module counter(Clk,Rst_n,led);



     input Clk;    //系统时钟

     input Rst_n;    //全局复位,低电平复位

     

     output reg led;    //led输出

     

     reg [24:0]cnt;    //定义计数器寄存器

     

     parameter CNT_MAX = 25'd24_999_999;



 //计数器计数进程    

     always@(posedge Clk or negedge Rst_n)

     if(Rst_n == 1'b0)

         cnt <= 25'd0;

     else if(cnt == CNT_MAX)

         cnt <= 25'd0;

     else

         cnt <= cnt + 1'b1;



 //led输出控制进程

     always@(posedge Clk or negedge Rst_n)

     if(Rst_n == 1'b0)

         led <= 1'b1;

     else if(cnt == CNT_MAX)

         led <= ~led;

     else

         led <= led;



 endmodule

然后创建一个顶层模块LED_flicker.v ,
例化 counter 时,通过不同的参数赋值,实现同一模块,不同参数的目的。
方法一:
defparam counter0.CNT_MAX = 24_999_99;

defparam counter1.CNT_MAX = 24_999_9;

 module LED_flicker(

     Clk,

     Rst_n,

     LED

 );



     input Clk;

     input Rst_n;

     output [1:0]LED;



     counter    counter0(

         .Clk(Clk),

         .Rst_n(Rst_n),

         .led(LED[0])

     );

     

     counter    counter1(

         .Clk(Clk),

         .Rst_n(Rst_n),

         .led(LED[1])

     );

     

     defparam counter0.CNT_MAX = 24_999_99;

     defparam counter1.CNT_MAX = 24_999_9;

     

 endmodule
 

方法二:
#( 24_999_99)

 module LED_flicker(

     Clk,

     Rst_n,

     LED

 );



     input Clk;

     input Rst_n;

     output [1:0]LED;



     counter  #(24_999_99)  counter0(

         .Clk(Clk),

         .Rst_n(Rst_n),

         .led(LED[0])

     );

     

     counter   #(24_999_9) counter1(

         .Clk(Clk),

         .Rst_n(Rst_n),

         .led(LED[1])

     );



     

 endmodule
 

如果模块中有多个参数的情况,可以顺序赋值:
#(para1,para2,para3)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值