1. 循环语句
verilog 循环语句有 4 种类型,分别是 while
,for
,repeat
,和 forever
循环。
循环语句只能在 always 或 initial 块中使用。
2. while 循环
while 的循环语法
格式如下
while(condition) begin
...
...
...
end
while 循环中止条件为 condition 为假。
如果一开始 condition 就为假,那么 while 循环语句一次也不会执行。
示例如下
reg [7:0] cnt ;
initial begin
cnt = 8'd0 ;
while(cnt <= 10) begin /// 直到cnt<=10不成立,while循环终止
#10 ;
cnt = cnt + 1 ;
end
end
3. for 循环
for 循环语法
格式如下
for(initial_assignment; condition; step_assignmen) begin
...
...
...
end
for(初始条件;终止条件;过程语句) begin
...
...
...
end
- initial_assignment 为初始条件。
- condition 为终止条件。condition 为假时,立即跳出循环。
- step_assignment 为改变控制变量的过程赋值语句,通常为增加或减少循环变量计数。
示例如下
integer i ;
reg [7:0] cnt ;
initial begin
cnt = 0 ;
for(i=0; i<=10; i=i+1) begin
cnt = cnt + 1;
end
end
笔记
verilog 中没有 i++的写法。
4. repeat 循环
repeat 循环语法
格式如下
repeat(loop_time) begin
...
...
...
end
repeat(循环次数) begin
...
...
...
end
repeat 的功能是执行固定次数的循环。
repeat 不能像 while 循环那样用一个逻辑表达式来确定循环是否继续执行。
repeat 循环的次数必须是一个常量,变量或信号。
如果循环次数是变量信号,则循环次数是开始执行 repeat 循环时变量信号的值。即便执行期间,循环次数代表的变量信号的值发生了变化,repeat 执行次数也不会改变。
示例如下
reg [7:0] cnt ;
initial begin
cnt = 8'd0 ;
repeat(7) begin /// 重复7次
#10 ;
cnt = cnt + 1'b1 ;
end
end
5. forever 循环
forever 的循环语法
格式如下
forever begin
...
end
forever 语句表示永久循环,不包含任何任何条件表达式。
一旦执行便无限的执行下去,系统函数 $finish
可退出 forever。
笔记
forever 可以理解为 while(1).
示例如下
reg clk ;
initial begin
clk = 0 ;
forever begin
#5 clk = ~clk ;
end
end