趙琳娜,趙 煌,李紅征
(1.江南大學信息工程學院,江蘇 無錫 214036;2.中國電子科技集團公司第58研究所,江蘇 無錫 214035)
UART波特率發生電路設計
趙琳娜1,趙 煌1,李紅征2
(1.江南大學信息工程學院,江蘇 無錫 214036;2.中國電子科技集團公司第58研究所,江蘇 無錫 214035)
設計了一種基于“ATD+迭代法”的UART波特率發生電路。波特率發生電路中的ATD電路用于監測串行數據的變化,并在串行數據的邊沿(上升沿或下降沿)輸出低電平信號。波特率探測電路對ATD電路的輸出信號的低電平和高電平分別進行計數,該計數值和保持寄存器中存儲的最小值比較,若前者小于后者,則保存寄存器中的最小值被該計數值取代,若前者大于后者,則保存寄存器中的最小值不變。經過一段時間比較迭代,最終得到設計需要的最小值,從而通過波特率發生器正確地輸出串行數據的波特率。
通用異步收發器;波特率發生電路;ATD電路
UART(Universal Asynchronous Receiver/Transmitter)通用異步收發器是用于控制微機系統(并行設備)與串行設備通信的芯片。
UART提供以下主要功能:發送功能(將由微機系統內部傳送過來的并行數據轉換為串行數據流輸出,并在輸出的串行數據流中加入奇偶校驗位和啟停標記),接收功能(將微機系統外部來的串行數據轉換為字節供微機系統內部并行數據的器件使用,并對接收的數據流進行奇偶校驗、刪除啟停標記)。
UART的異步收發是指在UART協議中,接收、發送數據不使用統一參考時鐘,收發雙方取得同步的方法是采用固定的串行數據格式,即通過在串行數據流中加入啟停標記位來實現同步。串行數據格式如圖1所示。
起始位:發出一個邏輯“0”的信號,表示傳輸字符的開始;數據位:緊接著起始位,其位數可以是5~8位;奇偶校驗位:數據位后加上這一位,使得“1”的位數為偶數(偶校驗)或奇數(奇校驗),以此來校驗數據傳送的正確性;停止位:是一個字符數據的結束標志,可以是1位、1.5位、2位的高電平;空閑位:處于邏輯“1”狀態,表示當前線路上沒有數據傳送。

UART鏈接典型的串口波特率有9600bit/s、19.2kbit/s、38.4kbit/s、57.6kbit/s和115.2kbit/s等。傳統的UART在傳輸數據前,發送端與接收端需要事先協議好傳輸的波特率,而自適應UART可以通過“迭代法”正確地探測出串行數據的波特率[1]。
“迭代法”基本原理如圖2所示。d表示串行數據中的一個下降沿,u表示緊接著下降沿d的一個上升沿,t表示相鄰邊沿d和u之間的時間間隔,等于一個或多個比特位的周期。采樣計數器在下降沿d處開始從初始值0計數,每遇到系統時鐘的上升沿遞增一次,并在上升沿u處停止計數,得到的計數值和在保持寄存器中存放的所謂“最小值”比較,如果該計數值小于“最小值”,那么寄存器中“最小值”將被該計數值取代,通過不斷地迭代,最終得到一個最小值。通過串行線路波特率的計算公式:波特率(bit/s)=系統時鐘頻率/min值,從而得到準確的串行數據波特率。

這種“迭代法”采用了簡單固定的方法來計算波特率,即通過迭代計算出相鄰下降沿和上升沿之間的“最小值”。不難發現,這種方法忽略了相鄰上升沿和下降沿之間存在的“最小值”,加大了計算波特率的時間。我們提出一種快速有效地計算波特率的方法——“ATD+迭代法”,這種方法兼顧了相鄰邊沿(相鄰下降沿和上升沿以及相鄰上升沿和下降沿)之間存在的“最小值”。從理論上講,“ATD+迭代法”的檢測速度是“迭代法”的2倍。
“ATD+迭代法”的基本想法是:第一步,通過ATD電路監測串行數據的變化;第二步,通過波特率檢測電路對ATD電路的輸出信號進行迭代,最終得到最小值。
圖3為ATD電路的輸入信號RXD和輸出信號ATDD的波形圖,串行數據RXD經過ATD電路處理,在RXD每一次的0、1變化(上升沿或下降沿)都會產生一個低電平,ATD電路的輸出波形見圖3中的ATDD信號;在波特率檢測電路中,兩個采樣計數器分別記錄下ATDD信號低電平的最小系統時鐘周期數min1和高電平的最小系統時鐘周期數min2,min1、min2的和就是RXD中一位數據所占用的系統時鐘周期數(也就是所謂的最小值),通過不斷迭代,最終得到我們需要的最小值。通過公式:波特率=系統時鐘頻率/最小值,就可以確定串行數據的波特率。

基于“ATD+迭代法”的基本想法,UART波特率發生模塊分為三個部分,即ATD電路、波特率檢測電路以及波特率產生電路。
UART波特率發生模塊中的ATD電路如圖4所示,圖中端口RXD為串行數據的輸入端口,雙向輸入輸出端口ATDD輸出對串行數據的檢測信號。使用Hspice軟件對ATD電路進行仿真,仿真結果如圖5所示??梢?,串行數據的每次翻轉(0→1或1→0)都會引起ATD電路輸出信號下降到低電平并持續一段時間。
UART波特率發生模塊中的波特率檢測電路的設計采用的HDL(hardware description language)語言為Verilog,根據自頂向下的設計原則進行設計。
波特率檢測電路設計流程圖如圖6所示。迭代的具體過程是:首先給最小值賦初值,高、低電平最小值g_min、l_min都設為40(對應于實際波特率,g_min應為40000000)。ATDD信號傳輸進來后,每遇到系統時鐘的上升沿,采樣計數器分別對高、低電平進行計數,計數結果分別與保持寄存器中存放的g_min和l_min進行比較,如果該計數值比g_min或l_min小那么就把計數結果賦值給g_min或l_min,否則,將保持寄存器中存放的g_min或l_min。如此迭代下去,最終得到最小值g_min和l_min,兩個數之和就是我們所需的最小值,也就是傳輸一位數據所占用的系統時鐘周期數。把該最小值傳輸給波特率發生器,就能產生相應的波特率。


波特率檢測電路的verilog程序關鍵代碼如下:











根據上述verilog程序,綜合得到UART波特率檢測電路的電路圖,如圖7(a)所示;其仿真波形如圖7(b)所示,從圖中可以看出,經過一段時間的迭代,最終得到一個最小值,從而準確地探測出RXD信號的波特率。

波特率發生器實際上就是一個分頻器。實現波特率時鐘的基本思路就是設計一個計數器,該計數器工作在頻率很高的系統時鐘下,當計數到波特率檢測電路輸出的最小值一半時將輸出置為高電平,再計數到該數值后將輸出置為低電平,如此反復就能得到所需的波特率時鐘[2]。
利用Quartus軟件完成電路的物理設計、仿真及綜合,結果表明采用“ATD+迭代法”設計的UART波特率發生電路能正確地輸出串行數據波特率。
[1]周建華,萬書芹,薛忠杰. 一種新穎的UART自適應波特率發生器的設計[J] . Semiconductor Technology,2007(12) ∶1052-1055.
[2]李秋菊,楊銀堂,高海霞. 基于Verilog HDL的UART IP的設計[J] . Semiconductor Technology,2007 (6) ∶ 520-523.
A Design of Baud-rate Generator for UART
ZHAO Lin-na1, ZHAO Huang1, LI Hong-zheng2
(1.School of IT Engineering,Southern Yangtze University,Wuxi214036,China;2.China Electronic Technology Group Corporation No.58Research Institute,Wuxi214035,China)
In our paper we design a UART baud-rate Generator based on ATD (Address-Translate-Detector)circuit. The ATD circuit is used to monitor the changes of serial data, and experts the low level signals along the rising edges or falling edges of serial data. Two counters are used for counting the numbers of low and high level periods of ATD signal respectively. The value stored in counters has been compared with the minimum value stored in register. If the former is less than the latter, then the minimum value will be replaced by the value stored in counters, otherwise, maintaining the latter. Repeating this process, we get the accurate baud-rate.
UART; baud-rate generator; address-translate-detector (ATD) circuit
TN791
A
1681-1070(2010)09-0019-05
2010-06-13

趙琳娜(1979-),女,天津人,助教,研究方向為CMOS數字集成電路設計。