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