楊 瀾,戚秀真
(長安大學(xué) 信息工程學(xué)院,陜西 西安 710064)
UART微控制器設(shè)計(jì)方法及其FPGA實(shí)現(xiàn)
楊瀾,戚秀真
(長安大學(xué) 信息工程學(xué)院,陜西 西安 710064)
摘要為滿足FPGA與PC之間的通信需求,提出了一種FPGA的通用異步收發(fā)器設(shè)計(jì)實(shí)現(xiàn)方法。在Xilinx ISE 11開發(fā)平臺上采用Verilog HDL硬件描述語言及其自帶的IP CORE,實(shí)現(xiàn)了UART精確波特率時鐘模塊、UART發(fā)送模塊和UART接收模塊。并在ISE環(huán)境下進(jìn)行綜合建模仿真,給出各模塊的仿真時序圖以及綜合生成的RTL圖。實(shí)驗(yàn)通過Xilinx公司的XC2VP30 FPGA開發(fā)板對程序進(jìn)行下載運(yùn)行調(diào)試,與PC進(jìn)行實(shí)時通信,結(jié)果表明,UART控制器工作穩(wěn)定可靠,較好地實(shí)現(xiàn)了數(shù)據(jù)串行通信,達(dá)到預(yù)期設(shè)計(jì)要求。
關(guān)鍵詞UART;FPGA;Verilog HDL
通用異步收發(fā)器 (Universal Asynchronous Receiver Transmitter,UART)是一種通用串行異步通信數(shù)據(jù)總線,由于其可靠性高、傳輸距離遠(yuǎn)、相對成本較低等優(yōu)點(diǎn)被廣泛應(yīng)用,尤其是在嵌入式微處理器設(shè)計(jì)中,UART接口已成為不可缺少的一部分[1-3]。其工作原理是UART發(fā)送器將接收到的并行數(shù)據(jù)幀轉(zhuǎn)換成串行數(shù)據(jù)幀進(jìn)行傳輸。如表1所示,串行數(shù)據(jù)幀包括1個低位1,7~8個數(shù)據(jù)位,1個可選的奇偶校驗(yàn)位和1個或多個高位停止位[4-5]。UART接收器發(fā)現(xiàn)低位起始位后與發(fā)送器時鐘同步,然后接收整個串行數(shù)據(jù)幀,最后去掉低位起始位和高位停止位進(jìn)行相應(yīng)的奇偶校驗(yàn)生成并行數(shù)據(jù)幀[6]。目前,F(xiàn)PGA(Field Programmable Gate Array)芯片以其集成度、設(shè)計(jì)周期短、性價(jià)比高可滿足時序復(fù)雜的大規(guī)模設(shè)計(jì)等諸多優(yōu)點(diǎn),被廣泛應(yīng)用于工程中[7-10]。由于大部分FPGA芯片內(nèi)部并沒有集成UART通信功能模塊,給FPGA與CPU或其他設(shè)備間的數(shù)據(jù)傳輸造成不便[11-12]。針對以上問題,并順應(yīng)硬件逐漸軟件化的發(fā)展趨勢,本文提出并設(shè)計(jì)實(shí)現(xiàn)了一種基于FPGA的UART驅(qū)動程序,不但可省去復(fù)雜的UART芯片接口,簡化電路,并可增加系統(tǒng)的可靠性和穩(wěn)定性。
表1 UART幀格式
1基于Verilog HDL的UART模塊化設(shè)計(jì)
設(shè)計(jì)采用模塊化開發(fā)方式,根據(jù)UART的功能可劃分為3個模塊:精確波特率時鐘模塊、發(fā)送模塊和接收模塊。這3模塊統(tǒng)一由頂層原理圖文件驅(qū)動。UART異步傳輸方式?jīng)]有傳輸同步時鐘,因此為了保證數(shù)據(jù)傳輸質(zhì)量,UART采用16倍數(shù)據(jù)波特率的時鐘進(jìn)行采樣。每個數(shù)據(jù)由16個時鐘采樣,取中間采樣值,以保證采樣不會滑碼或誤碼。系統(tǒng)時鐘為100 MHz,精確波特率時鐘模塊進(jìn)行651分頻后,得到16倍的波特率(初始波特率為9 600)。發(fā)送模塊和接收模塊由精確波特率時鐘模塊提供的頻率進(jìn)行數(shù)據(jù)幀的打包、解析。如需更改波特率,則PC需要與FPGA建立通信協(xié)議:選擇波特率如2 400、4 800、11 920、115 300時,PC同時向FPGA器件發(fā)送特殊字符(如,@#¥%&),同時FPGA在波特率為9 600的情況下進(jìn)行接收,并根據(jù)字符更改分頻器的分頻數(shù),從而到達(dá)同時更改波特率和傳輸數(shù)據(jù)。
1.1UART精確波特率時鐘模塊設(shè)計(jì)
精確波特率時鐘模塊是為發(fā)送模塊和接收模塊提供采樣所需的頻率,并與PC同步波特率。假設(shè)UART初始波特率為115 200,則所需時鐘頻率為16×115 200=1 843 200。UART幀格式為:1位起始位、8位數(shù)據(jù)位、1位停止位、無校驗(yàn)位。因此數(shù)據(jù)的最大傳輸速率為
115 200/N=11 520 B·s-1
(1)
其中,N為數(shù)據(jù)位10 bit;分頻系數(shù)為100 000 000/(16×115 200)=54。程序中設(shè)置兩種計(jì)數(shù)器,以采樣時鐘頻率的上升沿,并當(dāng)計(jì)數(shù)器到達(dá)53時信號翻轉(zhuǎn)。
1.2UART發(fā)送模塊設(shè)計(jì)
當(dāng)發(fā)送模塊接收到發(fā)送命令后,會按照約定的通信速率與通信協(xié)議輸出幀數(shù)據(jù),即一個低電平的起始位,然后從低到高輸出8個數(shù)據(jù)位,可選的奇偶校驗(yàn)位,高電平停止位。
1.3UART接收模塊設(shè)計(jì)
接收模塊負(fù)責(zé)將接收的數(shù)據(jù)進(jìn)行解析,得到裸數(shù)據(jù)。即空閑狀態(tài)時線路處于高電位,當(dāng)檢測數(shù)據(jù)傳輸線路的下降沿時說明線路有數(shù)據(jù)傳輸,按照約定的波特率從低到高位接收數(shù)據(jù)。最后接收并比較奇偶校驗(yàn)位是否正確,若正確則通知后續(xù)設(shè)備準(zhǔn)備接收數(shù)據(jù)或存入緩存。UART接收數(shù)據(jù)時序?yàn)椋寒?dāng)檢測到數(shù)據(jù)的下降沿時,表明線路上有數(shù)據(jù)進(jìn)行傳輸,此時計(jì)數(shù)器CNT開始計(jì)數(shù),當(dāng)計(jì)數(shù)器為24=16+8時,采樣值為第0位數(shù)據(jù);當(dāng)計(jì)數(shù)器的值為40時,采樣值為第1位數(shù)據(jù),依此類推進(jìn)行后續(xù)6個數(shù)據(jù)的采樣。若需要進(jìn)行奇偶校驗(yàn),則當(dāng)計(jì)數(shù)器值為152時,采樣值即為奇偶位;當(dāng)計(jì)數(shù)器值為168時,采樣值為“1”表示停止位,1幀數(shù)據(jù)接收完成。
2基于PC的串口監(jiān)視軟件設(shè)計(jì)
基于PC的串口監(jiān)視軟件采用MSComm控件設(shè)計(jì),由程序主控模塊、串口通信模塊和接收顯示模塊組成,其流程如圖1所示。
圖1 基于PC的串口監(jiān)視軟件程序流程圖
串口初始化設(shè)置為波特率9 600,無奇偶校驗(yàn)位,1位停止位。此時與PC波特率相同,進(jìn)行實(shí)時通信。程序還添加了更改波特率功能,以便于高速或低速傳輸。上位機(jī)程序驗(yàn)證實(shí)現(xiàn)“自發(fā)自收”,將PC機(jī)串口RXD和TXD相連接,程序接收框顯示發(fā)送的數(shù)據(jù)。
3系統(tǒng)仿真驗(yàn)證
為實(shí)現(xiàn)所提出的硬件模塊設(shè)計(jì),采用硬件描述語言Verilog HDL對各模塊功能進(jìn)行描述,寫出RTL級代碼,在Xilinx 11.1開發(fā)環(huán)境下對所有代碼進(jìn)行綜合,并在Modelsim下對每一個模塊單獨(dú)均進(jìn)行了軟件仿真。仿真中各加入100 MHz的時鐘激勵,結(jié)果如圖2~圖4所示。圖2中,當(dāng)計(jì)數(shù)器為53時進(jìn)行信號翻轉(zhuǎn),達(dá)到設(shè)定波特率。圖3中,datacreat的輸出與dataout輸出相一致,表示發(fā)送模塊功能實(shí)現(xiàn)。圖4中,接收模塊的輸出端數(shù)據(jù)與數(shù)據(jù)生成模塊的數(shù)據(jù)相一致,表明接收模塊設(shè)計(jì)正確。
圖3 發(fā)送端仿真原理圖
圖4 接收端仿真原理圖
圖2精確波特率時鐘模塊仿真結(jié)果
如圖5所示,建立頂層文件原理圖,添加精確波特率模塊,數(shù)據(jù)生成模塊,發(fā)送模塊,接收模塊的symbol,借助ISE開發(fā)工具對工程進(jìn)行設(shè)計(jì)綜合、設(shè)計(jì)實(shí)現(xiàn)、芯片配置、在線調(diào)試。根據(jù)PC的串口調(diào)試工具的設(shè)置,決定代碼是否需要奇偶校驗(yàn)位,以及分頻系數(shù)。在IPACT軟件將測試信息隨設(shè)計(jì)文件下載于Virtex-II PRO XC2VP30開發(fā)板中用以捕獲目標(biāo)芯片內(nèi)部系統(tǒng)信號節(jié)點(diǎn)處的信息或總線上的數(shù)據(jù)流,而又不影響原硬件系統(tǒng)的正常工作。測試信息通過器件的JTAG端口傳出,并送入計(jì)算機(jī)進(jìn)行顯示和分析。如圖6所示,通過本文所提串口監(jiān)視軟件將數(shù)據(jù)從計(jì)算機(jī)送出,并利用FPGA器件中的UART模塊接收,并發(fā)送回PC顯示。經(jīng)多次測試,收發(fā)數(shù)據(jù)完全相同。結(jié)果表明,PC與FPGA可正常進(jìn)行串口通信,并可更改波特率,數(shù)據(jù)傳輸正確。
圖5 頂層文件原理圖
圖6 更改波特率后進(jìn)行串口通信
4結(jié)束語
本文提出并設(shè)計(jì)實(shí)現(xiàn)了PC與FPGA通信的UART微控制器驅(qū)動程序,同時開發(fā)了基于PC的上位機(jī)測試程序以論證該UART微控制器設(shè)計(jì)的正確性?;贔PGA的UART與傳統(tǒng)方法相比可簡化系統(tǒng)PCB電路,降低系統(tǒng)能耗,提高系統(tǒng)的可靠性和芯片的專用性。該UART模塊可作為完整的IP核移植進(jìn)各種FPGA中,在實(shí)際應(yīng)用時可嵌入到其他系統(tǒng)中。
參考文獻(xiàn)
[1]胡立坤,王慶超.基于UART的可靠通信與性能分析[J].計(jì)算機(jī)工程,2006,32(10):15-17,21.
[2]張松,董玲,于宗光,等.一種適合于SoC集成的UART核的設(shè)計(jì)實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2005, 22(9):10-13.
[3]劉先博.基于FPGA與MCU的多串口通信接口設(shè)計(jì)與實(shí)現(xiàn)[D].南京:南京理工大學(xué),2014.
[4]楊晶.基于FPGA的UART接口協(xié)議轉(zhuǎn)換模塊設(shè)計(jì)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014.
[5]段素蓉,莊圣賢.一種內(nèi)置FIFO全雙工UART的設(shè)計(jì)與實(shí)現(xiàn)[J].通信技術(shù),2010,43(2):46-47.
[6]何健標(biāo),王宏遠(yuǎn),林靜宜,等.基于最佳接收的UART的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2006,32(8):55-58.
[7]張興軍,丁彥飛,黃一元,等.基于FPGA的動態(tài)部分可重構(gòu)高性能計(jì)算實(shí)現(xiàn)[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2010,38(S1):82-86.
[8]Kuon I,Rose J.Measuring the gap between FPGAs and ASICs[J].IEEE Transactions on Computer Aided Design of Integrated Circuits and Systems,2007,17(6):152-160.
[9]楊海鋼,孫嘉斌,王慰. FPGA器件設(shè)計(jì)技術(shù)發(fā)展綜述[J].電子與信息學(xué)報(bào),2010,32(3):714-727.
[10]楊莉莉,郭亮.基于FPGA的磁懸浮微驅(qū)動器控制系統(tǒng)研究[J].機(jī)電工程,2015,32(11):1483-1488.
[11]魏麗玲,朱平,石永亮.基于FPGA的圖像采集與存儲系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2015,41(11): 67-69.
[12]宋宇飛,張俊杰,王凱,等.基于IP協(xié)議的FPGA萬兆可靠互聯(lián)通信設(shè)計(jì)與實(shí)現(xiàn)[J].上海大學(xué)學(xué)報(bào):自然科學(xué)版,2015,21(5): 570-578.
Design and Implementation of UART Controller Using FPGA
YANG Lan,QI Xiuzhen
(College of Information Engineering,Chang’an University,Xi’an 710064, China)
AbstractIn order to realize the communication between FPGA and PC, we design and implement a UART controller based on the Field Programmable Gates Array (FPGA). In the Xilinx ISE 11 development platform, we use the Verilog HDL language and its own IP CORE to implement the receiving module, sending module and precise baud rate clock module. Finally we use XC2VP30 device to verify the function of the UART. The results show that the UART module is stable and reliable.
KeywordsUART; FPGA; Verilog HDL
收稿日期:2015-12-23
基金項(xiàng)目:國家自然科學(xué)基金資助項(xiàng)目(51278058);中央高?;究蒲袠I(yè)務(wù)費(fèi)專項(xiàng)基金資助項(xiàng)目(2013G5240009,310824151035)
作者簡介:楊瀾(1985-),女,博士。研究方向:數(shù)字信號處理與多源信息融合技術(shù)。
doi:10.16180/j.cnki.issn1007-7820.2016.06.021
中圖分類號TN79;TP391
文獻(xiàn)標(biāo)識碼A
文章編號1007-7820(2016)06-072-03