文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2013)01-0037-03
通用異步收發(fā)器UART(Universal Asynchronous Receiver/Transmitter)是串行通信的重要組成部分,,其基本功能是實(shí)現(xiàn)數(shù)據(jù)的串行化/反串行化和錯(cuò)誤校驗(yàn),,這也是所有的UART設(shè)計(jì)都能實(shí)現(xiàn)的基本功能,但是其他各種功能都兼顧的設(shè)計(jì)非常少,。參考文獻(xiàn)[1]設(shè)計(jì)了一個(gè)在MCU中運(yùn)用非常廣泛的UART接口,,其功能比較全面,但是波特率產(chǎn)生器采用整數(shù)分頻的設(shè)計(jì),,導(dǎo)致系統(tǒng)只有在特定系統(tǒng)時(shí)鐘,、特定波特率的情況下誤差才會(huì)比較小,不能滿足高波特率和非標(biāo)準(zhǔn)波特率的要求,;參考文獻(xiàn)[2]設(shè)計(jì)的UART IP基本功能良好,,但是不支持紅外、自動(dòng)波特率檢測(cè)等功能,;參考文獻(xiàn)[3]的設(shè)計(jì)只支持中斷模式,,不支持DMA模式,不能滿足大量數(shù)據(jù)高速傳輸?shù)男枨?,且中斷總是打斷CPU的操作,,效率較低。本文提出了一種多功能UART模塊的設(shè)計(jì),,并利用Verilog HDL語言進(jìn)行實(shí)現(xiàn),。本設(shè)計(jì)能滿足多模導(dǎo)航基帶芯片中的不同需求(如相關(guān)器數(shù)據(jù)的傳輸?shù)?,同時(shí)降低誤差,,保證衛(wèi)星數(shù)據(jù)的正確性,。
1 UART電路主要模塊設(shè)計(jì)
本設(shè)計(jì)采用標(biāo)準(zhǔn)的UART傳輸協(xié)議,字符幀由起始位,、數(shù)據(jù)位,、奇偶校驗(yàn)位和停止位四部分組成[4]。UART電路包括UART總控模塊UART_CTRL、波特率產(chǎn)生器UART_BFG,、數(shù)據(jù)發(fā)送模塊TRANSMITTER,、數(shù)據(jù)接收模塊RECEIVER和FIFO模塊,其總體結(jié)構(gòu)圖如圖1所示,。
1.1 接收模塊
串行數(shù)據(jù)幀和接收數(shù)據(jù)時(shí)鐘是異步的,,由邏輯1跳變?yōu)檫壿?可視為一個(gè)數(shù)據(jù)幀的開始,所以接收器首先需要判斷起始位,,常用的方法有三倍速采樣法和起始位中斷捕捉定時(shí)采樣法,。據(jù)經(jīng)驗(yàn)可知,數(shù)據(jù)的中間采樣值可靠性較高,,可以采用中間時(shí)刻采樣法[2],,并且,接收和發(fā)送單元的數(shù)據(jù)采樣率為波特率的16倍,,可降低由于時(shí)鐘不匹配引起的誤采樣,。接收器采用狀態(tài)機(jī)[2]實(shí)現(xiàn),狀態(tài)機(jī)的描述如下:
(1)RX_IDLE:當(dāng)UART接收器復(fù)位時(shí),,F(xiàn)SM處于這一狀態(tài),。在該狀態(tài)中,狀態(tài)機(jī)一直等待RXD電平跳變,,即出現(xiàn)下降沿,。檢測(cè)到起始位后,進(jìn)入RX_START狀態(tài),。
(2)RX_START:在該狀態(tài)下,,在采樣時(shí)鐘的上升沿對(duì)URXD低電平進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)為8(即確保在起始位的中間點(diǎn))時(shí),,轉(zhuǎn)到RX_DATA狀態(tài),;如果邏輯零的個(gè)數(shù)少于8,則認(rèn)為是毛刺,,跳回RX_IDLE狀態(tài),。
(3)RX_DATA:在該狀態(tài)下,每隔16個(gè)采樣時(shí)鐘采樣1 bit串行數(shù)據(jù),,接收8 bit異步數(shù)據(jù)并進(jìn)行串/并轉(zhuǎn)換,。同樣是對(duì)采樣時(shí)鐘的上升沿進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)值為16時(shí)進(jìn)行數(shù)據(jù)采樣,。如果起始位為16位,,則可以保證數(shù)據(jù)位都是在中點(diǎn)處被采樣,同時(shí)進(jìn)行串/并轉(zhuǎn)換,。當(dāng)探測(cè)已經(jīng)接收到相應(yīng)位的數(shù)據(jù)后,,進(jìn)入奇偶校驗(yàn)狀態(tài),。
(4)RX_PARITY:該狀態(tài)的主要功能是奇偶校驗(yàn),通過對(duì)實(shí)際接收到的數(shù)據(jù)的奇偶性與發(fā)送過來的奇偶校驗(yàn)位進(jìn)行比較,,判斷奇偶校驗(yàn)錯(cuò)誤狀態(tài),。
(5)RX_STOP:對(duì)停止位進(jìn)行采樣,并且判斷停止位是否為1,。若停止位不正確,,則幀錯(cuò)狀態(tài)位置1。
將接收到的數(shù)據(jù)和錯(cuò)誤狀態(tài)數(shù)據(jù)一起寫入到接收FIFO中,。接收到錯(cuò)誤的數(shù)據(jù)后不馬上產(chǎn)生錯(cuò)誤中斷,,一旦數(shù)據(jù)被讀出,此時(shí)錯(cuò)誤狀態(tài)也一起被讀出,,立即產(chǎn)生錯(cuò)誤中斷,。
1.2 發(fā)送模塊
發(fā)送器實(shí)現(xiàn)的功能是將輸入的8 bit并行數(shù)據(jù)變成串行數(shù)據(jù),同時(shí)在數(shù)據(jù)位頭部加入起始位,,在數(shù)據(jù)位尾部加奇偶校驗(yàn)位和停止位,。發(fā)送模塊的設(shè)計(jì)比較簡(jiǎn)單,其狀態(tài)機(jī)與接收模塊相對(duì)應(yīng),,在此不再贅述。
1.3 波特率產(chǎn)生模塊
波特率發(fā)生器一般采用分頻器實(shí)現(xiàn),,傳統(tǒng)的采用整數(shù)分頻器實(shí)現(xiàn)的誤差在某些系統(tǒng)時(shí)鐘下超出了可控范圍,,如在參考時(shí)鐘為16.37 MHz、波特率為460 Kb/s的情況下,,誤差達(dá)到了11.2%,,會(huì)導(dǎo)致數(shù)據(jù)傳輸?shù)腻e(cuò)誤。因此,,本設(shè)計(jì)采用小數(shù)分頻器實(shí)現(xiàn)相對(duì)準(zhǔn)確的波特率,。另外,在收發(fā)的過程中,,可以改變波特率寄存器的值,,但實(shí)際波特率的改變發(fā)生在當(dāng)前幀傳輸完成之后。波特率產(chǎn)生模塊的電路結(jié)構(gòu)圖如圖2所示,。
小數(shù)分頻的實(shí)現(xiàn)方法有很多,,但其基本原理是一樣的,即在若干個(gè)分頻周期中采取某種方法使某幾個(gè)周期多計(jì)或少計(jì)一個(gè)數(shù),,從而在整個(gè)分頻周期內(nèi)總體平均分頻數(shù)為小數(shù)分頻[5],。
通過采用小數(shù)分頻,大大降低了實(shí)際波特率與要求波特率之間的誤差,。在正常情況下,,誤差不應(yīng)超過2%,,如果超過了,則需要相應(yīng)地提高系統(tǒng)時(shí)鐘來降低誤差,。表1列出了19.2 MHz情況下的整數(shù)分頻和小數(shù)分頻波特率誤差對(duì)應(yīng)表,,可以看到采用小數(shù)分頻的波特率誤差明顯較小。
在本設(shè)計(jì)中,,發(fā)送器,、接收器和波特率產(chǎn)生模塊是主要模塊。FIFO(先進(jìn)先出)模塊是數(shù)字電路設(shè)計(jì)中比較常用的模塊,,本文復(fù)用了通用的FIFO模塊,,在文中就不再贅述。UART的控制模塊主要負(fù)責(zé)對(duì)寄存器的相關(guān)操作,,通過APB總線實(shí)現(xiàn),,其電路設(shè)計(jì)比較簡(jiǎn)單,也不再贅述,。
2 UART模塊的其他功能
2.1 自動(dòng)波特率檢測(cè)
UART接收通道在接收數(shù)據(jù)之前,,如果發(fā)送端的波特率不清楚,可進(jìn)行自動(dòng)波特率檢測(cè),。實(shí)現(xiàn)方法是:發(fā)送端間隔發(fā)送檢測(cè)字,,間隔時(shí)間為傳輸一幀所需的時(shí)間。接收方UART根據(jù)start位來確定是否有數(shù)據(jù)在傳輸,,當(dāng)其檢測(cè)到下降沿時(shí)就進(jìn)入RX_START的狀態(tài)中,,在波特率不明確的情況下,并不產(chǎn)生采樣時(shí)鐘,,用PCLK進(jìn)行采樣計(jì)數(shù),。由于start位為1 bit,根據(jù)計(jì)數(shù)值可知這1 bit所占用的時(shí)間,。如果接收數(shù)據(jù)完成后,,接收到的數(shù)據(jù)是約定值,則證明波特率檢測(cè)成功,,可以將檢測(cè)到的值存儲(chǔ)于寄存器中,。自動(dòng)波特率檢測(cè)原理公式如下:
1/baudrate=count×(1/PCLK)(1)
根據(jù)式(1)可得發(fā)送端的波特率。實(shí)現(xiàn)自動(dòng)波特率檢測(cè)無需專門的模塊設(shè)計(jì),,在接收器模塊內(nèi)就可以實(shí)現(xiàn),。
2.2 自檢測(cè)模式
Loopback(自檢測(cè))模式是UART內(nèi)部的一種自測(cè)功能。當(dāng)UART出現(xiàn)問題時(shí)可以先自測(cè),,將控制寄存器中Loopback位使能,,UART可以將內(nèi)部的發(fā)送(TXD)和接收(RXD)連接在一起,確定內(nèi)部的數(shù)據(jù)通路沒有問題,。
2.3 紅外傳輸功能
本設(shè)計(jì)的UART支持IrDA 1.0協(xié)議,,所以使用紅外時(shí)最高波特率為115.2 Kb/s,。通過寄存器的紅外控制位選擇紅外使能,可以實(shí)現(xiàn)紅外脈沖,。IrDA數(shù)據(jù)通路如圖3所示[1],。
2.4 DMA模式
本設(shè)計(jì)UART不僅支持查詢、中斷模式,,還支持DMA模式以提高連續(xù)傳輸?shù)哪芰?,能夠高效地傳輸基帶芯片相關(guān)器中的大量數(shù)據(jù)。CPU除了在開始和結(jié)束時(shí)處理中斷外,,在傳輸過程中也可以進(jìn)行其他工作,。
3 仿真驗(yàn)證和綜合結(jié)果
3.1 仿真驗(yàn)證
本文采用Altera公司EP3SL150F1152的FPGA芯片進(jìn)行實(shí)測(cè),使用VCS仿真工具,,并利用VERA語言和Verification IP進(jìn)行驗(yàn)證,。仿真結(jié)果如圖4、圖5所示,。
圖4是波特率自動(dòng)檢測(cè)的仿真波形,。002號(hào)波形是未知波特率的接收端波特率產(chǎn)生器的分頻值,在未知的情況下為0,;005號(hào)波形是發(fā)送端波特率產(chǎn)生器的分頻值,,為567H。從002號(hào)波形的變化可以看到,,發(fā)送端發(fā)送檢測(cè)字41H,,接收端在接收完一個(gè)檢測(cè)字41H后,可計(jì)算出波特率分頻值為567H,。001號(hào)波形是接收端的接收移位寄存器,將串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù),,接收完成后得到41H,,也證明了數(shù)據(jù)的正確傳輸。這種波特率檢測(cè)的方法迅速準(zhǔn)確,,一般情況下發(fā)一次檢測(cè)字就能檢測(cè)出發(fā)送端的波特率,。
圖5是數(shù)據(jù)紅外傳輸?shù)姆抡娌ㄐ巍>幋a模塊將待發(fā)送的001號(hào)波形編碼成符合紅外協(xié)議的002號(hào)波形發(fā)送出去,,接收端接收到005號(hào)波形要經(jīng)過譯碼模塊譯碼成006號(hào)波形輸出給接收器,。由圖中可以看到,發(fā)送寄存器發(fā)送了3個(gè)值2cH,、78H,、65H,在經(jīng)過編碼,、譯碼模塊后,,接收器能夠接收到正確的值,。008號(hào)波形中高電平脈沖表示一個(gè)數(shù)據(jù)接收成功;007號(hào)波形接收移位寄存器中的數(shù)據(jù)正是發(fā)送端發(fā)送的3個(gè)值,,證明數(shù)據(jù)能夠正確傳輸,。本設(shè)計(jì)支持協(xié)議中5 bit、6 bit,、7 bit,、8 bit數(shù)據(jù)的傳輸,圖5中采用的是6 bit數(shù)據(jù)位,。
3.2 綜合結(jié)果
UART接口包括UART接口模塊(接收和發(fā)送模塊),、兩個(gè)FIFO模塊(深度為32、寬度為8),、UART波特率產(chǎn)生模塊和UART控制模塊,,在0.18 μm CMOS的工藝下用Synopsys的Design Compiler對(duì)模塊進(jìn)行綜合,將UART接口的輸入時(shí)鐘PCLK設(shè)置為100 MHz,,模塊總面積為19 620.7 μm2,,約合1962邏輯門、7 848個(gè)晶體管,。
本文提出了一個(gè)功能全面的UART IP核的設(shè)計(jì),,并采用Verilog HDL語言實(shí)現(xiàn)[6]。在與PC機(jī)的長(zhǎng)時(shí)間串口通信實(shí)驗(yàn)中能夠正確進(jìn)行傳輸,,在不同的波特率設(shè)置下都能正確工作,。同時(shí),用示波器觀測(cè)傳輸波形可知,,波特率誤差小于1%,。設(shè)計(jì)完成后,在VERA平臺(tái)上進(jìn)行了仿真驗(yàn)證,,最后下載到FPGA平臺(tái)上實(shí)現(xiàn),,與PC的串口相連,采用串口大師軟件進(jìn)行實(shí)測(cè),,其在全雙工模式下也能正常工作,,實(shí)測(cè)的結(jié)果顯示其性能和功能都能滿足要求。
參考文獻(xiàn)
[1] Samsung.S3C2410A:user manual revision 1.0[Z].2004.
[2] 趙海登,,劉曉文,,胡景軍,等.基于FPGA的UART IP核的設(shè)計(jì)實(shí)現(xiàn)[J].通信技術(shù),,2009,,5(42):177-178.
[3] 張松,董玲,,于宗光,,等.一種適合于SoC集成的UART核的設(shè)計(jì)實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),,2005,22(9):12.
[4] Wang Yongcheng,,Song Kefei.A new approach to relize UART[C].International Conference on Electronic & Mechanical Engineering and Information Technology,,2011:2751.
[5] 周殿鳳,周素成,,王俊華.基于FPGA的任意輸注分頻器的設(shè)計(jì)[J].信息化研究,,2010,36(2):59-60.
[6] 王金明.數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL第二版[M].北京:電子工業(yè)出版社,,2005.