IC学习笔记14——Parameter的使用

一、parameter 声明常量

parameter定义常量,可以在模块内部或外部;常用于定义位宽或时间延迟(一些易变的量)
定义方式为:parameter 标识符 = (位宽) 常数;//位宽默认为32位,如果指定位宽则以指定值为准

1.1 parameter 在模块内部定义常量

          module    param_interior(
                                                  input                   clk,
                                                  input                   rst_n,
                                                  input          [2:0]    din,
                                                  output    reg  [3:0]    sum
                                                  );
           parameter      add=2'd1;
           always@(posedge clk or negedge rst_n)
           begin
	               if(rst_n==1'b'0)
	                   begin
	                         sum<=4'd0;
	                   end
	               else
	                   begin
	                         sum<=din+add;
	                   end
	      end
          endmodule

1.2 parameter 在模块外部定义常量

          module param_exterior
                       #( parameter      add=2'd1)              
                                     (
                                                  input                   clk,
                                                  input                   rst_n,
                                                  input          [2:0]    din,
                                                  output    reg  [3:0]    sum
                                      );
           always@(posedge clk or negedge rst_n)
           if(rst_n==1'b'0)
           begin
                   begin
                         sum<=4'd0;
                   end
               else
                   begin
                         sum<=din+add;
                   end
          end
          endmodule

1.3 使用parameter定义常量的好处

1.3.1 可维护性

通过改变parameter定义的常量值,实现代码所有用到这一标志符的值,便于修改与维护。

1.3.2 可读性

标志符按照常量实际意义取名,增强可读性

二、参数传递

子模块利用parameter定义常量,被顶层调用时默认子模块中的参数
module Decode(A,F);//这是一个子模块
parameter Width=1,Polarity=1;

endmodule

2.1 模块调用修改参数

参数改变时,可在顶层模块调用子模块时进行参数修改;
如:
module Top(…); //这是一个顶层模块
Decode #(4,0) U1(); //使得Width=4,Polarity=0;
Decode #(5)U2(); //使得Width=5,Polarity不变,即为1
endmodule

2.2 利用defparam修改参数

参数修改时,也可以利用defparam进行参数修改;
如:
module Top(…); //这是一个顶层模块
defparam U1.Width=4;
defparam U1.Polarity=0;//使得Width=4,Polarity=0;

defparam U2.Width=5;//使得Width=5,Polarity不变,即为1
Decode U1();
Decode U2();
endmodule

三、参考文献

Verilog中Parameter用法-常量定义与参数传递(例化传递、defparam传递)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值