版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 設(shè)計(jì)類別: EDA-VHDL </p><p> 專業(yè)名稱: 通信工程 </p><p> 班級學(xué)號: ~~~~~~~~ </p><p> 學(xué)生姓名: ~
2、~~~~ </p><p> 基本題 : 數(shù)字時(shí)鐘設(shè)計(jì) </p><p> 綜合題 : 數(shù)碼管學(xué)號滾動顯示 </p><p><b> 同小組成員: </b></p><p> 學(xué)號: ~~~~~~~~~ </p><p> 姓名:
3、 ~~~~~~ </p><p><b> 一、數(shù)字時(shí)鐘</b></p><p><b> 1.實(shí)驗(yàn)?zāi)康?lt;/b></p><p> (1)掌握VHDL語言的語法規(guī)范,掌握時(shí)序電路描述方法</p><p> (2)掌握多個(gè)數(shù)碼管動態(tài)掃描顯示的原理及設(shè)計(jì)方法</p&
4、gt;<p><b> 2.實(shí)驗(yàn)任務(wù)要求</b></p><p> 要求學(xué)生設(shè)計(jì)一個(gè)時(shí)鐘,并輸出到數(shù)碼管顯示時(shí),分,秒。</p><p> 3.設(shè)計(jì)思路及VHDL代碼</p><p> 首先要設(shè)置一個(gè)時(shí)鐘信號,根據(jù)時(shí)鐘信號的變化來進(jìn)行時(shí)鐘的變化,從秒的變化到時(shí)的變化條件是不同的。將時(shí)分秒各分為為十位和各位即六位數(shù)字顯示時(shí)間
5、來分析。</p><p><b> 原理圖如下:</b></p><p> VHDL源程序如下:</p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_unsign
6、ed.all;</p><p> entity shizhong is</p><p> port( clk:in std_logic;</p><p> led1:out std_logic_vector(6 downto 0);</p><p> led2:out std_logic_vector(6 downto 0);&
7、lt;/p><p> led3:out std_logic_vector(6 downto 0);</p><p> led4:out std_logic_vector(6 downto 0);</p><p> led5:out std_logic_vector(6 downto 0);</p><p> led6:out std_lo
8、gic_vector(6 downto 0));</p><p> end shizhong;</p><p> architecture main of shizhong is</p><p> signal hou1:std_logic_vector(3 downto 0);</p><p> signal hou2:std_lo
9、gic_vector(3 downto 0);</p><p> signal min1:std_logic_vector(3 downto 0);</p><p> signal min2:std_logic_vector(3 downto 0);</p><p> signal sec1:std_logic_vector(3 downto 0);</
10、p><p> signal sec2:std_logic_vector(3 downto 0);</p><p><b> begin</b></p><p> -------------------------------------------------------------</p><p> h110:pr
11、ocess(clk,hou2,min1,min2,sec1,sec2)</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><p> if (hou1="0010" and hou2="0011"
12、)and(min1="0101" and min2="1001") and (sec1="0101" and</p><p> sec2="1001") then</p><p> hou1<="0000";</p><p> else if (ho
13、u2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2="1001"))</p><p><b> then</b></p><p> hou1<=hou1+1;</p>
14、;<p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process h110;</p><p> ——————————時(shí)鐘的十位&
15、lt;/p><p> ---------------------------------------------------------------</p><p> h220:process(clk,min1,min2,sec1,sec2,hou1)</p><p><b> begin</b></p><p>
16、if clk'event and clk='1' then</p><p> if (hou1="0010" and hou2="0011")and(min1="0101" and min2="1001") and (sec1="0101" and</p><p>
17、 sec2="1001") then</p><p> hou2<="0000";</p><p> else if hou2="1001"and(min1="0101" and min2="1001") and (sec1="0101" and sec2=&
18、quot;1001")</p><p><b> then</b></p><p> hou2<="0000";</p><p> else if((min1="0101" and min2="1001") and (sec1="0101" a
19、nd sec2="1001")) then</p><p> hou2<=hou2+1;--speak<=clk;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end
20、if;</b></p><p><b> end if;</b></p><p> end process h220;</p><p> ——————————時(shí)鐘的個(gè)位</p><p> ------------------------------------------------------
21、--------</p><p> m110:process(clk,min2,sec1,sec2)</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><p> if (min1="0101&quo
22、t; and min2="1001") and (sec1="0101" and sec2="1001") then</p><p> min1<="0000";</p><p> else if (min2="1001"and (sec1="0101" and
23、 sec2="1001"))then</p><p> min1<=min1+1;</p><p><b> end if;</b></p><p><b> end if;</b></p><p><b> end if;</b></p
24、><p> end process m110;</p><p> ——————————分鐘的十位</p><p> --------------------------------------------------------------</p><p> m220:process(clk,sec1,sec2)</p>
25、<p><b> begin</b></p><p> if clk'event and clk='1' then</p><p> if min2="1001"and (sec1="0101" and sec2="1001")then</p><
26、;p> min2<="0000";</p><p> else if (sec1="0101" and sec2="1001") then</p><p> min2<=min2+1;</p><p><b> end if;</b></p>&
27、lt;p><b> end if;</b></p><p><b> end if;</b></p><p> end process m220;</p><p> ——————————分鐘的個(gè)位</p><p> ----------------------------------
28、----------------------------</p><p> s110:process(clk)</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><p> if (sec1="010
29、1" and sec2="1001")then</p><p> sec1<="0000";</p><p> else if sec2="1001"then</p><p> sec1<=sec1+1;</p><p><b> end if
30、;</b></p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process s110;</p><p> ——————————秒鐘的十位</p><p> ----------
31、----------------------------------------------------</p><p> s220:process(clk)</p><p><b> begin</b></p><p> if clk'event and clk='1' then</p><p
32、> if sec2="1001" then</p><p> sec2<="0000";</p><p> else sec2<=sec2+1;</p><p><b> end if;</b></p><p><b> end if;<
33、/b></p><p> end process s220;</p><p> ——————————秒鐘的個(gè)位</p><p> ---------------------------------------------------------------</p><p> disp:process(hou1,hou2,min1
34、,min2,sec1,sec2)</p><p><b> begin</b></p><p> case hou1 is</p><p> when "0000"=>LED1<="0111111";</p><p> when "0001"
35、=>LED1<="0000110";</p><p> when "0010"=>LED1<="1011011";</p><p> when others=>LED1<="1000000";</p><p><b> end case
36、;</b></p><p> case hou2 is</p><p> when "0000"=>LED2<="0111111";</p><p> when "0001"=>LED2<="0000110";</p><p&
37、gt; when "0010"=>LED2<="1011011";</p><p> when "0011"=>LED2<="1001111";</p><p> when "0100"=>LED2<="1100110";<
38、/p><p> when "0101"=>LED2<="1101101";</p><p> when "0110"=>LED2<="1111101";</p><p> when "0111"=>LED2<="0000
39、111";</p><p> when "1000"=>LED2<="1111111";</p><p> when "1001"=>LED2<="1101111";</p><p> when others=>LED2<="
40、1000000";</p><p><b> end case;</b></p><p> case min1 is</p><p> when "0000"=>LED3<="0111111";</p><p> when "0001&quo
41、t;=>LED3<="0000110";</p><p> when "0010"=>LED3<="1011011";</p><p> when "0011"=>LED3<="1001111";</p><p> when
42、"0100"=>LED3<="1100110";</p><p> when "0101"=>LED3<="1101101";</p><p> when others=>LED3<="1000000";</p><p><
43、;b> end case;</b></p><p> case min2 is</p><p> when "0000"=>LED4<="0111111";</p><p> when "0001"=>LED4<="0000110";&l
44、t;/p><p> when "0010"=>LED4<="1011011";</p><p> when "0011"=>LED4<="1001111";</p><p> when "0100"=>LED4<="11
45、00110";</p><p> when "0101"=>LED4<="1101101";</p><p> when "0110"=>LED4<="1111101";</p><p> when "0111"=>LED
46、4<="0000111";</p><p> when "1000"=>LED4<="1111111";</p><p> when "1001"=>LED4<="1101111";</p><p> when others=>
47、;LED4<="1000000";</p><p><b> end case;</b></p><p> case sec1 is</p><p> when "0000"=>LED5<="0111111";</p><p> whe
48、n "0001"=>LED5<="0000110";</p><p> when "0010"=>LED5<="1011011";</p><p> when "0011"=>LED5<="1001111";</p>
49、<p> when "0100"=>LED5<="1100110";</p><p> when "0101"=>LED5<="1101101";</p><p> when others=>LED5<="1000000";</p&g
50、t;<p><b> end case;</b></p><p> case sec2 is</p><p> when "0000"=>LED6<="0111111";</p><p> when "0001"=>LED6<="
51、0000110";</p><p> when "0010"=>LED6<="1011011";</p><p> when "0011"=>LED6<="1001111";</p><p> when "0100"=>L
52、ED6<="1100110";</p><p> when "0101"=>LED6<="1101101";</p><p> when "0110"=>LED6<="1111101";</p><p> when "01
53、11"=>LED6<="0000111";</p><p> when "1000"=>LED6<="1111111";</p><p> when "1001"=>LED6<="1101111";</p><p>
54、 when others=>LED6<="1000000";</p><p><b> end case;</b></p><p> end process disp;</p><p> -----------------------------------------------------------&
55、lt;/p><p><b> end main;</b></p><p><b> 4.仿真波形及分析</b></p><p> 通過波形可以看出,秒,分,時(shí)各位之間可以很好地完成進(jìn)位功能,秒鐘達(dá)最大值59進(jìn)一并清零,分鐘達(dá)最大值59進(jìn)一并清零,時(shí)鐘打最大值23進(jìn)一并清零,數(shù)字時(shí)鐘功能可以實(shí)現(xiàn)。</p>&
56、lt;p><b> 5.實(shí)驗(yàn)總結(jié)與體會</b></p><p> 本實(shí)驗(yàn)為基礎(chǔ)題的第一題,整體功能與實(shí)際聯(lián)系較為緊密,因此各模塊的分析和設(shè)計(jì)方面難度減少了很多,通過這個(gè)課題的設(shè)計(jì),我們初步認(rèn)識了VHDL語言,以及quartus II 軟件的具體應(yīng)用方法,能夠很直觀地將電路模塊化分析并使用vhdl語言設(shè)計(jì)出來。</p><p> 二、數(shù)碼管學(xué)號滾動顯示<
57、;/p><p><b> 1.實(shí)驗(yàn)?zāi)康?lt;/b></p><p> (1)掌握VHDL語言的語法規(guī)范,掌握時(shí)序電路描述方法</p><p> (2)掌握多個(gè)數(shù)碼管動態(tài)掃描顯示的原理及設(shè)計(jì)方法</p><p><b> 2.實(shí)驗(yàn)任務(wù)要求</b></p><p> 要求學(xué)生在
58、六個(gè)數(shù)碼管滾動顯示自己的學(xué)號(六位),每隔一定時(shí)間循環(huán)移位一次,學(xué)號為奇數(shù)則左移,學(xué)號為偶數(shù)則右移。間隔時(shí)間可由開關(guān)選擇1秒,2秒,3秒和4秒。</p><p> 3.設(shè)計(jì)思路及VHDL代碼</p><p> 本題要求六位學(xué)號可以滾動顯示,通過對其功能的理解,可以找出每個(gè)數(shù)字對應(yīng)的數(shù)碼管位置變化的規(guī)律。具體實(shí)現(xiàn)可以通過在每個(gè)脈沖上升沿觸發(fā)學(xué)號中六個(gè)數(shù)字001908依次在六個(gè)數(shù)碼管上輸出
59、,而在六個(gè)脈沖之后,六位學(xué)號還是依次輸出,但是顯示的數(shù)碼管不同,首個(gè)數(shù)字在第二位數(shù)碼管顯示,以此類推,最后一位在第一位數(shù)碼管顯示。六個(gè)脈沖構(gòu)成一個(gè)循環(huán),以同上的方法類推顯示即可實(shí)現(xiàn)學(xué)號的右移效果。顯示的間隔時(shí)間可以通過源程序內(nèi)改變運(yùn)行次數(shù)來控制。</p><p><b> 原理圖如下:</b></p><p><b> 模塊設(shè)計(jì):</b>&l
60、t;/p><p><b> 輸入&輸出</b></p><p> 輸入: clk ------時(shí)鐘信號</p><p> column ------行列式鍵盤的4列</p><p> 輸出: led_out ------數(shù)碼管8段顯示,可顯示0~9,A~
61、F</p><p> led_sel ------選擇6個(gè)數(shù)碼管,‘1’表示點(diǎn)亮對應(yīng)數(shù)碼管</p><p> output ------分頻后的時(shí)鐘</p><p> Interval ------隨學(xué)號移動而數(shù)值改變的寄存器</p><p><b> 分頻電路模塊</b&g
62、t;</p><p> PROCESS(clk)--12分頻電路</p><p> VARIABLE counter: std_logic_vector(2 downto 0);--計(jì)數(shù)寄存器,12分頻輸入時(shí)鐘為 1Hz</p><p> BEGIN </p><p> IF (clk'EVENT AND
63、 clk ='0') THEN --下降沿有效</p><p> counter := counter + 1 ;</p><p> IF (counter = 6) THEN </p><p> clk_temp <= NOT clk_temp; --分頻后的時(shí)鐘變化 </p><p&g
64、t; counter := "000";</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(clk)--讀取行列式鍵盤的鍵值</p>
65、;<p> ?。ㄟ@段程序是對時(shí)鐘clock進(jìn)行分頻,進(jìn)而得到新的時(shí)鐘clk_temp,并賦值給輸出output)</p><p><b> 移位控制模塊</b></p><p><b> BEGIN</b></p><p> IF(clk'EVENT AND clk = '0')
66、THEN</p><p> CASE column IS</p><p> WHEN "1110" =></p><p> key_code <= "00";</p><p> WHEN "1101" =></p><p> key
67、_code <= "01";</p><p> WHEN "1011" =></p><p> key_code <= "10";</p><p> WHEN "0111" =></p><p> key_code <= &q
68、uot;11";</p><p> WHEN OTHERS => </p><p> key_code <= "00";</p><p><b> END CASE;</b></p><p><b> END IF;</b></p>&
69、lt;p> END PROCESS;</p><p> process (clk_temp)</p><p> VARIABLE time_count : std_logic_vector(1 DOWNTO 0); </p><p><b> begin</b></p><p> if (clk_te
70、mp 'event and clk_temp = '0') then--下降沿有效</p><p> time_count := time_count + 1;</p><p> CASE key_code IS</p><p> WHEN "00" =></p><p>
71、 shift <= shift- 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <="110";</p><p> end if; </p><p> WHEN "01" =>&
72、lt;/p><p> if(time_count = "10") then </p><p> time_count := "00" ;</p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") the
73、n</p><p> shift <="110";</p><p><b> end if; </b></p><p> end if; </p><p> WHEN "10" =></p><p> if(time_count
74、 = "11") then </p><p> time_count := "00";</p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <=&
75、quot;110";</p><p><b> end if; </b></p><p> end if; </p><p> WHEN "11" =></p><p> if(time_count = "00") then </p>
76、<p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <="110";</p><p><b> end if; </b></p><p>
77、 end if; </p><p> WHEN OTHERS =></p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <="110";</p>
78、;<p><b> end if; </b></p><p><b> END CASE;</b></p><p><b> end if;</b></p><p> end process; </p><p> 注: 該模塊利用 key_code的
79、四個(gè)數(shù)值來控制四個(gè)case,由于time_count 初始值是00,在進(jìn)入運(yùn)算時(shí)是01,根據(jù)case的不同,運(yùn)行次數(shù)不同,分別是一次,兩次,三次和四次,根據(jù)這個(gè)來控制移動的間隔時(shí)間。</p><p><b> 數(shù)碼管顯示模塊</b></p><p> process (clk)------顯示學(xué)號001908</p><p> VARIA
80、BLE led_sel_llb :std_logic_vector(3 DOWNTO 0); --信號量,6個(gè)數(shù)碼管顯示的選擇</p><p><b> begin</b></p><p> if (clk 'event and clk='0') then --時(shí)鐘下降沿有效</p><p> if
81、 (led_sel_count = "0000") then--輪詢6個(gè)數(shù)碼管</p><p> led_sel_count <= "0101";</p><p><b> else </b></p><p> led_sel_count <= led_sel_count - &
82、quot;0001";</p><p><b> end if;</b></p><p> --0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff</p><p> -- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
83、空</p><p> case led_sel_count is --選擇要要顯示的值</p><p> when "0000" => led_out <= X"80"; --位置6,內(nèi)容8</p><p> when "0001" => led_out <= X&quo
84、t;c0"; --位置5,內(nèi)容0</p><p> when "0010" => led_out <= X"90"; --位置4,內(nèi)容9</p><p> when "0011" => led_out <= X"f9"; --位置3,內(nèi)容1</p><
85、;p> when "0100" => led_out <= X"c0"; --位置2,內(nèi)容0</p><p> when "0101" => led_out <= X"c0"; --位置1,內(nèi)容0</p><p> when others => led_out &
86、lt;= X"92"; --其他情況下,位置6,內(nèi)容5</p><p><b> end case;</b></p><p> led_sel_llb := led_sel_count + shift;</p><p> if (led_sel_llb >= "0110") then<
87、/p><p> led_sel_llb := led_sel_llb - "0110";</p><p><b> end if;</b></p><p> case led_sel_llb is --選擇要被點(diǎn)亮的數(shù)碼管</p><p> when "0000" =>
88、 led_sel <= "000001"; --位置6</p><p> when "0001" => led_sel <= "000010"; --位置5</p><p> when "0010" => led_sel <= "000100"; --位置4
89、</p><p> when "0011" => led_sel <= "001000"; --位置3</p><p> when "0100" => led_sel <= "010000"; --位置2</p><p> when "0101&q
90、uot; => led_sel <= "100000"; --位置1</p><p> when others => led_sel <= "000001"; --其他情況下,位置6,內(nèi)容5</p><p><b> end case;</b></p><p><b>
91、; end if;</b></p><p> end process; </p><p> 注: 該模塊中, led_sel用來表示選中的數(shù)碼管, led_out 表示輸出的數(shù)值。每一個(gè)clock過來,都會輸出一個(gè)數(shù),依次是0-0-1-9-0-8,而數(shù)字輸出在哪個(gè)數(shù)碼管是由相同時(shí)刻的led_sel決定的。由于時(shí)鐘頻率很高,雖然每個(gè)時(shí)鐘來臨時(shí)只有一個(gè)數(shù)碼管被點(diǎn)亮,但由
92、于視覺停留,所以可以達(dá)到每個(gè)數(shù)碼管都被點(diǎn)亮的效果。</p><p> VHDL源程序如下:</p><p> LIBRARY ieee ;</p><p> USE ieee.std_logic_1164.all ;</p><p> USE ieee.std_logic_unsigned.all ;</p><p
93、><b> --顯示模塊</b></p><p> ENTITY llb IS </p><p><b> PORT ( </b></p><p> clk : IN STD_LOGIC; </p><p> led_out : OUT STD
94、_LOGIC_VECTOR(7 DOWNTO 0); --數(shù)碼管8段顯示,可顯示0~9,A~F</p><p> led_sel : BUFFER STD_LOGIC_VECTOR(5 DOWNTO 0); --選擇6個(gè)數(shù)碼管,‘1’表示點(diǎn)亮對應(yīng)數(shù)碼管</p><p> output : OUT STD_LOGIC;</p><p> inter
95、val : OUT STD_LOGIC_VECTOR(2 downto 0);</p><p> column : IN STD_LOGIC_VECTOR(3 downto 0) --行列式鍵盤的4列</p><p><b> ) ; </b></p><p><b> END llb ;</
96、b></p><p> ARCHITECTURE Behavior OF llb IS </p><p> signal clk_temp : std_logic := '1'; --用作分頻后的電路時(shí)鐘</p><p> signal led_sel_count : std_logi
97、c_vector(3 DOWNTO 0); --信號量,6個(gè)數(shù)碼管顯示的選擇</p><p> signal div_cnt : std_logic_vector(1 downto 0); --行掃描驅(qū)動</p><p> signal scan_key : std_logic_vector(3 DOWNTO 0);
98、 --掃描碼寄存器 </p><p> signal key_code : std_logic_vector(1 DOWNTO 0); --存儲鍵值</p><p> signal shift : std_logic_vector(2 DOWNTO 0):= "110"; --控制數(shù)碼管顯示的數(shù)據(jù)右移</p>
99、<p><b> begin </b></p><p> output <= clk_temp; </p><p> interval <= shift;</p><p> PROCESS(clk)--12分頻電路</p><p> VARIABLE counter: std_logi
100、c_vector(2 downto 0);--計(jì)數(shù)寄存器,12分頻輸入時(shí)鐘為 1Hz</p><p> BEGIN </p><p> IF (clk'EVENT AND clk ='0') THEN --下降沿有效</p><p> counter := counter + 1 ;</p><
101、;p> IF (counter = 6) THEN </p><p> clk_temp <= NOT clk_temp; --分頻后的時(shí)鐘變化 </p><p> counter := "000";</p><p><b> END IF;</b></p>&l
102、t;p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(clk)--讀取行列式鍵盤的鍵值</p><p><b> BEGIN</b></p><p> IF(clk'EVENT AND clk = '0
103、')THEN</p><p> CASE column IS</p><p> WHEN "1110" =></p><p> key_code <= "00"; </p><p> WHEN "1101" =>&
104、lt;/p><p> key_code <= "01"; </p><p> WHEN "1011" =></p><p> key_code <= "10";</p><p> WHEN "0111" =></p>&l
105、t;p> key_code <= "11";</p><p> WHEN OTHERS => </p><p> key_code <= "00";</p><p><b> END CASE;</b></p><p><b> END
106、IF;</b></p><p> END PROCESS;</p><p> process (clk_temp)</p><p> VARIABLE time_count : std_logic_vector(1 DOWNTO 0); </p><p><b> begin</b></p&
107、gt;<p> if (clk_temp 'event and clk_temp = '0') then--下降沿有效</p><p> time_count := time_count + 1;</p><p> CASE key_code IS</p><p> WHEN "00" =>
108、</p><p> shift <= shift- 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <="110";</p><p> end if; </p><p>
109、WHEN "01" =></p><p> if(time_count = "10") then </p><p> time_count := "00" ;</p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(sh
110、ift = "000") then</p><p> shift <="110";</p><p><b> end if; </b></p><p> end if; </p><p> WHEN "10" =></p>
111、<p> if(time_count = "11") then </p><p> time_count := "00";</p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p>
112、;<p> shift <="110";</p><p><b> end if; </b></p><p> end if; </p><p> WHEN "11" =></p><p> if(time_count = "
113、00") then </p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <="110";</p><p><b> end if; </
114、b></p><p> end if; </p><p> WHEN OTHERS =></p><p> shift <= shift - 1;--數(shù)據(jù)右移1位</p><p> if(shift = "000") then</p><p> shift <
115、="110";</p><p><b> end if; </b></p><p><b> END CASE;</b></p><p><b> end if;</b></p><p> end process; </p><
116、p> PROCESS(clk)--行掃描驅(qū)動,產(chǎn)生行掃描的值</p><p> BEGIN </p><p> IF(clk'EVENT AND clk = '0')THEN</p><p> div_cnt <= div_cnt + 1; </p><p><b>
117、; END IF;</b></p><p> END PROCESS;</p><p> PROCESS(div_cnt)--產(chǎn)生行掃描的值用于一行一行的輪詢4行</p><p><b> BEGIN</b></p><p> CASE div_cnt IS</p><p>
118、 WHEN "00" => </p><p> scan_key<="1110";</p><p> WHEN "01" => </p><p> scan_key<="1101";</p>
119、;<p> WHEN "10" => </p><p> scan_key<="1011";</p><p> WHEN "11" => </p><p> scan_key<="0111";</p><p>
120、 WHEN OTHERS => </p><p><b> NULL;</b></p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> process (clk)--顯示學(xué)號001908</p><p&g
121、t; VARIABLE led_sel_llb :std_logic_vector(3 DOWNTO 0); --信號量,6個(gè)數(shù)碼管顯示的選擇</p><p><b> begin</b></p><p> if (clk 'event and clk='0') then --時(shí)鐘下降沿有效</p><
122、p> if (led_sel_count = "0000") then--輪詢6個(gè)數(shù)碼管</p><p> led_sel_count <= "0101";</p><p><b> else </b></p><p> led_sel_count <= led_sel_
123、count - "0001";</p><p><b> end if;</b></p><p> --0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff</p><p> -- 0, 1, 2, 3, 4, 5, 6, 7, 8
124、, 9, 空</p><p> case led_sel_count is --選擇要要顯示的值</p><p> when "0000" => led_out <= X"80"; --位置6,內(nèi)容8</p><p> when "0001" => led_out &l
125、t;= X"c0"; --位置5,內(nèi)容0</p><p> when "0010" => led_out <= X"90"; --位置4,內(nèi)容9</p><p> when "0011" => led_out <= X"f9"; --位置3,內(nèi)容1</p
126、><p> when "0100" => led_out <= X"c0"; --位置2,內(nèi)容0</p><p> when "0101" => led_out <= X"c0"; --位置1,內(nèi)容0</p><p> when others =>
127、led_out <= X"92"; --其他情況下,位置6,內(nèi)容5</p><p><b> end case;</b></p><p> led_sel_llb := led_sel_count + shift;</p><p> if (led_sel_llb >= "0110")
128、then</p><p> led_sel_llb := led_sel_llb - "0110";</p><p><b> end if;</b></p><p> case led_sel_llb is --選擇要被點(diǎn)亮的數(shù)碼管</p><p> when "0000&qu
129、ot; => led_sel <= "000001"; --位置6</p><p> when "0001" => led_sel <= "000010"; --位置5</p><p> when "0010" => led_sel <= "000100&quo
130、t;; --位置4</p><p> when "0011" => led_sel <= "001000"; --位置3</p><p> when "0100" => led_sel <= "010000"; --位置2</p><p> when &qu
131、ot;0101" => led_sel <= "100000"; --位置1</p><p> when others => led_sel <= "000001"; --其他情況下,位置6,內(nèi)容5</p><p><b> end case;</b></p><p>
132、;<b> end if;</b></p><p> end process; </p><p> end Behavior;</p><p><b> 4.仿真波形及分析</b></p><p><b> 學(xué)號右移功能:</b></p>&l
133、t;p> 11000000表示學(xué)號0 11111001表示學(xué)號1 10010000表示學(xué)號9</p><p> 10000000表示學(xué)號8</p><p> 100000表示左第一位數(shù)碼管亮,010000表示第二位,以此類推。</p><p> 初始狀態(tài),數(shù)碼管顯示學(xué)號0 0 1 9 0 8</p><p> 右移一位
134、,8 0 0 1 9 0</p><p> 右移兩位,0 8 0 0 1 9</p><p> 右移三位,9 0 8 0 0 1</p><p> 右移四位,1 9 0 8 0 0</p><p> 右移五位,0 1 9 0 8 0</p><p><b> 以上為一次循環(huán)。</b>&l
135、t;/p><p><b> 循環(huán)間隔控制功能</b></p><p> 顯示間隔的控制由column決定,1110表示循環(huán)間隔為1秒,1101表示循環(huán)間隔為2秒,1011表示循環(huán)間隔為3秒,0111表示循環(huán)間隔為4秒。</p><p><b> 間隔一秒情況:</b></p><p><b&
136、gt; 間隔兩秒情況:</b></p><p><b> 間隔三秒情況:</b></p><p><b> 間隔四秒情況:</b></p><p><b> 5.實(shí)驗(yàn)總結(jié)與體會</b></p><p> 本題為提高題第四題,整體功能和各模塊的功能分析方面都
137、比基礎(chǔ)題要更為復(fù)雜,但由于與前一題同樣是使用數(shù)碼管掃描顯示的設(shè)計(jì)方法,使的一些模塊的設(shè)計(jì)方面可以很好地簡化,雖然其中也有很多錯(cuò)誤與缺陷, 在學(xué)號的右移時(shí)也有一些問題,調(diào)試時(shí)問題更是不斷,仿真波形也與課題要求有所差異,但最終還是達(dá)到了預(yù)期效果。</p><p> 通過實(shí)驗(yàn),我們加深了對VHDL語言的認(rèn)識和運(yùn)用,對EDA的硬件應(yīng)用方面也不僅僅是表面淺顯的了解。不但學(xué)會了設(shè)計(jì)程序的方法,更重要的是學(xué)會了將一個(gè)課題進(jìn)行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)碼管顯示課程設(shè)計(jì)報(bào)告
- plc數(shù)碼管顯示課程設(shè)計(jì)
- 課程設(shè)計(jì)---單只數(shù)碼管循環(huán)顯示設(shè)計(jì)
- 兩位數(shù)碼管顯示課程設(shè)計(jì)
- 兩位數(shù)碼管顯示設(shè)計(jì)-課程設(shè)計(jì)
- pic課程設(shè)計(jì)--多位數(shù)碼管循環(huán)顯示
- 兩位數(shù)碼管顯示設(shè)計(jì)-課程設(shè)計(jì)報(bào)告
- plc課程設(shè)計(jì)---七段數(shù)碼管數(shù)字顯示
- 4位dip開關(guān)控制數(shù)碼管顯示系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)
- eda技術(shù)課程設(shè)計(jì)--數(shù)碼管顯示數(shù)字鐘設(shè)計(jì)
- 數(shù)碼管按鍵顯示
- led數(shù)碼管顯示
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)--數(shù)碼管動態(tài)顯示滾動示單個(gè)數(shù)字設(shè)計(jì)
- ds1302時(shí)鐘數(shù)碼管課程設(shè)計(jì)--用數(shù)碼管顯示實(shí)時(shí)日歷時(shí)鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--兩位數(shù)碼管顯示設(shè)計(jì)
- 數(shù)字電子技術(shù)數(shù)碼管課程設(shè)計(jì)---數(shù)碼管設(shè)計(jì)及原理分析
- led數(shù)碼管顯示控制
- 兩位數(shù)碼管顯示課程設(shè)計(jì)說明書
- 單片機(jī)原理及應(yīng)用課程設(shè)計(jì)--單只數(shù)碼管顯示數(shù)字
- 數(shù)碼管顯示控制器 數(shù)字電子技術(shù)課程設(shè)計(jì)
評論
0/150
提交評論