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

如何在 VHDL 中创建具有敏感度列表的进程

您应该始终使用敏感度列表 触发生产模块中的流程。敏感度列表是一个进程的参数,它列出了该进程对其敏感的所有信号。如果任何一个信号发生变化,进程就会被唤醒,并执行其中的代码。

我们已经学会使用 wait onwait until 用于在信号更改时唤醒进程的语句。但是,说实话,这不是我编写大部分流程的方式。

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

编写 VHDL 代码时,编写方式取决于代码是否仅打算在模拟器中运行。如果我正在编写模拟代码,就像我们在本教程系列中所做的那样,我总是 使用 wait 用于控制进程的语句。如果我正在编写我打算创建物理实现的代码,我从不 使用 wait 声明。

具有敏感度列表的进程的语法是:
process(<signal1>, <signal2>, ..) is
begin
    <main logic here>
end process;

敏感度列表的一个重要特点是 all 在进程中读取的信号必须在敏感度列表中。但是,如果您未能将信号添加到敏感度列表中,模拟器不会通知您,因为它在 VHDL 语言中是合法的。问题是,如果你不这样做,代码在合成并用于物理实现时会表现不同。

在 VHDL-2008 中,关键字 all 允许使用而不是列出每个信号。不幸的是,大多数合成软件不支持这个新版本的 VHDL 语言。

运动

在本视频教程中,我们将学习如何使用 VHDL 中的敏感度列表创建进程:

我们在本教程中创建的最终代码:

entity T09_SensitivityListTb is
end entity;

architecture sim of T09_SensitivityListTb 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 triggered using Wait On
    process is
    begin

        if CountUp = CountDown then
            report "Process A: Jackpot!";
        end if;

        wait on CountUp, CountDown;

    end process;

    -- Equivalent process using a sensitivity list
    process(CountUp, CountDown) is
    begin

        if CountUp = CountDown then
            report "Process B: Jackpot!";
        end if;

    end process;

end architecture;

当我们在 ModelSim 中按下运行按钮时,模拟器控制台的输出:

VSIM 2> run
# ** Note: Process A: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb
# ** Note: Process B: Jackpot
#    Time: 40 ns  Iteration: 1  Instance: /t09_sensitivitylisttb

分析

我们可以从打印输出中看到这两个过程的行为相似。这是因为具有敏感性列表的进程在定义上等同于具有 wait on 的进程 在流程结束时。

具有敏感性列表的进程通常用于要合成的代码中。这种代码通常称为寄存器传输级 (RTL) 代码。这是一个约定,但有充分的理由。虽然有些wait onwait until 语句可以合成,很难知道它会创建什么样的硬件。

外卖

转到下一个教程 »


VHDL

  1. 如何在 VHDL 中创建字符串列表
  2. 如何为 VHDL 代码锁定模块创建 Tcl 驱动的测试平台
  3. 如何在 VHDL 中创建 PWM 控制器
  4. 如何在 VHDL 中创建环形缓冲区 FIFO
  5. 如何创建自检测试平台
  6. 如何在 VHDL 中创建链接列表
  7. 如何在 VHDL 中的进程中使用过程
  8. 如何在 VHDL 中使用不纯函数
  9. 如何在 VHDL 中使用函数
  10. 如何在 VHDL 中创建有限状态机
  11. 如何在 VHDL 中使用过程
  12. 如何在 VHDL 中创建计时器