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

在 VHDL 进程中使用敏感度列表实现可靠的 RTL 设计

在生产级 VHDL 中,进程通常由敏感度列表驱动,而非 wait 语句。敏感度列表枚举了所有应在发生变化时唤醒进程的信号。

虽然 wait on 和 wait until 便于仿真,但很少用于可综合的 RTL。在综合中,wait 语句常被忽略,导致不可预测的硬件行为。相反,敏感度列表直接映射到组合逻辑或时序同步块,综合工具能可靠地实现它们。

基础 VHDL 教程 – 进程敏感度

编写仿真代码时,我总依赖 wait 语句控制时序。但对于将综合成硅片的设计,我完全避免使用 wait,改用敏感度列表。

带敏感度列表的进程语法如下:

process( signal1, signal2, ... ) is
begin
  -- 主要逻辑
end process;

注意:进程内读取的每个信号都必须出现在列表中。VHDL 编译器不会标记缺失信号,但遗漏会导致综合后行为改变。

VHDL‑2008 引入关键字 all 自动包含所有读取信号,如 process(all)。但大多数商业综合工具仍不支持该特性。

练习

在配套视频教程中,我们演示了如何构建一个使用敏感度列表的进程。

本课生成的最终 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;
  -- 使用 Wait On 触发的进程
  process is
  begin
    if CountUp = CountDown then
      report "Process A: Jackpot!";
    end if;
    wait on CountUp, CountDown;
  end process;
  -- 等效的敏感度列表进程
  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 进程与敏感度列表进程在完全相同条件下触发。这种等价性成立是因为敏感度列表隐式表现为放在进程末尾的 wait on。

实践中,敏感度列表是可综合 RTL 的事实标准。它们意图明确,让综合工具生成正确硬件,避免 wait 语句可能引入的歧义。

在 VHDL 进程中使用敏感度列表实现可靠的 RTL 设计

关键要点

  • 敏感度列表进程在功能上等同于以 wait on 结尾的进程。
  • 进程内读取的所有信号必须出现在其敏感度列表中。
  • 仅在仿真代码中使用 wait 语句;可综合 RTL 应使用敏感度列表。

继续下一教程 这里。

VHDL

  1. VHDL 字符串列表创建:最佳实践与示例
  2. 基于 Tcl 驱动的 VHDL 密码锁模块测试平台
  3. VHDL 实现 PWM 控制器:设计、仿真与 FPGA 演示
  4. 在块RAM中设计健壮的VHDL环形缓冲区FIFO
  5. 构建VHDL自检测试平台实战指南
  6. 用VHDL受保护类型和访问指针实现动态链表
  7. 利用进程内过程简化VHDL状态机设计
  8. 使用VHDL不纯函数提升FSM可读性与可维护性
  9. 掌握VHDL函数:高效设计实战指南
  10. 用VHDL设计有限状态机:红绿灯实战范例
  11. 在VHDL中使用过程:用可复用代码简化设计
  12. 构建可靠VHDL计时器:从时钟周期计数到小时