///
1,FPGA_Verilog基础篇:Verilog发展进程-CSDN博客
2,FPGA_Verilog基础篇:理解Verilog的四值逻辑-CSDN博客
3,FPGA_Verilog基础篇:Verilog中数值的表示-CSDN博客
4,FPGA_Verilog基础篇:信号声明类型-CSDN博客
5,FPGA_Verilog基础篇:模块的端口声明-CSDN博客
6,FPGA_Verilog基础篇:verilog语言的操作符-CSDN博客
7,FPGA_Verilog基础篇:verilog基本逻辑运算-CSDN博客
8,FPGA_Verilog基础篇:verilog关系操作的逻辑运算实现-CSDN博客
9,FPGA_Verilog基础篇:veriolg算术运算-CSDN博客
10,FPGA_Verilog基础篇:verilog移位操作-CSDN博客
11,FPGA_Verilog基础篇:关系操作符简介-CSDN博客
12,FPGA_Verilog基础篇:拼接运算符简介-CSDN博客
13,FPGA_Verilog基础篇:verilog数值的位宽扩展规则-CSDN博客
14,FPGA_Verilog基础篇:verilog移位与拼接实现-CSDN博客
15,FPGA_Verilog基础篇:verilog双向inout接口表示_fpga inout端口-CSDN博客
16,FPGA_Verilog基础篇:verilog之锁存器和触发器-CSDN博客
17,FPGA_Verilog基础篇:verilog之for循环-CSDN博客
18,FPGA_Verilog基础篇:verilog之函数用法-CSDN博客
19,FPGA_Verilog基础篇:verilog之任务用法-CSDN博客
20,FPGA_Verilog基础篇:verilog之任务与函数用法比较-CSDN博客
21,FPGA_Verilog基础篇:verilog之宏define介绍-CSDN博客
22,FPGA_Verilog基础篇:verilog之条件编译指令介绍-CSDN博客
23,FPGA_Verilog基础篇:verilog之参数parameter介绍-CSDN博客
24,FPGA_Verilog基础篇:verilog之本地参数localparam-CSDN博客
25,FPGA_Verilog基础篇:verilog之generate生成块-CSDN博客
26,FPGA_Verilog基础篇:verilog之常数规则-CSDN博客
27,FPGA_Verilog基础篇:verilog中整数运算的位宽和符号规则-CSDN博客
28,FPGA_Verilog基础篇:verilog中的字符串表示-CSDN博客
29,FPGA_Verilog基础篇:verilog中带整数的算术表达式分析-CSDN博客
30(结束篇),FPGA_Verilog基础篇:verilog中的数值运算规则总结-CSDN博客
///
除了常用的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多用并且用好,代码才会更加健壮!
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起学习、一起进步吧~