版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì) 實(shí)驗(yàn)報(bào)告</p><p> 模 塊 名 稱 EDA </p><p> 專 業(yè) 通信工程 </p><p> 學(xué) 生 班 級(jí) </p><p> 學(xué) 生 學(xué) 號(hào)
2、 </p><p> 一、 矩陣鍵盤按鍵的數(shù)碼管顯示 </p><p><b> (一)實(shí)驗(yàn)?zāi)康?lt;/b></p><p> (1)掌握VHDL語(yǔ)言的語(yǔ)法規(guī)范,掌握時(shí)序電路描述方法</p><p> (2)掌握多個(gè)數(shù)碼管動(dòng)態(tài)掃描顯示的原理及設(shè)計(jì)方法</p><p>
3、<b> ?。ǘ?shí)驗(yàn)儀器</b></p><p> PC機(jī),ALtera CPLD硬件實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng),設(shè)計(jì)軟件(Quartus II )</p><p><b> ?。ㄈ?shí)驗(yàn)任務(wù)</b></p><p> 要求設(shè)計(jì)出4*4矩陣鍵盤對(duì)某一按鍵按下就在數(shù)碼管顯示一個(gè)數(shù)字。按鍵從左上角到右下角依次為1,2,…,16。<
4、;/p><p><b> ?。ㄋ模?shí)驗(yàn)原理</b></p><p><b> 按鍵模塊原理</b></p><p> 鍵盤掃描的實(shí)現(xiàn)過(guò)程如下:對(duì)于4×4鍵盤,通常連接為4行、4列,因此要識(shí)別按鍵,只需要知道是哪一行和哪一列即可,為了完成這一識(shí)別過(guò)程,我們的思想是,首先固定輸出4行為高電平,然后輸出4列為低電平,在
5、讀入輸出的4行的值,通常高電平會(huì)被低電平拉低,如果讀入的4行均為高電平,那么肯定沒(méi)有按鍵按下,否則,如果讀入的4行有一位為低電平,那么對(duì)應(yīng)的該行肯定有一個(gè)按鍵按下,這樣便可以獲取到按鍵的行值。同理,獲取列值也是如此,先輸出4列為高電平,然后在輸出4行為低電平,再讀入列值,如果其中有哪一位為低電平,那么肯定對(duì)應(yīng)的那一列有按鍵按下。</p><p> 鍵盤鍵值的獲取:鍵盤上的每一個(gè)按鍵其實(shí)就是一個(gè)開(kāi)關(guān)電路,當(dāng)某鍵被
6、按下時(shí),該按鍵的接點(diǎn)會(huì)呈現(xiàn)0的狀態(tài),反之,未被按下時(shí)則呈現(xiàn)邏輯1的狀態(tài)。掃描信號(hào)由row進(jìn)入鍵盤,變化的順序依次為1110-1101-1011-0111-1110。每一次掃描一排,依次地周而復(fù)始。例如現(xiàn)在的掃描信號(hào)為1011,代表目前正在掃描9,10,11,12這一排的按鍵,如果這排當(dāng)中沒(méi)有按鍵被按下的話,則由column讀出的值為1111;反之當(dāng)9這個(gè)按鍵被按下的話,則由column讀出的值為1110。</p><
7、p> 根據(jù)上面所述原理,我們可得到各按鍵的位置與數(shù)碼關(guān)系如表所示:</p><p><b> 動(dòng)態(tài)顯示原理</b></p><p> 為使得輸入控制電路簡(jiǎn)單且易于實(shí)現(xiàn),采用動(dòng)態(tài)掃描的方式實(shí)現(xiàn)設(shè)計(jì)要求。動(dòng)態(tài)掃描顯示需要由兩組信號(hào)來(lái)控制:一組是字段輸出口輸出的字形代碼,用來(lái)控制顯示的字形,稱為段碼;另一組是位輸出口輸出的控制信號(hào),用來(lái)選擇第幾位數(shù)碼管工作,稱為
8、位碼。</p><p> 各位數(shù)碼管的相同段是并聯(lián)的,段碼的輸出對(duì)各位數(shù)碼管來(lái)說(shuō)都是相同的。因此在同一時(shí)刻如果各位數(shù)碼管都處于點(diǎn)亮狀態(tài),6位數(shù)碼管將顯示相同的字符。若要各位數(shù)碼管能夠顯示出與本位相應(yīng)的字符,就必須采用掃描顯示方式,即在某一時(shí)刻,只讓某一位處于點(diǎn)亮狀態(tài),而其它各位處于滅燈狀態(tài)。同時(shí),段碼輸出相應(yīng)位要顯示字符的字型碼。這樣在同一時(shí)刻,只有選通的那一位顯示出字符,而其它各位則是熄滅的,如此循環(huán)下去,就
9、可以使各位數(shù)碼管顯示出要顯示的字符。</p><p> 雖然這些字符是在不同時(shí)刻出現(xiàn)的,而且同一時(shí)刻,只有一位顯示,其它各位熄滅,但由于數(shù)碼管具有余輝特性和人眼有視覺(jué)暫留現(xiàn)象,只要每位數(shù)碼管顯示間隔足夠短,給人眼的視覺(jué)印象就會(huì)是連續(xù)穩(wěn)定地顯示。</p><p> 總之,多個(gè)數(shù)碼管動(dòng)態(tài)掃描顯示,是將所有數(shù)碼管的相同段并聯(lián)在一起,通過(guò)選通信號(hào)分時(shí)控制各個(gè)數(shù)碼管的公共端,循環(huán)點(diǎn)亮多個(gè)數(shù)碼管,
10、并利用人眼的視覺(jué)暫留現(xiàn)象,只要掃描的頻率大于50Hz,將看不到閃爍現(xiàn)象。</p><p><b> ?。ㄎ澹┰O(shè)計(jì)思路</b></p><p> 該程序可分為兩個(gè)模塊:獲取并存儲(chǔ)鍵值模塊和動(dòng)態(tài)顯示模塊</p><p> 獲取并存儲(chǔ)鍵值模塊:此次實(shí)驗(yàn)只要求仿真而不需要接硬件,因而不存在按鍵這個(gè)動(dòng)作,所以鍵盤掃描原理在這里并不適用。在程序設(shè)計(jì)中我
11、們將row和column都設(shè)置為輸入信號(hào),則低電平出現(xiàn)的行和列所交處即為按鍵處,以此簡(jiǎn)單模擬按鍵。根據(jù)上表所列,將對(duì)應(yīng)按鍵的鍵值存儲(chǔ)在key_code中。這樣就完成了鍵值的存儲(chǔ)。</p><p> 動(dòng)態(tài)顯示模塊:此次實(shí)驗(yàn)只需用到兩個(gè)顯示數(shù)碼管,因此只要用一個(gè)高頻時(shí)鐘信號(hào)控制這兩個(gè)數(shù)碼管交替亮滅,并在對(duì)應(yīng)位顯示正確的鍵值,就完成動(dòng)態(tài)顯示了。</p><p> 綜上就可以實(shí)現(xiàn)矩陣案件的數(shù)碼
12、管顯示了。具體流程圖如下:</p><p><b> (六)硬件實(shí)現(xiàn)</b></p><p> 以上步驟都完成后,在硬件上實(shí)現(xiàn)就比較簡(jiǎn)單了。此時(shí)要注意兩個(gè)問(wèn)題:第一,時(shí)鐘頻率的設(shè)置,在仿真時(shí)由于沒(méi)有外在時(shí)鐘源,所以把row和column都設(shè)置為手動(dòng)輸入,但當(dāng)在硬件上實(shí)現(xiàn)時(shí)要采用實(shí)驗(yàn)板上的低頻時(shí)鐘源,并設(shè)計(jì)分頻電路提供合適的時(shí)鐘頻率。這就需要對(duì)程序做相應(yīng)的修改;第二
13、,管腳號(hào)的編寫,根據(jù)各實(shí)物圖紙標(biāo)號(hào)和ATF1508的對(duì)應(yīng)關(guān)系編寫對(duì)應(yīng)管腳號(hào)。</p><p> 接下來(lái)要做的就是硬件連接,然后就是下載程序。程序通過(guò)編譯后生成*.pof文件,用quartusII軟件先刪除再下載。如果下載成功的話,就能實(shí)現(xiàn)從左上到右下按鍵分別顯示數(shù)字1-16。</p><p> ?。ㄆ撸└戒洠╒HDL源程序)</p><p> LIBRARY i
14、eee ;</p><p> USE ieee.std_logic_1164.all ;</p><p> USE ieee.std_logic_unsigned.all ;</p><p><b> --顯示模塊</b></p><p> ENTITY key IS</p><p>&l
15、t;b> PORT ( </b></p><p> clk: IN STD_LOGIC;--40M高頻時(shí)鐘,也可以接低頻時(shí)鐘,看數(shù)碼管顯示的情況</p><p> led_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --數(shù)碼管8段顯示,可顯示--0~9,A~F</p><p> led_sel : bu
16、ffer STD_LOGIC_VECTOR(7 DOWNTO 0);--選擇6個(gè)數(shù)碼管,‘1’點(diǎn)--亮對(duì)應(yīng)數(shù)碼管</p><p> row : out STD_LOGIC_VECTOR (3 downto 0);--行列式鍵盤的4行</p><p> column : in STD_LOGIC_VECTOR (3 downto 0)--行列式鍵盤的4列</p>
17、<p><b> ) ; </b></p><p><b> END key ;</b></p><p> ARCHITECTURE Behavior OF key IS</p><p> SIGNAL clk_temp :STD_LOGIC; --分頻后的電路時(shí)鐘
18、輸出,掃描時(shí)鐘</p><p> SIGNAL clk1_temp : STD_LOGIC; --分頻后的電路時(shí)鐘輸出,顯示時(shí)鐘</p><p> SIGNAL data :STD_LOGIC_VECTOR(3 DOWNTO 0);--數(shù)碼管要顯示的數(shù)0~15表示1~16</p><p> SIGNAL led_sel_count
19、:STD_LOGIC;--用于選擇第5個(gè)和第6個(gè)數(shù)碼管,分別用1和0代表</p><p> SIGNAL div_cnt : std_logic_vector(1 downto 0);--行掃描驅(qū)動(dòng)</p><p> SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --掃描碼寄存器 </p><
20、p> signal key_code:integer range 0 to 16;</p><p> signal cnt:std_logic_vector(2 downto 0);</p><p> signal state:integer;</p><p> begin </p><p> row <
21、;= scan_key;</p><p> --data <= key_code;</p><p> -------------------------------10分頻電路-----------------------------------------------------------------------</p><p> PROCESS
22、(clk)</p><p> VARIABLE counter: std_logic_vector(10 downto 0);--計(jì)數(shù)寄存器,10分頻</p><p><b> BEGIN</b></p><p> IF (clk'EVENT AND clk ='0') THEN --下降沿有效</p>
23、;<p> counter := counter +1 ;</p><p> IF (counter = "10000000000") THEN</p><p> clk_temp <= NOT clk_temp; --分頻后的時(shí)鐘變化</p><p><b> END IF;</b><
24、;/p><p><b> END IF;</b></p><p> END PROCESS;</p><p> ------------------------------7分頻電路-----------------------------------------------------------------------</p>
25、<p> PROCESS(clk_temp)</p><p> VARIABLE counter: std_logic_vector(7 downto 0);--計(jì)數(shù)寄存器,7分頻</p><p><b> BEGIN</b></p><p> IF (clk'EVENT AND clk ='0')
26、 THEN --下降沿有效</p><p> counter := counter +1 ;</p><p> IF (counter = "10000000") THEN</p><p> clk1_temp <= NOT clk1_temp; --分頻后的時(shí)鐘變化</p><p><b>
27、 END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> ----------------------- 行掃描驅(qū)動(dòng)-----------------------------------------------------------------
28、------------</p><p> PROCESS(clk_temp)</p><p><b> BEGIN</b></p><p> IF(clk'EVENT AND clk = '0')THEN</p><p> div_cnt <= div_cnt + 1; &l
29、t;/p><p><b> END IF;</b></p><p> END PROCESS;</p><p> ----------------------------------------------------------------------------------------------------------</p>
30、;<p> PROCESS(div_cnt)</p><p><b> BEGIN</b></p><p> CASE div_cnt IS</p><p> WHEN "00"=> scan_key<="1110";</p><p> WHEN
31、 "01"=> scan_key<="1101";</p><p> WHEN "10"=> scan_key<="1011";</p><p> WHEN "11"=> scan_key<="0111";</p>&
32、lt;p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> -------------------------------按鍵-----------------------------------------------
33、</p><p> PROCESS(clk)</p><p><b> BEGIN</b></p><p> IF(clk'EVENT AND clk='1')THEN</p><p> CASE scan_key IS --檢測(cè)何處有鍵按下</p><p>
34、WHEN "1110" =></p><p> CASE column IS</p><p> WHEN "1110" =></p><p> key_code <=1; </p><p> WHEN "1101" =></p>
35、<p> key_code <= 2; </p><p> WHEN "1011" =></p><p> key_code <= 3; </p><p> WHEN "0111" =></p><p> key_code <=4;
36、 </p><p> WHEN OTHERS =></p><p><b> NULL;</b></p><p><b> END CASE;</b></p><p> WHEN "1101" =></p><p> CASE co
37、lumn IS</p><p> WHEN "1110" =></p><p> key_code <=5; </p><p> WHEN "1101" =></p><p> key_code <=6; </p><p> WH
38、EN "1011" =></p><p> key_code <= 7; </p><p> WHEN "0111" =></p><p> key_code <= 8; </p><p> WHEN OTHERS =></p><
39、;p><b> NULL;</b></p><p><b> END CASE;</b></p><p> WHEN "1011" =></p><p> CASE column IS</p><p> WHEN "1110" =>
40、</p><p> key_code <= 9; </p><p> WHEN "1101" =></p><p> key_code <= 10; </p><p> WHEN "1011" =></p><p> key_co
41、de <= 11; </p><p> WHEN "0111" =></p><p> key_code <= 12; </p><p> WHEN OTHERS =></p><p><b> NULL;</b></p><p>
42、;<b> END CASE;</b></p><p> WHEN "0111" =></p><p> CASE column IS</p><p> WHEN "1110" =></p><p> key_code <= 13; </p
43、><p> WHEN "1101" =></p><p> key_code <= 14; </p><p> WHEN "1011" =></p><p> key_code <= 15; </p><p> WHEN "
44、0111" =></p><p> key_code <= 16; </p><p> WHEN OTHERS =></p><p><b> NULL</b></p><p><b> END CASE;</b></p><p>
45、 WHEN OTHERS =></p><p> key_code <= 15; </p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p&g
46、t; ---------------------------顯示------------------------------</p><p> process (clk)</p><p> variable count :integer range 0 to 6000;</p><p><b> begin</b></p>
47、<p> if(clk'event and clk='1') then</p><p> if count=6000 then</p><p> cnt<=cnt+1;</p><p><b> count:=0;</b></p><p><b> else&
48、lt;/b></p><p> count:=count+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> -----------------
49、----------位顯示--------------------------</p><p> process(cnt)</p><p><b> begin</b></p><p> if(key_code<10)then</p><p> led_sel<="11111110&quo
50、t;; state<=key_code-(key_code/10)*10;</p><p><b> else</b></p><p> case cnt is</p><p> when "000" => led_sel<="11111101"; state<=key_co
51、de/10;</p><p> when "001" => led_sel<="11111110"; state<=key_code-(key_code/10)*10;</p><p> when others=> led_sel<="11111111"; </p><p>
52、;<b> end case;</b></p><p><b> end if;</b></p><p> end process ;</p><p> -----------------------------段顯示-----------------------------</p><p>
53、; process (clk)</p><p><b> begin </b></p><p> if(clk'event and clk='1') then</p><p> case state is</p><p> when 0 => led_out<="1
54、1000000";</p><p> when 1 => led_out<="11111001";</p><p> when 2 => led_out<="10100100";</p><p> when 3 => led_out<="10110000"
55、;</p><p> when 4 => led_out<="10011001";</p><p> when 5 => led_out<="10010010";</p><p> when 6 => led_out<="10000010";</p>
56、<p> when 7 => led_out<="11111000";</p><p> when 8 => led_out<="10000000";</p><p> when 9 => led_out<="10010000";</p><p> wh
57、en others=>null;</p><p><b> end case;</b></p><p><b> end if;</b></p><p> end process; </p><p> end Behavior;</p><p> 數(shù)碼管學(xué)
58、號(hào)滾動(dòng)顯示 </p><p><b> ?。ㄒ唬?shí)驗(yàn)?zāi)康?lt;/b></p><p> (1)掌握VHDL語(yǔ)言的語(yǔ)法規(guī)范,掌握時(shí)序電路描述方法。</p><p> (2)掌握多個(gè)數(shù)碼管動(dòng)態(tài)掃描顯示的原理及設(shè)計(jì)方法。</p><p> ?。?)掌握硬件系統(tǒng)設(shè)計(jì)方法(自底向上或自頂向下),熟悉VHDL語(yǔ)言三種設(shè)計(jì)風(fēng)格,熟悉其
59、芯片硬件實(shí)現(xiàn)的過(guò)程。</p><p><b> (二)實(shí)驗(yàn)儀器</b></p><p> PC機(jī),ALtera CPLD硬件實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng),設(shè)計(jì)軟件(Quartus II )</p><p><b> ?。ㄈ?shí)驗(yàn)內(nèi)容</b></p><p> 要求學(xué)生在六個(gè)數(shù)碼管滾動(dòng)顯示自己的學(xué)號(hào)(六位),每
60、隔一定時(shí)間循環(huán)移位一次,學(xué)號(hào)為奇數(shù)則左移,學(xué)號(hào)為偶數(shù)則右移。間隔時(shí)間可由開(kāi)關(guān)選擇1秒,2秒,3秒和4秒。</p><p><b> ?。ㄋ模?shí)驗(yàn)原理</b></p><p> 為使得輸入控制電路簡(jiǎn)單且易于實(shí)現(xiàn),采用動(dòng)態(tài)掃描的方式實(shí)現(xiàn)設(shè)計(jì)要求。動(dòng)態(tài)掃描顯示需要由兩組信號(hào)來(lái)控制:一組是字段輸出口輸出的字形代碼,用來(lái)控制顯示的字形,稱為段碼;另一組是位輸出口輸出的控制信號(hào)
61、,用來(lái)選擇第幾位數(shù)碼管工作,稱為位碼。</p><p> 各位數(shù)碼管的相同段是并聯(lián)的,段碼的輸出對(duì)各位數(shù)碼管來(lái)說(shuō)都是相同的。因此在同一時(shí)刻如果各位數(shù)碼管都處于點(diǎn)亮狀態(tài),6位數(shù)碼管將顯示相同的字符。若要各位數(shù)碼管能夠顯示出與本位相應(yīng)的字符,就必須采用掃描顯示方式,即在某一時(shí)刻,只讓某一位處于點(diǎn)亮狀態(tài),而其它各位處于滅燈狀態(tài)。同時(shí),段碼輸出相應(yīng)位要顯示字符的字型碼。這樣在同一時(shí)刻,只有選通的那一位顯示出字符,而其它
62、各位則是熄滅的,如此循環(huán)下去,就可以使各位數(shù)碼管顯示出要顯示的字符。</p><p> 雖然這些字符是在不同時(shí)刻出現(xiàn)的,而且同一時(shí)刻,只有一位顯示,其它各位熄滅,但由于數(shù)碼管具有余輝特性和人眼有視覺(jué)暫留現(xiàn)象,只要每位數(shù)碼管顯示間隔足夠短,給人眼的視覺(jué)假象就會(huì)連續(xù)穩(wěn)定地顯示。</p><p> 總之,多個(gè)數(shù)碼管動(dòng)態(tài)掃描顯示,是將所有數(shù)碼管相同段并聯(lián)在一起,通過(guò)選通信號(hào)分時(shí)控制各個(gè)數(shù)碼管的
63、公共端,循環(huán)點(diǎn)亮多個(gè)數(shù)碼管,并利用人眼的視覺(jué)暫留現(xiàn)象,只要掃描的頻率大于50Hz,將看不到閃爍現(xiàn)象。 6個(gè)數(shù)碼管則需要50*6=300Hz以上才能看到持續(xù)穩(wěn)定點(diǎn)亮的現(xiàn)象。</p><p><b> ?。ㄎ澹┰O(shè)計(jì)思路</b></p><p> 循環(huán)左滾動(dòng),始終點(diǎn)亮6個(gè)數(shù)碼管,左出右進(jìn)。狀態(tài)為:010101-101010-010101-101010-010101-101
64、010-010101</p><p><b> 主要思路如下:</b></p><p> (1) 各位數(shù)碼管的相同段是并聯(lián)的,段碼的輸出對(duì)各位數(shù)碼管來(lái)說(shuō)都是相同的。因此在同一時(shí)刻如果各位數(shù)碼管都處于點(diǎn)亮狀態(tài),6位數(shù)碼管將顯示相同的字符。若要各位數(shù)碼管能夠顯示出與本位相應(yīng)的字符,就必須采用掃描顯示方式,即在某一時(shí)刻,只讓某一位處于點(diǎn)亮狀態(tài),而其它各位處于滅燈狀態(tài)。&
65、lt;/p><p> (2)為實(shí)現(xiàn)移位,定義了字符串向量,這樣只需要將s(5 downto 1)<=s(4 downto 0);s(0)<=s(5);即可實(shí)現(xiàn)左移。</p><p> (3)加入按鍵控制count{led1_r,led2_r},在1s時(shí)鐘的控制下,count:從00-01-10-11轉(zhuǎn)變即可實(shí)現(xiàn)間隔時(shí)間1秒,2秒,3秒和4秒(單位狀態(tài)轉(zhuǎn)移,時(shí)間為1s)。&
66、lt;/p><p><b> (六)硬件實(shí)現(xiàn)</b></p><p> 這個(gè)實(shí)驗(yàn)要注意的問(wèn)題和上一個(gè)實(shí)驗(yàn)基本相同。這個(gè)實(shí)驗(yàn)涉及到動(dòng)態(tài)顯示,所以還要特別注意clk和clk1s的設(shè)置,后者要比前者大的多才能實(shí)現(xiàn)動(dòng)態(tài)顯示。</p><p> 程序編譯通過(guò)后連接硬件并進(jìn)行下載,下載成功則可以實(shí)現(xiàn)學(xué)號(hào)的動(dòng)態(tài)顯示和左移,并通過(guò)按鍵選擇左移的周期。<
67、/p><p><b> ?。ㄆ撸?shí)驗(yàn)總結(jié)</b></p><p> ?。ò耍?附錄(VHDL源程序)</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsigned
68、.all;</p><p> entity num_display is</p><p> port(clk,k1,k2:in std_logic;</p><p> led1,led2,led3:out std_logic;</p><p> seg:out std_logic_vector(7 downto 0);</p&
69、gt;<p> dig:out std_logic_vector(7 downto 0)</p><p><b> );</b></p><p> end entity;</p><p> architecture main of num_display is</p><p> signal f
70、lag:integer range 0 to 5;</p><p> signal clk1s,clk0_5s:std_logic;</p><p> signal state:integer;</p><p> signal cnt:std_logic_vector(2 downto 0);</p><p> type str is
71、 array(5 downto 0)of integer;</p><p> signal s:str:=(0,1,0,1,0,5);-----數(shù)字用你的學(xué)號(hào)替換。</p><p> signal led1_r,led2_r,led3_r:std_logic;</p><p><b> begin</b></p><p
72、> --------------------------產(chǎn)生1s時(shí)鐘---------------------------------</p><p> process(clk)</p><p> variable count:integer range 0 to 6000000;</p><p><b> begin</b>&l
73、t;/p><p> if clk'event and clk='1' then</p><p> if count=6000000 then </p><p> clk1s<=not clk1s;</p><p><b> count:=0;</b></p><p&g
74、t;<b> else </b></p><p> count:=count+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p>
75、 ------------------------------按鍵選擇-----------------</p><p> process (k1,k2)</p><p><b> begin</b></p><p> if k1'event and k1='1' then</p><p>
76、; led1_r<=not led1_r;</p><p><b> end if;</b></p><p> if k2'event and k2='1' then</p><p> led2_r<=not led2_r;</p><p><b> end if;
77、</b></p><p> end process;</p><p> led1<=not led1_r;</p><p> led2<=not led2_r;</p><p> led3<=not led3_r;</p><p> -----------------------
78、----滾動(dòng)顯示-----------------------------</p><p> process (clk1s)</p><p> variable count:std_logic_vector(1 downto 0);</p><p><b> begin</b></p><p> if(clk1s
79、'event and clk1s='1') then </p><p> if count=(led1_r,led2_r)then</p><p> s(5 downto 1)<=s(4 downto 0);--s(5 downto 1)<=s(4 downto 0);--如果為右移則改為s(4 downto 0)<=s(5 downto 1
80、);</p><p> s(0)<=s(5);--s(0)<=s(5); --如果為右移則改為s(5)<=s(0);</p><p> count:="00";</p><p><b> else</b></p><p> count:=count+1;</p>
81、<p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> ------------------------1s鐘閃爍基準(zhǔn)-------------------------------------</p
82、><p> process(clk)</p><p> variable count:integer range 0 to 3000000;</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><
83、;p> if count=3000000 then </p><p> clk0_5s<=not clk0_5s;</p><p><b> count:=0;</b></p><p><b> else </b></p><p> count:=count+1;</p&
84、gt;<p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(clk0_5s)</p><p><b> begin</b></p&g
85、t;<p> if clk0_5s'event and clk0_5s='1' then</p><p> led3_r<=not led3_r;</p><p><b> end if;</b></p><p> end process;</p><p> ----
86、-----------------------顯示------------------------------</p><p> process (clk)</p><p> variable count :integer range 0 to 6000;</p><p><b> begin</b></p><p&g
87、t; if(clk'event and clk='1') then</p><p> if count=6000 then</p><p> cnt<=cnt+1;</p><p><b> count:=0;</b></p><p><b> else</b>
88、;</p><p> count:=count+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> -------------------------
89、-段選擇---------------------------</p><p> process(cnt)</p><p><b> begin</b></p><p> case cnt is</p><p> when "000" => dig<="01111111
90、"; state<=s(5);</p><p> when "001" => dig<="10111111"; state<=s(4);</p><p> when "010" => dig<="11011111"; state<=s(3);</p&
91、gt;<p> when "011" => dig<="11101111"; state<=s(2);</p><p> when "100" => dig<="11110111"; state<=s(1);</p><p> when "101
92、" => dig<="11111011"; state<=s(0);</p><p> when others=> dig<="11111111"; </p><p><b> end case;</b></p><p> end process ;</
93、p><p> -----------------------------位顯示-----------------------------</p><p> process (clk)</p><p><b> begin </b></p><p> if(clk'event and clk='1
94、9;) then</p><p> case state is</p><p> when 0 => seg<="11000000";</p><p> when 1 => seg<="11111001";</p><p> when 2 => seg<=&q
95、uot;10100100";</p><p> when 3 => seg<="10110000";</p><p> when 4 => seg<="10011001";</p><p> when 5 => seg<="10010010";</p
96、><p> when 6 => seg<="10000010";</p><p> when 7 => seg<="11111000";</p><p> when 8 => seg<="10000000";</p><p> when 9 =
97、> seg<="10010000";</p><p> when others=>null;</p><p><b> end case;</b></p><p><b> end if;</b></p><p> end process; </p
98、><p><b> end main;</b></p><p><b> 教材及參考書</b></p><p> 1.楊曉慧 楊永健 《基于FPGA的EDA/SOPC技術(shù)與VHDL》 國(guó)防工業(yè)出版社 2007年7月</p><p> 2.《ALTERA CPLD實(shí)驗(yàn)系統(tǒng)用戶手冊(cè)》 http:/
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告
- eda交通燈課程設(shè)計(jì)報(bào)告(eda)
- eda課程設(shè)計(jì)報(bào)告--eda數(shù)字搶答器
- eda技術(shù)課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)-- eda與數(shù)字系統(tǒng)課程設(shè)計(jì)
- eda數(shù)字秒表課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)
- eda課程設(shè)計(jì)
- eda課程設(shè)計(jì)
- eda頻率計(jì)課程設(shè)計(jì)報(bào)告
- 游戲機(jī)eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告--洗衣機(jī)
- 電子時(shí)鐘eda課程設(shè)計(jì)報(bào)告
- 數(shù)字鐘eda課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)報(bào)告--數(shù)字鐘
- eda課程設(shè)計(jì)報(bào)告---頻率計(jì)
- eda課程設(shè)計(jì)報(bào)告---數(shù)字鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論