2013-08-04 28 views
-1

我是一名新生,其任務是使用測試平臺構建3個組件,然後將它們排列成一個結構。我建立的所有3個組件都很好,但是當我將它們放在一起時,其中一個輸出保持未定義狀態。我試圖跟蹤名爲dat的信號,這很好,但可能我沒有使用正確的語法將dat信號分配給data_outid_led_ind是第二個輸出,它工作正常,但data_out未定義。VHDL輸出在模擬中是不確定的,但編譯通過正確

下面是代碼(我認爲這個問題是在車道21 - 「DATA_OUT < = DAT」)

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all; 

entity peak_detect is 
    port(
    input  : in std_logic_vector (7 downto 0); 
    data_out : out std_logic_vector (7 downto 0); 
    reset  : in std_logic; 
    clock  : in std_logic; 
    enable  : in std_logic; 
    id_led_ind : out std_logic); 
end peak_detect; 

architecture dataflow of peak_detect is 
    signal a_big_b : std_logic; 
    signal en  : std_logic; 
    signal dat  : std_logic_vector (7 downto 0); 
begin 
    en  <= (enable or a_big_b); 
    data_out <= dat; 
end dataflow; 

architecture structure of peak_detect is 
    signal a_big_b : std_logic; 
    signal en  : std_logic; 
    signal dat  : std_logic_vector (7 downto 0); 

    component comp_8bit is 
    port(
     A : in std_logic_vector (7 downto 0); 
     B : in std_logic_vector (7 downto 0); 
     res : out std_logic); 
    end component; 

    component dff is 
    port (
     data : in std_logic_vector (7 downto 0); 
     q  : out std_logic_vector (7 downto 0); 
     clk : in std_logic; 
     reset : in std_logic; 
     en : in std_logic); 
    end component; 

    component id_sens is 
    port(
     data_in : in std_logic_vector (7 downto 0); 
     led  : out std_logic); 
    end component; 

begin 
    reg : dff port map (data => input, q => dat, clk => clock, reset => reset, en => enable); 
    comp : comp_8bit port map (A => input, B => dat, res => a_big_b); 
    sens : id_sens port map (data_in => dat, led => id_led_ind); 
end structure; 
+0

在數據流架構中,驅動「dat」的是什麼? –

+1

如果沒有命令行規範體系結構,並且沒有配置規範,那麼將選擇最後分析的體系結構,在這種情況下,這將是peak_detect的體系結構。如果數據流冒犯了您,請將其註釋掉。 – user1155120

回答

0

dat是由dffq驅動。這不是你連接組件的方式。應該使用port map來連接不同組件/實體的端口,而不是將任何實體的信號連接到另一個實體的端口。

+1

dat是peak_detect體系結構中聲明的信號。將信號作爲實際信號連接到端口映射中的正式信號是完全可以的,只要它們具有相同範圍的相同類型(子類匹配)。在實體peak_detect的端口聲明中,從dat到data_out的連接中缺少什麼。 – user1155120

+0

編譯器/模擬器可能「完全沒問題」,但是當涉及到人類試圖閱讀,理解和調試時,它遠非完美。爲什麼不把所有的邏輯放在一個實體中呢?工具將會與此相關。 – shrm

+0

看來你試圖強制執行樣式,而不是指定符合VHDL標準。 – user1155120

1

對於實體peak_detect有兩種體系結構(數據流和結構)似乎存在混淆。這兩種體系結構是相互排斥的,而最後一種體系結構是沒有其他配置的情況下默認分配的,直接指定其中一種體系結構。

爲了評估組件如何互連,並且它們的端口映射連接與peak_detect的端口聲明相關,可以將第一個體系結構註釋掉(數據流)。

當您忽視架構數據流時,我們發現架構結構中沒有data_out的驅動程序。

如架構數據流中所示,您錯過了將dat用作架構結構中的源的data_out分配。複製或複製併發信號分配語句data_out < = dat;進入體系結構。

您不能在dff的端口映射中簡單地將data_out連接到q,​​因爲dff的輸出也用作id_sense的輸入。