如何在 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