趙琳娜,趙 煌,李紅征
(1.江南大學(xué)信息工程學(xué)院,江蘇 無錫 214036;2.中國電子科技集團公司第58研究所,江蘇 無錫 214035)
UART波特率發(fā)生電路設(shè)計
趙琳娜1,趙 煌1,李紅征2
(1.江南大學(xué)信息工程學(xué)院,江蘇 無錫 214036;2.中國電子科技集團公司第58研究所,江蘇 無錫 214035)
設(shè)計了一種基于“ATD+迭代法”的UART波特率發(fā)生電路。波特率發(fā)生電路中的ATD電路用于監(jiān)測串行數(shù)據(jù)的變化,并在串行數(shù)據(jù)的邊沿(上升沿或下降沿)輸出低電平信號。波特率探測電路對ATD電路的輸出信號的低電平和高電平分別進行計數(shù),該計數(shù)值和保持寄存器中存儲的最小值比較,若前者小于后者,則保存寄存器中的最小值被該計數(shù)值取代,若前者大于后者,則保存寄存器中的最小值不變。經(jīng)過一段時間比較迭代,最終得到設(shè)計需要的最小值,從而通過波特率發(fā)生器正確地輸出串行數(shù)據(jù)的波特率。
通用異步收發(fā)器;波特率發(fā)生電路;ATD電路
UART(Universal Asynchronous Receiver/Transmitter)通用異步收發(fā)器是用于控制微機系統(tǒng)(并行設(shè)備)與串行設(shè)備通信的芯片。
UART提供以下主要功能:發(fā)送功能(將由微機系統(tǒng)內(nèi)部傳送過來的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)流輸出,并在輸出的串行數(shù)據(jù)流中加入奇偶校驗位和啟停標(biāo)記),接收功能(將微機系統(tǒng)外部來的串行數(shù)據(jù)轉(zhuǎn)換為字節(jié)供微機系統(tǒng)內(nèi)部并行數(shù)據(jù)的器件使用,并對接收的數(shù)據(jù)流進行奇偶校驗、刪除啟停標(biāo)記)。
UART的異步收發(fā)是指在UART協(xié)議中,接收、發(fā)送數(shù)據(jù)不使用統(tǒng)一參考時鐘,收發(fā)雙方取得同步的方法是采用固定的串行數(shù)據(jù)格式,即通過在串行數(shù)據(jù)流中加入啟停標(biāo)記位來實現(xiàn)同步。串行數(shù)據(jù)格式如圖1所示。
起始位:發(fā)出一個邏輯“0”的信號,表示傳輸字符的開始;數(shù)據(jù)位:緊接著起始位,其位數(shù)可以是5~8位;奇偶校驗位:數(shù)據(jù)位后加上這一位,使得“1”的位數(shù)為偶數(shù)(偶校驗)或奇數(shù)(奇校驗),以此來校驗數(shù)據(jù)傳送的正確性;停止位:是一個字符數(shù)據(jù)的結(jié)束標(biāo)志,可以是1位、1.5位、2位的高電平;空閑位:處于邏輯“1”狀態(tài),表示當(dāng)前線路上沒有數(shù)據(jù)傳送。
UART鏈接典型的串口波特率有9600bit/s、19.2kbit/s、38.4kbit/s、57.6kbit/s和115.2kbit/s等。傳統(tǒng)的UART在傳輸數(shù)據(jù)前,發(fā)送端與接收端需要事先協(xié)議好傳輸?shù)牟ㄌ芈?,而自適應(yīng)UART可以通過“迭代法”正確地探測出串行數(shù)據(jù)的波特率[1]。
“迭代法”基本原理如圖2所示。d表示串行數(shù)據(jù)中的一個下降沿,u表示緊接著下降沿d的一個上升沿,t表示相鄰邊沿d和u之間的時間間隔,等于一個或多個比特位的周期。采樣計數(shù)器在下降沿d處開始從初始值0計數(shù),每遇到系統(tǒng)時鐘的上升沿遞增一次,并在上升沿u處停止計數(shù),得到的計數(shù)值和在保持寄存器中存放的所謂“最小值”比較,如果該計數(shù)值小于“最小值”,那么寄存器中“最小值”將被該計數(shù)值取代,通過不斷地迭代,最終得到一個最小值。通過串行線路波特率的計算公式:波特率(bit/s)=系統(tǒng)時鐘頻率/min值,從而得到準(zhǔn)確的串行數(shù)據(jù)波特率。
這種“迭代法”采用了簡單固定的方法來計算波特率,即通過迭代計算出相鄰下降沿和上升沿之間的“最小值”。不難發(fā)現(xiàn),這種方法忽略了相鄰上升沿和下降沿之間存在的“最小值”,加大了計算波特率的時間。我們提出一種快速有效地計算波特率的方法——“ATD+迭代法”,這種方法兼顧了相鄰邊沿(相鄰下降沿和上升沿以及相鄰上升沿和下降沿)之間存在的“最小值”。從理論上講,“ATD+迭代法”的檢測速度是“迭代法”的2倍。
“ATD+迭代法”的基本想法是:第一步,通過ATD電路監(jiān)測串行數(shù)據(jù)的變化;第二步,通過波特率檢測電路對ATD電路的輸出信號進行迭代,最終得到最小值。
圖3為ATD電路的輸入信號RXD和輸出信號ATDD的波形圖,串行數(shù)據(jù)RXD經(jīng)過ATD電路處理,在RXD每一次的0、1變化(上升沿或下降沿)都會產(chǎn)生一個低電平,ATD電路的輸出波形見圖3中的ATDD信號;在波特率檢測電路中,兩個采樣計數(shù)器分別記錄下ATDD信號低電平的最小系統(tǒng)時鐘周期數(shù)min1和高電平的最小系統(tǒng)時鐘周期數(shù)min2,min1、min2的和就是RXD中一位數(shù)據(jù)所占用的系統(tǒng)時鐘周期數(shù)(也就是所謂的最小值),通過不斷迭代,最終得到我們需要的最小值。通過公式:波特率=系統(tǒng)時鐘頻率/最小值,就可以確定串行數(shù)據(jù)的波特率。
基于“ATD+迭代法”的基本想法,UART波特率發(fā)生模塊分為三個部分,即ATD電路、波特率檢測電路以及波特率產(chǎn)生電路。
UART波特率發(fā)生模塊中的ATD電路如圖4所示,圖中端口RXD為串行數(shù)據(jù)的輸入端口,雙向輸入輸出端口ATDD輸出對串行數(shù)據(jù)的檢測信號。使用Hspice軟件對ATD電路進行仿真,仿真結(jié)果如圖5所示??梢?,串行數(shù)據(jù)的每次翻轉(zhuǎn)(0→1或1→0)都會引起ATD電路輸出信號下降到低電平并持續(xù)一段時間。
UART波特率發(fā)生模塊中的波特率檢測電路的設(shè)計采用的HDL(hardware description language)語言為Verilog,根據(jù)自頂向下的設(shè)計原則進行設(shè)計。
波特率檢測電路設(shè)計流程圖如圖6所示。迭代的具體過程是:首先給最小值賦初值,高、低電平最小值g_min、l_min都設(shè)為40(對應(yīng)于實際波特率,g_min應(yīng)為40000000)。ATDD信號傳輸進來后,每遇到系統(tǒng)時鐘的上升沿,采樣計數(shù)器分別對高、低電平進行計數(shù),計數(shù)結(jié)果分別與保持寄存器中存放的g_min和l_min進行比較,如果該計數(shù)值比g_min或l_min小那么就把計數(shù)結(jié)果賦值給g_min或l_min,否則,將保持寄存器中存放的g_min或l_min。如此迭代下去,最終得到最小值g_min和l_min,兩個數(shù)之和就是我們所需的最小值,也就是傳輸一位數(shù)據(jù)所占用的系統(tǒng)時鐘周期數(shù)。把該最小值傳輸給波特率發(fā)生器,就能產(chǎn)生相應(yīng)的波特率。
波特率檢測電路的verilog程序關(guān)鍵代碼如下:
根據(jù)上述verilog程序,綜合得到UART波特率檢測電路的電路圖,如圖7(a)所示;其仿真波形如圖7(b)所示,從圖中可以看出,經(jīng)過一段時間的迭代,最終得到一個最小值,從而準(zhǔn)確地探測出RXD信號的波特率。
波特率發(fā)生器實際上就是一個分頻器。實現(xiàn)波特率時鐘的基本思路就是設(shè)計一個計數(shù)器,該計數(shù)器工作在頻率很高的系統(tǒng)時鐘下,當(dāng)計數(shù)到波特率檢測電路輸出的最小值一半時將輸出置為高電平,再計數(shù)到該數(shù)值后將輸出置為低電平,如此反復(fù)就能得到所需的波特率時鐘[2]。
利用Quartus軟件完成電路的物理設(shè)計、仿真及綜合,結(jié)果表明采用“ATD+迭代法”設(shè)計的UART波特率發(fā)生電路能正確地輸出串行數(shù)據(jù)波特率。
[1]周建華,萬書芹,薛忠杰. 一種新穎的UART自適應(yīng)波特率發(fā)生器的設(shè)計[J] . Semiconductor Technology,2007(12) ∶1052-1055.
[2]李秋菊,楊銀堂,高海霞. 基于Verilog HDL的UART IP的設(shè)計[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數(shù)字集成電路設(shè)計。