基于FPGA的8051微控制器接口實(shí)現(xiàn)
工廠自動(dòng)化高度實(shí)現(xiàn)的今天,單片機(jī)8051的廣泛運(yùn)用使其需要與各種各樣的外圍設(shè)備相連接,而這些外圍設(shè)備各不相同,特別是它們的接口多種多樣。因而在運(yùn)用8051的時(shí)候,不得不考慮它與外圍設(shè)備的接口問題,而市售的接口電路大多只供某種特定的外圍設(shè)備使用,因此,在一些特殊的運(yùn)用場合下,用戶不得不自行設(shè)計(jì)它們之間的接口?,F(xiàn)代可編程器件(如FPGA-Field Programmable Gate Array可編程門陣列)的快速發(fā)展,使得自己開發(fā)專用的接口變得非常簡單,同時(shí)自主知識(shí)產(chǎn)權(quán)IP(Intellectual Property)受到越來越多的關(guān)注,它們被廣泛運(yùn)用在片上系統(tǒng)SoC(System on a single Chip)的設(shè)計(jì)中,8051IP核就是其中的一種。本文就是采用Xilinx公司的FPGA芯片來實(shí)現(xiàn)外圍器件與8051微控制器的接口,它可以和8051IP核一起集成在同一塊FPGA芯片上,從而使接口部分和用戶邏輯更緊密地結(jié)合。
2 接口功能
這里所說的接口功能主要是指微控制器和外圍設(shè)備之間的通信功能。該接口的設(shè)計(jì)采用硬件描述語言VHDL進(jìn)行描述,而且源代碼運(yùn)用了大量的常量定義,用戶可以根據(jù)需要來更改這些常量的默認(rèn)值,直到用戶自己滿意為止,從而達(dá)到不同的需求。這種改變就相當(dāng)于在運(yùn)用軟件里更 改設(shè)置參數(shù)一樣簡單,而且FPGA具有重配置功能,這從而達(dá)到不同的需求。這種改變就相當(dāng)于在運(yùn)用軟件里更
改設(shè)置參數(shù)一樣簡單,而且FPGA具有重配置功能,使得硬件的升級(jí)或者系統(tǒng)方案的變更變得非常簡單。接口的整體框圖如圖1所示。
本文引用地址:http://www.ex-cimer.com/article/201706/349452.htm 8051微控制器與運(yùn)用邏輯之間的通信通過用戶可定義寄存器組完成,8051微控制器寫數(shù)據(jù)到用戶可定義寄存器組來配置和控制運(yùn)用邏輯。而運(yùn)用邏輯通過用戶可定義寄存器組向微控制器寫狀態(tài)信息和服務(wù)請(qǐng)求,從而完成微控制器與外圍設(shè)備之間的通信。
3 接口設(shè)計(jì)
8051微控制器接口芯片主要由以下模塊組成:地址解碼邏輯、總線接口狀態(tài)機(jī)、中斷邏輯、用戶可定義寄存器組、數(shù)據(jù)輸出多路選擇器。其內(nèi)部結(jié)構(gòu)框圖如圖2所示。
3.1 8051微控制器接口信號(hào)定義
*ADDR[15:8],輸入,微控制器地址總線的高8位;
*ADDR_DATA[7:0],雙向,微控制器地址/數(shù)據(jù)復(fù)用總線;
*ALE_N,輸入,地址鎖存允許,微控制器控制信號(hào),該信號(hào)有效表明目前在地址/數(shù)據(jù)復(fù)用總線上的數(shù)據(jù)是有效數(shù)據(jù);
*PSEN_N,輸入,程序存儲(chǔ)允許,微控制器控制信號(hào),該信號(hào)有效表明目前的總線周期可以訪問外部程序存儲(chǔ)器;
*RD_N,輸入,微控制器進(jìn)行讀操作的閘門信號(hào);
*WR_N,輸入,微控制器進(jìn)行寫操作的閘門信號(hào);
*INT_N,輸出,中斷請(qǐng)求,運(yùn)用邏輯產(chǎn)生的中斷請(qǐng)求通過它向微控制器發(fā)送請(qǐng)求;
*CLK,輸入,同步時(shí)鐘信號(hào),由系統(tǒng)提供,在內(nèi)部結(jié)構(gòu)框圖中未標(biāo)出;
*RESET,輸入,同步復(fù)位信號(hào),有效時(shí)系統(tǒng)復(fù)位,在內(nèi)部結(jié)構(gòu)框圖中未標(biāo)出;
3.2 地址解碼邏輯模塊
8051微控制器接口芯片的解碼邏輯將當(dāng)前ADDR總線上的高位字節(jié)解碼作為器件地址,用它來和VHDL代碼里的BASE_ADDR常量進(jìn)行比較,如果相等,則表明BASE_ADDR指明的器件被選中,同時(shí)也包含由ALE_N提供時(shí)鐘的寄存器,用以從ADDR_DATA總線獲取地址低位字節(jié),這個(gè)地址低位字節(jié)指明了在用戶可定義寄存器組里的寄存器地址。也就是說地址高位字節(jié)用來選擇從設(shè)備(這里將8051作為主設(shè)備),而地址低位字節(jié)則用來選擇寄存器。
3.3 總線接口狀態(tài)機(jī)
該狀態(tài)機(jī)的設(shè)計(jì)是本接口設(shè)計(jì)的關(guān)鍵,也是能否完成接口功能的主要控制模塊,只有功能完整、狀態(tài)協(xié)調(diào)的狀態(tài)機(jī)才能協(xié)調(diào)整個(gè)系統(tǒng)有條不紊地工作。本狀態(tài)機(jī)的設(shè)計(jì)實(shí)際上就是將8051總線協(xié)議的文字描述轉(zhuǎn)換為有限狀態(tài)機(jī)來描述。本文所描述的8051執(zhí)行同步的總線周期,因此在外部設(shè)備和微控制器之間沒有設(shè)置握手信號(hào),通過狀態(tài)機(jī)的有效控制來完成它們之間的通信。8051微控制器總線協(xié)議在狀態(tài)機(jī)理的實(shí)現(xiàn)如圖3所示。在第一個(gè)周期里,微控制器將地址置于地址總線并激活A(yù)LE_N信號(hào),它的有效表明地址/數(shù)據(jù)復(fù)用總線和ADDR[15:8]上的地址是有效地址。激活A(yù)LE_N后,狀態(tài)機(jī)轉(zhuǎn)移到地址解碼狀態(tài)(ADDR_DECODE)等待地址解碼邏輯模塊解碼地址并且判斷是否有器件被選通。若有器件被選中:如果這是寫周期,微控制器從地址/數(shù)據(jù)復(fù)用總線撤銷地址并放置所需要寫的數(shù)據(jù)到總線上,然后激活WR_N信號(hào);如果這是讀周期,微控制器使地址/數(shù)據(jù)復(fù)用總線呈三態(tài),并激活RD_N以告訴用戶邏輯可以將指定寄存器里的數(shù)據(jù)置于總線上。否則回到閑置狀態(tài)(IDLE)。對(duì)于選通的從設(shè)備,如果RD_N或WR_N有效,狀態(tài)機(jī)將轉(zhuǎn)移到數(shù)據(jù)傳輸狀態(tài)(DATA_TRS)。如果這是寫周期,從數(shù)據(jù)總線來的數(shù)據(jù)被鎖存于指定的寄存器中并使WR_N無效。若是讀周期,微控制器鎖存總線上的數(shù)據(jù)并使RD_N無效。若WR_N或RD_N始終有效,表明數(shù)據(jù)還沒有寫完或讀完,則停留在DATA_TRS狀態(tài),直到數(shù)據(jù)寫完或讀完為止。無論RD_N的無效還是WR_N的無效都將使?fàn)顟B(tài)機(jī)向結(jié)束周期狀態(tài)(END_CYCLE)改變。在此狀態(tài)下,地址/數(shù)據(jù)復(fù)用總線呈三態(tài),微處理器使ALE_N無效來結(jié)束循環(huán),從而回到閑置狀態(tài)IDLE,等待下一周期的到來。
3.4 用戶可定義寄存器組
該部分主要是提供給用戶自定義的寄存器組,可以根據(jù)需要進(jìn)行定義,主要用來為微控制器和運(yùn)用邏輯之間的通信提供寄存服務(wù)。同時(shí)它可以被定義為不同作用的寄存器,微控制器通過讀或者寫這些專用的寄存器來決定應(yīng)用的進(jìn)程和當(dāng)前狀態(tài),而運(yùn)用邏輯通過它向微控制器發(fā)送服務(wù)請(qǐng)求。它的存在為該接口的通用性打下了基礎(chǔ)。
3.5 數(shù)據(jù)輸出多路選擇器和中斷邏輯模塊
數(shù)據(jù)輸出多路選擇器主要用來在整個(gè)讀周期里為地址/數(shù)據(jù)復(fù)用總線提供所需的數(shù)據(jù)。中斷邏輯模塊是可以選擇的,它的定義主要是看微控制器是否允許用戶邏輯的中斷操作,這取決于用戶系統(tǒng),可以根據(jù)需要設(shè)置中斷的個(gè)數(shù)和中斷的優(yōu)先權(quán)。
4 仿真分析和FPGA實(shí)現(xiàn)
為了驗(yàn)證該設(shè)計(jì)功能的正確性,從設(shè)計(jì)系統(tǒng)規(guī)范到最后的布局布線的整個(gè)過程中,都需要進(jìn)行階段性的仿真和驗(yàn)證。鑒于該系統(tǒng)的復(fù)雜性,采用層次化的設(shè)計(jì)和驗(yàn)證仿真。將系統(tǒng)劃分為不同的功能模塊(如上所述),分別對(duì)其進(jìn)行RTL(寄存器傳輸級(jí))級(jí)描述,并仿真驗(yàn)證。最后再進(jìn)行系統(tǒng)的綜合實(shí)現(xiàn),即功能模塊的組裝。整個(gè)設(shè)計(jì)采用了自頂向下的設(shè)計(jì)方法,而仿真驗(yàn)證則是自底向上的方法。限于篇幅,就不再單一的介紹每個(gè)模塊的VHDL設(shè)計(jì)方法和仿真驗(yàn)證結(jié)果。下面僅給出用Active HDL對(duì)系統(tǒng)進(jìn)行仿真驗(yàn)證的結(jié)果,如圖4所示。仿真結(jié)果表明,該狀態(tài)機(jī)的設(shè)計(jì)滿足預(yù)期的功能,即能滿足8051微控制器總線協(xié)議的要求,因而能很好地和8051進(jìn)行通信,各項(xiàng)指標(biāo)均達(dá)到了設(shè)計(jì)要求。
本設(shè)計(jì)采用Xilinx公司的Vertex系列XCCV3004HQ240芯片,該芯片有豐富的可配置邏輯模塊CLBs(Configurable Logic Blocks),大量的觸發(fā)器以及內(nèi)置的不占系統(tǒng)資源的塊RAM,系統(tǒng)最大工作頻率可達(dá)200MHz,并且內(nèi)置有延遲鎖相環(huán)DLL(Delay Locked Loop),它可以減少時(shí)鐘傳輸?shù)乃p,實(shí)現(xiàn)通信的完全同步。在Synplify Pro環(huán)境下對(duì)系統(tǒng)進(jìn)行綜合,綜合結(jié)果表明其占用的片內(nèi)資源不到總資源的10%,選擇資源遠(yuǎn)遠(yuǎn)過剩的Vertex系列的目的是為了在同一塊芯片內(nèi)同時(shí)集成8051IP核,完成兩者的綜合實(shí)現(xiàn)后,資源略有剩余,這為用戶的硬件升級(jí)和系統(tǒng)方案的變更提供了條件。
5 結(jié)束語
本設(shè)計(jì)充分利用了Vertex器件的LUTs(Look-Up Tables)替代觸發(fā)器和基本門電路搭建乘法器和加法器這兩個(gè)顯著的結(jié)構(gòu)特點(diǎn),節(jié)省了大量的觸發(fā)器資源,增加了器件利用率、布通率,DLL的運(yùn)用降低了布線延遲,實(shí)現(xiàn)了通信的完全同步。筆者采用Xilinx公司的FPGA芯片自行設(shè)計(jì)了8051IP核與外圍設(shè)備的接口,完成了8051與外圍設(shè)備之間的通信功能,并且源代碼中的參數(shù)可調(diào),可作為IP軟核提供給8051開發(fā)用戶,使得用戶從多變的外圍接口實(shí)現(xiàn)中解脫出來,讓用戶致力于具體的運(yùn)用設(shè)計(jì),以縮短開發(fā)周期。這種實(shí)現(xiàn)接口通信的方法適用范圍廣、成本低廉、體積小、可靠性高,具有很高的工程實(shí)用價(jià)值。
評(píng)論