2014-02-10 68 views
0

我必須用VHDL編寫程序,在屏幕上顯示0-9的數字,暫停1秒(基本上時鐘0-9),此外,必須檢查ModelSim,這對我來說更加困難。我知道我不應該要求這樣的幫助,但我只需要它到我的大學。 我是vhdl的初學者,我從來沒有學過它,所以任何線索/解決方案都會很好。 我知道我必須使用某事像這樣:VHDL - 從0-9暫停1秒鐘顯示數字

LIBRARY ieee; 
USE ieee.std_logic_1164.all; 
USE ieee.std_logic_unsigned.all; 
... 
SIGNAL countSek : STD_LOGIC_VECTOR(24 DOWNTO 0); 
... 
BEGIN 
... 
-- count 1 second 
PROCESS (Clock) 
BEGIN 
IF (Clock'EVENT AND Clock = '1') THEN 
countSec <= countSek + '1'; 
END IF; 
END PROCESS; 

PROCESS (Clock) 
BEGIN 
IF (Clock'EVENT AND Clock = '1') THEN 
IF (Resetn = '0') THEN 
licznik <= (OTHERS => '0'); 
ELSIF (countSek = 0) THEN 
counter <= counter + '1'; 
END IF; 
END IF; 
END PROCESS; 

而且我的ModelSim和伊夫的免費版本閱讀,我需要手動檢查我的程序。我知道如何開始模擬等,但不知道下一步該怎麼做(如何在modelsim中看到我的程序實際上計數爲0-9)。另外我不需要檢查它的50MHZ時鐘或類似的東西。 對不起,我的英語不好和THX提前

回答

2

我會盡量給你有的只是一些提示或想法,因爲:1)沒有在這裏的家庭作業和2)我不明白你的任務完全...

所以我的理解你的任務是:

做一個計數器,將從0到9反覆計數延遲1秒。

首先,你必須清楚你如何/在哪裏得到你的1秒。 爲了您的目的,只有一種方法可以獲得一些時間管理,拋出系統的時鐘。例如:您的芯片/電路板/ FPGA以50MHz時鐘運行。你需要多少個時鐘才能獲得一秒鐘?那麼它將顯然有5000萬個週期,所以你必須建立一個計數器,它將計數到5000萬,然後發送一個信號(並將它自己設置爲0,並再次開始計數)。有了這個,你有你的計數器模塊。 這裏的問題,我懷疑ModelSim能夠(由於免費版本)數到5000萬,因爲它通常會在一段時間後停止模擬。因此,對於模擬的目的,你可以設置你的計數器計數到,例如,10

所以你的反過程可能看起來像(!!!無語法檢查,未完成!!!):

... 
PROCESS (Clock) 
BEGIN 
IF (Clock'EVENT AND Clock = '1') THEN 
    counter <= counter + '1'; 
    if(counter = SOME_NUMBER) then 
     SIGNAL_COUNTED <= '1'; 
     counter <= "0"; 
    else 
     SIGNAL_COUNTER <= '0'; 
    end if; 
END IF; 
END PROCESS; 

你的第二個過程是你實際的0到9計數器。這應該很容易,如果你延遲工作,你可以:

PROCESS (SIGNAL_COUNTED) 
BEGIN 
if(rising_edge(SIGNAL_COUNTER)) then 
... 

我認爲這應該說清楚。我建議你閱讀一些關於vhdl-design的書,瞭解例如信號和變量之間的區別,如何設計實體,if和where語句之間的區別。 for ...生成和for循環等之間的區別...我自己都知道這一點。在VHDL之前,我可以用C,C++,Java,Haskel等編程,但VHDL不是編程!如果你從軟件方面來到VHDL,你應該明確自己,硬件建模是不一樣的,你必須有不同的想法。

Regards hr0m

+0

感謝您的回答!將嘗試提示,並聽取您的意見,然後我會給予反饋。是的,我是java程序員,所以我可能會像你說的那樣用wrog的方式來看VHDL – ojciecmatki

+0

很高興我能幫助你 – hr0m