Verilog always块内的For循环,条件语句给出意外错误
我试着在always块中查看与for循环相关的不同帖子,但我的问题看起来不同。以下是我感兴趣的代码部分:Verilog always块内的For循环,条件语句给出意外错误,verilog,Verilog,我试着在always块中查看与for循环相关的不同帖子,但我的问题看起来不同。以下是我感兴趣的代码部分: always@(posedge clk) begin for(i=2;i<UP_SPACES+2;i=i+1) begin //Ram_out if(up_addr_d2[3:0]==i) begin up_dout_t2 <= ram_out[(i+1)*32-1:i*32];
always@(posedge clk) begin
for(i=2;i<UP_SPACES+2;i=i+1) begin //Ram_out
if(up_addr_d2[3:0]==i)
begin
up_dout_t2 <= ram_out[(i+1)*32-1:i*32];
end
end// for loop
end
始终@(posedge clk)开始
对于(i=2;i这一行是非法的:
up_dout_t2 <= ram_out[(i+1)*32-1:i*32];
i[a+3 : a]
相反,你必须说:
i[a+3 -: 4]
i[a +: 4]
其中,a+3
是起始索引,-:
表示倒计时,4
表示宽度。因此
i[a : a+3]
你必须说:
i[a+3 -: 4]
i[a +: 4]
i
索引的方向无关紧要。这两行代码都适用
reg [big:little] i;
或
因此,您的代码行应该是:
up_dout_t2 <= ram_out[(i+1)*32-1 -: 32];
up\u dout\u t2这一行是非法的:
up_dout_t2 <= ram_out[(i+1)*32-1:i*32];
i[a+3 : a]
相反,你必须说:
i[a+3 -: 4]
i[a +: 4]
其中,a+3
是起始索引,-:
表示倒计时,4
表示宽度。因此
i[a : a+3]
你必须说:
i[a+3 -: 4]
i[a +: 4]
i
索引的方向无关紧要。这两行代码都适用
reg [big:little] i;
或
因此,您的代码行应该是:
up_dout_t2 <= ram_out[(i+1)*32-1 -: 32];
up\u dout\u t2谢谢。你知道为什么它是非法的吗?@KrishnaDheerajPutrevu根据verilog规范这是非法的。但是我不能说我知道为什么会这样。请参阅规范的第7.4.6节:谢谢。你知道为什么它是非法的吗?@KrishnaDheerajPutrevu根据verilog规范这是非法的。我不知道为什么但情况确实如此。请参见本规范第7.4.6节: