摘 要: 基于可編程邏輯器件EPM240T100C5,,使用硬件描述語言VHDL,采用“自頂向下”的設(shè)計(jì)方法,,編寫一個(gè)微波爐控制器的芯片,。介紹了微波爐控制器的設(shè)計(jì)思路與模塊劃分,應(yīng)用Quartus II軟件對每個(gè)模塊和主程序分別進(jìn)行了調(diào)試,,并硬件下載到開發(fā)板上進(jìn)行了模擬調(diào)試,。
關(guān)鍵詞: 復(fù)雜可編程邏輯器件; 現(xiàn)場可編程門陣列,; 高速集成電路描述語言,; Quartus II軟件
隨著大規(guī)模集成電路技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,在涉及通信,、國防,、航天,、醫(yī)學(xué),、工業(yè)自動(dòng)化、計(jì)算機(jī)應(yīng)用,、儀器儀表等領(lǐng)域的電子系統(tǒng)設(shè)計(jì)工作中,,EDA技術(shù)的含量正以驚人的速度上升;電子類的高新技術(shù)項(xiàng)目的開發(fā)也日益依賴于EDA技術(shù)的應(yīng)用,。設(shè)計(jì)者的工作僅限于利用軟件的方式來完成對系統(tǒng)硬件功能的描述,,在EDA工具的幫助下并應(yīng)用相應(yīng)的FPGA/CPLD器件,就可以得到最后的設(shè)計(jì)結(jié)果,。盡管目標(biāo)系統(tǒng)是硬件,,但整個(gè)設(shè)計(jì)和修改過程如同完成軟件設(shè)計(jì)一樣方便和高效,從而使產(chǎn)品的開發(fā)周期大為縮短,、性能價(jià)格比大幅提高,。不言而喻,EDA技術(shù)將迅速成為電子設(shè)計(jì)領(lǐng)域中的極其重要的組成部分。
1 系統(tǒng)硬件設(shè)計(jì)框圖
本系統(tǒng)設(shè)計(jì)采用Altera MAXⅡ系列性價(jià)比較高的EPM240T100C5可編程邏輯器件作為信號處理及系統(tǒng)控制核心,,完成包括分頻,、計(jì)數(shù)、顯示等一系列工作,,結(jié)合所需的外圍模塊,,組成一個(gè)最小系統(tǒng),完成按鍵控制,、LED顯示,、音頻提示??傮w設(shè)計(jì)如圖1所示,。
利用CPLD/FPGA可編程的特點(diǎn),使電路大為簡化,利用軟件Quartus II和硬件描述語言VHDL對數(shù)字系統(tǒng)進(jìn)行編程,、調(diào)試和仿真,,使得設(shè)計(jì)、調(diào)試方便便捷,,充分地發(fā)揮了CPLD/FPGA的優(yōu)勢及特點(diǎn),。
2 微波爐控制器的整體設(shè)計(jì)方案
根據(jù)該微波爐的功能設(shè)計(jì)要求,軟件設(shè)計(jì)可由:分頻器,、狀態(tài)控制器,、 數(shù)據(jù)裝載器大、計(jì)時(shí)器,、顯示器,、微波加熱信號鎖存器6個(gè)模塊組成。各模塊之間的關(guān)系如圖2所示,。
2.1 分頻器fredivn的設(shè)計(jì)
在接口電路中,時(shí)鐘信號的作用至關(guān)重要,,一般CPLD的外部時(shí)鐘信號可達(dá)到幾十MHz,但是由于一些接口電路的特性所致,,這樣高頻率的時(shí)鐘不適合電路工作,,所以應(yīng)該引入時(shí)鐘分頻電路產(chǎn)生適合接口的工作頻率。分頻模塊的設(shè)計(jì)用于產(chǎn)生合適的掃描時(shí)鐘,、計(jì)數(shù)時(shí)鐘和閃爍時(shí)鐘,,其外部接口如圖3所示。時(shí)鐘發(fā)生器的輸入是全局時(shí)鐘clk,,是從50 MHz的石英晶振得到的信號,。輸出信號是掃描時(shí)鐘clk 1 kHz、clk 5 Hz和clk 1 Hz,。
部分關(guān)鍵程序如下:
------1 kHz分頻---------------
process(clk)
variable count0:integer range 0 to 24999;
begin
if clk'event and clk='1' then
if count0=24999 then
clk0<=not clk0;
count0:=0;
else count0:=count0+1;
end if;
end if;
clk1kHz<=clk0;
end process;
------5 Hz分頻---------------
process(clk0)
variable count1:integer range 0 to 99;
begin
if clk0'event and clk0='1' then
if count1=99 then clk1<=not clk1;count1:=0;
else count1:=count1+1;
end if;
end if;
clk5 Hz<=clk1;
end process;
-----1 Hz分頻-----------------
process(clk0)
variable count2:integer range 0 to 499;
begin
if clk0′event and clk0=′1′ then
if count2=499 then clk2<=not clk2;count2:=0;
else count2:=count2+1;
end if;
end if;
clk1Hz<=clk2;
end process;
end;
2.2 狀態(tài)控制器state的設(shè)計(jì)
通常狀態(tài)機(jī)是控制單元的主體,,它接收外部信號及數(shù)據(jù)單元產(chǎn)生的狀態(tài)信息,,產(chǎn)生控制信號。微波爐狀態(tài)控制器state的功能是控制微波爐工作過程中的狀態(tài)轉(zhuǎn)換,,并發(fā)出有關(guān)控制信息,,因此可用一個(gè)狀態(tài)機(jī)實(shí)現(xiàn)。通過對微波爐工作過程中的轉(zhuǎn)換條件及輸出信號進(jìn)行分析,,可得到其狀態(tài)轉(zhuǎn)換圖如圖4所示,。
該狀態(tài)機(jī)有8個(gè)狀態(tài)。當(dāng)狀態(tài)機(jī)的reset信號為0時(shí),,狀態(tài)機(jī)復(fù)位到idle狀態(tài),,當(dāng)reset信號為1時(shí),狀態(tài)機(jī)處于工作狀態(tài)或待機(jī)狀態(tài),。狀態(tài)機(jī)的轉(zhuǎn)換關(guān)系是:當(dāng)前狀態(tài)是idle狀態(tài),在時(shí)鐘上升沿到來時(shí),如果輸入信號test=0或stall_1=0或stall_2=0或stall_3=0,則轉(zhuǎn)入下一狀態(tài)tap1或tap2或tap3或tap4, 否則仍停留在idle狀態(tài),實(shí)現(xiàn)了微波爐上電復(fù)位時(shí)處于待機(jī)狀態(tài),。當(dāng)test=0時(shí),狀態(tài)機(jī)轉(zhuǎn)入測試狀態(tài)tap1,。當(dāng)stall_1=0或stall_2=0或stall_3=0時(shí),,狀態(tài)機(jī)轉(zhuǎn)入檔位狀態(tài)tap2或tap3或tap4其中一個(gè)狀態(tài)后,而這三個(gè)狀態(tài)之間也可以相互轉(zhuǎn)換。在每一個(gè)檔位狀態(tài)內(nèi),,同時(shí)也嵌入了計(jì)數(shù)狀態(tài)tap5,,只要設(shè)置好輸入時(shí)間,如果start=0則可以進(jìn)入計(jì)時(shí)狀態(tài),,否則仍停留在其中狀態(tài)之一內(nèi),。當(dāng)處于計(jì)時(shí)狀態(tài)時(shí),如果stop=0,,則轉(zhuǎn)入停止?fàn)顟B(tài)tap6,,使微波爐處于停止工作狀態(tài),而停止?fàn)顟B(tài)tap6與計(jì)時(shí)狀態(tài)tap5之間也是可以相互轉(zhuǎn)換的,,當(dāng)start=0,,則轉(zhuǎn)回計(jì)時(shí)工作狀態(tài),否則仍停留在停止?fàn)顟B(tài)tap6,。當(dāng)計(jì)時(shí)完畢,,則由計(jì)數(shù)器輸出done=1信號,,從計(jì)時(shí)工作狀態(tài)tap5轉(zhuǎn)換到結(jié)束狀態(tài)tap7,。不管處于哪個(gè)狀態(tài),只要reset為0,,則狀態(tài)機(jī)會(huì)立刻轉(zhuǎn)換為初始狀態(tài)idle,。
狀態(tài)機(jī)state的外部接口如圖5所示。
2.3 數(shù)據(jù)裝載器data的設(shè)計(jì)
數(shù)據(jù)裝載模塊的控制信號基本是從狀態(tài)機(jī)輸出的信號中得到的,。其功能主要是實(shí)現(xiàn)時(shí)間數(shù)據(jù)的輸入,、微波爐控制器當(dāng)前狀態(tài)數(shù)據(jù)的輸出,。當(dāng)處于復(fù)位狀態(tài)時(shí)數(shù)據(jù)“0000 0”將會(huì)送到寄存器內(nèi),寄存器再把數(shù)據(jù)送到數(shù)據(jù)輸出端口,;在測試狀態(tài)時(shí)數(shù)據(jù)“8888 8”會(huì)被送到寄存器內(nèi),,寄存器再把數(shù)據(jù)送到數(shù)據(jù)輸出端口;在結(jié)束狀態(tài)時(shí)數(shù)據(jù)為“donE 0”會(huì)被送到寄存器內(nèi),,寄存器再把數(shù)據(jù)送到數(shù)據(jù)輸出端口,。在啟動(dòng)檔位時(shí),檔位數(shù)據(jù)也會(huì)被輸入到寄存器中,,這時(shí)就可以輸入時(shí)間數(shù)據(jù),,時(shí)間數(shù)據(jù)的輸入有4位——分高位min_h、分低位min_l,、秒高位sec_h,、秒低位sec_l,每一個(gè)時(shí)間數(shù)據(jù)的輸入也會(huì)送到寄存器內(nèi),,再送到數(shù)據(jù)的輸出端口,。其中bn和sn是閃爍使能信號的輸出。數(shù)據(jù)裝載器的輸入與輸出端口如圖6所示,。
2.4 計(jì)數(shù)器counter的設(shè)計(jì)
根據(jù)設(shè)計(jì)要求,,counter為減數(shù)計(jì)數(shù)器,其最大計(jì)時(shí)99:59,。因此可以用3個(gè)十進(jìn)制計(jì)數(shù)器和1個(gè)六進(jìn)制計(jì)數(shù)器級聯(lián)構(gòu)成,。計(jì)數(shù)器的工作與狀態(tài)機(jī)的狀態(tài)有關(guān),當(dāng)狀態(tài)機(jī)處在復(fù)位狀態(tài),、測試狀態(tài),、停止?fàn)顟B(tài)、結(jié)束狀態(tài),、檔位狀態(tài)都屬于不工作狀態(tài),,只有在計(jì)數(shù)狀態(tài)時(shí),才會(huì)工作,。計(jì)數(shù)器如果進(jìn)入了停止?fàn)顟B(tài),,會(huì)保留當(dāng)前計(jì)數(shù)值,當(dāng)再次按下開始鍵時(shí),,計(jì)數(shù)器由當(dāng)前值開始計(jì)數(shù),。
4個(gè)計(jì)數(shù)器的計(jì)數(shù)使能端相連、置數(shù)使能端相連,,實(shí)現(xiàn)同時(shí)計(jì)數(shù)和同時(shí)置數(shù),。第一個(gè)計(jì)數(shù)器的計(jì)數(shù)脈沖是從1 kHz輸入的,第二個(gè)計(jì)數(shù)器的計(jì)數(shù)脈沖clk與第一個(gè)計(jì)數(shù)器的進(jìn)位cn相連,,第三個(gè)計(jì)數(shù)器的計(jì)數(shù)脈沖clk與第二個(gè)計(jì)數(shù)器的進(jìn)位相連cn,,第四個(gè)計(jì)數(shù)器的計(jì)數(shù)脈沖clk與第三個(gè)計(jì)數(shù)器的進(jìn)位cn相連,,設(shè)計(jì)中使用了庫中的一個(gè)4輸入與門,所有進(jìn)位輸出都連接到4輸入與門,,當(dāng)?shù)褂?jì)時(shí)結(jié)束,,done輸出“1”信號。
2.5 微波加熱信號鎖存器latch_cook的設(shè)計(jì)
對于latch_cook的設(shè)計(jì),,主要用來鎖存微波信號,,數(shù)據(jù)的輸入由狀態(tài)控制得到,當(dāng)啟動(dòng)檔位1時(shí),,st1_en輸出信號為1,、st1_en輸出信號為0、st1_en輸出信號為0,,1_en與d1相連,、 st2_en與d2相連、 st3_en與d3相連,,也就是d1d2d3輸入端口的數(shù)據(jù)是啟動(dòng)檔位1的輸出數(shù)據(jù)“001”,。同理,當(dāng)啟動(dòng)檔2時(shí),,d1d2d3輸入端口的數(shù)據(jù)為“010”,,啟動(dòng)檔位3時(shí),d1d2d3輸入端口的數(shù)據(jù)為“011”,,其他狀態(tài)時(shí)latch_cook模塊設(shè)計(jì)中使用了兩個(gè)進(jìn)程,。第一個(gè)進(jìn)程是把輸入微波信號賦給寄存器q,當(dāng)g使能信號為1時(shí),判斷是哪個(gè)檔位微波加熱信號后,,再對寄存器q進(jìn)行賦值,。使能端g是從load_en取得信號值的。輸出load_en為1信號只有復(fù)位,、測試,、結(jié)束、檔位這幾個(gè)工作狀態(tài),。其中只有在檔位狀態(tài)時(shí)才能觸發(fā)進(jìn)程,,其他都不能。第二個(gè)進(jìn)程是對微波信號的鎖存控制,,eo與計(jì)數(shù)使能端相連,,只有在計(jì)數(shù)時(shí)才能觸發(fā)進(jìn)程,使cook輸出信號值,,否則cook輸出高阻抗信號,。latch_cook的輸入、輸出端口如圖7所示,。
部分關(guān)鍵程序如下:
architecture one of latch_cook is
signal q:std_logic_vector(2 downto 0);
signal s:std_logic_vector(2 downto 0);
begin
s<=d1&d2&d3;
process(s)
begin
if g='1'then
case s is
when"001"=>q<="001";--檔位3
when"010"=>q<="010";--檔位2
when"100"=>q<="100";--檔位1
when others=>null;
end case;
end if;
end process;
process(oe)
begin
if oe='1'then--輸出信號
cook<=q;
else
cook<="ZZZ";--呈現(xiàn)高阻抗
end if;
end process;
end;
2.6 顯示譯碼器LED的設(shè)計(jì)
對于顯示電路,硬件上使用了串行連接的設(shè)計(jì),,即每個(gè)數(shù)碼管對應(yīng)的引腳都接在一起,通過控制公共端控制相應(yīng)數(shù)碼管的亮滅(共陰極數(shù)碼管的公共端為高電平時(shí),,LED不亮,;共陽極的公共端為低電平時(shí),LED不亮),。
因此,,在顯示模塊里有4個(gè)進(jìn)程實(shí)現(xiàn)設(shè)計(jì)——數(shù)碼管動(dòng)態(tài)掃描計(jì)數(shù)進(jìn)程、數(shù)碼管位動(dòng)態(tài)掃描進(jìn)程,、數(shù)碼管閃爍顯示進(jìn)程,、譯碼信號進(jìn)程。顯示模塊工作首先是動(dòng)態(tài)掃描計(jì)數(shù),,以1 kHz的掃描頻率進(jìn)行掃描計(jì)數(shù),。掃描所得到的計(jì)數(shù)值傳遞到數(shù)碼管位動(dòng)態(tài)掃描進(jìn)程中,控制數(shù)碼管的位選信號,,即顯示完第一位后,,接著顯示第二位,依此類推,,一直顯示到第5位,,顯示模塊接著繼續(xù)從第一位顯示,從而實(shí)現(xiàn)循環(huán)顯示,。因?yàn)? kHz的掃描頻率使6個(gè)數(shù)碼管看上去是同時(shí)顯示的,,實(shí)現(xiàn)了計(jì)數(shù)結(jié)果和狀態(tài)信息的顯示;譯碼信號進(jìn)程則根據(jù)動(dòng)態(tài)掃描所得到的信號值,,選擇相應(yīng)的顯示數(shù)據(jù),,只要計(jì)數(shù)器數(shù)據(jù)輸出或狀態(tài)發(fā)生變化,則數(shù)碼管的顯示也發(fā)生相應(yīng)的變化,。對于數(shù)碼管閃爍顯示進(jìn)程,,當(dāng)ficker_seg=1時(shí),則段信號與1 Hz頻率相與后再送到輸出端去以1 s的頻率閃爍,、一亮一暗,、全段滅、全段亮,,否則正常輸出段信號,。顯示模塊的輸入、輸出端口如圖8所示,。
3 系統(tǒng)調(diào)試
為了能夠準(zhǔn)確地對所編寫的軟件進(jìn)行調(diào)試,,采用EMP240系列開發(fā)板上進(jìn)行系統(tǒng)調(diào)試。圖9是一個(gè)模擬操作系統(tǒng)界面,。
系統(tǒng)調(diào)試的主要步驟如下:
(1) 在上電復(fù)位時(shí),,系統(tǒng)操作界面顯示:00000,。微波加熱信號為0。正處于待機(jī)狀態(tài),。
(2)按下TEST測試鍵,,5個(gè)數(shù)碼管所有段位點(diǎn)亮同時(shí)一亮一暗地交替閃爍著。按下復(fù)位鍵,,系統(tǒng)返回復(fù)位待機(jī)狀態(tài),。
(3) 右邊有三個(gè)檔位控制鍵,在待機(jī)狀態(tài)時(shí),,只要按下其中一個(gè)鍵,,就能對時(shí)間進(jìn)行設(shè)定。而三個(gè)檔位之間可以相互轉(zhuǎn)換,。按下復(fù)位鍵,,系統(tǒng)返回復(fù)位待機(jī)狀態(tài)。
(4) 設(shè)定好時(shí)間后就可以按下開始鍵,,啟動(dòng)相應(yīng)微波加熱信號,,同時(shí)進(jìn)行倒計(jì)時(shí)計(jì)數(shù),如果要停止加熱,,則按下停止鍵,,系統(tǒng)進(jìn)入停止?fàn)顟B(tài),微波加熱信號輸出為0,,想要再次加熱,,則按回開始鍵。按下復(fù)位鍵,,系統(tǒng)返回復(fù)位待機(jī)狀態(tài),。
(5) 當(dāng)計(jì)時(shí)結(jié)束后,輸出done顯示提示,,微波加熱信號輸出為0,。按下復(fù)位鍵,系統(tǒng)返回復(fù)位待機(jī)狀態(tài),。
本系統(tǒng)以EMP240T100C5為主要控制芯片,,綜合運(yùn)用了Quartus II開發(fā)工具,使用VHDL硬件描述語言,,使得系統(tǒng)設(shè)計(jì)的硬件功能基本都可以通過軟件編程實(shí)現(xiàn),,程序經(jīng)過實(shí)驗(yàn)仿真與調(diào)試,各項(xiàng)功能達(dá)到了預(yù)定的設(shè)計(jì)指標(biāo),。這種設(shè)計(jì)方案不僅使電子系統(tǒng)的設(shè)計(jì)以及產(chǎn)品性能的改進(jìn)和擴(kuò)展變得十分簡單,,同時(shí)它還代替了原有的許多單元電路或單片機(jī)的控制芯片和大量外圍電路,使電子電路設(shè)計(jì)更加靈活方便。為實(shí)現(xiàn)微波爐以及更多家用電器的信息化和智能化進(jìn)行了較深入的探索和實(shí)踐,。
參考文獻(xiàn)
[1] 周潤景,,圖雅,張麗敏. 基于QuartusII的FPGA/CPLD數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例[M]. 北京:電子工業(yè)出版社,,2007.
[2] 延明,張亦華. 數(shù)字電路EDA技術(shù)入門[M].北京:北京郵電大學(xué)出版社,,2006.
[3] 韓團(tuán)軍. 基于FPGA微波爐控制器設(shè)計(jì)[J].研究與開發(fā), 2010,29(8):64-67.
[4] 劉昌華. 數(shù)字邏輯EDA設(shè)計(jì)與實(shí)踐—MAX+plusII與QuartusII雙劍合璧[M].北京:國防工業(yè)出版社,,2006.