2014-04-30 47 views
0

我是VHDL的新手。我明白過程是同時執行的。但我不掌握以下程序的輸出:以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; 

「A」 有一段時間的follwing值:

  • 0 NS - 20 NS - >ü
  • 20納秒 - 30納秒 - > X
  • 30 NS - 40納秒 - > 1
  • 40 NS - 80 NS - > 0
  • 80 NS - 90 NS - > X

我的想象輸出應該什麼樣子:

  • 在PROC2 「A」 爲10ns後得到0。該過程結束,因此在10ns後「A」應該爲0。
  • 20ns後,兩個進程都恢復,兩者都同時寫入「A」,因此X可以。
  • 後30ns的PROC2再次寫入0,因此「A」應該成爲0,但它是1

回答

2

每個進程都有A驅動程序,並從兩個 駕駛導致的進程由std_logic的解析函數生成。

如果您從兩個過程A獨立的版本,叫做A_1A_2,進而帶動與碼的進程外的公共A

A <= A_1; 
A <= A_2; 

然後,你可以看到從驅動價值下面的圖中的每個進程 。

enter image description here

分辨率函數然後解決了兩個源A_1A_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'(未初始化)。

因此,例如,其原因在於A不是「0」後10納秒,是從proc1驅動到A值 是「U」,和上述分辨率表顯示 (「U」,' 0')導致'U'。

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沒有用已解析的基本類型聲明,那麼您將收到一條錯誤消息,抱怨該錯誤消息而不是已解決的值。