版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于FPGA的UART設計與實現(xiàn)0引言通用異步收發(fā)器(Universal Asynchronous ReceiverTransmitter,UART)可以和各種標準串行接口,如RS 232和RS 485等進行全雙工異步通信,具有傳輸距離遠、成本低、可靠性高等優(yōu)點。一般UART由專用芯片如8250,16450來實現(xiàn),但專用芯片引腳都較多,內含許多輔助功能,在實際使用時往往只需要用到UART的基本功能,使用專用芯片會造成資源浪費和成本提高。一般而言UART和外界通信只需要兩條信號線RXD和TXD,其中RXD是UART的接收端,TXD是UART的發(fā)送端,接收與發(fā)送是全雙工形式。由于可編程邏輯器件技術
2、的快速發(fā)展,F(xiàn)PGA的功能日益強大,其開發(fā)周期短、可重復編程的優(yōu)點也越來越明顯,在FPGA芯片上集成UART功能模塊并和其他模塊組合可以很方便地實現(xiàn)一個能與其他設備進行串行通信的片上系統(tǒng)。FPGA(Field Programmable Gate Array)現(xiàn)場可編程門陣列在數字電路的設計中已經被廣泛使用。這種設計方式可以將以前需要多塊集成芯片的電路設計到一塊大模塊可編程邏輯器件中,大大減少了電路板的尺寸,增強了系統(tǒng)的可靠性和設計的靈活性。1 UART 功能設計1.1 UART的工作原理異步通信時,UART發(fā)送接收數據的傳輸格式表1所示,一個字符單位由開始位、數據位、停止位組成。表1 UART
3、發(fā)送接收數據的傳輸格式STARTD0D1D2D3D4D5D6D7PSTOP起始位數 據 位較驗位停止位異步通信的一幀傳輸經歷以下步驟:(1)無傳輸。發(fā)送方連續(xù)發(fā)送信號,處于信息“1”狀態(tài)。(2)起始傳輸。發(fā)送方在任何時刻將傳號變成空號,即“1”跳變到“O”,并持續(xù)1位時間表明發(fā)送方開始傳輸數據。而同時,接收方收到空號后,開始與發(fā)送方同步,并期望收到隨后的數據。(3)奇偶傳輸。數據傳輸之后是可供選擇的奇偶位發(fā)送或接收。(4)停止傳輸。最后是發(fā)送或接收的停止位,其狀態(tài)恒為“1”。發(fā)送或接收一個完整的字節(jié)信息,首先是一個作為起始位的邏輯“0”位,接著是8個數據位,然后是停止位邏輯“1”位,數據線空閑
4、時為高或“1”狀態(tài)。起始位和停止位的作用是使接收器能把局部時鐘與每個新開始接收的字符再同步。異步通信沒有可參照的時鐘信號,發(fā)送器可以隨時發(fā)送數據,任何時刻串行數據到來時,接收器必須準確地發(fā)現(xiàn)起始位下降沿的出現(xiàn)時間,從而正確采樣數據。設計時可參考由專用芯片實現(xiàn)的UART的功能并進行一定精簡,如可以用FPGA的片內RAM替代UART的FIFO,不用單獨在UART模塊中實現(xiàn)。設計的基本原則是保留最主要的功能,基于FPGA的UART系統(tǒng)波特率時鐘發(fā)生器、接收器和發(fā)送器3個子模塊組成,如圖1所示。圖1 基于FPGA的UART組成模塊1.2 接收器設計 接收器的工作過程如下,如圖2所示,在接收數據寄存器被
5、讀出一幀數據或系統(tǒng)開始工作以后,接收進程被啟動。接收進程啟動之后,檢測起始位,檢測到有效起始位后,以約定波特率的時鐘開始接收數據,根據數據位數的約定,計數器統(tǒng)計接收位數。一幀數據接收完畢之后,如果使用了奇偶校驗,則檢測校驗位,如無誤則接收停止位。停止位接收完畢后,將接收數據轉存到數據寄存器中。圖2 數據接收圖為確保接收器可靠工作,在接收端開始接收數據位之前,處于搜索狀態(tài),這時接收端以16倍波特率的速率讀取線路狀態(tài),檢測線路上出現(xiàn)低電平的時刻。因為異步傳輸的特點是以起始位為基準同步的。然而,通信線上的噪音也極有可能使傳號“1”跳變到空號“0”。所以接收器以16倍的波特率對這種跳變進行檢測,直至在
6、連續(xù)8個接收時鐘以后采樣值仍然是低電平,才認為是一個真正的起始位,而不是噪音引起的,其中若有一次采樣得到的為高電平則認為起始信號無效,返回初始狀態(tài)重新等待起始信號的到來。找到起始位以后,就開始接收數據,最可靠的接收應該是接收時鐘的出現(xiàn)時刻正好對著數據位的中央。由于在起始位檢測時,已使時鐘對準了位中央,用16倍波特率的時鐘作為接收時鐘,就是為了確保在位寬的中心時間對接收的位序列進行可靠采樣,當采樣計數器計數結束后所有數據位都已經輸入完成。最后對停止位的高電平進行檢測,若正確檢測到高電平,說明本幀的各位正確接收完畢,將數據轉存到數據寄存器中,否則出錯。采用有限狀態(tài)機模型可以更清晰明確地描述接收器的
7、功能,便于代碼實現(xiàn)。接收器的狀態(tài)轉換圖如圖3所示,為突出主要過程,圖中省略了奇偶校驗的情況。接收器狀態(tài)機由5個工作狀態(tài)組成,分別是空閑狀態(tài)、起始位確認、采樣數據位、停止位確認和數據正確,觸發(fā)狀態(tài)轉換的事件和在各個狀態(tài)執(zhí)行的動作見圖中的文字說明。圖3 接收器狀態(tài)轉換圖根據狀態(tài)圖其主要的程序如下所示:else if( RX_En_Sig ) case ( i ) 4'd0 : if( H2L_Sig ) begin i <= i + 1'b1; isCount <= 1'b1; end 4'd1 : if( BPS_CLK ) begin i <=
8、 i + 1'b1; end 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8, 4'd9 : if( BPS_CLK ) begin i <= i + 1'b1; rData i - 2 <= RX_Pin_In; end 4'd10 : if( BPS_CLK ) begin i <= i + 1'b1; end 4'd11 : if( BPS_CLK ) begin i <= i + 1'b1; end 4'd12
9、 : begin i <= i + 1'b1; isDone <= 1'b1; isCount <= 1'b0; end 4'd13 : begin i <= 4'd0; isDone <= 1'b0; end endcase其中起始位檢測正確會觸發(fā)RX_En_Sig,一次的定時采集時第 0 、1位數據(起始位),保持忽略態(tài)度。定時采集的是八位數據位,每一位數據位會依低位到最高位儲存入 rData寄存器。此時程序前兩位省略取2-9位就是傳送的數據1.3波特率發(fā)生器設計波特率發(fā)生器實質是設計一個分頻器,用于產生和RS
10、232通信同步的時鐘。在系統(tǒng)中用一個計數器來完成這個功能,分頻系數N決定了波特率的數值。該計數器一般工作在一個頻率較高的系統(tǒng)時鐘下,當計數到N2時將輸出置為高電平,再計數到N2的數值后將輸出置為低電平,如此反復即可得到占空比50的波特率時鐘,具體的波特率依賴于所使用的系統(tǒng)時鐘頻率和N的大小。如系統(tǒng)時鐘頻率是50 MHz,要求波特率是9600,N=1/50MHz=5208,如果從零開始算起就是5207個計數。然而,采集數據要求“在周期的中間”,那么結果是5208/2,結果等于2604?;旧蟫x_bps_module.v只有在Count_Sig拉高的時候,模塊才開始計數。利用verlog 所寫的
11、具體代碼如下:module rx_bps_module( CLK, RSTn, Count_Sig, BPS_CLK); input CLK; input RSTn; input Count_Sig; output BPS_CLK; /*/ reg 12:0Count_BPS; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count_BPS <= 13'd0; else if( Count_BPS = 13'd5207 ) Count_BPS <= 13'd0; else if( Count_Sig
12、) Count_BPS <= Count_BPS + 1'b1; else Count_BPS <= 13'd0; /*/ assign BPS_CLK = ( Count_BPS = 12'd2604 ) ? 1'b1 : 1'b0; /*/endmodule1.4發(fā)送器設計 圖4發(fā)送數據原理圖當發(fā)送數據時,對于每一個數據的發(fā)送,每一位采用的是定時發(fā)送。假設,配置的波特率是9600bps,那么當有一個發(fā)送標志位時,數據將會以1/9600 的節(jié)拍將數據一位一位的發(fā)送出去。一幀數據有11位,需要12次定時。主要代碼為:always ( pose
13、dge CLK or negedge RSTn ) if( !RSTn ) begin i <= 4'd0; rTX <= 1'b1; isDone <= 1'b0;end else if( TX_En_Sig ) case ( i ) 4'd0 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= 1'b0; end 4'd1, 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8 : if
14、( BPS_CLK ) begin i <= i + 1'b1; rTX <= TX_Data i - 1 ; end 4'd9 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= 1'b1; end 4'd10 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= 1'b1; end 4'd11 : if( BPS_CLK ) begin i <= i + 1'b1; isDone <= 1'b1
15、; end 4'd12 : begin i <= 4'd0; isDone <= 1'b0; end endcase2 數據傳輸仿真Modelsim仿真工具是Model公司開發(fā)的。它支持Verilog、VHDL以及他們的混合仿真,它可以將整個程序分步執(zhí)行,使設計者直接看到他的程序下一步要執(zhí)行的語句,而且在程序執(zhí)行的任何步驟任何時刻都可以查看任意變量的當前值,可以在Dataflow窗口查看某一單元或模塊的輸入輸出的連續(xù)變化等,比quartus自帶的仿真器功能強大的多,是目前業(yè)界最通用的仿真器之一。2.1仿真串口發(fā)送模塊編寫一個仿真激勵程序用于單獨仿真串口發(fā)送模
16、塊。步驟0的時候,將數據 8'h2E 發(fā)送至串口發(fā)送模塊后使能串口發(fā)送模塊,然后等待串口發(fā)送模塊反饋完成信號。同樣的動作也有 . 步驟1是發(fā)送數據 8'h3f, 然而步驟2是發(fā)送數據 8'hdd。步驟3是停止動作圖5 發(fā)送數據仿真放大第二個數據0x3f的發(fā)送過程,如下圖所示??梢钥闯龃诎l(fā)送模塊,發(fā)送數據的格式是一幀11 位。0開始位-邏輯0,1:8數據位,9校驗位沒有需要可以隨便填,這里填邏輯1,10停止位邏輯1。 圖6 發(fā)送過程仿真結果圖7 發(fā)送數據的延時仿真串口發(fā)送模塊配置的波特率是9600kbps ,所以一個數據逗留的時間是大約104us。在仿真結果中,在B0B
17、1 是數據0,B1B2 是數據1 . B10B11 是數據10。BxBx之間的時間大約是104us。2.2仿真串口接收模塊用串口發(fā)送模塊作為串口接收模塊的刺激,亦即串口接收模塊的輸入(復雜輸入)。用串口發(fā)送模塊作為串口接收模塊的刺激,亦即串口接收模塊的輸入(復雜輸入)。下圖是仿真虛擬環(huán)境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 等信號。在激勵的過程中,需要對這些信號控制。圖8 接收模塊仿真建模圖當RX
18、_En_Sig 拉高的時候,串口接收模塊開始準備接收數據了。當一幀11 位數據發(fā)送至串口接收模塊,并且被串口接收模塊過濾。最后經過過濾的數據會輸出至RX_Data ,然后產生一個完成信號至RX_Done_Sig。(在這里數據格式四1 幀11 位,并且波特率為9600kbps。仿真結果如下圖所示:圖10 發(fā)送結果仿真圖上圖仿真結果顯示了“ 串口發(fā)送模塊作為串口接收模塊的刺激” 的激勵過程。( Cursor省略為C) 在C1C2之間是第一幀數據的傳送, C2C3是第二位 數據的傳送,其他的以此類推,然和 C1C12是一幀數據11位的傳送過程。注意,每 個CxCx之間的時間大約是104us,亦即96
19、00kbps的波特率3 結語本設計是基于FPGA的UART設計,用時較少,邏輯消耗小,成熟穩(wěn)定的實現(xiàn)了數據的發(fā)送與接收,可以兼容到自己的程序中。本設計的仿真程序實現(xiàn)了激勵的所有功能,完成初步設計要求。附錄1:發(fā)送模塊module tx_control_module( CLK, RSTn, TX_En_Sig, TX_Data, BPS_CLK, TX_Done_Sig, TX_Pin_Out ); input CLK; input RSTn; input TX_En_Sig; input 7:0TX_Data; input BPS_CLK; output TX_Done_Sig; output
20、 TX_Pin_Out; /*/ reg 3:0i; reg rTX; reg isDone; always ( posedge CLK or negedge RSTn ) if( !RSTn ) begin i <= 4'd0; rTX <= 1'b1; isDone <= 1'b0;end else if( TX_En_Sig ) case ( i ) 4'd0 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= 1'b0; end 4'd1, 4'd2, 4&
21、#39;d3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= TX_Data i - 1 ; end 4'd9 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= 1'b1; end 4'd10 : if( BPS_CLK ) begin i <= i + 1'b1; rTX <= 1'b1; end 4'd11 : if
22、( BPS_CLK ) begin i <= i + 1'b1; isDone <= 1'b1; end 4'd12 : begin i <= 4'd0; isDone <= 1'b0; end endcase /*/ assign TX_Pin_Out = rTX; assign TX_Done_Sig = isDone; /*/ Endmodule附錄2:接收模塊:module rx_control_module( CLK, RSTn, H2L_Sig, RX_Pin_In, BPS_CLK, RX_En_Sig, Count
23、_Sig, RX_Data, RX_Done_Sig ); input CLK; input RSTn; input H2L_Sig; input RX_En_Sig; input RX_Pin_In; input BPS_CLK; output Count_Sig; output 7:0RX_Data; output RX_Done_Sig; /*/ reg 3:0i; reg 7:0rData; reg isCount; reg isDone; always ( posedge CLK or negedge RSTn ) if( !RSTn ) begin i <= 4'd0
24、; rData <= 8'd0; isCount <= 1'b0; isDone <= 1'b0; end else if( RX_En_Sig ) case ( i ) 4'd0 : if( H2L_Sig ) begin i <= i + 1'b1; isCount <= 1'b1; end 4'd1 : if( BPS_CLK ) begin i <= i + 1'b1; end 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8, 4'd9 : if( BPS_CLK ) begin i <= i + 1'b1; rData i - 2 <= RX_Pin_In; end 4'd10 : if( BPS_CLK
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度樓頂廣告牌租賃期廣告效果評估與優(yōu)化協(xié)議4篇
- 二零二五版集裝箱銷售與全球物流配送、保險、維修保養(yǎng)及服務合同范本3篇
- 二零二五年度鋼材采購合同綠色物流與配送服務協(xié)議3篇
- 2025年度零食店收銀員與顧客社交平臺互動合同4篇
- 2025年度智能車牌租賃服務合同范本8篇
- 2025年高校與地方政府教育資源共享合作協(xié)議3篇
- 2025年度美容院美容院美容項目合作經營合同4篇
- 2025年度個人戶外運動保險合同樣本2篇
- 二零二五版民營醫(yī)院藥劑科藥劑師勞動合同4篇
- 2025年度綠色屋頂綠化系統(tǒng)維護服務合同4篇
- 數學-山東省2025年1月濟南市高三期末學習質量檢測濟南期末試題和答案
- 中儲糧黑龍江分公司社招2025年學習資料
- 湖南省長沙市2024-2025學年高一數學上學期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年3月江蘇省考公務員面試題(B類)及參考答案
- 醫(yī)院科室考勤表
- 春節(jié)期間化工企業(yè)安全生產注意安全生產
- 數字的秘密生活:最有趣的50個數學故事
- 移動商務內容運營(吳洪貴)任務一 移動商務內容運營關鍵要素分解
- 基于ADAMS的汽車懸架系統(tǒng)建模與優(yōu)化
- 當前中國個人極端暴力犯罪個案研究
評論
0/150
提交評論