在 Verilog 中,当在顺序过程中使用 for 循环时,如何递增顺序变量?

In Verilog, when using a for-loop within a sequential process, how can you increment the sequential variable?

这里是一段代码,希望你没有序言也没问题:

   always @ (posedge clk)
   begin
      if(rst)
      begin
         i<=0;
         j<=0;
      end
      else
      begin
         for(j = 0 ; j < 16 ; j = j+1)
         begin
            if(i<8)
            begin
               var[j] <= var_2[i];
               i <= i+1;
            end
         end      
      end
   end

基本上,我想知道外部 "for-loop" 是否会错误地增加计数器变量 i,而不是简单地并行计算 16 个 var。如果是这种情况,我是否应该缩短 for 循环以便变量在 for 循环之外递增?

谢谢!

你让代码变得不必要的复杂。

如果 i<8 则执行这些:

var[j] <= var_2[i];
i <= i+1;

但是 i 直到 时钟边沿之后才递增。 由于 'i' 不会改变条件不会改变,因此一旦为真,它对 j.

的所有值都保持为真

可能更好的理解方式是编写如下具有完全相同行为的代码:

   always @ (posedge clk)
   begin
      if(rst)
      begin
         i<=0;
         j<=0;
      end
      else
      begin
         for (j = 0 ; j < 16 ; j = j+1)
         begin
            if(i<8)
               var[j] <= var_2[i];
         end      
         // i increment independent from the 'j' loop
         if(i<8)
            i <= i+1;
      end
   end