版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- eda課程設(shè)計---微波爐定時控制器
- eda課程設(shè)計---微波爐定時控制器的設(shè)置
- vhdl微波爐控制器課程設(shè)計-- 數(shù)字微波爐控制器
- eda綜合課程設(shè)計報告-----微波爐定時控制器的設(shè)計
- 課程設(shè)計---vhdl設(shè)計微波爐控制器
- eda課程設(shè)計—微波爐定時設(shè)計
- 課程設(shè)計---基于fpga的微波爐控制器設(shè)計
- 數(shù)字電路課程設(shè)計微波爐控制器
- 微波爐課程設(shè)計---基于微波爐控制系統(tǒng)設(shè)計
- 數(shù)電課程設(shè)計--微波爐定時控制器的設(shè)計與制作
- 微波爐控制器論文
- 基于fpga的微波爐控制器設(shè)計
- 畢業(yè)設(shè)計--微波爐控制器系統(tǒng)
- 可編程微波爐控制器系統(tǒng)設(shè)計
- 簡易微波爐控制器的設(shè)計與實現(xiàn)
- eda課程設(shè)計--電梯控制器設(shè)計
- eda課程設(shè)計---彩燈控制器
- 開題報告---基于fpga的微波爐控制器設(shè)計
- 畢業(yè)設(shè)計---可編程微波爐控制器設(shè)計
- eda課程設(shè)計--電梯控制器設(shè)計
評論
0/150
提交評論