掌握 VHDL While 循环:动态迭代控制
在早前探讨 for 循环的基础上,本教程深入 while 循环——一种基于动态条件而非预定范围控制迭代的强大结构。
while 循环只要指定条件保持 true 就反复执行循环体。这使其成为迭代次数取决于运行时数据或复杂逻辑场景的理想选择。
本文属于基础 VHDL 教程系列。
语法
while <condition> loop
-- loop body
end loop;
<condition> 必求值为布尔值。可以是简单比较或更复杂的表达式。条件在每次迭代前检查,确保仅当其保持 true 时继续循环。
条件示例
i < 10– 当i小于 10 时为真。i /= 10– 当i不等于 10 时为真。i >= 0 and i < 2**8– 0 至 255 范围内为真。
关系运算符
| = | 等于 |
| /= | 不等于 |
| < | 小于 |
| <= | 小于或等于 |
| > | 大于 |
| >= | 大于或等于 |
逻辑运算符
| not a | a 为假时为真 |
| a and b | a 和 b 均为真时为真 |
| a or b | a 或 b 为真时为真 |
| a nand b | a 或 b 为假时为真 |
| a nor b | a 和 b 均为假时为真 |
| a xor b | a 和 b 恰好一个为真时为真 |
| a xnor b | a 和 b 相等时为真 |
练习
观看下方视频教程,了解变量如何驱动 while 循环:
示例代码
entity T05_WhileLoopTb is end entity;
architecture sim of T05_WhileLoopTb is
begin
process is
variable i : integer := 0;
begin
while i < 10 loop
report "i=" & integer'image(i);
i := i + 2;
end loop;
wait;
end process;
end architecture;
仿真输出
VSIM 2> run # ** Note: i=0 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=2 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=4 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=6 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb # ** Note: i=8 # Time: 0 ns Iteration: 0 Instance: /t05_whilelooptb
分析
我们将 i 初始化为 0,以 i < 10 作为循环守卫。因循环每轮将 i 加 2,最后打印值为 8。下一轮条件求值为假(10 不小于 10),循环退出。随后的 wait; 使进程无限挂起,这是测试平台常用模式。

关键要点
while循环只要条件为true就持续运行。- 条件在每次迭代前求值。
- 变量可在进程内声明并在循环中更新。
参加 基础 VHDL 测验 – 第 1 部分 或 继续下一教程。
VHDL