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