while 循环
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 59 课,共 90 课。
while 循环会在条件为真时重复执行一段代码。与 for 循环不同,它没有内置计数器。你必须自己更新循环变量。
while 循环会在每次迭代前检查条件。如果条件为真,循环就会执行。如果条件为假,循环就会停止。
语法:
while (condition) begin
// 要重复运行的代码
end简单示例
integer i = 0;
while (i < 5) begin
$display("i = %d", i);
i = i + 1;
end输出:
i = 0
i = 1
i = 2
i = 3
i = 4只要 i < 5 成立,循环就会运行。
while 循环和 for 循环
| for 循环 | while 循环 | |
|---|---|---|
| 计数器 | 内置 | 由你管理 |
| 使用时机 | 已知循环次数 | 不知道循环何时停止 |
| 语法 | for (i=0; i<5; i=i+1) | while (i < 5) |
测试平台中的 while 循环
如果你不确定需要循环多少次,while 循环会很有用:
integer i = 0;
while (i < 16) begin
$display("Testing value %d", i);
i = i + 1;
end查找特定值
integer i = 0;
reg [7:0] data;
while (data[i] != 1) begin
i = i + 1;
end
$display("First 1 found at position %d", i);重要规则
| 规则 | 说明 |
|---|---|
| 条件必须变为 false | 否则会陷入无限循环 |
| 在循环内部更新循环变量 | 否则循环永远不会结束 |
循环变量必须是 integer 或 reg | 不能是 wire |
多条语句要使用 begin/end | 多于一行时必须使用 |
挑战
要做什么:
添加缺少的 while 循环,打印从 0 到 2 的数字。
亲手试试
module while_challenge;
integer i;
initial begin
i = 0;
$display("Printing 0 to 2:");
// TODO: 添加 while 循环
// 当 i < 3 时循环
// 在循环内打印 i
// 将 i 增加 1
$finish;
end
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器