verilog中有谁用过用parameter定义的常数做赋值语句的位宽限制

比如
parameter SIZE = 10;
reg [SIZE-1:0] cnt;
cnt <= SIZE'b00_0000_0000;

第1个回答  2012-02-17
parameter用来定义常数。
可以用来定义状态
比如
parameter idle=4'b0000;
parameter s1=4'b0001;
…………………………
…………………………
然后case(state)
idle:………………
s1:………………
这样比较方便不用每次都把具体的数字写出来,相当于一个代号。
第2个回答  2012-02-17
parameter 作用于声明的那个文件;`define 从编译器读到这条指令开始到编译结束都有效,或者遇到`undef命令使之失效。
状态机的定义可以用parameter 定义,但是不推荐使用`define 宏定义的方式,因为'define 宏定义在编译时自动替换整个设计中所定义的宏,而parameter 仅仅定义模块内部的参数,定义的参数不会与模块外的其他状态机混淆。例如一个工程里面有两个module 各包含一个FSM,如果设计时都有IDLE 这一名称的状态,如果使用'define 宏定义就会混淆起来,如果使用parameter 则不会造成任何不良影响

你这样使用只能对该文件或模块有效,其他的不可以的,我个人觉得只要在该模块中使用,是用parameter是没有问题的追问

这里的parameter貌似编译通不过,
但如果是`define SIZE 10
再进行初始化
cnt <= `SIZE'b00_0000_0000;
这样却可以。我想问的是初始化中为什么能使用parameter?

追答

这个基本上都是`define SIZE 10
而parameter一般是这样用的,都是与状态机联系在一起的,我还没见过有谁用parameter SIZE=10;然后用于cnt <= `SIZE'b00_0000_0000;
一般都是状态的转换时用,parameter IDLE=0x001;之类的

本回答被提问者采纳
相似回答