如何在 VHDL 中使用 While 循环
在之前的教程中,我们学习了如何使用 For 循环遍历整数范围。但是,如果我们想要对循环进行更详细的控制而不仅仅是一个固定的整数范围呢?我们可以为此使用 While-Loop。
只要它测试的表达式计算结果为 true
,While 循环就会继续迭代封闭的代码 .因此,While-Loop 适用于事先不知道具体需要多少次迭代的情况。
这篇博文是基本 VHDL 教程系列的一部分。
While-Loop 的语法是:
while <condition> loop
end loop;
<condition>
是一个布尔值 true
或 false
.它也可以是计算结果为 true
的表达式 或 false
.条件在循环的每次迭代之前进行评估,只有条件为 true
时循环才会继续 .
true
的示例表达式 如果 i
小于10:
i < 10
true
的示例表达式 如果 i
不是10:
i /= 10
示例表达式是 true
如果 i
大于等于0,小于2
8
=256:
i >= 0 and i < 2**8;
关系运算符:
= | 等于 |
/= | 不等于 |
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
逻辑运算符:
不是 一个 | 如果 a 则为真 是假的 |
一个 和 b | 如果 a 则为真 和b 是真的 |
一个 或 b | 如果 a 则为真 或 b 是真的 |
一个 和 b | 如果 a 则为真 或 b 是假的 |
一个 也不 b | 如果 a 则为真 和b 是假的 |
一个 异或 b | 如果恰好是 a 之一,则为真 或 b 是真的 |
一个 xnor b | 如果 a 则为真 和b 相等 |
运动
在本视频教程中,我们学习使用变量来控制 While-Loop:
我们在本教程中创建的最终代码:
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;
当我们在 ModelSim 中按下运行按钮时,模拟器控制台的输出:
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。我们在 While-Loop 中使用了一个表达式,只要 i
为真 小于 10。因为我们在递增 i
在每次迭代中乘以 2,最后打印出的数字是 8。
在下一次迭代中,i < 10
评估为 false
因为10不小于10。循环终止后,程序碰到了wait;
在那里无限停顿。
外卖
- 只要条件为
true
,While 循环就会继续 - 在 While 循环的每次迭代之前评估条件
- 可以在进程中声明和使用变量
参加基本 VHDL 测验 - 第 1 部分 »
或
转到下一个教程 »
VHDL