for 循环
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 58 课,共 90 课。
Verilog 中的循环可以让你多次执行代码块。它们在测试平台中特别有用,可用于生成重复的测试模式、初始化内存和遍历数组。与并行运行的硬件描述不同,循环按顺序执行,因此非常适合用于仿真和测试。
最常用的循环是 for 循环,它会重复执行指定次数。for 循环会反复执行一段代码,并在每次迭代时更改循环变量。你可以准确控制它运行的次数。
语法:
for (initialization; condition; increment) begin
// 要重复执行的代码
end| 部分 | 作用 | 示例 |
|---|---|---|
initialization | 设置初始值 | i = 0 |
condition | 何时停止 | i < 10 |
increment | 每次循环时更改 | i = i + 1 |
简单示例
integer i;
for (i = 0; i < 5; i = i + 1) begin
$display("i = %d", i);
end输出:
i = 0
i = 1
i = 2
i = 3
i = 4循环运行 5 次(i = 0, 1, 2, 3, 4)。
测试平台中的 for 循环
for 循环通常用于测试所有输入组合:
integer test_value;
for (test_value = 0; test_value < 16; test_value = test_value + 1) begin
$display("test_value = %d", test_value);
end这会测试 4 位信号的全部 16 种可能值。
使用数组的 for 循环
reg [7:0] memory [0:9];
integer i;
initial begin
for (i = 0; i < 10; i = i + 1) begin
memory[i] = i * 8;
end
end这会初始化 10 个内存位置。
重要规则
| 规则 | 说明 |
|---|---|
循环变量必须是 integer 或 reg | 不能是 wire |
多条语句要使用 begin/end | 超过一行时必须使用 |
| 避免无限循环 | 确保条件最终会变为 false |
| 在可综合代码中使用常量边界 | 综合会将循环展开,每次迭代对应一份逻辑 |
挑战
要做什么:
添加缺失的 for 循环,打印从 0 到 3 的数字。
亲手试试
module for_challenge;
integer i;
initial begin
$display("Printing 0 to 3:");
// TODO: 添加 for 循环
// 将 i 初始化为 0
// 当 i < 4 时继续循环
// 用 i = i + 1 递增
// 在循环中,使用 $display("i = %d", i); 打印
$finish;
end
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器