亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

如何在 VHDL 中使用条件语句:If-Then-Elsif-Else

在之前的教程中,我们使用了带有 Wait Until 语句的条件表达式。该表达式确保仅当两个计数器信号相等时才触发该过程。但是如果我们希望进程中的程序根据不同的输入采取不同的动作呢?

If-Then-Elsif-Else 语句可用于在我们的程序中创建分支。根据变量的值或表达式的结果,程序可以采用不同的路径。

这篇博文是基本 VHDL 教程系列的一部分。

基本语法是:

if <condition> then
elsif <condition> then
else
end if;

elsifelse 是可选的,elsif 可以多次使用。 <condition> 可以是布尔值 truefalse ,或者它可以是计算结果为 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 条款涵盖所有故意和不可预见的情况。

从打印输出中我们可以看出,每次计数器发生变化时,第二个过程都会采用三个分支之一。

外卖

转到下一个教程 »


VHDL

  1. 我们如何使用钼?
  2. 如何在 VHDL 中创建字符串列表
  3. 如何在 VHDL 测试平台中停止仿真
  4. 如何在 VHDL 中创建 PWM 控制器
  5. 如何在 VHDL 中生成随机数
  6. 如何在 VHDL 中的进程中使用过程
  7. 如何在 VHDL 中使用不纯函数
  8. 如何在 VHDL 中使用函数
  9. 如何在 VHDL 中创建有限状态机
  10. 如何在 VHDL 中使用过程
  11. 如何在 VHDL 中创建计时器
  12. 如何使用刀具磨床