掌握VHDL并发语句实战指南
VHDL中并发语句是直接放在架构中、位于任何process块外部的信号赋值。也称并发赋值或并发进程。
编写并发语句时,实际上创建了一个自动敏感于赋值右侧所有信号的进程。换言之,并发赋值是带完整敏感性列表进程的语法糖。
当想实现驱动单一信号的简单组合逻辑时,此简写特别方便。无需拼写带敏感性列表的完整process结构,可直接在架构体中赋值给目标信号。
本教程属基础VHDL教程系列。
正确使用时,代码意图依然清晰——无需为每个要翻转的位搞个进程搞乱设计。
练习
本视频教学创建并发语句:
本教程创建的最终代码:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T13_ConcurrentProcsTb is end entity; architecture sim of T13_ConcurrentProcsTb is signal Uns : unsigned(5 downto 0) := (others => '0'); signal Mul1 : unsigned(7 downto 0); signal Mul2 : unsigned(7 downto 0); signal Mul3 : unsigned(7 downto 0); begin process is begin Uns <= Uns + 1; wait for 10 ns; end process; -- Process multiplying Uns by 4 process is begin Mul1 <= Uns & "00"; wait on Uns; end process; -- Equivalent process using sensitivity list process(Uns) is begin Mul2 <= Uns & "00"; end process; -- Equivalent process using a concurrent statement Mul3 <= Uns & "00"; end architecture;
按运行并放大时间线后的ModelSim波形窗口:
波形显示Mul1、Mul2和Mul3行为完全相同。这证实并发语句与我们写的两个进程完全等价。
并发语句像进程一样工作:出现在<=右侧的所有信号隐式加入其敏感性列表。因此左侧信号在任何求值信号变化时更新。
本例中用左移位将Uns信号乘4。所有信号为unsigned类型,编译器视为数值。在二进制数右侧添加两个零位等价于乘4。
要点
- 并发语句是直接放在架构中的信号赋值。
- 功能等同于将所有右侧信号放入敏感性列表的进程。
进入下一教程 »
VHDL