Verilog中parameter和define的区别
2015-07-27 09:28
281 查看
1、语法
声明:
parameter data = 8‘d14;
`define data 8’d14
使用:
data
`data
2、作用域
parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。
如果想让parameter或`define作用于整个项目,可以将如下声明写于单独文件,并用`include让每个文件都包含声明文件:
`ifndef data
`define data 8’d14
或者
parameter data = 8‘d14;
`endif
`define也可以写在编译器最先编译的文件顶部。通常编译器都可以定义编译顺序,或者从最底层模块开始编译。因此写在最底层就可以了。
3、区别
parameter可以用作例化时的参数传递。
在使用状态机时候区别挺大的。状态机的定义可以用parameter 定义,但是不推荐使用`define 宏定义的方式,因为'define 宏定义在编译时自动替换整个设计中所定义的宏,而parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。例如一个工程里面有两个module 各包含一个FSM,如果设计时都有IDLE 这一名称的状态,如果使用'define 宏定义就会混淆起来,如果使用parameter 则不会造成任何不良影响。
一旦`define指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的`define指令,定义的常量可以被其他文件中被调用。直到遇到`undef;parameter只在定义的文件中有效,在其它文件中无效。
声明:
parameter data = 8‘d14;
`define data 8’d14
使用:
data
`data
2、作用域
parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。
如果想让parameter或`define作用于整个项目,可以将如下声明写于单独文件,并用`include让每个文件都包含声明文件:
`ifndef data
`define data 8’d14
或者
parameter data = 8‘d14;
`endif
`define也可以写在编译器最先编译的文件顶部。通常编译器都可以定义编译顺序,或者从最底层模块开始编译。因此写在最底层就可以了。
3、区别
parameter可以用作例化时的参数传递。
在使用状态机时候区别挺大的。状态机的定义可以用parameter 定义,但是不推荐使用`define 宏定义的方式,因为'define 宏定义在编译时自动替换整个设计中所定义的宏,而parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。例如一个工程里面有两个module 各包含一个FSM,如果设计时都有IDLE 这一名称的状态,如果使用'define 宏定义就会混淆起来,如果使用parameter 则不会造成任何不良影响。
一旦`define指令被编译,其在整个编译过程中都有效。例如,通过另一个文件中的`define指令,定义的常量可以被其他文件中被调用。直到遇到`undef;parameter只在定义的文件中有效,在其它文件中无效。
相关文章推荐
- Android开发书籍推荐
- server 编程
- 单链表基本操作
- android 显示特殊符号
- 文本文件打印类库(C#)
- JS实现冒泡排序,插入排序和快速排序(从input中获取内容)
- SDK目录结构
- 学习心得
- 不可或缺 Windows Native 系列文章索引
- linux下安装rpm格式的mysql
- 小记暑假第一天
- Python中特殊函数集锦
- websphere集群在DNS主服务器宕机后异常的处理办法
- 关于java类集框架的总结
- hdu 4493 Tutor
- Visual Studio Find All no results.
- 项目的大小衡量标准,项目架构的方法(填空架子,持续集成,边开发边测试效果)(装贴)
- JS获取坐标
- android HDMI 清晰度 分辨率
- OO in java DEMO