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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  課程設(shè)計論文</b></p><p>  課題名稱 微波爐控制器設(shè)計 </p><p><b>  微波爐控制器設(shè)計</b></p><p><b>  摘 要</b></p><p>  該設(shè)計用VHDL語言在去Quar

2、tusⅡ軟件平臺上通過編譯、模擬仿真,完成了微波爐控制功能,實現(xiàn)了微波爐的測試、時間設(shè)置、烹調(diào)計時、完成提示等設(shè)計,并對時鐘分頻作了一定的探討。此設(shè)計采用了現(xiàn)場可編程邏輯器件FPGA的ASIC設(shè)計,由控制模塊、裝載模塊、計時模塊和顯示模塊四大模塊組成,而且它可以將所有器件集成在一塊芯片上,體積大大減小,且外圍電路很簡單,易于實現(xiàn)?!?lt;/p><p>  關(guān)鍵詞:FPGA,VHDL,微波爐控制器;仿真</p&

3、gt;<p><b>  一 總體設(shè)計</b></p><p>  1.1 課題的主要內(nèi)容及基本要求</p><p>  要求采用EDA技術(shù)設(shè)計一個微波爐控制器,可完成以下功能:</p><p> ?。?)可控制烹調(diào)的開關(guān);</p><p> ?。?)可設(shè)置烹調(diào)時間,(假設(shè)系統(tǒng)最長的烹調(diào)時間為59分5

4、9秒);</p><p> ?。?)可顯示烹調(diào)的剩余時間。</p><p><b>  1.2 設(shè)計思路</b></p><p>  現(xiàn)代數(shù)字系統(tǒng)設(shè)計一般采用自頂向下的方法,其過程大致可分為三個大的步驟:系統(tǒng)調(diào)研;模塊的劃分;模塊的實現(xiàn)。承接一個數(shù)字系統(tǒng)設(shè)計的課題后,一般不要急于動手設(shè)計,而應(yīng)對課題作充分的分析和調(diào)研,然后確定初步的方案。&l

5、t;/p><p>  分析:課題的任務(wù)、要求、原理和使用條件等。</p><p>  調(diào)研:課題現(xiàn)狀并和相同或相近課題進(jìn)行比較。</p><p>  現(xiàn)代數(shù)字系統(tǒng)設(shè)計一般是將其劃分為控制器和受控電路兩大部分,控制器由ASM圖或MDS圖決定,而受控電路則使用各種通用模塊實現(xiàn)。</p><p>  下面分析微波爐定時器的工作過程及基本要求: <

6、/p><p>  上電后,系統(tǒng)處于復(fù)位狀態(tài)。工作時首先進(jìn)行烹調(diào)時間設(shè)置,并使用數(shù)碼管顯示時間信息,設(shè)要求最長的烹調(diào)時間為59分59秒,時間設(shè)置完畢后系統(tǒng)自動回到初始狀態(tài);按開始烹調(diào)按鍵進(jìn)入烹調(diào)狀態(tài),時間顯示數(shù)碼管按每秒減1的倒計時方式顯示剩余烹調(diào)時間;烹調(diào)結(jié)束后,系統(tǒng)回到復(fù)位狀態(tài)。</p><p>  系統(tǒng)要求分析及初步方案的確定:</p><p>  根據(jù)系統(tǒng)的基本要

7、求,著重應(yīng)考慮如下問題: </p><p> ?。?)計時電路的設(shè)計:芯片內(nèi)部產(chǎn)生和外部提供。本例中由外部時鐘電路以BCD碼的形式提供。</p><p>  (2)時間設(shè)置出錯及工作過程的取消等情況的處理:設(shè)置一個復(fù)位按鍵。 </p><p>  (3)數(shù)碼管狀態(tài)的檢測:設(shè)置數(shù)碼管檢測按鍵,按動該按鍵后,數(shù)碼管能夠顯示“888

8、8”的信息。</p><p> ?。?)時間顯示電路:采用4位7段顯示數(shù)碼管顯示,并由芯片直接驅(qū)動。 </p><p>  (5)微波管的驅(qū)動:設(shè)置一個輸出驅(qū)動控制烹調(diào)狀態(tài)的繼電器即可。</p><p><b>  1.3 設(shè)計方案</b></p><p>  微波爐控制器系統(tǒng)可由以下三個電路模塊組成:狀態(tài)控制電

9、路,其功能是控制微波爐工作過程中的狀態(tài)轉(zhuǎn)換,并發(fā)出相關(guān)控制信號;數(shù)據(jù)裝載電路,其功能是根據(jù)控制信號選擇定時時間,測試數(shù)據(jù)或計時完成信息的載入;計時器電路,其功能是對時鐘進(jìn)行減法計數(shù),提供烹調(diào)完成時的狀態(tài)信號。</p><p>  微波爐控制器的系統(tǒng)框圖如圖1所示。其中,CLK為時鐘輸入信號,時鐘上升沿敏感;RESET為復(fù)位信號,高電平有效時系統(tǒng)復(fù)位清零;TEST為數(shù)碼顯示管測試信號,高電平有效系統(tǒng)顯示8888;S

10、ET_T高電平有效時允許設(shè)置烹飪時間;KEY為定時時間輸入信號,用于設(shè)置烹飪時間的長短,其高到低分別表示時間分、秒的十位、個位;START為烹調(diào)開始信號,高電平有效時開始烹調(diào);輸出信號COOK指示微波爐狀態(tài),高電平時表示烹調(diào)進(jìn)行時;SEC0 、SEC1、MIN0、MIN1分別表示秒個位、秒十位、分個位、分十位。</p><p>  圖1 微波爐控制器系統(tǒng)框圖</p><p>  微波爐控

11、制器的工作流程圖如圖2所示。</p><p>  首先,對系統(tǒng)進(jìn)行復(fù)位清零,使其各電路模塊均處于初始狀態(tài);當(dāng)烹飪時間設(shè)置信號SET_T有效時,讀入時間信號KEY[3..0]的取值,此時系統(tǒng)顯示設(shè)置的時間信息,再按下SET_T確定設(shè)置時間完成。按下開始鍵START,系統(tǒng)進(jìn)入烹調(diào)狀態(tài),COOK信號變?yōu)楦唠娖剑瑫r鐘計數(shù)器開始減法計數(shù),MIN1、MIN0、SEC1、SEC0顯示剩余烹調(diào)時間。烹調(diào)結(jié)束,系統(tǒng)恢復(fù)初始狀態(tài)。&

12、lt;/p><p>  當(dāng)系統(tǒng)處于復(fù)位清零狀態(tài)時,按下顯像管測試按鈕TEST,將對顯像管是否正常工作進(jìn)行測試,正常工作時,顯像管輸出全1。</p><p><b>  二 模塊分析</b></p><p>  2.1 狀態(tài)控制電路模塊</p><p>  狀態(tài)控制器的功能根據(jù)輸入信號和自身當(dāng)時所處的狀態(tài)完成狀態(tài)的轉(zhuǎn)換和

13、輸出相應(yīng)的控制信號,其模塊框圖如圖3所示。其中,輸出信號LD_DONE指示數(shù)據(jù)裝載電路載入的烹調(diào)結(jié)束的狀態(tài)信息的顯示的驅(qū)動信息數(shù)據(jù);LD_CLK顯示數(shù)據(jù)裝載電路的設(shè)置的時間數(shù)據(jù);LD_TEST指示數(shù)據(jù)裝載電路載入的用于測試的數(shù)據(jù),以顯示驅(qū)動信息數(shù)據(jù);COOK指示烹飪的狀態(tài),并提示計時器進(jìn)行減法計算;KEY為定時時間輸入信號,用于設(shè)置烹飪時間的長短,其高到低分別表示時間分、秒的十位、個位。當(dāng)LD_DONE有效時,輸出烹調(diào)結(jié)束數(shù)據(jù)。當(dāng)LD_

14、CLK有效時,輸出烹調(diào)的設(shè)置時間數(shù)據(jù)。當(dāng)LD_TEST有效時,輸出數(shù)碼管測試數(shù)據(jù)--包括6個輸入信號和4個輸出信號。</p><p>  圖3 狀態(tài)控制電路模塊框圖</p><p>  根據(jù)微波爐工作流程的描述,分析狀態(tài)轉(zhuǎn)換條件及輸出信號,可以得到如圖4所示的微波爐控制器的狀態(tài)轉(zhuǎn)換圖。</p><p>  圖中,當(dāng)RESET信號有效時,系統(tǒng)復(fù)位清零;輸入/輸出對應(yīng)

15、烹調(diào)時間設(shè)置、顯示譯碼測試、完成信號顯示和減法計數(shù)定時四種狀態(tài)進(jìn)行相應(yīng)的轉(zhuǎn)換。</p><p>  2.2 數(shù)據(jù)裝載電路模塊</p><p>  數(shù)據(jù)裝載電路的本質(zhì)是一個三選一多路選擇器,其模塊框圖如圖5所示。</p><p>  圖5 數(shù)據(jù)裝載電路模塊框圖</p><p>  當(dāng)LD_DONE有效時,輸出烹調(diào)結(jié)束的信息數(shù)據(jù)數(shù)據(jù)。當(dāng)L_C

16、LK有效時,輸出烹調(diào)的設(shè)置時間數(shù)據(jù)。當(dāng)L_TEST有效時,輸出數(shù)碼管測試數(shù)據(jù)。LOAD信號為LD_DONE時DATEOUT輸出KEY有效指示。</p><p>  2.3 計時器模塊</p><p>  電路計時模塊可以由十進(jìn)制減法計數(shù)器和六進(jìn)制減法計數(shù)器級聯(lián)組成,其中,兩個十進(jìn)制的減法計數(shù)器用于分、秒的個位減法計數(shù),兩個六進(jìn)制的減法計數(shù)器用于分、秒的十位減法計數(shù)。由六進(jìn)制計數(shù)器和十進(jìn)制

17、計數(shù)器級聯(lián)構(gòu)成的計時模塊原理圖如圖6所示。</p><p>  圖6 計時器模塊原理圖</p><p>  計時器模塊的框圖如圖7所示。</p><p>  圖7 計時器模塊框圖</p><p>  LOAD有效時完成裝入功能,COOK(EN)有效時執(zhí)行減計數(shù);CLR由RESET發(fā)出信號,清除裝載已存的數(shù)據(jù);DONE返回給控制器,MIN和

18、SEC顯示所剩時間和測試狀態(tài)信息、烹調(diào)結(jié)束狀態(tài)信息等。</p><p>  三 程序設(shè)計及仿真</p><p>  3.1 程序簡要說明</p><p>  程序分為多個模塊進(jìn)行編寫,這樣既符合編程模塊化的要求也方便編寫和閱讀。按照以上功能和模塊分析,可以將程序劃分幾個模塊:狀態(tài)控制電路模塊controller、數(shù)據(jù)裝載電路模塊loader、計時器模塊coun

19、ter,其中計時器模塊又可以劃分2個模塊:十進(jìn)制功能編寫cnt10,6進(jìn)制功能編寫cnt6,一起完成計時功能。</p><p>  本次程序編寫調(diào)試軟件平臺是Quartus II 5.2。</p><p>  詳細(xì)的源程序可查看附錄二。</p><p>  3.2 仿真時序圖</p><p>  下面我們分別考察微波爐總的功能、計時器模塊和

20、數(shù)據(jù)裝載電路模塊的正確性(其他模塊的仿真略)。</p><p>  一、微波爐總的功能仿真</p><p>  微波爐總的功能仿真波形圖如下:</p><p>  圖8 微波爐總的功能仿真波形圖</p><p>  圖中,CLK是輸入脈沖,RESET復(fù)位,SET_T設(shè)置時間,KEY按鍵輸入,START開始計時,COOK正在烹飪,MIN和SE

21、C是時間顯示,LED2[1]是顯示設(shè)置時間信號,LED[0]是顯示烹飪時間信號。</p><p>  從仿真波形中可看出,按下RESET,所有信號復(fù)位為零,按下TEST,顯像管顯示8888,按下SET_T后KEY輸入有效,MIN和SEC顯示輸入值,KEY輸入完成并按下SET_T,表示設(shè)置時間完成,再按下START,開始烹飪并進(jìn)行減法計數(shù),MIN和SEC顯示剩余時間,此時輸出COOK變?yōu)楦唠娖健?lt;/p>

22、<p>  二、計時器模塊仿真波形</p><p>  計時器模塊仿真波形如下:</p><p>  圖9 計時器模塊仿真波形圖</p><p>  圖中,LOAD為高電平時讀取信號DATA的值,當(dāng)COOK信號為高電平時,對DATA的值進(jìn)行減法計數(shù),并在每個時鐘周期都輸出減法計數(shù)器的當(dāng)前值。仿真結(jié)果與預(yù)先設(shè)定的電路功能相吻合。</p>

23、<p><b>  四 硬件調(diào)試</b></p><p>  經(jīng)過軟件平臺上的編譯仿真,終于可以在硬件上進(jìn)行調(diào)試。本次試驗所用的硬件平臺是EDA試驗箱。在開發(fā)板上用到的第3個硬件模塊:4個七段數(shù)碼管、3個LED、8個按鍵。</p><p>  以下是模塊3的接線盒引腳分配:</p><p>  圖11 接線盒引腳分配</p&

24、gt;<p>  本次試驗為了觀察操作方便,數(shù)碼管用了第8、7、5、4個顯像管;LED分別用了D8、D7、D1;按鍵則8個全部使用。</p><p>  表2 對應(yīng)的鍵位功能</p><p>  表3 具體的引腳分配</p><p>  分配好引腳,下載程序到硬件之后就可以調(diào)試了。首先按下TEST,顯示8888則測試模式運行正常;按下SET_T設(shè)置

25、時間,LED[1]亮,再輸入所學(xué)要的時間,再次按下SET_T關(guān)閉設(shè)置時間,LED[1]滅;按下START,開始計時,LED[0]、COOK亮,當(dāng)時間回到0000時,燈全滅,完成試驗。</p><p><b>  總 結(jié)</b></p><p>  本次課程設(shè)計是微波爐控制器的FPGA實現(xiàn),微波爐控制器系統(tǒng)可由三個電路模塊組成:狀態(tài)控制電路模塊controller、數(shù)據(jù)

26、裝載電路模塊loader、計時器模塊counter。在QUARTUSII上進(jìn)行程序的編程、仿真,在編譯仿真通過后,最終在試驗箱調(diào)試成功,實現(xiàn)設(shè)計任務(wù)書所要求的指標(biāo)。</p><p>  本次課程設(shè)計從收集資料到完成論文共歷時2個星期。在課程設(shè)計期間,在溫習(xí)舊知識的同時,還學(xué)習(xí)了許多新的東西,把他們運用到這次設(shè)計中,加深了對之前學(xué)到的知識的理解。通過此次設(shè)計,我收獲了很多關(guān)于EDA技術(shù)與VHDL的知識。特別是QUA

27、RTUS II軟件的應(yīng)用,從安裝到使用,在到對在仿真時遇到問題的解決,明白了理論是完美的,而實際仿真是會有延時、毛刺等問題,所以在仿真是如何設(shè)置時鐘也是值得好好考慮的。同時此次設(shè)計使我的動手能力提高了許多,能夠讓我在設(shè)計電路時,自己來解決碰到的問題,學(xué)會了怎樣去分析電路,怎樣把所學(xué)到的知識和實際相起來。但是由于在很多方面都沒有經(jīng)驗,在設(shè)計中遇到了很多困難,今后將努力克服自己在完成課程設(shè)計過程中暴露出來的不足之處。</p>

28、<p><b>  參考文獻(xiàn)</b></p><p>  1. 潘松,黃繼業(yè). EDA技術(shù)實用教程(第二版)[M]. 北京:北京航空航天大學(xué)出版社,1990</p><p>  2. 劉欲曉,方強(qiáng),黃宛寧等.EDA技術(shù)與VHDL電路開發(fā)應(yīng)用實踐[M].北京:電子工業(yè)出版社,2009</p><p>  3. 譚會生,瞿遂春等.EDA技

29、術(shù)綜合應(yīng)用實例與分析[M].西安:西安電子科技大學(xué)出版社.2004.</p><p><b>  附錄一 原理圖</b></p><p><b>  附錄二 源程序</b></p><p>  ---------------------------------------------------------------

30、--------------------------- </p><p>  --狀態(tài)控制電路的VHDL實現(xiàn)如下:</p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p>

31、;<p>  USE IEEE.STD_LOGIC_ARITH.ALL;</p><p>  ENTITY controllor IS</p><p><b>  PORT(</b></p><p>  RESET:IN STD_LOGIC; --復(fù)位信號</p><p

32、>  KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--輸入時間</p><p>  SET_T:IN STD_LOGIC;--時間設(shè)置信號</p><p>  START:IN STD_LOGIC;--開始烹調(diào)信號</p><p>  TEST:IN STD_LOGIC;--顯示電路測試

33、信號</p><p>  CLK:IN STD_LOGIC; --時鐘脈沖</p><p>  DONE:IN STD_LOGIC;--完成信號</p><p>  COOK:OUT STD_LOGIC;--指示烹調(diào)狀態(tài),提示計時器開始計數(shù)</p><p>  LD_TEST:OUT STD_LOG

34、IC;--指示數(shù)據(jù)裝載電路載入的用于測試的數(shù)據(jù)</p><p>  LD_CLK:OUT STD_LOGIC; --指示數(shù)據(jù)裝載電路載入設(shè)置時間數(shù)據(jù)</p><p>  DATA:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--16位數(shù)據(jù)</p><p>  LED_SET_T:OUT STD_LOGIC; --LED顯示狀態(tài)<

35、/p><p>  LD_DONE:OUT STD_LOGIC --LED顯示完成</p><p><b>  );</b></p><p>  END controllor;</p><p>  ARCHITECTURE rtl OF controllor IS</p><p>  TYP

36、E STATES IS(IDLE,LAMP_TEST,SET_CLOCK,TIMER,DONE_MSG);</p><p>  SIGNAL NXT,CUR:STATES; --2個信號:下一狀態(tài)、當(dāng)前狀態(tài)</p><p>  SIGNAL DATATMP:STD_LOGIC_VECTOR(15 DOWNTO 0); </p><p>  SIGNAL SET

37、_T0: STD_LOGIC; --設(shè)置時間信號</p><p><b>  BEGIN </b></p><p>  PROCESS(CLK,RESET) --時鐘和復(fù)位的進(jìn)程</p><p><b>  BEGIN</b></p><p>  IF RESET='1'

38、 THEN --復(fù)位時將IDLE(顯示0000)賦予當(dāng)前狀態(tài)</p><p>  CUR<=IDLE;</p><p>  ELSIF CLK'EVENT AND CLK='1' THEN</p><p>  CUR<=NXT; --如果不是,遇到上邊沿則自動跳轉(zhuǎn)下一狀態(tài)</p><p

39、><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS(RESET,KEY) --復(fù)位和輸入的進(jìn)程</p><p>  BEGIN --可以讓輸入4位數(shù)字 顯示時間</p><p>  IF RESE

40、T = '1' THEN --復(fù)位時不論任何狀態(tài)數(shù)碼管都將顯示0000</p><p>  DATATMP <= (others => '0');</p><p><b>  ELSE</b></p><p>  IF KEY(3)'EVENT AND KEY(3) = '

41、;1' THEN --設(shè)置分的十位</p><p>  IF DATATMP(15 DOWNTO 12) = "0101" THEN --5自動跳轉(zhuǎn)到0</p><p>  DATATMP(15 DOWNTO 12) <= "0000";</p><p><b>  ELSE</b>

42、;</p><p>  DATATMP(15 DOWNTO 12) <= DATATMP(15 DOWNTO 12) + 1;</p><p>  END IF; --否則自動加1</p><p><b>  END IF;</b></p><p>

43、  IF KEY(2)'EVENT AND KEY(2) = '1' THEN --設(shè)置分的個位</p><p>  IF DATATMP(11 DOWNTO 8) = "1001" THEN --9自動跳轉(zhuǎn)到0</p><p>  DATATMP(11 DOWNTO 8) <= "0000"; &l

44、t;/p><p><b>  ELSE</b></p><p>  DATATMP(11 DOWNTO 8) <= DATATMP(11 DOWNTO 8) + 1;</p><p>  END IF; --否則自動加1</p><p><b&g

45、t;  END IF;</b></p><p>  IF KEY(1)'EVENT AND KEY(1) = '1' THEN --設(shè)置秒的十位</p><p>  IF DATATMP(7 DOWNTO 4) = "0101" THEN --5自動跳轉(zhuǎn)到0</p><p>  DATATMP

46、(7 DOWNTO 4) <= "0000";</p><p><b>  ELSE</b></p><p>  DATATMP(7 DOWNTO 4) <= DATATMP(7 DOWNTO 4) + 1;</p><p>  END IF;

47、--否則自動加1</p><p><b>  END IF;</b></p><p>  IF KEY(0)'EVENT AND KEY(0) = '1' THEN --設(shè)置秒的個位</p><p>  IF DATATMP(3 DOWNTO 0) = "1001" THEN --9

48、自動跳轉(zhuǎn)到0</p><p>  DATATMP(3 DOWNTO 0) <= "0000"; </p><p><b>  ELSE</b></p><p>  DATATMP(3 DOWNTO 0) <= DATATMP(3 DOWNTO 0) + 1;</p><p>

49、<b>  END IF;</b></p><p>  END IF; --否則自動加1</p><p><b>  END IF;</b></p><p>  DATA <= DATATMP;</p><p>  EN

50、D PROCESS; </p><p>  PROCESS(SET_T,RESET) --設(shè)置時間和復(fù)位進(jìn)程 </p><p><b>  BEGIN</b></p><p>  IF RESET = '1' THEN --復(fù)位時設(shè)置時間變?yōu)榈碗娖?lt;/p><p

51、>  SET_T0 <= '0'; </p><p>  ELSIF SET_T'EVENT AND SET_T = '1' THEN --按下SET_T鍵時</p><p>  SET_T0 <= NOT SET_T0; --SET_T非它前之狀態(tài)</p><p>  END IF;

52、</p><p>  IF SET_T0 = '1' THEN </p><p>  LED_SET_T <= '1'; --賦予SET_T持續(xù)電平</p><p><b>  ELSE </b></p><p>  LED_SET_T <

53、= '0'; --賦予SET_T持續(xù)電平</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p>  PROCESS(CLK,CUR,SET_T,START,TEST,DONE) IS</p><p><b>  BE

54、GIN</b></p><p>  NXT<=IDLE; --將IDLE載入NXT</p><p>  LD_TEST<='0'; --復(fù)位</p><p>  LD_DONE<='0';</p><p>  LD_CL

55、K<='0';</p><p>  COOK<='0';</p><p>  CASE CUR IS</p><p>  WHEN LAMP_TEST=> --譯碼器顯示測試狀態(tài)</p><p>  LD_TEST<='1';</p>&l

56、t;p>  COOK<='0';</p><p>  WHEN SET_CLOCK=> --烹調(diào)時間測試狀態(tài)</p><p>  LD_CLK<='1';</p><p>  COOK<='0';</p><p>  WHEN DONE_MSG=&

57、gt; --完成信息顯示狀態(tài)</p><p>  LD_DONE<='0';</p><p>  COOK<='0'; </p><p>  WHEN IDLE=> --初始狀態(tài)定義</p><p>  IF TEST='1'

58、 THEN</p><p>  NXT<=LAMP_TEST; --設(shè)置TEST</p><p>  LD_TEST<='1';</p><p>  ELSIF SET_T0='1' THEN --設(shè)置 SET_T</p><p>  NXT<=SET_CLOCK;

59、 </p><p>  LD_CLK<='1';</p><p>  ELSIF START='1' AND DONE='0' THEN --設(shè)置計時模式</p><p>  NXT<=TIMER;</p><p>  COOK<='1';<

60、/p><p><b>  END IF;</b></p><p>  WHEN TIMER=> </p><p>  IF DONE='1' THEN --設(shè)置計時完成</p><p>  NXT<=DONE_MSG; &

61、lt;/p><p>  LD_DONE<='0';</p><p><b>  ELSE</b></p><p>  NXT<=TIMER;</p><p>  COOK<='1';</p><p><b>  END IF;</b&g

62、t;</p><p>  -- WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p>  END PROCESS;</p><p><b>  END rtl;</b></p><p>  ------------

63、--------------------------------------------------------------------------</p><p>  --數(shù)據(jù)裝載電路的VHDL實現(xiàn)如下:</p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p&

64、gt;  USE IEEE.STD_LOGIC_ARITH.ALL;</p><p>  ENTITY loader IS</p><p><b>  PORT(</b></p><p>  DATAIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0); --輸入16位數(shù)據(jù)</p><p>  LD_T

65、EST:IN STD_LOGIC;</p><p>  LD_CLK:IN STD_LOGIC;</p><p>  LD_DONE:IN STD_LOGIC;</p><p>  DATAOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0); --輸出16位數(shù)據(jù)</p><p>  LOAD:OUT STD_LOGIC

66、 --選擇狀態(tài)</p><p><b>  );</b></p><p>  END loader;</p><p>  ARCHITECTURE rtl OF loader IS</p><p><b>  BEGIN</b></p>

67、<p>  PROCESS(DATAIN,LD_TEST,LD_CLK,LD_DONE)</p><p>  CONSTANT ALLS:STD_LOGIC_VECTOR(15 DOWNTO 0)--測試信息</p><p>  :="1000100010001000"; --顯示8888</p><p>  CONST

68、ANT DONE:STD_LOGIC_VECTOR(15 DOWNTO 0)--烹調(diào)完成信息</p><p>  :="1010101111001101";</p><p>  VARIABLE TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0);</p><p><b>  BEGIN</b></p&

69、gt;<p>  LOAD<=LD_TEST OR LD_DONE OR LD_CLK; --三選一狀態(tài)</p><p>  TEMP:=LD_TEST&LD_DONE&LD_CLK; --中間變量定義</p><p>  CASE TEMP IS</p><p>  WHEN"100&quo

70、t;=>--測試</p><p>  DATAOUT<=ALLS;</p><p>  WHEN"010"=>--烹調(diào)完成</p><p>  DATAOUT<=DONE;</p><p>  WHEN"001"=></p><p>  DATAOU

71、T<=DATAIN;</p><p>  WHEN OTHERS=>NULL;</p><p><b>  END CASE;</b></p><p>  END PROCESS;</p><p><b>  END rtl;</b></p><p>  ----

72、----------------------------------------------------------------------------------------------</p><p><b>  --十進(jìn)制計數(shù)器</b></p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGI

73、C_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  ENTITY cnt10 IS</p><p><b>  PORT(</b></p><p>  CLK:IN STD_LOGIC;</p><p>  LOAD,C

74、LR:IN STD_LOGIC; --CLR:清除數(shù)據(jù)</p><p>  EN:IN STD_LOGIC; --信號使能</p><p>  DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --輸入的4位數(shù)據(jù) </p><p>  Q:OUT STD

75、_LOGIC_VECTOR(3 DOWNTO 0); --輸出的4位數(shù)據(jù)</p><p>  CARRY_OUT:OUT STD_LOGIC --數(shù)據(jù)裝載</p><p><b>  );</b></p><p>  END cnt10;</p><p>  ARCHITECTURE rtl

76、 OF cnt10 IS </p><p>  SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); --鏈接輸入輸出</p><p>  BEGIN --數(shù)據(jù)的信號</p><p>  PROCESS(CLK,LOAD,CL

77、R,EN)</p><p><b>  BEGIN</b></p><p>  IF CLR = '1' THEN --當(dāng)CLR高電平,數(shù)據(jù)變?yōu)?000</p><p>  TMP<= "0000";</p><p>  ELSIF LOAD=&#

78、39;1'THEN --否則裝載輸入的數(shù)據(jù)</p><p>  TMP<=DATAIN;</p><p>  ELSIF CLK'EVENT AND CLK='0'THEN --上升沿時,執(zhí)行10進(jìn)制減法</p><p>  IF EN='1'THEN

79、 </p><p>  IF TMP="0000"THEN --0跳轉(zhuǎn)到9</p><p>  TMP<="1001"; </p><p>  ELSE --自動減1</p><p>  TMP<=TM

80、P-'1';</p><p>  END IF; </p><p><b>  END IF;</b></p><p><b>  END IF;</b></p><p>  IF TMP="0000"THEN</p><p> 

81、 CARRY_OUT<='1'; --COOK<=CARRY_OUT</p><p><b>  ELSE</b></p><p>  CARRY_OUT<='0';</p><p><b>  END IF; </b></p><p&

82、gt;  END PROCESS;</p><p><b>  Q<=TMP;</b></p><p><b>  END rtl;</b></p><p>  ------------------------------------------------------------------------------

83、--------------------</p><p>  --六進(jìn)制減法計數(shù)器</p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p>  EN

84、TITY cnt6 IS</p><p><b>  PORT(</b></p><p>  CLK:IN STD_LOGIC;</p><p>  LOAD,CLR:IN STD_LOGIC;</p><p>  EN:IN STD_LOGIC;</p><p>  DATAIN:IN STD_

85、LOGIC_VECTOR(3 DOWNTO 0);</p><p>  Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  CARRY_OUT:OUT STD_LOGIC</p><p><b>  );</b></p><p><b>  END cnt6;</b

86、></p><p>  ARCHITECTURE rtl OF cnt6 IS</p><p>  SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b>  BEGIN</b></p><p>  PROCESS(CLK,LOAD,CLR,EN)</p>

87、;<p><b>  BEGIN</b></p><p>  IF CLR = '1' THEN</p><p>  TMP<= "0000";</p><p>  ELSIF LOAD='1' THEN</p><p>  TMP<=DATA

88、IN;</p><p>  ELSIF CLK'EVENT AND CLK='0'THEN --上升沿時進(jìn)行6進(jìn)制減法</p><p>  IF EN='1'THEN</p><p>  IF TMP="0000"THEN --0自動跳轉(zhuǎn)到5</p><p&g

89、t;  TMP<="0101";</p><p><b>  ELSE</b></p><p>  TMP<=TMP-'1'; --否則自動減1</p><p><b>  END IF;</b></p><p><b&g

90、t;  END IF;</b></p><p><b>  END IF;</b></p><p>  IF TMP="0000"THEN</p><p>  CARRY_OUT<='1'; --賦值給COOK</p><p><b>

91、;  ELSE</b></p><p>  CARRY_OUT<='0';</p><p><b>  END IF;</b></p><p>  END PROCESS;</p><p><b>  Q<=TMP;</b></p><p&

92、gt;<b>  END rtl;</b></p><p>  --------------------------------------------------------------------------------------------------</p><p>  --計時電路的VHDL實現(xiàn)如下:</p><p>  --計數(shù)器

93、電路模塊設(shè)計</p><p>  LIBRARY IEEE;</p><p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  ENTITY counter IS</p><p><b>  PORT(</b></p><p>  COOK:IN STD_LOGIC

94、;</p><p>  LOAD,CLR:IN STD_LOGIC;</p><p>  CLK:IN STD_LOGIC;</p><p>  DATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p>  SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --秒個位</

95、p><p>  SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --秒十位</p><p>  MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --分個位</p><p>  MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --分十位</p><p>

96、  DONE:OUT STD_LOGIC --完成</p><p><b>  );</b></p><p>  END counter;</p><p>  ARCHITECTURE rtl OF counter IS</p><p>  --定義十進(jìn)制和六進(jìn)制計數(shù)器電路模

97、塊</p><p>  COMPONENT cnt10 IS</p><p><b>  PORT(</b></p><p>  CLK:IN STD_LOGIC;</p><p>  LOAD,CLR:IN STD_LOGIC;</p><p>  EN:IN STD_LOGIC;</p&

98、gt;<p>  DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --輸入</p><p>  Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --輸出</p><p>  CARRY_OUT:OUT STD_LOGIC --狀態(tài)</p><p>

99、;<b>  );</b></p><p>  END COMPONENT cnt10;</p><p>  COMPONENT cnt6 IS</p><p><b>  PORT(</b></p><p>  CLK:IN STD_LOGIC;</p><p>  LOA

100、D,CLR:IN STD_LOGIC;</p><p>  EN:IN STD_LOGIC;</p><p>  DATAIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  CARRY_OUT:OUT STD_L

101、OGIC</p><p><b>  );</b></p><p>  END COMPONENT cnt6;</p><p>  SIGNAL CLK0:STD_LOGIC;</p><p>  SIGNAL S0:STD_LOGIC;</p><p>  SIGNAL S1:STD_LOGIC

102、;</p><p>  SIGNAL S2:STD_LOGIC;</p><p>  SIGNAL S3:STD_LOGIC;</p><p><b>  BEGIN</b></p><p><b>  --元件例化</b></p><p>  CLK0 <= NOT

103、CLK;</p><p>  U1:cnt10 PORT MAP(CLK0,LOAD,CLR,COOK,DATA(3 DOWNTO 0),SEC0,S0);</p><p>  U2:cnt6 PORT MAP(S0,LOAD,CLR,COOK,DATA(7 DOWNTO 4),SEC1,S1);</p><p>  U3:cnt10 PORT MAP(S1,LOA

104、D,CLR,COOK,DATA(11 DOWNTO 8),MIN0,S2);</p><p>  U4:cnt6 PORT MAP(S2,LOAD,CLR,COOK,DATA(15 DOWNTO 12),MIN1,S3);</p><p>  DONE<=S0 AND S1 AND S2 AND S3;</p><p><b>  END rtl;&

105、lt;/b></p><p>  --------------------------------------------------------------------------------------------------</p><p>  --頂層模塊的VHDL實現(xiàn)如下:</p><p>  LIBRARY IEEE;</p><

106、;p>  USE IEEE.STD_LOGIC_1164.ALL;</p><p>  ENTITY top IS</p><p><b>  PORT(</b></p><p>  KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --輸入4位16進(jìn)制</p><p>  RESET

107、:IN STD_LOGIC; --復(fù)位鍵</p><p>  SET_T:IN STD_LOGIC; --設(shè)置時間</p><p>  START:IN STD_LOGIC; --開始計時</p><p>  TEST:IN STD_LOGIC; --測試模式</p><p>  CLK :IN STD_LOG

108、IC; --輸入脈沖</p><p>  COOK:OUT STD_LOGIC; --烹調(diào)狀態(tài)</p><p>  LED2:OUT STD_LOGIC_VECTOR(1 DOWNTO 0); --LED顯示狀態(tài)</p><p>  SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>

109、;  SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); </p><p>  MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); </p><p>  MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0) </p><p><b>  );</b></

110、p><p><b>  END top;</b></p><p>  ARCHITECTURE rtl OF top IS</p><p>  --定義狀態(tài)控制電路模塊</p><p>  COMPONENT controllor IS</p><p><b>  PORT(</b&g

111、t;</p><p>  RESET:IN STD_LOGIC;</p><p>  KEY: IN STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  SET_T:IN STD_LOGIC;</p><p>  START:IN STD_LOGIC;</p><p>  TEST:IN S

112、TD_LOGIC;</p><p>  CLK :IN STD_LOGIC;</p><p>  DONE:IN STD_LOGIC;</p><p>  COOK:OUT STD_LOGIC;</p><p>  LD_TEST:OUT STD_LOGIC;</p><p>  LD_CLK:OUT STD_LOGI

113、C;</p><p>  DATA:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p>  LED_SET_T:OUT STD_LOGIC;</p><p>  LD_DONE:OUT STD_LOGIC</p><p><b>  );</b></p><p>

114、  END COMPONENT controllor;</p><p>  --定義數(shù)據(jù)裝載電路模塊</p><p>  COMPONENT loader IS</p><p><b>  PORT(</b></p><p>  DATAIN:IN STD_LOGIC_VECTOR(15 DOWNTO 0);</p

115、><p>  LD_TEST:IN STD_LOGIC;</p><p>  LD_CLK:IN STD_LOGIC;</p><p>  LD_DONE:IN STD_LOGIC;</p><p>  DATAOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p>  LOAD:OU

116、T STD_LOGIC);</p><p>  END COMPONENT loader;</p><p>  --定義計時電路模塊</p><p>  COMPONENT counter IS</p><p>  PORT( </p><p>  COOK:IN STD_LOGIC;</p>

117、<p>  LOAD,CLR:STD_LOGIC;</p><p>  CLK:IN STD_LOGIC;</p><p>  DATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0);</p><p>  SEC0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  SEC1

118、:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  MIN0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p>  DONE:OUT STD_LOGIC</p><p>&l

119、t;b>  );</b></p><p>  END COMPONENT counter;</p><p>  SIGNAL COOK_TMP:STD_LOGIC;</p><p>  SIGNAL TEST_TMP:STD_LOGIC;</p><p>  SIGNAL CLK_TMP:STD_LOGIC;</p&g

120、t;<p>  SIGNAL DONE_TMP:STD_LOGIC;</p><p>  SIGNAL LOAD_TMP:STD_LOGIC;</p><p>  SIGNAL DONE:STD_LOGIC;</p><p>  SIGNAL DATA_TMP,DATA_TMP1:STD_LOGIC_VECTOR(15 DOWNTO 0);</p

121、><p><b>  BEGIN</b></p><p>  COOK<=COOK_TMP;</p><p>  LED2(0)<=COOK_TMP;</p><p><b>  --電路模塊例化</b></p><p>  U1:controllor PORT MA

122、P(RESET,KEY,SET_T,START,TEST,CLK,DONE,COOK_TMP,</p><p>  TEST_TMP,CLK_TMP,DATA_TMP1,LED2(1),DONE_TMP);</p><p>  U2:loader PORT MAP(DATA_TMP1,TEST_TMP,CLK_TMP,DONE_TMP,DATA_TMP,</p><p&

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論