FPGA實現(xiàn)UART和MCU一體化設計
摘要:現(xiàn)代數(shù)字電子系統(tǒng)設計正在朝著新的方向發(fā)展,即利用FPGA技術進行系境設計。介紹了一種利用FPGA來實現(xiàn)通用串行異步收發(fā)器(UA-RT)和控制通信的MCU的數(shù)字系統(tǒng),底層設計模塊采用VHDL硬件描述語言實現(xiàn),并進行了仿真驗證。該設計方法和理念為以后的計算機系統(tǒng)以及其他的數(shù)字電子系統(tǒng)提供了一個新的思路,應用此技術可以使系統(tǒng)設計更加緊湊、可靠。
關鍵詞:計算機系統(tǒng);FPGA;VHDL;UART;MCU;有限狀態(tài)機
計算機技術和微電子技術的發(fā)展為現(xiàn)代電子設計提供了新的方法和途徑。傳統(tǒng)的電子設計采用功能獨立的分立元件進行功能組合從而實現(xiàn)特定的功能,計算機設計初期也一直采用這種模式。但是隨著近代電子技術的進步,尤其是FPGA(Field Programmable Gate Array)的出現(xiàn),使得電子設計和計算機設計都發(fā)生了很大的變化,尤其是在數(shù)字電子系統(tǒng)的設計領域。利用現(xiàn)場可編程門陣列FPGA可以實現(xiàn)任何數(shù)字器件的功能,而且還可以大大縮短設計時間,減少PCB的面積,提高信號的傳輸質量,提高系統(tǒng)的可靠性,增加設計的靈活性和可維護性。本文采用FPGA技術實現(xiàn)一個MCU與串行通信外設進行簡易通信的平臺,一方面了解了計算機的一些控制原理和工作流程;另一方面可以了解利用FPGA進行電子設計的優(yōu)越性。
1 FPGA與電子設計
用FPGA進行計算機I/O通信設備的開發(fā)設計,實現(xiàn)了功能類似Intel 8250及8251,美國半導體公司的16550串行通信接口的功能,同時實現(xiàn)了帶有簡單類忙編指令的微控制單元MCU來控制與外圍I/O設備的通信。整個設計采用VHDL在Altera的QuartusⅡV6.0進行設計實現(xiàn),并進行仿真驗證。
1.1 FPGA的原理及其開發(fā)平臺
通常的FPGA由布線資源分隔的可編程邏輯單元構成陣列,又由司編程I/O單元圍繞陣列構成整個芯片,排成這列的邏輯單元由布線通道中可編程內連線連接來實現(xiàn)一定的邏輯功能,也就是說分段的互連線可以通過可編程開關以任意方式連接起來形成邏輯單元的信號線。一個FPGA主要由邏輯陣列塊(LAB)、I/O塊、RAM塊和可編程的行/列線等組成。
1.2 FPGA的開發(fā)軟件及設計流程
FPGA的開發(fā)軟件一般由生產FPGA的廠商根據(jù)自己的產品特性提供專門的開發(fā)工具,目前主要流行的是Xilinx的ISE平臺和Altera的Quar-tus平臺。本文使用的是后者。使用該設計開發(fā)軟件能夠完成FPGA系統(tǒng)設計的流程基本包括了設計輸入(原理圖輸入或HDL語言描述輸入)、綜合、布線、下載等工作。本文所設計的電子系統(tǒng)設計輸入采用VHDL語言。
選定了設計平臺后,只要考慮所要設計系統(tǒng)的功能,借助集成開發(fā)環(huán)境即可完成想要的設計。一般來說,利用FPGA進行電子設計的完整的設計流程分為電路的設計與輸入、功能仿真、綜合、綜合后仿真、實現(xiàn)、布局布線后仿真、配置下載與調試等步驟。由于FPGA的靈活性和設計的可重復性,可以保證在任何仿真或者驗證步驟出現(xiàn)問題時都能根據(jù)錯誤定位返回相應的步驟,以進行更改或者重新設計。這是傳統(tǒng)電子設計方法無法比擬的。
2 系統(tǒng)設計與實現(xiàn)
本文所設計的系統(tǒng)實現(xiàn)了一個可簡易匯編指令的微控制器MCU和一個計算機組成中的外圍串行通信I/O設備。通過實現(xiàn)的一部分I/O輸入/輸出指令和條件跳轉指令可實現(xiàn)與外設的通信控制。系統(tǒng)功能模塊劃分如圖1所示。
2.1 串行通信外設的設計與實現(xiàn)
在計算機系統(tǒng)組成中,串行通信占據(jù)重要地位,它的使用范圍包括計算機與外部設備之間,計算機與計算機之間、甚至在進行前期CPU設計時都會用到。傳統(tǒng)的設計方法是應用Intel公司的8250/8251或者美國半導體的16550等芯片,但因設計復雜,占用電路體積大,而且出現(xiàn)問題不容易跟蹤定位,所以本文采用FPGA實現(xiàn)。將串行通信的關鍵器件UART集成到FPGA內部,增加系統(tǒng)的可靠性,縮小PCB板體積,使得系統(tǒng)更加緊致,且能根據(jù)需要進行適當?shù)脑O計、擴充和裁剪。實現(xiàn)的該I/O設備功能劃分如圖2所示。
2.1.1 UART模塊的設計與實現(xiàn)
UART串行數(shù)據(jù)格式如圖3所示,串行數(shù)據(jù)包括5~8位數(shù)據(jù)(可更改設置)、1位起始位、1~2位停止位、1位校驗位。該模塊主要由發(fā)送模塊和接收模塊兩部分構成。在各自模塊中分別由接收緩沖器、接收控制電路、發(fā)送緩沖區(qū)、發(fā)送控制電路、數(shù)據(jù)總線緩沖器、讀寫控制電路組成,邏輯框圖如圖4所示。
UART模塊的發(fā)送模塊和接收模塊公用復位信號、時鐘信號和并行數(shù)據(jù)線,并且有各自的輸入/輸出模塊和控制電路單元。
(1)發(fā)送模塊的設計。發(fā)送模塊將從微控制器MCU送來的8位并行數(shù)據(jù)轉換成圖3所示的數(shù)據(jù)幀格式的串行數(shù)據(jù)發(fā)送出去。該模塊分為3種工作模式:空閑模式、載入數(shù)據(jù)模式、移位模式輸出模式。當并行的8位數(shù)據(jù)從微控制器MCU通過數(shù)據(jù)線寫入發(fā)送FIFO(在以下2.1.2節(jié)實現(xiàn))中時,發(fā)送模塊自動將并行數(shù)據(jù)裝入鎖存器THR中,首先發(fā)送起始位0,然后根據(jù)LCR定義的數(shù)據(jù)格式將數(shù)據(jù)移位,并通過狀態(tài)機和節(jié)拍器實現(xiàn)完整的發(fā)送序列,并以相應的波特率從TX發(fā)送出去。發(fā)送模塊的狀態(tài)機FSM如圖5所示。
(2)接收模塊的設計。接收模塊接收串行輸入的數(shù)據(jù)(見圖3),然后將其轉換為并行數(shù)據(jù)送給微控制器MCU。與發(fā)送模塊相同,也分為3種工作模式:空閑模式,檢測起始位模式、移位輸入模式。首先接收模塊在接收時鐘的控制下,不斷地在RX端口檢測輸入數(shù)據(jù)的起始位,當檢測到起始位后,接收模塊由空閑模式轉變?yōu)橐莆惠斎肽J健4藭r通過RX端口進來的串行數(shù)據(jù)可能存在著些許抖動,因此需要添加消抖電路進行處理。消抖處理一般有兩種辦法,一種是在前端添加非門的R8觸發(fā)器來完成,一種是類似軟件的方式控制采集輸入端的數(shù)據(jù),并將前后采集的數(shù)據(jù)值進行比較,相同則保持,否則繼續(xù)采集比較,這里采用的是后者。當接收完數(shù)據(jù),更新接收緩沖區(qū)狀態(tài),以提供微控制器MCU查詢,方便讀取數(shù)據(jù)。接收模塊的狀態(tài)機FSME如圖6所示。
2.1.2 輸入/輸出緩沖區(qū)(FIFC))的設計與實現(xiàn)
FIFO(First In First Out)是一種先進先出的緩沖區(qū)結構。主要在通信過程中解決通信兩端速度不匹配的問題。訪問FIFO僅需要讀/寫控制線,不需要地址線,因此采用FIFO實現(xiàn)的緩沖區(qū)接口簡單,讀寫方便。由于文中的微控制器MCU和I/O設備均在FPGA內部實現(xiàn),因此采用同步FIFO實現(xiàn),即寫端口和讀端口采用同一個時鐘進行控制操作。該系統(tǒng)分別實現(xiàn)了位寬為8位,深度為256 b的緩沖區(qū)來對MCU發(fā)送給外設的數(shù)據(jù)和從外設接收的數(shù)據(jù)進行緩沖處理。實現(xiàn)方法可以采用Altera公司FPGA內部的資源實現(xiàn)。對FIFO的讀/寫控制可根據(jù)緩沖區(qū)的使用狀態(tài)和MCU發(fā)送來的命令來實現(xiàn)。FIFO模塊的結構圖如圖7所示。
讀信號和寫信號由微控制器MCU通過向I/O設備進行數(shù)據(jù)輸入和輸出操作產生??諛酥竞蜐M標志用于MCU探測緩沖區(qū)狀態(tài),應用查詢方式對外設進行讀寫數(shù)據(jù)操作。對于發(fā)送緩沖區(qū),當緩沖區(qū)處于滿狀態(tài)時表明已經沒有可用的存儲空間緩沖數(shù)據(jù),此時不允許進行寫操作;對于接收緩沖區(qū),當緩沖區(qū)處于空狀態(tài)時,表明沒有從設備收到任何的時間,此時不允許微控制器MCU從外設接收緩沖區(qū)讀取數(shù)據(jù)。
通過QuartusⅡ產生的FIFO如圖8所示。
圖8中,aclr是異步復位信號;clock是時鐘輸入;rdreq和wrreq分別是讀和寫信號線;data[7…O]是FIFO的并行數(shù)據(jù)輸入端;q[7…0]是FIFO的并行數(shù)據(jù)輸出端;empty和full分別為FIFO空滿標志的狀態(tài)線;usedw[7…O]為當前狀態(tài)下FIFO已經使用的存儲量,即FIFO中已經寫入并保存的數(shù)據(jù)量。
2.2 微控制器MCU的設計與實現(xiàn)
在一個計算機系統(tǒng)中,中央處理器處于核心控制地位,它不僅是參與運算的核心器件,而且是控制外設的中樞。一般情況下,它實現(xiàn)了一定的功能指令集,用來由用戶自己編程控制外部設備動作或者進行一些算術邏輯運算。本文中所實硯的微控制器MCU主要以實現(xiàn)對外設的控制,實現(xiàn)了對外設端口的讀寫控制以及一些必要的程序控制指令。在一個微控制器的設計中,指令系統(tǒng)的設計尤其重要,它不僅關系到控制器的設計,也關系到軟件程序的設計方法。指令系統(tǒng)的設計分為指令集設計和指令動作設計兩部分,前者側重于控制器的總體功能;后者側重于指令的具體實現(xiàn)。進行指令設計時首先要進行指令分析,根據(jù)系統(tǒng)所要完成的功能,完成所需指令的功能設想,這是指令設計的基礎;然后分析指令該放在什么地方,微控制器如何取指令和對指令進行識別等操作;最后確定指令格式以及每個指令完成指定功能所需要的一系列基本動作過程。可以使用ALtera公司FPGA內部的ROM作為程序存儲器,詳細的實現(xiàn)過程參看參考文獻。通過此系統(tǒng)進行分析,設計實現(xiàn)如表1所示指令。每條指令功能的完成具有取指令、指令譯碼、執(zhí)行指令階段。指令的分析譯碼執(zhí)行由狀態(tài)機邏輯控制具體實現(xiàn)。
3 系統(tǒng)仿真驗證
用硬件描述語言VHDL所實現(xiàn)的設計輸入,需要經過完整的編譯過程才可以進行仿真驗證,甚至下載配置。整個編譯過程包括4個階段:分析/綜合(Analysis&Synthesis)、適配(Filter)、裝配(Assembier)、時序分析(Timing Analyzer)。
分析/綜合階段使用QuartusⅡ中Integrated綜合用VHDL實現(xiàn)的輸入文件,生成后續(xù)過程使用的EDIFice網表文件(.edf)。適配階段使用由上一階段建立的網表數(shù)據(jù)庫,將工程的邏輯和時序要求與器件的可用資源相匹配,這個過程會將每個邏輯功能分配給最佳的邏輯單元位置,并選定相應的互聯(lián)路徑和引腳分配,為以后的布線和時序分析做準備。裝配階段根據(jù)上一階段的資源匹配生成可供下載配置的功能文件。時序分析是對所有的邏輯進行分析,根據(jù)適配階段的資源匹配情況進行時序分析,驗證最佳情況(最快速率等級的最小延時)下的時序。在Quartus中可以通過選擇Start Complieation來運行所有的編譯器模塊,也可以通過選擇Start單獨運行各個模塊,還可以通過選擇omplierTool(Tools菜單),在Complier Tool窗口運行該模塊,以啟動編輯器模塊。在Complier Tool窗口中,可以打開該模塊的設置文件或報告文件,或打開其他相關的窗口。
完成上述編譯階段以后,就要編程實現(xiàn)數(shù)據(jù)的發(fā)送和接收工作。在本例中,為了方便測試,在外設內部通過將發(fā)送線直接連接至接收線進行內部環(huán)路的自檢測試,外設緩沖區(qū)狀態(tài)采用輪詢方式工作。測試程序編寫如下:
上述簡單程序段所對應的微控制器碼加載在程序存儲器中,如圖9所示。
建立仿真輸入文件,設置時鐘信號和發(fā)送總線數(shù)據(jù)即可。首先對串行通信設備進行仿真測試,測試輸入如圖10所示。串行通信設備的仿真結果如圖11所示。
從仿真結果可以看出,串行通信設備已達到預定的功能要求。
加入微控制器MCU作用后,使用圖8所對應的類匯編程序進行測試。在此例程中,只簡單發(fā)送了一個8位數(shù)據(jù)來說明問題,如圖12所示。
系統(tǒng)仿真結果如圖13所示。
可以看出程序的執(zhí)行結果如預想一樣,最終在數(shù)據(jù)總線上顯示的是接收到并從接收緩沖區(qū)讀出的數(shù)據(jù)。說明加入MCU和FIFO緩沖區(qū)后系統(tǒng)環(huán)路測試功能正常,已達到設計要求。
4 結語
在當今電子設計領域,尤其是電子核心器件和設計軟件落后的情況下,應用傳統(tǒng)的電子設計方法既浪費時間,且成本可能太高,甚至有時候性能也不能滿足要求,通過FPGA技術進行設計可以使性能得到大大改觀。本文就是利用FPGA技術實現(xiàn)的一個計算機外圍I/O設備和一個簡單的微控制器。隨著FPGA技術的進一步成熟和發(fā)展,它的性能和靈活性會更加出色,將來完全有可能將一臺計算機系統(tǒng)在其內部,并搭配外圍接口電路,而且性能會更加突出。隨著計算機技術應用的擴大,尤其是嵌入式計算機的廣泛使用,應用FPGA技術進行現(xiàn)代數(shù)字系統(tǒng)的設計,會使系統(tǒng)更加緊致,功能更加完善,功耗更加降低,性能更加穩(wěn)定。因此,應用FPGA進行電子設計勢在必行。