2015-10-22 50 views
0

當num改變時,計數器應該增加1,因爲num在靈敏度列表中。但模擬說不。我不知道我的代碼有什麼問題。 上的Quartus 9.0[編輯] VHDL計數器不會運行

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 

ENTITY tmp IS 
    PORT (
     num : IN STD_LOGIC_VECTOR(3 DOWNTO 0); 
     counter : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); 
     clr : IN STD_LOGIC 
    ); 
END tmp; 

ARCHITECTURE ar OF tmp IS 
    SIGNAL c : STD_LOGIC_VECTOR(3 DOWNTO 0); 
BEGIN 
    PROCESS(num, clr) 
    BEGIN 
     IF clr'EVENT AND clr = '1' THEN 
      c <= "0000"; 
     END IF; 
     c <= c + 1; 
    END PROCESS; 
    counter <= c; 
END; 

simulation

+1

你只是在模擬工作,或者你希望把這一設計成一個真正的硬件設備?首先,您需要初始化'c',但對於真正的硬件,這個代碼還有其他問題! –

+0

模擬,我只想測試過程是否可以運行,現在c的值是無稽之談:P – Lance6716

+1

10你初始化了'c'嗎? 'SIGNAL c:STD_LOGIC_VECTOR(3 DOWNTO 0):=(others =>'0')?'; –

回答

0
如果你直接使用計數器而不是C的

,它可以幫助你。 試試這個

LIBRARY IEEE; 
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL; 

ENTITY tmp IS 
    PORT (
     num : IN STD_LOGIC_VECTOR(3 DOWNTO 0); 
     counter : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); 
     clr : IN STD_LOGIC 
    ); 
END tmp; 

ARCHITECTURE ar OF tmp IS 

BEGIN 
    PROCESS(num, clr) 
    BEGIN 
     IF clr'EVENT AND clr = '1' THEN 
      counter <= "0000"; 
     END IF; 
     counter <= counter + 1; 
    END PROCESS; 
END; 

碼出異步身體會一起運行,因此計數器將保持和以前一樣

+0

Quartus II 9.0說計數器必須是一個緩衝區,因爲它在過程中被讀取。重點是我將它改爲緩衝區後,問題依然存在。圖片與主題中的相同。 – Lance6716

+0

沒有U申報C作爲緩衝區,問題仍然存在? –

+0

計數器作爲緩衝區 – Lance6716