24,verilog之本地参数localparam

注:扫码关注小青菜哥哥的weixin公众号,免费获得更多优质的核探测器与电子学内容~

https://img-blog.csdnimg.cn/2ee3fd694ac942f0b1aa035ff308dc03.jpeg

除了常用的parameter参数外,verilog-2001新引进了一个本地参数localparam。它和parameter的定义方法是一样的,作用域也相同。

这两个参数的区别就在于:本地参数localparam不能通过参数传递方式进行模块化修改,或者说,本地参数就是“地方法规”,是模块内自主权的一部分,外面改变不了。

例子1:本地参数的定义和用法

module #(parameter WIDTH = 8) AAA

 (

             input clk,

             input rst,

             input [WIDTH-1:0] data_i,

             input [WIDTH+2:0] data_o             

 );
           
              localparam [3:0] STATE_IDLE = 0;

              localparam [3:0] STATE_READ = 1;

              localparam [3:0] STATE_WRITE = 2;

              ……          

endmodule

本地参数定义后,参数就只能在本模块内使用,很多人喜欢用它来定义状态机变量。但只要是模块内的常量都可以用localparam来定义。Parameter则更多的用在可传递参数的模块中。

下面列出了宏定义’define,parameter以及 localparam的比较关系:

宏定义

参数

本地参数

作用范围

整个文件,定义语句之后,可跨模块

本模块内有效

本模块内有效

修改

新定义后修改

模块例化时,通过参数传递修改

不可修改

建议使用场景

全局性常数,比如系统时钟频率

本模块可变常数,例如输入、输出信号位宽

本模块不变常数,例如状态机的状态值等

无论是参数还是本地参数,乃至宏定义,都是所谓“可重用代码设计”的组成部分。可以说,它们是描述代码的代码。在进行这些设计时,要十分小心可能的错误。“可重用”不仅仅是说代码设计人员的重用,还需要考虑其他从来不关心这个代码内部人员的重用。把’define、parameter以及localparam多用并且用好,代码才会更加健壮!

今天的博文就到这里了,有问题请在小青菜哥哥的公众号留言,谢谢!

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值