<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 元件/連接器 > 設計應用 > 基于FPGA的UART接口開(kāi)發(fā)

基于FPGA的UART接口開(kāi)發(fā)

作者:齊志強 時(shí)間:2008-11-05 來(lái)源:今日電子 收藏

  設計背景

本文引用地址:http://dyxdggzs.com/article/89225.htm

  串口即通用異步收發(fā)器(,Universal Asynchronous Receiver Transmitter)。串行通信具有傳輸線(xiàn)少、成本低、可靠性高等優(yōu)點(diǎn),所以系統間互聯(lián)常采用RS-232接口方式,一般該接口由 專(zhuān)用芯片來(lái)實(shí)現。但接口芯片一般引腳較多,內含許多輔助模塊和一些輔助功能,在實(shí)際使用時(shí)往往用不到這些功能,因此若采用UART專(zhuān)用芯片,必將使電路變得復雜,PCB面積增大,從而導致成本增加,系統的穩定性和可靠性降低?;镜腢ART通信只需要兩條信號線(xiàn)(RXD和TXD),接收與發(fā)送是全雙工形式,其中TXD是UART的發(fā)送端, RXD是UART的接收端。由于的功能日益強大,開(kāi)發(fā)周期短、可重復編程等優(yōu)點(diǎn)也越來(lái)越明顯,可以在芯片上集成UART功能模塊,從而簡(jiǎn)化電路,縮小PCB面積,提高系統可靠性。此外,的設計具有很高的靈活性,可以方便地進(jìn)行升級和移植。

  設計要求

  本接口作為一個(gè)關(guān)于內容保護系統的電路板的一部分,主要用于和計算機進(jìn)行通信,也可與其他帶UART接口的電路板進(jìn)行通信。對數據傳輸速率要求不高,傳輸距離也不要求很長(cháng),但傳輸數據要求準確可靠。該接口可用來(lái)監控電路內部狀態(tài),將FPGA內部信息通過(guò)串口輸出至計算機,以達到輔助調試電路的目的。另外,電路板上的FPGA外掛有串行Flash,可通過(guò)串口對Flash進(jìn)行調試,將Flash中的數據輸出至計算機,并可將數據通過(guò)串口寫(xiě)入Flash中。簡(jiǎn)而言之,該接口是作為計算機與電路板的一個(gè)可靠的雙向數據傳輸通道。

  UART的實(shí)現原理

  UART是異步通信方式,通信的發(fā)送方和接收方各自有獨立的時(shí)鐘,傳輸的速率由雙方約定。本設計采用最常用的每秒9600波特的傳輸速度。

  UART的通信協(xié)議十分簡(jiǎn)單,以低電平作為起始位,高電平作為停止位,中間可傳輸5~8比特數據和1比特奇偶校驗位,奇偶校驗位的有無(wú)和數據比特的長(cháng)度由通信雙方約定。一幀數據傳輸完畢后可以繼續傳輸下一幀數據,也可以繼續保持為高電平,兩幀之間保持高電平,持續時(shí)間可以任意長(cháng)。本方案采用不添加校驗位的方法,以提高數據傳輸效率。發(fā)送端發(fā)送數據時(shí)先發(fā)一低電平,然后發(fā)送8比特數據,之后馬上把信號拉高,從而完成一幀數據傳送。接收端接收到低電平時(shí)開(kāi)始計數,然后接收8比特信息位后如果檢測到高電平即認為已接收完一幀數據,繼續等待下一幀起始信號低電平的到來(lái),若接收完8比特數據后沒(méi)有檢測到高電平則認為這不是一幀有效數據,將其丟棄,繼續等待起始信號。時(shí)序關(guān)系如圖1所示,收發(fā)可同時(shí)進(jìn)行,互不干擾。

  圖1 RS-232接口的工作時(shí)序

  硬件電路原理圖及說(shuō)明

  一個(gè)完整的RS-232接口是一個(gè)25針的D型插頭座,25針的連接器實(shí)際上只有9根連接線(xiàn),所以就產(chǎn)生了一個(gè)簡(jiǎn)化的9針D型RS-232插頭座,常用的就是一個(gè)9針的D型插頭座。通常只用到一根發(fā)送信號線(xiàn)、一根接收信號線(xiàn)和一條地線(xiàn),其余的振鈴指示、請求傳送、清除傳送、準備就緒及數據載波檢測等線(xiàn)可以做懸空處理。

  RS-232標準規定邏輯1的電平為 -15~-3V,邏輯0的電平為+3~+15V。CMOS電路的電平范圍一般是從0V到電源電壓,FPGA的I/O輸入輸出電壓通常為0~3.3V,為了與FPGA 供電電壓保持一致,必須加電平轉換芯片。選用Maxim公司的MAX3232電平轉換芯片,電路原理圖如圖2所示。

  圖2 RS-232接口電路

  連線(xiàn)采用最簡(jiǎn)單的3 線(xiàn)制連接模式,即只需要兩根信號線(xiàn)和一根地線(xiàn)來(lái)完成數據收發(fā)。而FPGA 只需要選擇兩個(gè)普通I/O引腳分別與接口芯片MAX3232 對應引腳T2IN、R2OUT相連即可完成將串口電平轉換為設備電路板的工作電平,即實(shí)現RS-232電平和TTL/ CMOS 電平的轉換。一個(gè)MAX3232芯片可以支持兩個(gè)串口的電平變換,我們選擇其中的一組接口,圖中的4個(gè)電阻可以省去。在電路中加入了0Ω的跳線(xiàn)電阻,是為了在這組接口出故障時(shí)可以方便地跳線(xiàn),使用另一組接口。

  軟件設計

  異步收發(fā)器由波特率發(fā)生器、UART接收器和UART發(fā)送器三個(gè)模塊構成。采用的是每秒9600波特的傳輸速度,而系統提供的時(shí)鐘是10MHz,這就要求進(jìn)行速率變換。在實(shí)際中由于電路中存在干擾等因素,在數據邊緣進(jìn)行采樣容易發(fā)生誤判,只有在數據的中央進(jìn)行采樣出錯的概率才能降到最低,所以使用16倍于波特率的時(shí)鐘,即9600×16Hz=15600Hz。因此波特率發(fā)生器輸出的時(shí)鐘頻率應為15600Hz,UART 收發(fā)的每一個(gè)數據寬度都是波特率發(fā)生器輸出的時(shí)鐘周期的16倍,采用Altera公司芯片內部自帶的鎖相環(huán)可以方便地實(shí)現。UART接收器和UART發(fā)送器均采用Verilog語(yǔ)言編程實(shí)現。

  通常使用的數據多為并行數據,為了方便與系統中其他電路互連,UART接收器的輸出數據和UART發(fā)送器的輸入數據均為8比特并行數據。UART接收器將串行數據接收下來(lái)并將其轉化為并行數據送出,UART發(fā)送器將輸入的并行數據轉換為串行數據并按照UART的幀格式輸出。

  圖3 UART接收器符號圖

  圖3為UART接收器的符號圖,其中rst為全局復位信號,rxd為串行數據輸入端,baudClk16x為輸入時(shí)鐘,dataOut[7..0]為并行數據輸出口,irq為輸出數據的指示信號。首先接收器等待起始位的到來(lái),在每個(gè)時(shí)鐘上升沿檢測輸入數據是否為低電平,若檢測到低電平,則開(kāi)始計數,如果連續8個(gè)時(shí)鐘內輸入數據均為低電平,則認為起始信號有效,其中若有一次采樣得到的為高電平則認為起始信號無(wú)效,返回初始狀態(tài)重新等待起始信號的到來(lái)。認定起始信號有效后,每隔16個(gè)時(shí)鐘采樣一次,這樣就可以保證每次都在數據的中點(diǎn)出采樣,將采樣結果送入8比特的移位寄存器,8比特數據采樣結束后,間隔16個(gè)時(shí)鐘采樣停止位。如果采得的是高電平,則認為這幀數據有效,將移位寄存器中的數據并行送出同時(shí)將輸出數據的指示信號置高,然后接收器復位,重新等待下一幀的到來(lái);若采得的為低電平,則認為這不是一幀有效數據,不將移位寄存器中的數據輸出,直接返回初始狀態(tài)。

  圖4 UART發(fā)送器符號圖

  圖4 為UART發(fā)送器的符號圖,其中flag為輸入數據指示信號,rst為全局復位信號,clkin為輸入時(shí)鐘,din[7..0]為并行數據輸入端,tdo為串行數據輸出端。接收器在每個(gè)時(shí)鐘的上升沿檢測輸入數據指示信號,若檢測到其為高電平,則將并行輸入數據鎖存入內部的8比特移位寄存器,接下來(lái)先送出一個(gè)低電平并保持16個(gè)時(shí)鐘,然后每隔16個(gè)時(shí)鐘將移位寄存器中的數據移出一位,最后送出高電平,返回初始狀態(tài)。


  系統調試

  UART接收器和發(fā)送器可根據實(shí)際需要單獨使用,但在調試時(shí)為了方便,將兩者對接起來(lái),如圖5所示。UART接收器的輸出與UART發(fā)送器的輸入相連,復位信號和時(shí)鐘信號共用,時(shí)鐘信號由片外晶振提供,輸入FPGA后通過(guò)鎖相環(huán)轉換為需要的頻率。

  圖5 調試系統模塊圖

  串口的調試需要借助于串口調試工具,可以用VC編程實(shí)現,也可以直接使用網(wǎng)上已有的調試工具。直接選用網(wǎng)上的串口調試助手進(jìn)行了測試,將數據從計算機送出,經(jīng)過(guò)UART接口接收后再送回計算機。經(jīng)過(guò)長(cháng)達數十分鐘的不間斷接收和發(fā)送后,將送回計算機的數據與原始數據進(jìn)行比較,多次測試均沒(méi)有發(fā)生任何錯誤,這充分說(shuō)明了這一UART接口程序具有高度的可靠性和穩定性,可以滿(mǎn)足設計要求。

  結束語(yǔ)

  用FPGA 來(lái)對UART接口進(jìn)行開(kāi)發(fā),可以減小系統的PCB面積,降低系統的功耗,提高設計的穩定性和可靠性,并可以充分利用了FPGA 的剩余資源。綜合報告顯示這一UART接口部分僅消耗了68 個(gè)邏輯單元,對于FPGA來(lái)說(shuō),這點(diǎn)資源實(shí)在是微不足道的,用如此少的資源就可以為系統增添一條新的數據通道,這是十分值得的。該設計具有很大的靈活性,雖然這一UART接口工作在每秒9600波特,但通過(guò)調整鎖相環(huán)的參數,就可以使其工作在其他頻率,十分方便。這僅僅是一個(gè)簡(jiǎn)單的通信接口,可根據不同系統的需要,增加FIFO等內容。該模塊也可以作為一個(gè)完整的IP核,靈活地移植進(jìn)各種型號的FPGA中,通用性很強。



關(guān)鍵詞: FPGA UART 接口技術(shù)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>