Verilog有4种循环语句,如下所示。
- forever:持续不断地执行,就是死循环。
- repeat:执行括号内表达式指定的循环次数,如果表达式是x或z,就不执行。
- while:与C语言的while循环一样,当括号内表达式为true时就执行,否则不进入循环或跳出循环。
- for:与C语言的for循环一样,括号内分三个部分。
通常按如下方式使用它们。
- forver:用在需要死循环的地方,例如生成时钟的地方。
- repeat:可以不用定义循环变量,直接使用,更加清晰。
- while:循环中的判断条件可以很简单,也可以很复杂。
- 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