羅春梅 肖順文 王涌
摘要:本設(shè)計(jì)采用Verilog_HDL語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)UART系統(tǒng)。該系統(tǒng)由波特率時(shí)鐘生成模塊、數(shù)據(jù)發(fā)送模塊和數(shù)據(jù)接收模塊等三個(gè)模塊組成。經(jīng)Modelsim模擬仿真顯示,各模塊設(shè)計(jì)均滿(mǎn)足要求,數(shù)據(jù)傳輸速率高、數(shù)據(jù)傳輸準(zhǔn)確。
關(guān)鍵詞:FPGA;UART;異步串行通信;Modelsim仿真
中圖分類(lèi)號(hào):TN92 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)03-0150-02
0 引言
通用異步收發(fā)傳輸器UART(Universal Asynchronous Receiver and Transmitter)使用非常廣泛,只需一根數(shù)據(jù)傳輸線(xiàn)和幾根信號(hào)線(xiàn)就可以完成計(jì)算機(jī)與外部設(shè)備的通信,并且支持全雙工通信,節(jié)約了傳輸成本[1]。本文采用Verilog_HDL語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)UART,這種接口比專(zhuān)用的UART器件更加簡(jiǎn)單、資源利用率更高,能夠完成數(shù)據(jù)的發(fā)送和接收。
1 異步串行通信原理
異步串行通信是以字符為單位進(jìn)行傳輸?shù)模瑐鬏敃r(shí),嚴(yán)格按照UART幀格式來(lái)進(jìn)行傳輸。UART數(shù)據(jù)幀格式包含1位起始位、數(shù)據(jù)位(可以設(shè)置為5~8位)、1位奇偶校驗(yàn)位(可有可無(wú))、停止位(可以設(shè)置為1、1.5或2位)[2]。發(fā)送方就是按照此順序一位一位的來(lái)進(jìn)行發(fā)送,再通過(guò)數(shù)據(jù)傳輸線(xiàn)逐次被接收方接收。UART數(shù)據(jù)幀格式如圖1所示。
由于異步通信兩端的時(shí)鐘不同,所以設(shè)置起始位和停止位可以保證發(fā)送和接收同步。本系統(tǒng)采用1位起始位、8位數(shù)據(jù)位、1位停止位的幀格式,即一幀數(shù)據(jù)共有10位。
2 UART系統(tǒng)設(shè)計(jì)
本系統(tǒng)基于FPGA實(shí)現(xiàn)UART系統(tǒng),包括三個(gè)主模塊:波特率生成模塊、數(shù)據(jù)發(fā)送模塊和數(shù)據(jù)接收模塊。
2.1 波特率時(shí)鐘生成模塊
波特率是指每秒傳送的字節(jié)數(shù),是收發(fā)雙方共同約定的系統(tǒng)傳輸速率。本系統(tǒng)的系統(tǒng)時(shí)鐘設(shè)為50M,對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻就可以生成想要的波特率時(shí)鐘[3]。為了能從外部來(lái)修改波特率,設(shè)置了一個(gè)波特率選擇端口,設(shè)置該端口的值就可以選擇自己想要的波特率,它的原理其實(shí)就是設(shè)置了一個(gè)數(shù)據(jù)選擇器,端口取不同值時(shí),使得分頻系數(shù)取不同值,由此便改變了波特率。端口取各值時(shí),對(duì)應(yīng)波特率為:00對(duì)應(yīng)9600HZ;01對(duì)應(yīng)19200HZ;10對(duì)應(yīng)38400HZ;11對(duì)應(yīng)115200HZ。
2.2 數(shù)據(jù)發(fā)送模塊
該模塊的采樣時(shí)鐘即為波特率時(shí)鐘,假設(shè)波特率設(shè)置為115200HZ,系統(tǒng)時(shí)鐘是50M,則分頻系數(shù)[4],完成一幀數(shù)據(jù)的發(fā)送,需要10個(gè)波特率時(shí)鐘周期,即為。則一幀數(shù)據(jù)就需要11個(gè)波特率脈沖來(lái)進(jìn)行傳輸,第11個(gè)時(shí)鐘到來(lái)就意味著一幀數(shù)據(jù)發(fā)送完成。一幀數(shù)據(jù)的發(fā)送時(shí)序圖如圖2所示。
從圖2中可以看出,波特率時(shí)鐘到來(lái)之前,數(shù)據(jù)線(xiàn)一直置“1”,在時(shí)鐘的第一個(gè)上升沿到來(lái)時(shí),開(kāi)始發(fā)送第一位即起始位“0”,之后的每一個(gè)時(shí)鐘上升沿就發(fā)送一位,而特別需要注意的是,數(shù)據(jù)位的發(fā)送是由低到高依次發(fā)送。
2.3 數(shù)據(jù)接收模塊
數(shù)據(jù)接收過(guò)程中,在對(duì)傳輸線(xiàn)上的數(shù)據(jù)進(jìn)行采樣時(shí),通常將每一位的中間時(shí)刻視作是最穩(wěn)定的,所以中間點(diǎn)的采樣電平就被認(rèn)為是該位的電平。然而在數(shù)據(jù)接收時(shí),有可能發(fā)生外部干擾促使電平反轉(zhuǎn)的情況,所以只采樣一次是不準(zhǔn)確的[4]。為了解決這個(gè)問(wèn)題,對(duì)每一位數(shù)據(jù)都設(shè)置了六次采樣,根據(jù)這六次采樣結(jié)果來(lái)判斷該位的電平狀態(tài),將出現(xiàn)次數(shù)較多的采樣電平當(dāng)作該位的真實(shí)電平,若是兩者一樣多,則視為數(shù)據(jù)不可靠,不執(zhí)行任何操作[5]。一位數(shù)據(jù)的接收原理圖如圖3所示。
從圖3中,把一位數(shù)據(jù)分成了16小段,在6個(gè)中間時(shí)刻對(duì)其進(jìn)行采樣,圖中的①②③④⑤⑥即為六個(gè)采樣時(shí)刻。根據(jù)這種采樣方式可知,實(shí)際采樣頻率應(yīng)該是16倍的波特率。其中,要特別注意起始位的判斷,因?yàn)橛袝r(shí)候干擾信號(hào)也會(huì)使得下降沿出現(xiàn)。在數(shù)據(jù)線(xiàn)上有下降沿出現(xiàn)時(shí),假設(shè)它就是起始位,接著在六個(gè)中間時(shí)刻對(duì)它進(jìn)行采樣,若是6次采樣結(jié)果中,低電平出現(xiàn)的次數(shù)比較多,那么它就是真正的起始位,否則,它就不是起始位,應(yīng)當(dāng)繼續(xù)等待真正的起始位。
3 UART系統(tǒng)仿真測(cè)試及分析
編寫(xiě)測(cè)試腳本后,在Modelsim中分別對(duì)發(fā)送模塊和接收模塊進(jìn)行仿真測(cè)試,測(cè)試結(jié)果如圖4、圖5所示。
從圖4中可以看出,在復(fù)位信號(hào)置高及發(fā)送使能信號(hào)有效時(shí),開(kāi)始發(fā)送數(shù)據(jù),此時(shí),uart由空閑狀態(tài)轉(zhuǎn)換為發(fā)送狀態(tài),在一幀數(shù)據(jù)發(fā)送完畢后,uart又重新回到空閑狀態(tài),同時(shí)輸出一個(gè)時(shí)鐘周期高電平的發(fā)送結(jié)束信號(hào)。根據(jù)異步串行通信原理可知,待發(fā)送的八位并行數(shù)據(jù)為10111010時(shí),數(shù)據(jù)線(xiàn)上的傳輸數(shù)據(jù)應(yīng)當(dāng)依次為0(起始位)、0、1、0、1、1、1、0、1、1(停止位)。與上圖進(jìn)行對(duì)比后發(fā)現(xiàn),每隔一個(gè)波特率時(shí)鐘便輸出一位數(shù)據(jù),輸出的數(shù)據(jù)為0010111011[6]。并且此時(shí)波特率選擇端口值為11,說(shuō)明波特率設(shè)置為115200HZ,發(fā)送一幀數(shù)據(jù)應(yīng)該為86806ns,用光標(biāo)進(jìn)行測(cè)量,測(cè)量數(shù)據(jù)正確。這說(shuō)明發(fā)送模塊設(shè)計(jì)正確,能夠滿(mǎn)足要求。
從圖5可以看出,復(fù)位電平置高且串行輸入有下降沿出現(xiàn)時(shí),開(kāi)始接收數(shù)據(jù),在一幀數(shù)據(jù)接收完畢后,同時(shí)輸出接收結(jié)束信號(hào)。根據(jù)異步串行通信原理可知,在串行數(shù)據(jù)為0010101011時(shí),它的數(shù)據(jù)位是01010101,則接收模塊收到的8位并行數(shù)據(jù)應(yīng)該是10101010。與上圖進(jìn)行對(duì)比后發(fā)現(xiàn),接收模塊輸出的并行數(shù)據(jù)正是10101010。這說(shuō)明接收模塊設(shè)計(jì)正確,能夠滿(mǎn)足要求。
4 結(jié)語(yǔ)
本系統(tǒng)采用Verilog_HDL硬件描述語(yǔ)言來(lái)實(shí)現(xiàn)通用異步收發(fā)器。根據(jù)功能需求,分別對(duì)UART的三個(gè)主模塊進(jìn)行了設(shè)計(jì)。最終的仿真測(cè)試結(jié)果顯示,該設(shè)計(jì)完全滿(mǎn)足要求,能夠很好的進(jìn)行數(shù)據(jù)的發(fā)送和接收。該設(shè)計(jì)簡(jiǎn)單便捷,實(shí)用性高。
參考文獻(xiàn)
[1] 吳厚航.深入淺出玩轉(zhuǎn) FPGA[M].北京:北京航空航天大學(xué)出版社,2010.
[2] 楊宗國(guó),李艷萍.基于FPGA的UART模塊的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2009(2):19-22.
[3] 賈亮,冀源.基于FPGA的串口通信控制器設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2016,35(22):33-35.
[4] 夏宇聞.Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程(第三版)[M].北京:北京航空航天大學(xué)出版社,2013.
[5] 袁玉卓,曾凱鋒,梅雪松.FPGA自學(xué)筆記-設(shè)計(jì)與驗(yàn)證[M].北京:北京航空航天大學(xué)出版社,2017.
[6] 謝謝.基于FPGA的UART設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016,20(16):51-53.
Design and Implementation of UART Based on FPGA
LUO Chun-Mei,XIAO Shun-Wen,WANG Yong
(School of Electronic and Information Engineering,China West Normal University,Nanchong Sichuan? 637009)
Abstract:This design uses Verilog_HDL language to achieve UART system. The system consists of three modules: the baud rate clock generation module, data sending module and data receiving module. Modelsim simulation shows that the design of each module complies with the requirements, with high data transmission rate and accurate data transmission.
Key words:FPGA;UART;Asynchronous serial communication;Modelsim simulation