基于FPGA的串口通信設(shè)計(jì)_第1頁
基于FPGA的串口通信設(shè)計(jì)_第2頁
基于FPGA的串口通信設(shè)計(jì)_第3頁
基于FPGA的串口通信設(shè)計(jì)_第4頁
基于FPGA的串口通信設(shè)計(jì)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于FPGA勺UAR做計(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í)際使用時往往只需要用到UART勺基本功能,使用專用芯片會造成資源浪費(fèi)和成本提高。一般而言UARTffi外界通信只需要兩條信號線RXDff口TXD其中RXDgUART的接收端,TX皿UART勺發(fā)送端,接收與發(fā)送是全雙工形式。由于可編程邏輯器件技術(shù)的快速

2、發(fā)展,F(xiàn)PGA勺功能日益強(qiáng)大,其開發(fā)周期短、可重復(fù)編程的優(yōu)點(diǎn)也越來越明顯,在FPGA5片上集成UAR也能模塊并和其他模塊組合可以很方便地實(shí)現(xiàn)一個能與其他設(shè)備進(jìn)行串行通信的片上系統(tǒng)。FPGA(FieldProgrammableGateArray)現(xiàn)場可編程門陣列在數(shù)字電路的設(shè)計(jì)中已經(jīng)被廣泛使用。這種設(shè)計(jì)方式可以將以前需要多塊集成芯片的電路設(shè)計(jì)到一塊大模塊可編程邏輯器件中,大大減少了電路板的尺寸,增強(qiáng)了系統(tǒng)的可靠性和設(shè)計(jì)的靈活性。1UART功能設(shè)計(jì)1.1 UART勺工作原理異步通信時,UARTS送/接收數(shù)據(jù)的傳輸格式表1所示,一個字符單位由開始位、數(shù)據(jù)位、停止位組成。表1UART發(fā)送/接收數(shù)據(jù)的傳

3、輸格式STARTD0D1D2D3D4D5D6D7PSTOP起始位數(shù)據(jù)位較驗(yàn)位停止位異步通信的一幀傳輸經(jīng)歷以下步驟:(1)無傳輸。發(fā)送方連續(xù)發(fā)送信號,處于信息“1”狀態(tài)。(2)起始傳輸。發(fā)送方在任何時刻將傳號變成空號,即“1”跳變到“O,并持續(xù)1位時間說明發(fā)送方開始傳輸數(shù)據(jù)。而同時,接收方收到空號后,開始與發(fā)送方同步,并期望收到隨后的數(shù)據(jù)。(3)奇偶傳輸。數(shù)據(jù)傳輸之后是可供選擇的奇偶位發(fā)送或接收。(4)停止傳輸。最后是發(fā)送或接收的停止位,其狀態(tài)包為“1”。發(fā)送或接收一個完整的字節(jié)信息,首先是一個作為起始位的邏輯“0”位,接著是8個數(shù)據(jù)位,然后是停止位邏輯“1”位,數(shù)據(jù)線空閑時為高或“1”狀態(tài)。起

4、始位和停止位的作用是使接收器能把局部時鐘與每個新開始接收的字符再同步。異步通信沒有可參照的時鐘信號,發(fā)送器可以隨時發(fā)送數(shù)據(jù),任何時刻用行數(shù)據(jù)到來時,接收器必須準(zhǔn)確地發(fā)現(xiàn)起始位下降沿的出現(xiàn)時間,從而正確采樣數(shù)據(jù)。設(shè)計(jì)時可參考由專用芯片實(shí)現(xiàn)的UART的功能并進(jìn)行一定精簡,如可以用FPGA勺片內(nèi)RAMtHtUART勺FIFO,不用單獨(dú)在UART真塊中實(shí)現(xiàn)。設(shè)計(jì)的基本原則是保留最主要的功能,基于FPGA勺UAR琮統(tǒng)波特率時鐘發(fā)生器、接收器和發(fā)送器3個子模塊組成,如圖1所示。圖1基于FPGA勺UARTfi成模塊1.2 接收器設(shè)計(jì)接收器的工作過程如下,如圖2所示,在接收數(shù)據(jù)寄存器被讀出一幀數(shù)據(jù)或系統(tǒng)開始工

5、作以后,接收進(jìn)程被啟動。接收進(jìn)程啟動之后,檢測起始位,檢測到有效起始位后,以約定波特率的時鐘開始接收數(shù)據(jù),根據(jù)數(shù)據(jù)位數(shù)的約定,計(jì)數(shù)器統(tǒng)計(jì)接收位數(shù)。一幀數(shù)據(jù)接收完畢之后,如果使用了奇偶校驗(yàn),則檢測校驗(yàn)位,如無誤則接收停止位。停止位接收完畢后,將接收數(shù)據(jù)轉(zhuǎn)存到數(shù)據(jù)寄存器中。Rin_In定時IIIIIIIIIII翱廨采集聚集梟篥柔較柔第索篌爰集采集物晞想晦圖2數(shù)據(jù)接收圖為確保接收器可靠工作,在接收端開始接收數(shù)據(jù)位之前,處于搜索狀態(tài),這時接收端以16倍波特率的速率讀取線路狀態(tài),檢測線路上出現(xiàn)低電平的時刻。因?yàn)楫惒絺鬏數(shù)奶攸c(diǎn)是以起始位為基準(zhǔn)同步的。然而,通信線上的噪音也極有可能使傳號“1”跳變到空號“0

6、”。所以接收器以16倍的波特率對這種跳變進(jìn)行檢測,直至在連續(xù)8個接收時鐘以后采樣值仍然是低電平,才認(rèn)為是一個真正的起始位,而不是噪音引起的,其中假設(shè)有一次采樣得到的為高電平則認(rèn)為起始信號無效,返回初始狀態(tài)重新等待起始信號的到來。找到起始位以后,就開始接收數(shù)據(jù),最可靠的接收應(yīng)該是接收時鐘的出現(xiàn)時刻正好對著數(shù)據(jù)位的中央。由于在起始位檢測時,已使時鐘對準(zhǔn)了位中央,用16倍波特率的時鐘作為接收時鐘,就是為了確保在位寬的中心時間對接收的位序列進(jìn)行可靠采樣,當(dāng)采樣計(jì)數(shù)器計(jì)數(shù)結(jié)束后所有數(shù)據(jù)位都已經(jīng)輸入完成。最后對停止位的高電平進(jìn)行檢測,假設(shè)正確檢測到高電平,說明本幀的各位正確接收完畢,將數(shù)據(jù)轉(zhuǎn)存到數(shù)據(jù)寄存器

7、中,否則出錯。采用有限狀態(tài)機(jī)模型可以更清晰明確地描述接收器的功能,便于代碼實(shí)現(xiàn)。接收器的狀態(tài)轉(zhuǎn)換圖如圖3所示,為突出主要過程,圖中省略了奇偶校驗(yàn)的情況。接收器狀態(tài)機(jī)由5個工作狀態(tài)組成,分別是空閑狀態(tài)、起始位確認(rèn)、采樣數(shù)據(jù)位、停止位確認(rèn)和數(shù)據(jù)正確,觸發(fā)狀態(tài)轉(zhuǎn)換的事件和在各個狀態(tài)執(zhí)行的動作見圖中的文字說明。根據(jù)狀態(tài)圖其主要的程序如下所示:elseif(RX_En_Sig)case(i)4d0:if(H2L_Sig)begini=i+1b1;isCount=1b1;end4d1:if(BPS_CLK)begini=i+1b1;end4d2,4d3,4d4,4d5,4d6,4d7,4d8,4d9:if

8、(BPS_CLK)begini=i+1b1;rDatai-2=RX_Pin_In;end4d10:if(BPS_CLK)begini=i+1b1;end4d11:if(BPS_CLK)begini=i+1b1;end4d12:begini=i+1b1;isDone=1b1;isCount=1b0;end4d13:begini=4d0;isDone=1b0;endendcase其中起始位檢測正確會觸發(fā)RX_En_Sig一次的定時采集時第0、1位數(shù)據(jù)起始位,保持忽略態(tài)度。定時采集的是八位數(shù)據(jù)位,每一位數(shù)據(jù)位會依低位到最高位儲存入rData寄存器。此時程序前兩位省略取2-9位就是傳送的數(shù)據(jù)1.3 波

9、特率發(fā)生器設(shè)計(jì)波特率發(fā)生器實(shí)質(zhì)是設(shè)計(jì)一個分頻器,用于產(chǎn)生和RS232通信同步的時鐘。在系統(tǒng)中用一個計(jì)數(shù)器來完成這個功能,分頻系數(shù)N決定了波特率的數(shù)值。該計(jì)數(shù)器一般工作在一個頻率較高的系統(tǒng)時鐘下,當(dāng)計(jì)數(shù)到N/2時將輸出置為高電平,再計(jì)數(shù)到N/2的數(shù)值后將輸出置為低電平,如此反復(fù)即可得到占空比50%的波特率時鐘,具體的波特率依賴于所使用的系統(tǒng)時鐘頻率和N的大小。如系統(tǒng)時鐘頻率是50MHz,要求波特率是9600,N=1/50MHz=5208如果從零開始算起就是5207個計(jì)數(shù)。然而,采集數(shù)據(jù)要求“在周期的中間”,那么結(jié)果是5208/2,結(jié)果等于2604?;旧蟫x,模塊才開始計(jì)數(shù)。利用verlog所寫

10、的具體代碼如下:modulerx_bps_module(CLK,RSTn,Count_Sig,BPS_CLK);inputCLK;inputRSTn;inputCount_Sig;outputBPS_CLK;/*/reg12:0Count_BPS;always(posedgeCLKornegedgeRSTn)if(!RSTn)Count_BPS=13d0;elseif(Count_BPS=13d5207)Count_BPS=13d0;elseif(Count_Sig)Count_BPS=Count_BPS+1b1;elseCount_BPS=13d0;/*/assignBPS_CLK=(Cou

11、nt_BPS=12d2604)?1b1:1b0;/*/endmodule1.4 發(fā)送器設(shè)計(jì)圖4發(fā)送數(shù)據(jù)原理圖當(dāng)發(fā)送數(shù)據(jù)時,對于每一個數(shù)據(jù)的發(fā)送,每一位采用的是定時發(fā)送。假設(shè),配置的波特率是9600bps,那么當(dāng)有一個發(fā)送標(biāo)志位時,數(shù)據(jù)將會以1/9600的節(jié)拍將數(shù)據(jù)一位一位的發(fā)送出去。一幀數(shù)據(jù)有11位,需要12次定時。主要代碼為:always(posedgeCLKornegedgeRSTn)if(!RSTn)begini=4d0;rTX=1b1;isDone=1b0;endelseif(TX_En_Sig)case(i)4d0:if(BPS_CLK)begini=i+1b1;rTX=1b0;en

12、d4d1,4d2,4d3,4d4,4d5,4d6,4d7,4d8:TX_Datai-1;endif(BPS_CLK)begini=ii+1b1;rTX=4d9:if(BPS_CLK)begini=ii+1b1;rTX=1b1;end4d10:if(BPS_CLK)begini=ii+1b1;rTX=1b1;end4d11:if(BPS_CLK)begini=ii+1b1;isDone=1b1;end4d12:begini=4d0;isDone=1b0;endendcase2數(shù)據(jù)傳輸仿真Modelsim仿真工具是Model公司開發(fā)的。它支持Verilog、VHDLH及他們的混合仿真,它可以將整個

13、程序分步執(zhí)行,使設(shè)計(jì)者直接看到他的程序下一步要執(zhí)行的語句,而且在程序執(zhí)行的任何步驟任何時刻都可以查看任意變量的當(dāng)前值,可以在Dataflow窗口查看某一單元或模塊的輸入輸出的連續(xù)變化等,比quartus自帶的仿真器功能強(qiáng)大的多,是目前業(yè)界最通用的仿真器之一。編寫一個仿真激勵程序用于單獨(dú)仿真串口發(fā)送模塊。步驟0的時候,將數(shù)據(jù)8h2E發(fā)送至串口發(fā)送模塊后使能串口發(fā)送模塊,然后等待串口發(fā)送模塊反饋完成信號。同樣的動作也有步驟1是發(fā)送數(shù)據(jù)8h3f,然而步驟2是發(fā)送數(shù)據(jù)8hdd。步驟3是停止動作圖5發(fā)送數(shù)據(jù)仿真放大第二個數(shù)據(jù)0x3f的發(fā)送過程,如下列圖所示??梢钥闯龃诎l(fā)送模塊,發(fā)送數(shù)據(jù)的格式是一幀11

14、位。開始位-邏輯0,1:8數(shù)據(jù)位,9校驗(yàn)位沒有需要可以隨便填,這里填邏輯1,10停止位邏輯1。圖6發(fā)送過程仿真結(jié)果1出103了6$4321A1克件勵過程00111111過0.316g9inV文件-用口發(fā)送011J1110Q1i圖7發(fā)送數(shù)據(jù)的延時仿真串口發(fā)送模塊配置的波特率是9600kbps,所以一個數(shù)據(jù)逗留的時間是大約104us。在仿真結(jié)果中,在B0B1是數(shù)據(jù)0,B1B2是數(shù)據(jù)1B10B11是數(shù)據(jù)10。BxBx之間的時間大約是104uso用串口發(fā)送模塊作為用口接收模塊的刺激,亦即用口接收模塊的輸入復(fù)雜輸入。用串口發(fā)送模塊作為用口接收模塊的刺激,亦即用口接收模塊的輸入復(fù)雜輸入。下列圖是仿真虛擬環(huán)

15、境env_rx_module.v它組合了串口發(fā)送模塊和串口接收模塊。env_rx_module.v擁有TX_En_Sig,TX_Data,TX_Done_Sig,RX_En_Sig,RX_Done_Sig,RX_Data等信號。在激勵的過程中,需要對這些信號控制。IX Eft S i arx DataiIK_0one_5 i &jR-i.:串口發(fā)送模塊心!串口接收模塊?嘰嬴&-II*:tXmodule.Vifri(modullb.vi:W_*JI;i-envrxmodule,v圖8接收模塊仿真建模圖當(dāng)RX_En_Sig拉高的時候,用口接收模塊開始準(zhǔn)備接收數(shù)據(jù)了。當(dāng)一幀11位數(shù)據(jù)發(fā)送至用口接收模

16、塊,并且被用口接收模塊過濾。最后經(jīng)過過濾的數(shù)據(jù)會輸出至RX_Data,然后產(chǎn)生一個完成信號至RX_Done_Sig在這里數(shù)據(jù)格式四1幀11位,并且波特率為9600kbps。仿真結(jié)果如下列圖所示:圖10發(fā)送結(jié)果仿真圖上圖仿真結(jié)果顯示了“串口發(fā)送模塊作為用口接收模塊的刺激”的激勵過程。Cursor省略為C在C1C比問是第一幀數(shù)據(jù)的傳送,C2C3是第二位數(shù)據(jù)的傳送,其他的以此類推,然和C1C12是一幀數(shù)據(jù)11位的傳送過程。注意,每個CxC壯間的時間大約是104us,亦即9600kbps的波特率3結(jié)語本設(shè)計(jì)是基于FPGA勺UARTJ計(jì),用時較少,邏輯消耗小,成熟穩(wěn)定的實(shí)現(xiàn)了數(shù)據(jù)的發(fā)送與接收,可以兼容到

17、自己的程序中。本設(shè)計(jì)的仿真程序?qū)崿F(xiàn)了激勵的所有功能,完成初步設(shè)計(jì)要求。附錄1:發(fā)送模塊moduletx_control_module(CLK,RSTn,TX_En_Sig,TX_Data,BPS_CLK,TX_Done_Sig,TX_Pin_Out);inputCLK;inputRSTn;inputTX_En_Sig;input7:0TX_Data;inputBPS_CLK;outputTX_Done_Sig;outputTX_Pin_Out;/*/reg3:0i;regrTX;regisDone;always(posedgeCLKornegedgeRSTn)if(!RSTn)begini=4

18、d0;rTX=1b1;isDone=1b0;endelseif(TX_En_Sig)case(i)4d0:if(BPS_CLK)begini=i+1b1;rTX=1b0;end4d1,4d2,4d3,4d4,4d5,4d6,4d7,4d8:if(BPS_CLK)begini=i+1b1;rTX=TX_Datai-1;end4d9:if(BPS_CLK)begini=i+1b1;rTX=1b1;end4d10:if(BPS_CLK)begini=i+1b1;rTX=1b1;end4d11:if(BPS_CLK)begini=i+1b1;isDone=1b1;end4d12:begini=4d0;

19、isDone=1b0;endendcase/*/assignTX_Pin_Out=rTX;assignTX_Done_Sig=isDone;/*/Endmodule學(xué)習(xí)文檔僅供參考附錄2:接收模塊:modulerx_control_module(CLK,RSTn,H2L_Sig,RX_Pin_In,BPS_CLK,RX_En_Sig,Count_Sig,RX_Data,RX_Done_Sig);inputCLK;inputRSTn;inputH2L_Sig;inputRX_En_Sig;inputRX_Pin_In;inputBPS_CLK;outputCount_Sig;output7:0RX_Data;outputRX_Done_Sig;/*/reg3:0i;reg7:0rData;regisCount;regisDone;always(posedgeCLKornegedgeRSTn)if(!RSTn)begini=4d0;rData=8d0;isCount=1b0;isDone=1b0;endelseif(RX_En_Sig)case(i)4d0:if(H2L_Sig)begini=i+1b1;isCount=1b1;end4d1:if(BPS_CLK)begi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論