如何在 VHDL 中使用条件语句:If-Then-Elsif-Else
在之前的教程中,我们使用了带有 Wait Until 语句的条件表达式。该表达式确保仅当两个计数器信号相等时才触发该过程。但是如果我们希望进程中的程序根据不同的输入采取不同的动作呢?
If-Then-Elsif-Else 语句可用于在我们的程序中创建分支。根据变量的值或表达式的结果,程序可以采用不同的路径。
这篇博文是基本 VHDL 教程系列的一部分。
基本语法是:
if <condition> then
elsif <condition> then
else
end if;
elsif 和 else 是可选的,elsif 可以多次使用。 <condition> 可以是布尔值 true 或 false ,或者它可以是计算结果为 true 的表达式 或 false .
true 的示例表达式 如果 MyCounter 小于10:
MyCounter < 10 关系运算符:
| = | 等于 |
| /= | 不等于 |
| < | 小于 |
| <= | 小于或等于 |
| > | 大于 |
| >= | 大于或等于 |
逻辑运算符:
| 不是 一个 | 如果 a 则为真 是假的 |
| 一个 和 b | 如果 a 则为真 和b 是真的 |
| 一个 或 b | 如果 a 则为真 或 b 是真的 |
| 一个 和 b | 如果 a 则为真 或 b 是假的 |
| 一个 也不 b | 如果 a 则为真 和b 是假的 |
| 一个 异或 b | 如果恰好是 a 之一,则为真 或 b 是真的 |
| 一个 xnor b | 如果 a 则为真 和b 相等 |
运动
在本视频教程中,我们将学习如何在 VHDL 中使用 If-Then-Elsif-Else 语句:
我们在本教程中创建的最终代码:
entity T08_IfTb is
end entity;
architecture sim of T08_IfTb is
signal CountUp : integer := 0;
signal CountDown : integer := 10;
begin
process is
begin
CountUp <= CountUp + 1;
CountDown <= CountDown - 1;
wait for 10 ns;
end process;
process is
begin
if CountUp > CountDown then
report "CountUp is larger";
elsif CountUp < CountDown then
report "CountDown is larger";
else
report "They are equal";
end if;
wait on CountUp, CountDown;
end process;
end architecture;
当我们在 ModelSim 中按下运行按钮时,模拟器控制台的输出:
VSIM 2> run # ** Note: CountDown is larger # Time: 0 ns Iteration: 0 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 0 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 10 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 20 ns Iteration: 1 Instance: /t08_iftb # ** Note: CountDown is larger # Time: 30 ns Iteration: 1 Instance: /t08_iftb # ** Note: They are equal # Time: 40 ns Iteration: 1 Instance: /t08_iftb # ** Note: Countup is larger # Time: 50 ns Iteration: 1 Instance: /t08_iftb # ** Note: Countup is larger # Time: 60 ns Iteration: 1 Instance: /t08_iftb ...
分析
我们给了 CountDown 初始值为 10,CountUp 值为 0。第一个进程在完全相同的时间更改两个计数器值,每 10 ns。发生这种情况时,会触发第二个进程,因为程序将始终在 wait on CountUp, CountDown; 处等待 线。程序将一直在那里等待,因为 If-Then-Elsif-Else 和报告语句消耗零模拟时间。
If-Then-Elsif-Else 语句将导致程序采用我们创建的三个分支之一。前两个分支涵盖了两个计数器具有不同值的情况。我们本可以删除单个 else ,并使用 elsif CountUp = CountDown then 这会产生相同的结果。但是覆盖所有分支是很好的设计实践,而 else 条款涵盖所有故意和不可预见的情况。
从打印输出中我们可以看出,每次计数器发生变化时,第二个过程都会采用三个分支之一。
外卖
- If-Then 可以单独使用,也可以与 Elsif 和 Else 结合使用。
- 表达式可能包含关系和逻辑比较以及数学计算
转到下一个教程 »
VHDL