在带有条件语句的always块内的for循环给出意外错误

时间:2018-09-05 13:30:05

标签: verilog

我尝试在Always块中查看与for循环相关的不同帖子,但我的问题看起来有所不同。这是我感兴趣的代码的一部分:

return obj.fetchContent()...

我已将i声明为整数。在此,编译器给出错误“ i不是常数”。我不确定是否可以用这种方式编写代码,并期望出现多驱动程序错误,但是我不理解该错误。请扔光。

1 个答案:

答案 0 :(得分:2)

此行是非法的:

up_dout_t2     <= ram_out[(i+1)*32-1:i*32];

在部分选择中,冒号右侧的变量值可变是非法的。基本上,这是非法的:

i[a+3 : a]

相反,您必须说:

i[a+3 -: 4]

其中a+3是起始索引,-:表示倒数,而4是宽度。因此,代替

i[a : a+3] 

你必须说:

i[a +: 4]

i的索引方向无关紧要。这些代码行都可以使用

reg [big:little] i;

reg [little:big] i;

因此,您的代码行应为:

up_dout_t2     <= ram_out[(i+1)*32-1 -: 32];

或:

up_dout_t2     <= ram_out[i*32 +: 32];