資源描述:
《基于fpga的串口通信設(shè)計與實現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、基于FPGA的UART設(shè)計與實現(xiàn)0引言通用異步收發(fā)器(UniversalAsynchronousReceiver/Transmitter,UART)可以和各種標(biāo)準(zhǔn)串行接口,如RS232和RS485等進(jìn)行全雙工異步通信,具有傳輸距離遠(yuǎn)、成本低、可靠性高等優(yōu)點。一般UART由專用芯片如8250,16450來實現(xiàn),但專用芯片引腳都較多,內(nèi)含許多輔助功能,在實際使用時往往只需要用到UART的基本功能,使用專用芯片會造成資源浪費(fèi)和成本提高。一般而言UART和外界通信只需要兩條信號線RXD和TXD,其中RXD是UART的接收端,T
2、XD是UART的發(fā)送端,接收與發(fā)送是全雙工形式。由于可編程邏輯器件技術(shù)的快速發(fā)展,F(xiàn)PGA的功能日益強(qiáng)大,其開發(fā)周期短、可重復(fù)編程的優(yōu)點也越來越明顯,在FPGA芯片上集成UART功能模塊并和其他模塊組合可以很方便地實現(xiàn)一個能與其他設(shè)備進(jìn)行串行通信的片上系統(tǒng)。FPGA(FieldProgrammableGateArray)現(xiàn)場可編程門陣列在數(shù)字電路的設(shè)計中已經(jīng)被廣泛使用。這種設(shè)計方式可以將以前需要多塊集成芯片的電路設(shè)計到一塊大模塊可編程邏輯器件中,大大減少了電路板的尺寸,增強(qiáng)了系統(tǒng)的可靠性和設(shè)計的靈活性。1UART功能設(shè)
3、計1.1UART的工作原理異步通信時,UART發(fā)送/接收數(shù)據(jù)的傳輸格式表1所示,一個字符單位由開始位、數(shù)據(jù)位、停止位組成。表1UART發(fā)送/接收數(shù)據(jù)的傳輸格式STARTD0D1D2D3D4D5D6D7PSTOP起始位數(shù)據(jù)位較驗位停止位異步通信的一幀傳輸經(jīng)歷以下步驟:(1)無傳輸。發(fā)送方連續(xù)發(fā)送信號,處于信息“1”狀態(tài)。(2)起始傳輸。發(fā)送方在任何時刻將傳號變成空號,即“1”跳變到“O”,并持續(xù)1位時間表明發(fā)送方開始傳輸數(shù)據(jù)。而同時,接收方收到空號后,開始與發(fā)送方同步,并期望收到隨后的數(shù)據(jù)。(3)奇偶傳輸。數(shù)據(jù)傳輸之后是
4、可供選擇的奇偶位發(fā)送或接收。(4)停止傳輸。最后是發(fā)送或接收的停止位,其狀態(tài)恒為“1”。發(fā)送或接收一個完整的字節(jié)信息,首先是一個作為起始位的邏輯“0”位,接著是8個數(shù)據(jù)位,然后是停止位邏輯“1”位,數(shù)據(jù)線空閑時為高或“1”狀態(tài)。起始位和停止位的作用是使接收器能把局部時鐘與每個新開始接收的字符再同步。異步通信沒有可參照的時鐘信號,發(fā)送器可以隨時發(fā)送數(shù)據(jù),任何時刻串行數(shù)據(jù)到來時,接收器必須準(zhǔn)確地發(fā)現(xiàn)起始位下降沿的出現(xiàn)時間,從而正確采樣數(shù)據(jù)。設(shè)計時可參考由專用芯片實現(xiàn)的UART的功能并進(jìn)行一定精簡,如可以用FPGA的片內(nèi)RA
5、M替代UART的FIFO,不用單獨在UART模塊中實現(xiàn)。設(shè)計的基本原則是保留最主要的功能,基于FPGA的UART系統(tǒng)波特率時鐘發(fā)生器、接收器和發(fā)送器3個子模塊組成,如圖1所示。圖1基于FPGA的UART組成模塊1.1接收器設(shè)計接收器的工作過程如下,如圖2所示,在接收數(shù)據(jù)寄存器被讀出一幀數(shù)據(jù)或系統(tǒng)開始工作以后,接收進(jìn)程被啟動。接收進(jìn)程啟動之后,檢測起始位,檢測到有效起始位后,以約定波特率的時鐘開始接收數(shù)據(jù),根據(jù)數(shù)據(jù)位數(shù)的約定,計數(shù)器統(tǒng)計接收位數(shù)。一幀數(shù)據(jù)接收完畢之后,如果使用了奇偶校驗,則檢測校驗位,如無誤則接收停止位。
6、停止位接收完畢后,將接收數(shù)據(jù)轉(zhuǎn)存到數(shù)據(jù)寄存器中。圖2數(shù)據(jù)接收圖為確保接收器可靠工作,在接收端開始接收數(shù)據(jù)位之前,處于搜索狀態(tài),這時接收端以16倍波特率的速率讀取線路狀態(tài),檢測線路上出現(xiàn)低電平的時刻。因為異步傳輸?shù)奶攸c是以起始位為基準(zhǔn)同步的。然而,通信線上的噪音也極有可能使傳號“1”跳變到空號“0”。所以接收器以16倍的波特率對這種跳變進(jìn)行檢測,直至在連續(xù)8個接收時鐘以后采樣值仍然是低電平,才認(rèn)為是一個真正的起始位,而不是噪音引起的,其中若有一次采樣得到的為高電平則認(rèn)為起始信號無效,返回初始狀態(tài)重新等待起始信號的到來。找
7、到起始位以后,就開始接收數(shù)據(jù),最可靠的接收應(yīng)該是接收時鐘的出現(xiàn)時刻正好對著數(shù)據(jù)位的中央。由于在起始位檢測時,已使時鐘對準(zhǔn)了位中央,用16倍波特率的時鐘作為接收時鐘,就是為了確保在位寬的中心時間對接收的位序列進(jìn)行可靠采樣,當(dāng)采樣計數(shù)器計數(shù)結(jié)束后所有數(shù)據(jù)位都已經(jīng)輸入完成。最后對停止位的高電平進(jìn)行檢測,若正確檢測到高電平,說明本幀的各位正確接收完畢,將數(shù)據(jù)轉(zhuǎn)存到數(shù)據(jù)寄存器中,否則出錯。采用有限狀態(tài)機(jī)模型可以更清晰明確地描述接收器的功能,便于代碼實現(xiàn)。接收器的狀態(tài)轉(zhuǎn)換圖如圖3所示,為突出主要過程,圖中省略了奇偶校驗的情況。接收
8、器狀態(tài)機(jī)由5個工作狀態(tài)組成,分別是空閑狀態(tài)、起始位確認(rèn)、采樣數(shù)據(jù)位、停止位確認(rèn)和數(shù)據(jù)正確,觸發(fā)狀態(tài)轉(zhuǎn)換的事件和在各個狀態(tài)執(zhí)行的動作見圖中的文字說明。圖3接收器狀態(tài)轉(zhuǎn)換圖根據(jù)狀態(tài)圖其主要的程序如下所示:elseif(RX_En_Sig)case(i)4'd0:if(H2L_Sig)begini<=i+1'b1;isCount<=1'