Verilog有4种循环语句,如下所示。

  1. forever:持续不断地执行,就是死循环。
  2. repeat:执行括号内表达式指定的循环次数,如果表达式是x或z,就不执行。
  3. while:与C语言的while循环一样,当括号内表达式为true时就执行,否则不进入循环或跳出循环。
  4. for:与C语言的for循环一样,括号内分三个部分。

通常按如下方式使用它们。

  1. forver:用在需要死循环的地方,例如生成时钟的地方。
  2. repeat:可以不用定义循环变量,直接使用,更加清晰。
  3. while:循环中的判断条件可以很简单,也可以很复杂。
  4. foe:常用于固定次数或可变次数的循环,要定义一个循环变量。

例子:

//forever example
initial begin
 clk <= 0;
 forever #(PERIOD/2.0) clk = ~clk;
end
 
//repeat example
repeat (3) @(posedge clk);
 
//while example
begin: count1s
 reg [7:0] tempreg;
 count = 0;
 tempreg = rega;
 while (tempreg) begin
   if (tempreg[0])
    count = count + 1;
   tempreg = tempreg >> 1;
 end
end