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