我尝试在Always块中查看与for循环相关的不同帖子,但我的问题看起来有所不同。这是我感兴趣的代码的一部分:
return obj.fetchContent()...
我已将i声明为整数。在此,编译器给出错误“ i不是常数”。我不确定是否可以用这种方式编写代码,并期望出现多驱动程序错误,但是我不理解该错误。请扔光。
答案 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];