Menu
CoddyTech

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
在可综合代码中使用常量边界综合会将循环展开,每次迭代对应一份逻辑
challenge icon

挑战

要做什么:

添加缺失的 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
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Verilog 在线编译器