在 Verilog 中,是否可以在执行逻辑后检查循环条件?

In Verilog, is it possible to check the conditions of a loop after executing the logic?

实际上,我正在寻找一种仅使用 3 位变量进行递增来循环 8 次的方法。

我知道一个简单的解决方案是使用一个 4 位变量并使用

for(i=0; i<8; i = i+1)

但是如果只有在执行循环内容后才能检查循环的条件,那么可以编写如下解决方案(使用 do...while 在 SystemVerilog 中编写)。

  initial begin
    reg [2:0] i = 3'b000;    
    do begin 
      $display("i = %g", i);
      i++;
    end while (i !== 3'b000);
  end

谢谢!

do..while 构造存在于 system verilog 中,您展示的解决方案在那里工作。但它在普通 verilog 中不起作用。

对于普通的 verilog,您可以使用任何编程技巧来做到这一点,即使用标志:

  reg [2:0] i;
  reg flag;

  initial begin
    flag = 0;
    i = 0;
    while(flag == 0) begin
      $display("i = %g", i);
      i = i+1;
      if (i == 0) flag = 1;
    end
  end

您可以手动展开一个迭代:

  initial begin
   i = 0;
   $display("i = %g", i);
   i = 1;
   while( i != 0) begin
      $display("i = %g", i);
      i = i+1;
    end
  end

你可以使用重复:

  initial begin
    i = 0;
    repeat(8) begin
      $display("i = %g", i);
      i = i+1;
    end
  end

等等。