Verilog 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块中查看与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];                                                                                                    
        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节: