我是VHDL的新手。我知道进程是同时执行的。但是我没有掌握以下程序的输出:
-- library declaration
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.numeric_std.all;
entity Ex2 is
end Ex2;
architecture behav of Ex2 is
signal A : std_logic;
begin
proc1 : process is
begin
wait for 20 ns;
A <= '1';
wait for 20 ns;
A <= 'Z';
wait for 20 ns;
A <= '0';
end process proc1;
proc2 : process is
begin
wait for 10 ns;
A <= '0';
end process proc2;
end behav;
&#34; A&#34;随着时间的推移具有以下值:
我的想象力输出应该如何:
答案 0 :(得分:3)
每个进程都有自己的A驱动程序.A的有效值是两个驱动程序的已解析值。这些过程是彼此同时进行的,就像采用两个不同的IC并将两者上的引脚连接到同一网络(在本例中命名为A)。
std_logic的解析函数可在库ieee中的软件包std_logic_1164中找到。
要解析的值一次取两个并输入到分辨率表:
-------------------------------------------------------------------
-- resolution function
-------------------------------------------------------------------
CONSTANT resolution_table : stdlogic_table := (
-- ---------------------------------------------------------
-- | U X 0 1 Z W L H - | |
-- ---------------------------------------------------------
( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |
);
显示的水平和垂直值的交点是已解析的值。
如果A未使用已解析的基本类型声明,则会收到一条错误消息,抱怨该而不是已解析的值。
答案 1 :(得分:2)
每个进程都有一个A
的驱动程序,以及从这两个进程驱动的结果
进程由std_logic
的解析函数生成。
如果您从两个进程中创建A
的单独版本,名为A_1
和。{
A_2
,然后使用代码驱动进程外的公共A
:
A <= A_1;
A <= A_2;
然后,您可以看到图中每个进程所驱动的值 下方。
然后,解析功能解决了两个来源A_1
和A_2
根据下表驱动A
:
U X 0 1 Z W L H -
-----------------
U | U U U U U U U U U
X | U X X X X X X X X
0 | U X 0 X 0 0 0 0 X
1 | U X X 1 1 1 1 1 X
Z | U X 0 1 Z W L H X
W | U X 0 1 W W W W X
L | U X 0 1 L W L W X
H | U X 0 1 H W W H X
- | U X X X X X X X X
从模拟开始到第一次显式驱动的初始值 在过程中分配是'U'(未初始化)。
因此,例如,10 ns后A
不为'0'的原因是该值
从A
驱动到proc1
的是'U',上面的分辨率表显示了这一点
('U','0')导致'U'。