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