2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論