1 引言 FPGA是一種新興的可編程邏輯器件,可以取代現有的全部微機接口芯片,實現微機系統中的存儲器、地址譯碼等多種功能,具有更高的密度、更快的工作速度和更大的編程靈活性,被廣泛應用于各種電子類產品中。在功能上,單片機具有性價比高、功能靈活、易于人機對話、強大的數據處理能力等特點;而FPGA則具有高速、高可靠性以及開發便捷、規范等特點,因此兩類器件相結合的電路結構將在許多高性能儀器儀表和電子產品中被廣泛應用。基于這種需求,本文設計了MCS-51單片機與FPGA的總線接口邏輯電路,實現了單片機與FPGA數據與控制信息的可靠通信,使FP—GA與單片機優勢互補,組成靈活的、軟硬件都可現場編程的控制系統。 2 單片機與FPGA的接口方式 單片機與FPGA的接口方式一般有兩種,即總線方式與獨立方式。MCS-51單片機具有很強的外部總線擴展能力,利用片外三總線結構很容易實現單片機與FPGA的總線接口,而且單片機以總線方式與FPGA進行數據與控制信息通信也有許多優點:速度快;節省PLD芯片的I/O口線;相對于非總線方式,單片機編程簡捷,控制可靠;在FPGA中通過邏輯切換,單片機易于與SRAM或ROM接口。 單片機與FPGA以總線方式通信的邏輯設計,重要的是要詳細了解單片機的總線讀寫時序,根據時序圖來設計邏輯結構,其通信的時序必須遵循單片機內固定的總線方式讀/寫時序。FPGA的邏輯設計也相對比較復雜,在程序設計上必須與接口的單片機程序相結合,嚴格安排單片機能訪問的I/O空間。單片機以總線方式與FPGA進行數據通信與控制時,其通信工作時序是純硬件行為,速度要比前一種方式快得多,另外若在FPGA內部設置足夠的譯碼輸出,單片機就可以僅通過19根I/O線在FPGA與單片機之間進行通信和控制信息交換,這樣可以節省FPGA芯片的I/O線。其原理圖如圖1所示。 2 總線接口邏輯設計 2.1 接口設計思想 單片機與CPLD/FPC,A以總線方式通信的邏輯設計,重要的是要詳細了解單片機的總線讀寫時序,根據時序圖來設計邏輯結構。MCS-51系列單片機的時序圖如圖2所示。 ALE為地址鎖存使能信號,可利用其下降沿將低8位地址鎖存于FPGA中的地址鎖存器(LATCH_ADDRES)中;當ALE將低8位地址通過P0鎖存的同時,高8位地址已穩定建立于P2口,單片機利用讀指令允許信號PSEN的低電平從外部ROM中將指令從P0口讀入,由時序圖可見,其指令讀入的時機是在PSEN的上升沿之前。接下來,由P2口和P0口分別輸出高8位和低8位數據地址,并由ALE的下降沿將P0口的低8位地址鎖存于地址鎖存器。若需從FPGA中讀出數據,單片機則通過指令“MOVXA,@DPTR”使RD信號為低電平,由P0口將鎖存器中的數據讀入累加器A;但若欲將累加器A的數據寫進FPGA,則需通過指令“MOVx DPTR,A”和寫允許信號WR。這時,DPTR中的高8位和低8位數據作為高、低8位地址分別向P2和P0口輸出,然后由WR的低電平并結合譯碼,將累加器A的數據寫入圖中相關的鎖存器。 通過對MCS-51單片機總線讀/寫時序的分析,設計了圖3所示的接口電路。在FPGA中,設計了兩個模塊:一個是總線接口模塊,負責單片機與FPGA的總線接口邏輯;另一個是寄存器單元及外部接口模塊,運用總線接口模塊來操作此模塊。 在總線應用時,MCS-51單片機的P0口是作為地址/數據總線分時復用的,因此應在總線接口模塊中設計一個三態緩沖器,實現P0口的三態接口;又因MCS-51單片機在訪問外部空間時,它的地址為16位,因此借助地址鎖存使能信號ALE在FPGA中實現高8位與低8位地址的編碼,組合成16位地址,然后再根據MCS-51單片機的讀/寫信號,實現對FPGA的讀寫操作。 在接口設計中,采用了VHDL語言實現其接口邏輯。用VHDL語言編寫,往往比較方便和嚴謹,注意整個過程的邏輯思路,并且盡量避免語言的冗余,造成比較長的延時。- MCS-51單片機與FPGA的通信讀寫電路的部分程序 |