2014-01-27 48 views
0

我是VHDL的新手,我剛剛在Quartus II 9.0中搞砸了,並決定創建一個寄存器類型的組件。我認爲我的邏輯是正確的,但是當我運行模擬時我沒有得到任何輸出。我創建了一個波形來測試可能的情況(使用節點查找器列出所有的輸入和輸出,生成功能模擬網表),但是我沒有得到Q的任何輸出。即使是clr = 1且所有Q都應該是設置爲0。爲什麼我的代碼不生成輸出?

library ieee; 
USE ieee.std_logic_1164.ALL; 
USE ieee.std_logic_arith.ALL; 
USE ieee.std_logic_unsigned.ALL; 

ENTITY Register32 IS PORT ( 
    d  : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- input. 
    ld : IN STD_LOGIC; -- load/enable. 
    clr : IN STD_LOGIC; -- async. clear. 
    clk : IN STD_LOGIC; -- clock. 
    Q  : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)); -- output. 
END Register32; 

ARCHITECTURE description OF Register32 IS 
BEGIN 

    process (clk) begin 
     if (clr = '1') then 
      Q <= (others => '0'); 
     else 
      if (rising_edge(clk)) then 
       if (ld = '1') then 
        Q <= d; 
       end if; 
      end if; 
     end if; 
    end process; 

END description; 

回答

3

clr是異步的,那麼它必須被包括在過程 靈敏度列表中,因爲Q更新應於變化立即作出反應 clr。如果您將 潛入警告中,Quartus II可能會向您發出警告。

clr在敏感列表丟失並不是那麼明顯,如果clk是 運行,但如果你目前的測試平臺只是試圖clr到目前爲止,它可能是 原因,你沒有看到的Q任何變化。

相關問題