UART數(shù)據(jù)通信(發(fā)送模塊部分)_第1頁
UART數(shù)據(jù)通信(發(fā)送模塊部分)_第2頁
UART數(shù)據(jù)通信(發(fā)送模塊部分)_第3頁
UART數(shù)據(jù)通信(發(fā)送模塊部分)_第4頁
UART數(shù)據(jù)通信(發(fā)送模塊部分)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、UART數(shù)據(jù)通信摘要:UART協(xié)議是數(shù)據(jù)通信及控制系統(tǒng)中廣泛使用的一種全雙工串行數(shù)據(jù)傳輸協(xié)議,在實(shí)際工業(yè)生產(chǎn)中有時(shí)并不使用 UART的全部功能,只需將其核心功能集成即可。波特率發(fā)生器、接收器和發(fā)送器是UART的三個(gè)核心功能模塊,本課程設(shè)計(jì)分成三部分,本人負(fù)責(zé)UART接受模塊的設(shè)計(jì)和仿真,其余部分由另兩位同學(xué)完成。本文使用Verilog語言對(duì)發(fā)送功能模塊進(jìn)行描述并加以整合,并利用Xilinx ISE 軟件進(jìn)行仿真,其結(jié)果完全符合UART協(xié)議的要求。1. UART 數(shù)據(jù)通信協(xié)議的介紹UART(即 Universal Asynchronous Receiver 

2、;Transmitter通用異步收發(fā)器)是廣泛使用的串行數(shù)據(jù)傳輸協(xié)議。UART允許在串行鏈路上進(jìn)行全雙工的通信。UART 通信接口簡單,只需要兩根線(本文只討論兩根線的情況,不涉及狀態(tài)控制等信號(hào)) : tx 是UART 數(shù)據(jù)發(fā)送信號(hào), rx 是UART 數(shù)據(jù)接收信號(hào)。由于沒有時(shí)鐘信號(hào)作為采樣信號(hào),因此在UART 的串行數(shù)據(jù)中需要增加一些額外的信息,這些信息連同數(shù)據(jù)組成UART 的數(shù)據(jù)幀格式。UART 的數(shù)據(jù)幀格式是:起始位(值為0) 、數(shù)據(jù)位(可根據(jù)需要設(shè)置成6 ,., 9 或其他位數(shù),數(shù)據(jù)位是低位在先、高位在后)、奇偶校驗(yàn)位(可根據(jù)需要設(shè)置成奇校驗(yàn)、偶校驗(yàn)或無校驗(yàn),本章介紹的是無校驗(yàn))、停止

3、位(停止位可有1 ,., 2 位)0。UART 的具體數(shù)據(jù)幀格式如下圖所示。UART 數(shù)據(jù)幀格式起始位的意義是提醒接收方數(shù)據(jù)即將到來,請(qǐng)做好接收數(shù)據(jù)的準(zhǔn)備。數(shù)據(jù)位是接收方需要接收的數(shù)據(jù)信息。奇偶校驗(yàn)位的意義是給接收方提供一種校驗(yàn)數(shù)據(jù)正確與否的方法和信息。這需要雙方事先約定好是奇校驗(yàn)還是偶校驗(yàn)或者無校驗(yàn)。停止位是提醒接收方數(shù)據(jù)已發(fā)送完畢,如果接收方按照UART 協(xié)議沒有正常接收到停止位,則說明該幀數(shù)據(jù)不完整,可以判定數(shù)據(jù)無效。2. UART 數(shù)據(jù)發(fā)送模塊建模根據(jù)UART 數(shù)據(jù)通信協(xié)議, UART 數(shù)據(jù)發(fā)送模塊還是比較簡單的。實(shí)現(xiàn)過程描述如下:在空閑狀態(tài)接收發(fā)送數(shù)據(jù)的指令后,在裝載數(shù)據(jù)的同時(shí),在數(shù)

4、據(jù)的低位加上1 位的開始位0 ,在數(shù)據(jù)的高位加上1 位的停止位1 ,接著在時(shí)鐘的節(jié)拍下把這10 位數(shù)據(jù)從低位到高位發(fā)送出去,最后恢復(fù)UART 數(shù)據(jù)發(fā)送模塊為空閑狀態(tài)。根據(jù)以上描述設(shè)計(jì)流程圖,如下圖所示。UART 數(shù)據(jù)發(fā)送流程圖3. UART 數(shù)據(jù)接受模塊UART 數(shù)據(jù)接收模塊相對(duì)UART 數(shù)據(jù)發(fā)送模塊來說更復(fù)雜些。下面簡單的介紹一下UART 數(shù)據(jù)接收的時(shí)序分析。因?yàn)閁ART是異步通信,在數(shù)據(jù)采樣上沒有同步時(shí)鐘作為參考點(diǎn)。結(jié)合UART 數(shù)據(jù)通信協(xié)議,UART 首先需要捕獲數(shù)據(jù)線上的起始信號(hào),在起始位后連續(xù)接收8 位數(shù)據(jù),最后判斷停止位是否有效,如果有效則表示一幀UART 數(shù)據(jù)完整接收,否則表示U

5、ART 數(shù)據(jù)幀出錯(cuò)(這里不考慮奇偶校驗(yàn)位)。由于沒有傳送時(shí)鐘信號(hào),所以接收方需要知道發(fā)送方發(fā)出數(shù)據(jù)的波特率。雖然知道了發(fā)送方的波特率,但由于接收方與發(fā)送方可能是兩個(gè)不同的時(shí)鐘源,所以時(shí)鐘頻率存在偏差。為了解決不同時(shí)鐘的偏差,UART在接收方對(duì)采樣時(shí)鐘做出規(guī)定,即采樣時(shí)鐘是數(shù)據(jù)波特率的16 倍。上面講到接收方接收一個(gè)數(shù)據(jù)需要采樣16 次,這16 次是這樣分配的:當(dāng)捕獲到數(shù)據(jù)線上的下降沿時(shí)開始計(jì)數(shù),計(jì)數(shù)到第8 個(gè)采樣周期時(shí)的采樣數(shù)據(jù)作為接收到的數(shù)據(jù)。當(dāng)計(jì)數(shù)到第16 個(gè)采樣周期時(shí),計(jì)數(shù)器歸零重新計(jì)數(shù)。每計(jì)數(shù)到8 時(shí)進(jìn)行數(shù)據(jù)采樣。這樣,只要發(fā)送方與接收方的時(shí)鐘信號(hào)的頻率不超過1 / 16 ,就可以正確

6、采樣數(shù)據(jù)了。4. UART分頻器假設(shè)數(shù)據(jù)的波特率為p,則所需時(shí)鐘的頻率為16*p。以波特率p為9600為例,系統(tǒng)時(shí)鐘為50MHz,則分頻系數(shù)為50000000/(16*9600) = 325.52,取整為326。分頻器Verilog HDL語言代碼如下:module clkdiv(clk, clkout);input clk; /系統(tǒng)時(shí)鐘output clkout; /采樣時(shí)鐘輸出reg clkout;reg 15:0 cnt;always (posedge clk) /分頻進(jìn)程beginif(cnt = 16'd162)beginclkout <= 1'b1;cnt &

7、lt;= cnt + 16'd1;endelse if(cnt = 16'd325)beginclkout <= 1'b0;cnt <= 16'd0;endelsebegincnt <= cnt + 16'd1;endendEndmodule5. UART 數(shù)據(jù)發(fā)送模塊仿真下面使用Xilinx ISE Design Suite 12.4對(duì)UART 數(shù)據(jù)發(fā)送模塊進(jìn)行仿真對(duì)工程文件進(jìn)行“Simulate Behavioral Model”得到波形仿真圖。0-10ns,模塊復(fù)位信號(hào)r_rst_n,低電平有效(r_rst_n值為0)。(1) 波

8、形仿真圖時(shí)序分析1 0-443ns,數(shù)據(jù)接收信號(hào)w_uart_tx值為1,此時(shí)一直空閑,未發(fā)送數(shù)據(jù)。2 在443ns時(shí)刻,收到UART數(shù)據(jù)的發(fā)送指令(r_tx_order值為1),開始啟動(dòng)UART數(shù)據(jù)發(fā)送流程:首先是發(fā)送起始位0,接著開始發(fā)送8位數(shù)據(jù),最后發(fā)送停止位1,然后又回到空閑狀態(tài)。其中每一位需32ns。3 在443ns475ns之間發(fā)送起始位0;4 在475ns731ns之間發(fā)送8個(gè)數(shù)據(jù)位,需發(fā)送的數(shù)據(jù)r_tx_data=0010 0100,發(fā)送時(shí),先發(fā)送低位再發(fā)送高位,發(fā)送數(shù)據(jù)的值從左到右依次是: 0010 0100 5 在731ns763ns之間發(fā)送停止位1;6 因此在443ns7

9、63ns之間,w_uart_tx的值從左到右依次是:0 0010 0100 1 ;至此,一幀UART數(shù)據(jù)發(fā)送完畢。UART數(shù)據(jù)發(fā)送忙信號(hào)w_uart_tx_buys恢復(fù)為低。同理,當(dāng)發(fā)送數(shù)據(jù)r_tx_data=0000 1001時(shí),此時(shí)w_uart_tx的值從左到右依次是:0 1001 0000 1 。設(shè)計(jì)和仿真時(shí)碰到的問題主要有:(2) 主要問題及措施問題1:在仿真過程中經(jīng)常遇到一些寄存器沒有被初始化,導(dǎo)致仿真結(jié)果不正確,這是因?yàn)閕f語句嵌套太復(fù)雜或循環(huán)語句使用不恰當(dāng)使得寄存器初始化語句未能執(zhí)行。 措施:盡量減少if語句的嵌套層數(shù),這樣可以減少閱讀程序的復(fù)雜度和程序調(diào)試的復(fù)雜度,能夠更容易發(fā)

10、現(xiàn)錯(cuò)誤以便及時(shí)尋找到解決方案。 問題2:在程序中使用initial過程塊進(jìn)行寄存器的初始化,會(huì)使源程序在下載到目標(biāo)板的整合過程時(shí)不能通過。 措施:可以外接一個(gè)輸入信號(hào)進(jìn)行各寄存器的初始化,這樣做既可以使源程序順利下載到目標(biāo)板中,又可以從通訊模塊的外部對(duì)通訊模塊進(jìn)行控制。 問題3:在程序中如果在兩個(gè)always過程塊中對(duì)同一個(gè)變量進(jìn)行賦值,程序?qū)⒉荒芟螺d到目標(biāo)板中,因?yàn)楫?dāng)兩個(gè)always過程塊中的敏感事件列表中的事件同時(shí)滿足時(shí),就會(huì)引發(fā)在兩個(gè)always語句中對(duì)相同變量同時(shí)賦值而導(dǎo)致沖突。 措施:合并always語句塊,即把引發(fā)同一變量改變的過程敏感事件用or連接起來放在一個(gè)always語句塊中。6. 結(jié)束語Verilog HD

溫馨提示

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

評(píng)論

0/150

提交評(píng)論