掌握 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 的表达式。
示例:MyCounter < 10 在 MyCounter 小于 10 时为真。
关系运算符
| = | 等于 |
| /= | 不等于 |
| < | 小于 |
| <= | 小于或等于 |
| > | 大于 |
| >= | 大于或等于 |
逻辑运算符
| 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 相等时为真 |
练习
下面完整 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 同步更新。第二个进程等待这些信号,因此每当它们变化时就会触发。If-Then-Elsif-Else 块随后选择三个分支之一:CountUp > CountDown、CountUp < CountDown 或 CountUp = CountDown。虽然显式 else 非强制,但包含它是最佳实践,确保覆盖所有边界情况。
控制台跟踪确认第二个进程在每次更新后评估条件,打印相应消息。
要点
- 单独使用 If-Then 或结合 Elsif 和 Else 以覆盖所有可能场景。
- 条件可包含关系、逻辑及算术表达式。
继续下一教程 »
VHDL