为了提高模块的重复利用,关键就在于避免硬编码(hard literal),使模块参数化。参数化建模的好处是可以使代码清晰,便于后续维护和修改。只需要修改参数,不用修改其他代码就可以适用于不同的环境中。具体的参数化建模方法有 3 种:
- `define 宏定义
- parameter,localparam 模块参数化
- `ifdef 等条件编译
使用define,parameter和localparam的指导原则:
1 宏定义应该只用于定义系统内全局常量。
2 应该把所有的宏定义仿真一个definition.vh文件中。
3 模块内的常量用localparam.
4 在实例化时会改变的参数,使用parameter,以达到模块可配置和可移植。
5 在定义常量时,如果一个常量依赖于其他常量,那么在定义该常量时就直接用表达式表示出来这种关系。
注:Verilog-2001 中添加了一个新的关键字 localparam,用来定义模块内部的、不能被其他模块修改的局部常量,概念类似于 C++ 中 class 的 protect 成员。
参考文献:
[1] Verilog 中的参数化建模.
http://guqian110.github.io/pages/2014/07/09/parameterization_modeling_in_veriog.html
[2] 魏家明. Verilog编程艺术. 电子工业出版社. 2014.01.