verilog parameter的使用问题
时间:10-02
整理:3721RD
点击:
例如如下代码:module
……
parameter WIDTH = 32;
reg [WIDTH-1 : 0] a;
reg [WIDTH-1 : 0] a;
always @(posedge clk or negedge rst_n)
if(!rst_n)
a <= WIDTH'd10;
else
a <= {a_next, (WIDTH-6)‘d4};
……
endmodule
这个里面的
a <= WIDTH'd10;a <= {a_next, (WIDTH-6)‘d4};
编译会报错,但是如果改成
a <= 32'd10;
a <= {a_next, 26‘d4};
就没有问题;
可是现在想通过顶层例化的时候通过parameter的设定来定义a的位宽,
如果写成固定位宽,就会出现位宽不匹配;
如果不写常数的位宽,拼接就会有问题,而且coding style看起来不好;
请问有没有办法可以解决这个问题的方法,或者推荐的做法是什么?
第一个可以写成 'hd10
第二个写起来比较复杂。 {a_next, {(WIDTH-9){1'b0}},3'h4}
请问 'hd10是什么?还是说‘d10?
确实'd10
可不可以用`define
和parameter 有什么区别 都表示常量的时候?
直接写'd10吧,有可能会出现warning
