我对generate
有疑问,我的代码是:
parameter m=1;
generate
for(i=0; i<m; i=i+1) :loopstart
begin
statements;
end
endgenerate
在此循环内, m应为2 ^ 0,2 ^ 1,2 ^ 2,依此类推。以来 不支持取幂,我想初始化m然后 在每次迭代时将它乘以2。
我有几个问题:
是否可以以某种方式在生成中使用m << 1
(因为它与...相同)
乘以2)?如果我这样做,就会导致错误。
我提到了Samir Palnitkar的书,该书说始终声明在一个生成中起作用,所以我尝试了:
always @(m)
m <= m*2; // (or m << 1)
这不起作用。我意识到无法完成,因为m
是参数而不是变量。
如果我认为是正确的,则无法使用genvar
,因为genvar
无法初始化。
有替代方案吗?
答案 0 :(得分:1)
这个问题似乎已经创建,因为不支持指数。他们是:
2**0 => 1
2**1 => 2
2**2 => 4
NB:
always @(m)
m <= m*2; // (or m << 1)
由于某些原因,这是错误的
<=
我还会避免命名灵敏度列表,并使用always @*
来避免不完整敏感列表中的硬件模拟不匹配。
参数和localparams用于定义常量,如果它们不是常量,则使用其他类似逻辑或整数类型的东西。
logic [31:0] m = 0;
logic [31:0] power_two_m;
always @* begin
power_two_m = 2**m;
power_two_m = 1 << m;
end
答案 1 :(得分:0)
相反i++
使用i=i+1
而且......忘了C.