董秀潔,付 凱
(中原工學(xué)院,鄭州450007)
基于FPGA的UART設(shè)計(jì)與實(shí)現(xiàn)
董秀潔,付 凱
(中原工學(xué)院,鄭州450007)
提出了一種基于FPGA的UART的實(shí)現(xiàn)方法.利用有限狀態(tài)機(jī)和硬件描述語言VHDL實(shí)現(xiàn)了通用異步收發(fā)器UART IP核的設(shè)計(jì),給出了用VHDL實(shí)現(xiàn)UART的數(shù)學(xué)模型,并進(jìn)行了仿真分析.結(jié)果表明,各項(xiàng)通信指標(biāo)均滿足要求,并可提高系統(tǒng)的可靠性和穩(wěn)定性.
有限狀態(tài)機(jī);硬件描述語言;通用異步收發(fā)器;FPGA
通用異步收發(fā)器(Universal Asynchronous Receiver Transmitter,UART)是一種能夠支持近距離和遠(yuǎn)距離傳輸?shù)漠惒酱薪涌冢捎诋惒酱型ㄐ沤涌诰哂袀鬏斁€少、成本低、可靠性高、實(shí)現(xiàn)簡單等優(yōu)點(diǎn),廣泛地應(yīng)用于PC和外設(shè)數(shù)據(jù)間的交換[1].在當(dāng)今流行的嵌入式微處理器芯片的設(shè)計(jì)中,異步串行通信接口已成為不可缺少的一部分.本文采用硬件描述語言VHDL,設(shè)計(jì)了一個(gè)具有UART功能的模塊,將UART的功能集成到FPGA芯片內(nèi)部,解決了傳統(tǒng)芯片的缺點(diǎn),提高了FPGA系統(tǒng)的集成度,使FPGA系統(tǒng)有強(qiáng)大的現(xiàn)場可編程能力,也使系統(tǒng)更加穩(wěn)定而可靠[2-3].
UART的一幀數(shù)據(jù)由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成[4].UART的數(shù)據(jù)幀格式如圖1所示.
圖1 UART的數(shù)據(jù)幀格式
收發(fā)雙方通信時(shí),首先在數(shù)據(jù)幀中設(shè)置起始位和停止位,在一個(gè)有效數(shù)據(jù)信息正式發(fā)送前,發(fā)送器先發(fā)送一個(gè)起始位,然后開始發(fā)送有效字符位,在有效字符位發(fā)送結(jié)束時(shí)再發(fā)送一個(gè)停止位.這樣,由起始位到停止位構(gòu)成一幀.這種通信方式又稱為起止式異步通信方式.
每一幀的信息在傳送之前,傳輸線處于邏輯高電平狀態(tài).在傳送一個(gè)字符信息的時(shí)候,首先發(fā)送起始位邏輯,一般為低電平;緊隨其后發(fā)送的是5到8位的信息位,先傳送低位后傳送高位;發(fā)送完字符的最高位之后,是可選擇的奇偶校驗(yàn)位(有奇校驗(yàn)、偶校驗(yàn)或無校驗(yàn)可供選擇);奇偶校驗(yàn)位后是標(biāo)志著一幀字符結(jié)束的停止位,為高電平.在傳送數(shù)據(jù)時(shí),數(shù)據(jù)的幀與幀之間如果有間隙,就要在停止位之后附加空閑位(用邏輯l來表示),當(dāng)然空閑位也可沒有,這時(shí)的傳送數(shù)據(jù)效率是最高的.圖1中,起始位:l位,為邏輯0;數(shù)據(jù)位:5~8位,為邏輯1或者0;奇偶校驗(yàn)位:1位,為邏輯l或者0;停止位:l位、1.5位或2位,為邏輯1;空閑位:不限.
在數(shù)據(jù)接收過程中,接收器要首先檢驗(yàn)起始位.在檢驗(yàn)起始位后,觸發(fā)接收過程,UART控制器會(huì)重置波特率發(fā)生器和移位寄存器,以準(zhǔn)備接收數(shù)據(jù).其后,串行總線的輸入數(shù)據(jù)將不斷被移位寄存器讀取,并且保存在其UART的寄存器內(nèi).接收完成之后,UART控制器會(huì)在輸出結(jié)果之前對已經(jīng)接收的數(shù)據(jù)進(jìn)行奇偶校驗(yàn).最后,UART控制器準(zhǔn)備下一次的數(shù)據(jù)接收,并重置控制器內(nèi)的信號(hào)檢測器.
數(shù)據(jù)發(fā)送的過程由加載和發(fā)送組成.加載就是UART控制器按照串行發(fā)送的順序?qū)⑵鹗嘉?、?shù)據(jù)位、奇偶校驗(yàn)位和停止位加載到移位寄存器內(nèi),這個(gè)過程的時(shí)鐘為系統(tǒng)時(shí)鐘,其對于串行發(fā)送的數(shù)據(jù)的傳輸速度來說非常快.加載之后,UART控制器會(huì)再次重置波特率發(fā)生器,并且將移位寄存器設(shè)置在波特率模式下,于是移位寄存器便在波特率時(shí)鐘的驅(qū)動(dòng)下將加載的數(shù)據(jù)發(fā)送出去.
UART系統(tǒng)主要由波特率發(fā)生模塊、接收模塊和發(fā)送模塊3部分組成,如圖2所示.
圖2 UART整體結(jié)構(gòu)圖
(1)波特率發(fā)生模塊.波特率發(fā)生模塊可根據(jù)電路的晶振頻率以及需要的接收時(shí)鐘、發(fā)送時(shí)鐘頻率計(jì)算出分頻數(shù)[5].針對發(fā)送和接收對時(shí)鐘的不同要求,給發(fā)送模塊和接收模塊提供不同的時(shí)鐘頻率.當(dāng)UART在發(fā)送數(shù)據(jù)時(shí),只需要按照一定的速率將數(shù)據(jù)串行地發(fā)送就可以了,因此,在實(shí)際設(shè)計(jì)中,UART通信時(shí)需要的時(shí)鐘頻率應(yīng)采用16倍于波特率的接收時(shí)鐘頻率[6].該模塊可以看作一個(gè)可控分頻器,提供了300、2 400、9 600、115 200四種常用的波特率.
(2)串口接收模塊.接收模塊是整個(gè)UART的設(shè)計(jì)的重點(diǎn),其主要功能是檢測數(shù)據(jù)幀的起始位,然后對接收的數(shù)據(jù)進(jìn)行串行到并行的轉(zhuǎn)換,并將接收好的數(shù)據(jù)儲(chǔ)存在寄存器內(nèi)等待PC機(jī)處理.接收器的接受時(shí)鐘與每個(gè)接收字符同步是接收功能實(shí)現(xiàn)的關(guān)鍵,但是串行數(shù)據(jù)幀與數(shù)據(jù)接收時(shí)鐘是異步的,所以必須有效地控制采集通信線路上的電平信號(hào)的時(shí)機(jī),以保證異步通信的雙方準(zhǔn)確無誤地交換信息.接收模塊流程圖如圖3所示.
圖3 接收模塊流程圖
其中,parityerr是奇偶校驗(yàn)是否有錯(cuò)的標(biāo)志,framingerr表示一幀的數(shù)據(jù)格式是否有錯(cuò),rxrdy表示數(shù)據(jù)接收完畢.
(3)串口發(fā)送模塊.發(fā)送模塊的主要功能為從CPU接收需要發(fā)送的并行數(shù)據(jù),將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),并且按照規(guī)定數(shù)據(jù)格式及波特率,在發(fā)送模塊時(shí)鐘mclkx16下,從端口data_in輸入.發(fā)送模塊包括發(fā)送緩沖寄存器(THR)和發(fā)送移位寄存器(TSR),這是2個(gè)8位的寄存器.發(fā)送模塊流程圖如圖4所示.
利用有限狀態(tài)機(jī)和VHDL語言設(shè)計(jì)UART IP核文件,編譯綜合后的頂層設(shè)計(jì)如圖5所示.
圖4 發(fā)送模塊流程圖
圖6所示為發(fā)送模塊仿真圖.
從圖6可以清晰地看出,當(dāng)reset復(fù)位信號(hào)處于低電平的時(shí)候,CPU發(fā)送的數(shù)據(jù)為“00110011”.當(dāng)發(fā)送標(biāo)志txrdy處于工作狀態(tài)時(shí),由起始位開始發(fā)送,然后信息數(shù)據(jù)位由低位到高位逐位發(fā)送,最后發(fā)送的是奇偶校驗(yàn)位和停止位.tx的輸出波形為:起始位“0”,數(shù)據(jù)位“1”“1”“0”“0”“1”“1”“0”“0”,奇偶校驗(yàn)位(設(shè)置為奇校驗(yàn))“1”,停止位“1”.
圖7所示為接收模塊仿真圖.
從圖7可以看出,測試的串行數(shù)據(jù)為“01010011”,系統(tǒng)復(fù)位之后,判斷為起始位0之后逐位由低到高接收,接收到的數(shù)據(jù)即rx的輸出波形是:起始位“0”,數(shù)據(jù)位“1”“1”“0”“0”“1”“0”“1”“0”,奇偶校驗(yàn)位“1”,停止位“1”.rxrdy表示數(shù)據(jù)接收完畢.
采用QuartusⅡ開發(fā)軟件對系統(tǒng)設(shè)計(jì)進(jìn)行綜合、硬件優(yōu)化、適配、編程,并下載至Altera公司的CycloneⅡEP2C35484C8 FPGA芯片,然后進(jìn)行硬件測試.結(jié)果顯示,該設(shè)計(jì)實(shí)現(xiàn)了通用異步收發(fā)器(UART)的功能,滿足其各項(xiàng)通信指標(biāo)要求,且工作可靠.
本文介紹了一種利用FPGA實(shí)現(xiàn)UART功能的方法,運(yùn)用VHDL語言設(shè)計(jì)通用異步收發(fā)器的IP核電路,通過QuartusII軟件進(jìn)行時(shí)序仿真和硬件測試,各項(xiàng)通信指標(biāo)均滿足要求.
[1]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].北京:科學(xué)出版社,2006.
[2]姜雪松,劉東升.硬件描述語言VHDL教程[M].西安:西安交通大學(xué)出版社,2004.
[3]周金福.VHDL與EDA技術(shù)入門速成[M].北京:人民郵電出版社,2009.
[4]牛濤,吳斌,焦風(fēng)川.基于FPGA的 UART電路設(shè)計(jì)[J].電子測量技術(shù),2006,29(3):73-74.
[5]賈子申,李淑清,王冠攀.基于FPGA的 UART控制器設(shè)計(jì)[J].電子測量技術(shù),2008,31(3):82-83.
[6]何慧珠,秦麗,張會(huì)新.基于FPGA的 UART IP核設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算信息,2008,24(1):223-224.
Design and Implementation of UART Based on FPGA
DONG Xiu-jie,F(xiàn)U Kai
(Zhongyuan Univerisity of Technology,Zhengzhou 450007,China)
This paper uses finite state machine and the hardware description language(VHDL)to achieve Universal Asynchronous Receiver Transmitter UART IP core design,proposes an FPGA-based implementation of the UART,specific description of the sending and receiving modules of the design method.The mathematical model of UART by VHDL,each module flowchart,simulation results are given.The results show that the UART functionality in the FPGA chip,makes the whole system more flexible,compact,reducing the board area,improve system reliability and stability.
finite state machine;VHDL;UART;FPGA
TN402
A
10.3969/j.issn.1671-6906.2012.02.015
1671-6906(2012)02-0066-04
2011-09-15
董秀潔(1957-),女,山東濰坊人,教授.