




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)字電路與邏輯設計綜合實驗簡易電磁爐控制器學 院:信息與通信工程學院 學生姓名: 班 級: 學 號: 班內序號:1、 摘要(150左右)與關鍵字(5個以內)摘要:電磁爐的設計中包含11個模塊:模式調節(jié),火力調節(jié),時間模塊,倒計時模塊,關閉模塊,點陣顯示,數(shù)碼管顯示,分頻器,防抖模塊,蜂鳴器模塊以及擴展模塊的進度條模塊,每個模塊既可獨立編寫、仿真測試,又可在VHDL中將模塊封裝后,通過它們之間的控制關系進行連接,實現(xiàn)基本的電磁爐的功能。關鍵字:模式調節(jié) 火力調節(jié) 時間模塊 倒計時模塊 狀態(tài)機2、 設計任務要求 題目一:簡易電磁爐控制器的設計與實現(xiàn) 設計制作一個簡易電磁爐控制器?;疽螅?1 、
2、烹飪模式選擇:電磁爐的烹飪模式有火鍋、煎炒、爆炒、煲湯和蒸燉五檔可選。用一個按鍵(BTN7)實現(xiàn)烹飪檔位的選擇(按下此鍵依上述順序依次變化),用點陣顯示當前的烹調檔位(火鍋顯示H、煎炒顯示J、爆炒顯示B 、煲湯顯示T 和蒸燉顯示Z),烹調檔位的選擇按鍵同時也是加熱的開始按鍵,即烹調檔位選定的同時電磁爐就以最大功率開始加熱,沒有選擇時電磁爐處于停止狀態(tài),點陣不顯示。 2 、火力調節(jié):電磁爐的火力分 5 檔可調: 1900W-1500W-1100W-600W-100W,用數(shù)碼管DISP3-DISP0 顯示當前的火力,用兩個按鍵(BTN6 和BTN5)實現(xiàn)火力的增加或減少,烹調過程中,除爆炒模式外,
3、其它模式均可以隨時可以調節(jié)火力,爆炒模式只能以最高功率加熱。 3 、定時功能:用一個按鍵(BTN4)實現(xiàn)定時設置,按下定時鍵,蜂鳴器響一聲,每按一次定時鍵,定時時間以5-10-30-60 秒鐘的順序依次遞增,定時設定完畢后,電磁爐開始倒計時。用數(shù)碼管 DISP5 和DISP4 顯示定時檔位和倒計時的過程,倒計時時間到后,電磁爐自動停止加熱并關機。 4 、不進行定時操作時,電磁爐以默認加熱時間進行加熱。蒸燉模式的默認時間為 20秒鐘;爆炒模式的默認時間是3 秒鐘,爆炒3 秒鐘后自動返回煎炒模式;其他模式的默認時間為90 秒。 5 、用點亮的發(fā)光二極管LD4 表示開機加熱,熄滅表示關機。 6 、設
4、置關閉鍵,任何時候按下關閉鍵即可將電磁爐關機。 提高要求: 自擬其它功能。3、 設計思路、總體結構框圖設計思路:首先確定該實驗的功能,經過仔細分析后將該實驗分為11個模塊:模式調節(jié),火力調節(jié),時間模塊,倒計時模塊,關閉模塊,點陣顯示,數(shù)碼管顯示,分頻器,防抖模塊,蜂鳴器模塊以及擴展模塊的進度條模塊,各個模塊的功能的實現(xiàn)方法以及之間的聯(lián)系如下:1.模式調節(jié):6個狀態(tài)的狀態(tài)機,其中5個為循環(huán)狀態(tài)機C->H->J->B->T->Z->H,C狀態(tài)為啟動循環(huán)而不參與循環(huán);當有時間模塊傳來的timecontrol信號,爆炒模式B反向轉換為煎炒模式J。2.火力調節(jié):5個狀
5、態(tài)的狀態(tài)機,1900<->1500<->1100<->600<->100;當有模式調節(jié)傳來的state2.0為爆炒模式B時,則狀態(tài)機不起作用,輸出只能為1900。3.時間模塊:包含定時和不定時功能。系統(tǒng)默認為不定時計時,不同模式系統(tǒng)默認時間不同;當接受有外部按鍵信號BTN4時,通過二選一數(shù)據(jù)選擇更改為定時計時,且不能返回不定時計時,包含5個狀態(tài),其中4個為循環(huán)狀態(tài)機s0->s5->s10->s30->s60->s5,C狀態(tài)為啟動循環(huán)而不參與循環(huán)。兩種計時方法均計時完畢發(fā)出close信號關機。4.倒計時模塊:將時間模塊
6、傳來的剩余時間顯示在數(shù)碼管上,需要時間模塊傳來的剩余時間lefttime信號。5.關閉模塊:當接受有外部按鍵信號即模式調節(jié)按鍵BTN7,系統(tǒng)則由關閉狀態(tài)轉換為開機狀態(tài);當接受到時間模塊發(fā)出的計數(shù)完畢信號close或者外部關閉按鍵BTN3,則close模塊產生復位信號reset,關閉所有模塊。6.點陣顯示:將模式調節(jié)的5個字母H、J、B、T、Z進行顯示,通過逐行掃描點陣顯示字母。7.數(shù)碼管顯示:顯示火力調節(jié)的功率以及倒計時的時間,通過逐個選通CAT0CAT5來實現(xiàn)。8.分頻器:將實驗板的本振頻率50MHz經過多級分頻得到1kHz和100kHz。9.防抖模塊:通過設計代碼,將外部按鍵信號轉換為一個
7、標準的脈沖,此模塊置于每個包含有外部按鍵的模塊之前。10.蜂鳴器模塊:當有外部按鍵BTN4時,即啟動定時模塊時,啟動蜂鳴器,且蜂鳴的時間由一個計數(shù)統(tǒng)計上升沿的個數(shù),達到一定個數(shù)(10個)蜂鳴結束。11.進度條模塊:倒計時開始時將8個LED燈均點亮,通過時間模塊的剩余時間lefttime計算LED燈點亮的個數(shù)。 當所有模塊分析清楚后,逐個編寫每個部分的代碼,編譯成功后并測試單個模塊的仿真波形,逐個下到實驗板進行測試;如果下載到實驗板不能完成功能,修改思路,重新編寫本塊代碼,重新調試;當所有模塊均能實現(xiàn)功能后,通過設計中各個模塊之間的信號聯(lián)系,將模塊封裝后進行連線,最終完成實驗??傮w結構框圖:4、
8、 控制器部分的狀態(tài)轉移圖和流程圖狀態(tài)轉移圖:1. 模式調節(jié)2. 火力調節(jié)3. 時間模塊流程圖:5、 分塊電路和總體電路的設計(含關鍵源程序或電路圖)主要的分塊電路:1. 時間模塊:包含不定時功能與定時功能(1) 系統(tǒng)默認的為不定時功能,即ordercontrol初始選擇不定時norder模塊;當有外部按鍵BTN4輸入信號時,ordercontrol選擇定時order模塊,且改變只能一次,不能返回,直到計時結束關機;(2) 在選擇功能時,如果有外部關閉按鍵BTN3的復位信號reset輸入或者計時完畢時,則輸出復位,且將ordercontrol重新初始化為norder狀態(tài);(3) 將輸出的時間交付
9、給倒計時模塊count。 程序:ordercontrol.vhd architecture behave of ordercontrol issignal mask:std_logic:='0'beginprocess(clk1kHz)begin if clk1kHz'event and clk1kHz ='1' then if reset = '1' then resetorder<='1'resetnorder<='0' end if; if orderinput = '1'
10、 then resetorder<='0'resetnorder<='1' end if; orderset<=orderinput; end if;end process;end behave;2. 倒計時模塊:顯示倒計時且使用頻率時鐘1kHz,需要進行轉換leftimetemp/1000=leftime,且將leftimetemp信號輸出給進度條模塊(1) ordercontrol是用來判斷時間模塊的時間改變時,計數(shù)是否要重新開始;(2) decount的功能是用來輸出剩余時間,由于計時使用頻率時鐘1Hz會產生較大的延時,故采用頻率時鐘1k
11、Hz。對時鐘的下降沿計數(shù)timecount,用總的時間*1000減去計數(shù)值timecount,則得到倒計時剩余的脈沖數(shù);如果想得到時間,則需要leftimetemp/1000轉換成真正的剩余時間leftime;(3) 將剩余時間leftime輸出給div模塊,整除后輸出給十位,取余后輸出給個位。(4) 將剩余的脈沖數(shù)leftimetemp輸出給進度條模塊,由于進度條模塊也采用頻率時鐘1kHz計時,且也需要倒計時,則可同時與倒計時模塊共用leftimetemp。(5) 有一種特殊情況,當模式為爆炒模式B時,系統(tǒng)默認時間為3s,倒計時完畢后系統(tǒng)不關閉,而是轉入煎炒模式J,繼續(xù)倒計時90s后才能關閉
12、。程序:decount.vhdarchitecture behave of decount isbeginprocess(clk1kHz)variable timecount:integer range 0 to 90000;variable timesetemp:integer range 0 to 90;variable mask:std_logic:='0'beginif clk1kHz'event and clk1kHz='0' then if mask ='0' then timesetemp:=timeset;mask:=
13、39;1'timecount:=0; end if; timecontrol<='0' timecount:=timecount+1; leftimetemp<=timesetemp*1000-timecount; leftime<=timesetemp-timecount / 1000; if reset='1' then mask:='0' timecount:=0; leftime<=timeset; leftimetemp<=timeset*1000; timesetemp:=timeset; end
14、 if; if timecount>= timesetemp*1000 then if timesetemp =3 then close<='0' timecontrol<='1' else close<='1' end if; else close<='0' end if; if timesetemp = 0 then close<='0' leftime<=0;leftimetemp<=0; end if;end if;end process;end behave
15、;3. 數(shù)碼管顯示模塊:循環(huán)選通6個數(shù)碼管進行掃頻,通過驅動數(shù)碼管的7個段進行顯示(1) count6是產生循環(huán)的6個數(shù),來循環(huán)選通6個數(shù)碼管,當掃頻頻率足夠大的時候,則由于人眼的視覺暫留,觀察到的數(shù)字為同時顯示;(2) L24xuan4c是每次選出一組數(shù)進行譯碼,即每次只能顯示一個數(shù)字;(3) dec7s為7段數(shù)碼管驅動電路,將譯碼的結果驅動7個段,顯示出一個數(shù)字。4. 進度條模塊:進度條是將總體時間分為8份,每倒計時消耗一個step則熄滅一個燈。(1) 選用時鐘頻率1kHz,因為1Hz計時3s無法平均分成8份;(2) 使用來自倒計時模塊的leftimetemp,leftimetemp/8為
16、真正的時間,隨時獲得剩余時間進行顯示。程序:process(clk1kHz)variable countdiv:integer range 0 to 90000;variable k:integer range 0 to 90000;beginif(reset='1')thenk:=0;temp<=leftimetemp; if(clk1kHz'event and clk1kHz='1') then k:=k+1;countdiv:=leftimetemp/8;IF countdiv /= 0 THEN IF k > 8*countdiv o
17、r k = 8*countdiv THENlight <="00000000"ELSIF ( k > 7*countdiv AND k < 8*countdiv) OR k = 7*countdiv THENlight <="00000001"ELSIF ( k > 6*countdiv AND k < 7*countdiv) OR k = 6*countdiv THENlight <="00000011"ELSIF ( k > 5*countdiv AND k < 6*count
18、div) OR k = 5*countdiv THEN light <="00000111"ELSIF ( k > 4*countdiv AND k < 5*countdiv) OR k = 4*countdiv THENlight <="00001111"ELSIF ( k > 3*countdiv AND k < 4*countdiv) OR k = 3*countdiv THENlight <="00011111"ELSIF ( k > 2*countdiv AND k <
19、3*countdiv) OR k = 2*countdiv THENlight <="00111111"ELSIF ( k > countdiv AND k < 2*countdiv) OR k = countdiv THENlight <="01111111"ELSIF ( k > 0 AND k < countdiv) OR k = 0 THENlight <="11111111"END IF;ELSE light <="00000000"END IF;END I
20、F;end if;end process;總體電路:通過各模塊之間的聯(lián)系,將封裝好后的模塊上端口均連接上,實現(xiàn)模塊的組裝6、 所實現(xiàn)功能說明(已完成的基本功能和擴展功能,器件的資源占用情況,關鍵波形仿真圖,必要的測試方法等);基本功能與擴展功能:1. 基本功能:已完成題目所給的所有實驗要求,能實現(xiàn)烹飪模式的選擇、火力調節(jié)、定時功能、不定時功能、蜂鳴器、關閉鍵以及所有的特殊情況2. 擴展功能:完成了進度條的設計,即倒計時點亮8個LED燈,隨著時間的減少,8個燈均勻熄滅,倒計時結束同時關閉所有的LED燈。器件資源占用情況:1. 由于在倒計時模塊使用時鐘頻率1kHz,使得定義計數(shù)時鐘的上升沿的變量為
21、variable timecount:integer range 0 to 90000,且多次使用該變量導致邏輯單元logic elements占用的比重為80%;2. 由于電磁爐的實驗功能比較多且瑣碎,故采用“從上而下”的設計思路,于是模塊使用比較多且每個模塊功能比較少,便于調試;但也使pins的總量占用了38%。關鍵波形仿真圖:1. 模式調節(jié)模塊:說明:當有外部按鍵信號modecontrol輸入,狀態(tài)機的循環(huán)為0->1->2->3->4->5->1->2.;當有時間模塊傳來的信號timecontrol,使爆炒模式B(仿真波形中的3)模式反向轉換為煎
22、炒模式J(仿真波形中的2);當輸入關閉信號reset信號時,狀態(tài)信號state復位為close狀態(tài)(仿真波形中的0)。2. 火力調節(jié)模塊:說明:循環(huán)狀態(tài)機的循環(huán)模式為1900<->1500<->1100<->600<->100;當外部按鍵輸入up信號,由于初始狀態(tài)為1900w,故輸出不會增加,維持在1900w;當外部按鍵輸入down信號,會變?yōu)?500w;依次類推,up信號控制增加,down信號控制減少,本質是控制循環(huán)狀態(tài)機轉移的方向。3. 倒計時模塊:說明:設置輸入的倒計時時間為16s,倒計時完畢后輸出關閉信號close為“1”,即系統(tǒng)關閉;當
23、輸入reset開啟信號后,時間置位為最初的倒計時時間,開始進行倒計時。4. 數(shù)碼管模塊:說明:當輸入6個數(shù)給6個數(shù)碼管顯示器,經過譯碼后,輸出為7段數(shù)碼管驅動的組合碼。5. 點陣模塊:說明:經過行、列的掃描,實現(xiàn)一個周期的顯示碼字;當co為1時,完成了一個周期,繼續(xù)掃描下一周期。6. 關閉模塊:說明:當openinput信號輸入時,整個程序開啟;當任何一個關閉信號(closeinput1或closeinput2)輸入時,則關閉整個系統(tǒng);當再次輸入openinput信號時,程序會被再次重新開啟。7. 蜂鳴器模塊:說明:當定時信號order輸入時,則output計時10個脈沖,即蜂鳴器發(fā)出響聲的時
24、間10ms;再次輸出定時信號order,蜂鳴器會再次計數(shù)、發(fā)出響聲;在此過程中,只要有reset輸入,就將所有的值復位。必要的測試方法:1. 分模塊編寫,編譯,通過后進行下一步驟;2. 仿真,觀察仿真波形的正確性,正確后進行下一步驟;3. 下載到實驗板進行調試,檢驗是否完成了設計的功能,如果需要其他模塊的信號,則通過其他實驗板上的按鍵替代。7、 故障及問題分析1.時鐘選擇導致延時問題:在最初設計時選擇時鐘頻率1kHz,100Hz,1Hz,系統(tǒng)的各個模塊使用時鐘頻率1kHz,防抖模塊使用時鐘頻率100Hz,倒計時模塊則使用時鐘頻率1Hz;在設計倒計時模塊時,由于時鐘頻率為1Hz時倒計時正好以1s
25、為單位,滿足實際需求。然后設計好代碼后會得到下面的仿真波形(由于仿真時使用1Hz會使仿真時間很久,故仿真時選用了1kHz,不影響觀測結果),在開始兩個時間周期內倒計時還沒有開始,所以這種設計方案會有延時缺陷;在通過思考之后,決定采用時鐘頻率1kHz取代時鐘頻率1Hz,使得時鐘沿分的更細一些,整個系統(tǒng)更加靈敏,產生的延時很小,人眼幾乎察覺不出來。正確的代碼原理以及仿真波形已在第五模塊、第六模塊已闡述,這里不再贅述。具有延時的仿真波形:具有延時的倒計時代碼:architecture behave of decount isbeginprocess(clk1Hz)variable timecount
26、:integer range 0 to 90;variable timesetemp:integer range 0 to 90;beginif clk1Hz'event and clk1Hz='0' then timecontrol<='0' timecount:=timecount+1; leftime<=timesetemp-timecount; if reset='1' then timecount:=0; timesetemp:=timeset; leftime<=timesetemp; end if; if
27、timecount>= timesetemp then if timesetemp =3 then close<='0' timecontrol<='1' else close<='1' end if; else close<='0' end if; if timesetemp = 0 then close<='0' leftime<=0; end if;end if;end process;end behave;2.擴展功能進度條的設計問題:最開始的設計思路是將倒計時的時
28、間平均分成8份,每計時完一個step后熄滅一個燈;然而比較棘手的問題是在本次實驗中使用的倒計時時間含3s,無法進行分時。綜合這一問題倒計時中的問題,故同時也時鐘頻率1kHz,即將3*1000個時鐘沿,這樣就可以平均分成8份,且計時精準。正確代碼已在第五模塊寫出,這里不再贅述。3.資源占用溢出問題:在倒計時模塊和進度條模塊修正了時鐘頻率1kHz后,使用的變量所占用的邏輯單元約為原來的10倍(),故整體編譯邏輯單元logic elements溢出,由于兩個模塊之間的聯(lián)系很密切,故讓兩個模塊共享leftime和leftimetmp等變量,減少資源的占用。8、 總結和結論為期4周的實驗結束了,在這個過
29、程中收獲了很多,學會了團隊合作、VHDL、縝密的設計思路等,付出了很多,經驗受益終身。最開始選題的時候,組員們都希望做一些比較有挑戰(zhàn)性、有意思的題目,大家一致選擇了第一個題目電磁爐的設計。在最開始設計的時候,花了近3個小時構思整體的結構框圖,研究題目所表達的意思以及現(xiàn)實使用的會有的不同情況,設計的時候使用模塊劃分,最后的成果也是清晰地模塊的功能劃分,每個模塊需要的輸入信號和輸出信號在模塊設計上標注,連接總圖的時候思路就非常清晰,故主要的任務就是設計調試好每個模塊的功能。設計好整體框圖后,開始寫各個部分的代碼。分頻器,防抖,狀態(tài)機,數(shù)碼管,點陣編寫的比較順利,參考的書籍比較多;主要的倒計時模塊比
30、較繁瑣,開始時將每一個倒計時時間分別單自寫一個工程,整理代碼的時候覺得代碼利用率很低,資源占用比較大,最后改進了倒計時模塊,主要是將所有的倒計時重復利用一塊代碼。遇到的問題也是多種多樣的,有些是自己的馬虎和一些可以通過仔細思考后修正的邏輯錯誤,有些問題自己是在沒有辦法解決就尋求隊友的幫助,這里特別感謝我們隊的同學,幫助了我解決了很多細致入微的問題。仿真通過后,我和隊友在第二周周六一起去實驗室調試了整整一天,我的代碼有些小問題沒考慮到,例如reset復位的延時問題等,在實驗過程中交流互相出現(xiàn)的問題,然后共同商量解決,終于在馬上關門的時候完成了代碼調試,終于松了一口氣。由于實驗做的比較快,在第三周
31、就進行了驗收,老師非常耐心和我們交流完成情況和出現(xiàn)的問題,對我們有著激勵的心情??傮w的實驗功能感覺已經能達到現(xiàn)實生活中電磁爐的大部分基本功能,很有成就感。本次實驗讓我知道實驗的設計部分很重要,這對我審視其他編程軟件如C+等有了新的認識,收獲頗豐。9、 所用元器件及測試儀表清單管腳設定:元器件:8*8LED點陣 1個 LED數(shù)碼管 6個 BTN按鍵 5個 LED燈 8個 蜂鳴器 1個測試儀表:quartus2軟件和實驗板10、 完整源程序(要有注釋)(1) 模式調節(jié)mode.vhdlibrary ieee;use ieee.std_logic_1164.all;USE IEEE.STD_LOGI
32、C_UNSIGNED.ALL;entity mode is port( clk: In std_logic; modecontrol: IN std_logic; timecontrol: IN std_logic; -從時間模塊傳來的模式控制信號,從爆炒模式轉為煎炒模式 reset: IN std_logic; state:out std_logic_vector(2 downto 0); -輸出狀態(tài)信息給不定時模塊和火力調節(jié)模塊end mode;architecture behave of mode istype state_type is (C,H,J,B,T,Z);signal pre
33、sent_state:state_type;signal next_state:state_type;beginbegincase present_state iswhen C => if modecontrol='1' thennext_state<= H; elsenext_state<= C;if reset= '1' then next_state<=C; end if; end if;when H => if modecontrol='1' thennext_state<= J; elsenext_s
34、tate<= H;if reset= '1' then next_state<=C; end if; end if;when J => if modecontrol='1' thennext_state<= B;else next_state<= J; if reset= '1' then next_state<=C; end if; end if;when B => if modecontrol='1' thennext_state<= T; else if timecontrol
35、='1' then next_state<= J; else next_state<= B; end if; if reset= '1' then next_state<=C; end if; end if;when T => if modecontrol='1' thennext_state<= Z; elsenext_state<= T;if reset= '1' then next_state<=C; end if; end if;when Z => if modecontro
36、l='1' thennext_state<= H; elsenext_state<= Z; if reset= '1' then next_state<=C; end if; end if;end case;end process;state_register:process(clk)begin if (clk'event and clk='1')then present_state<= next_state; end if;end process;output_logic:process(present_stat
37、e)begin case present_state is when C => state <="000" when H => state <="001" when J => state <="010" when B => state <="011" when T => state <="100" when Z => state <="101" when others => state <=&
38、quot;111" end case;end process;end behave;(2) 火力調節(jié)firemode.vhdlibrary ieee;use ieee.std_logic_1164.all;entity firemode isport( clk: IN std_logic; up: IN std_logic; down: IN std_logic; state: IN std_logic_vector(2 downto 0); -輸入模式 reset: In std_logic; out1,out2,out3,out4: OUT std_logic_vector(3
39、downto 0) ); -輸出功率值end;architecture behave of firemode istype state_type is (f1900,f1500,f1100,f600,f100);signal present_state:state_type;signal next_state:state_type;beginnextstate_logic:process(present_state,up,down) -狀態(tài)機begin case present_state is when f1900 => if up='1' then next_stat
40、e<= f1900; elsif down='1' then next_state<= f1500; else next_state<= f1900; end if; when f1500 => if up='1' then next_state<= f1900; elsif down='1' then next_state<= f1100; else next_state<= f1500; end if; when f1100 => if up='1' then next_stat
41、e<= f1500; elsif down='1' then next_state<= f600; else next_state<=f1100; end if; when f600 => if up='1' then next_state<= f1100; elsif down='1' then next_state<= f100; else next_state<=f600; end if; when f100 => if up='1' then next_state<=
42、f600; elsif down='1' then next_state<= f100; else next_state<=f100; end if;end case;if state = "011" then -如果是爆炒模式,只能以1900W加熱 next_state<= f1900;end if;end process;state_register:process(clk) -將下一狀態(tài)轉為現(xiàn)狀態(tài),如果有復位信號則輸出1900Wbegin if(clk'event and clk='1') then prese
43、nt_state<= next_state; if reset = '1' then present_state<= f1900; end if; end if;end process;output_logic:process(present_state) -輸出功率大小的BCD碼begincase present_state is when f1900 => out1<="0001"out2<="1001"out3<="0000"out4<="0000"
44、when f1500 => out1<="0001"out2<="0101"out3<="0000"out4<="0000" when f1100 => out1<="0001"out2<="0001"out3<="0000"out4<="0000" when f600 => out1<="0000"out2<="0110&quo
45、t;out3<="0000"out4<="0000" when f100 => out1<="0000"out2<="0001"out3<="0000"out4<="0000"end case;end process;end behave;(3) 時間模塊ordercontrol.vhdlibrary ieee;use ieee.std_logic_1164.all;entity ordercontrol isport(clk1kHz
46、:in std_logic; orderinput:in std_logic; -外部按鍵控制定時還是不定時模式 resetorder,resetnorder:out std_logic; -輸出定時還是不定時模式 reset:in std_logic; -復位信號 orderset:out std_logic); end;architecture behave of ordercontrol isbeginprocess(clk1kHz)begin if clk1kHz'event and clk1kHz ='1' then if reset = '1'
47、; then resetorder<='1'resetnorder<='0' -如果復位信號來到,則將初始狀態(tài)為不定時狀態(tài),輸出reset為0才不會使norder置位 end if; if orderinput = '1' then -如果外部有按鍵信號輸入,則輸出狀態(tài)為定時狀態(tài),改變原來的不定時狀態(tài) resetorder<='0'resetnorder<='1' end if; orderset<=orderinput; end if;end process;end behave;o
48、rder.vhdlibrary ieee;use ieee.std_logic_1164.all;entity order isport (ordercontrol:in std_logic; clk1kHz:in std_logic; reset:in std_logic; timeset:out integer range 0 to 90);end;architecture behave of order istype type_state is (s0,s5,s10,s30,s60); -s0狀態(tài)機的關閉狀態(tài),s5,s10,s30,s60為循環(huán)狀態(tài)signal present_state
49、,next_state:type_state;beginnextstate_logic:process(present_state,ordercontrol) -狀態(tài)機,指明下一狀態(tài)begin case present_state is when s0 => if ordercontrol = '1' then next_state<=s5; else next_state<=s0; end if; when s5 => if ordercontrol = '1' then next_state<=s10; else next_st
50、ate<=s5; end if; when s10 => if ordercontrol = '1' then next_state<=s30; else next_state<=s10; end if; when s30 => if ordercontrol = '1' then next_state<=s60; else next_state<=s30; end if; when s60 => if ordercontrol = '1' then next_state<=s5; else
51、next_state<=s60; end if;end case;end process;state_register:process(clk1kHz) -將下一狀態(tài)轉換為現(xiàn)在的狀態(tài)begin if (clk1kHz'event and clk1kHz='1')then present_state<= next_state; if reset= '1' thenpresent_state<=s0; end if; end if;end process;output_logic:process(present_state) -輸出定時時間
52、設置timesetbegincase present_state is when s0 => timeset<=0; when s5 => timeset<=5; when s10 => timeset<=10; when s30 => timeset<=30; when s60 => timeset<=60;end case;end process;end behave;norder.vhdlibrary ieee;use ieee.std_logic_1164.all;entity norder isport(state:in s
53、td_logic_vector(2 downto 0); -輸入模式 timeset:out integer range 0 to 90; reset:in std_logic);end;architecture behave of norder isbeginprocess(state,reset)begincase state is when "011" => timeset<=3; -當爆炒模式默認時間為3s when "101" => timeset<=20; -當蒸燉模式默認時間為20s when "001" => timeset<=90; when "010" => timeset<=90; when "100" => timeset<=90; when others=> timeset<=0;end case;if reset='1' then -當有復位信號,輸出時間置0 timeset<=0;end if;end pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 異地貸款備案管理辦法
- 外聘培訓機構管理辦法
- 肺功能檢查護理課件
- 肯德基兒童畫課件
- 肥胖中醫(yī)課件
- 店鋪陳列培訓課件
- 肝膽中醫(yī)課件
- 高新一中八上數(shù)學試卷
- 東莞中考經典數(shù)學試卷
- 封面白色的數(shù)學試卷
- 2025年中考物理解題方法復習專題10力學壓軸題的常見解法
- 慈利一中選拔考試題及答案
- 殘疾人護理實操考試題及答案
- DB54∕T 0296-2023 文物古建筑消防安全評估規(guī)范
- 醫(yī)共體醫(yī)保管理工作制度
- 注塑模具保養(yǎng)維修培訓
- 商城周年慶活動方案方案
- 2025年高考軍隊院校征集和招錄人員政治考核表(原表)
- TCCEAS001-2022建設項目工程總承包計價規(guī)范
- 2024年人教版九年級英語單詞默寫單(微調版)
- DL-T 1476-2023 電力安全工器具預防性試驗規(guī)程
評論
0/150
提交評論