如何在 VHDL 中创建并发语句
VHDL 中的并发语句是架构内的信号分配,但在正常流程构造之外。并发语句也称为并发赋值或并发进程。
当您创建并发语句时,您实际上是在创建一个具有某些明确定义的特征的流程。并发语句总是等价于使用敏感度列表的过程,其中信号赋值运算符右侧的所有信号都在敏感度列表中。
当您想要创建导致分配单个信号的简单逻辑时,这些速记符号过程很有用。您可以直接在架构中简单地分配给目标信号,而不是输入带有灵敏度列表的完整过程结构和所有这些。
这篇博文是基本 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 行为完全相同。这是因为并发语句和我们创建的两个进程是等价的。
并发语句就像一个进程一样工作。 <= 右侧的所有信号 会自动添加到敏感度列表中。这意味着 <= 左侧的信号 每当评估的信号之一发生变化时都会更新。
在 VHDL 中有很多方法可以将数字相乘。在这个练习中,我们乘以 Uns 信号 4,使用位移。我们所有的信号都是 unsigned 类型,表示它们由数字解释。在二进制数的右边加一个 0 和乘以 2 是一样的。
这是波形中光标处发生的情况的说明:
外卖
- 并发语句是直接在架构区域中的信号分配
- 并发语句相当于一个进程,所有评估的信号都在敏感度列表中
转到下一个教程 »
VHDL