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