国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于FPGA的UART模塊設(shè)計

2016-07-10 04:09王昱煜
電子技術(shù)與軟件工程 2016年7期
關(guān)鍵詞:狀態(tài)機

王昱煜

本文介紹了一種利用FPGA實現(xiàn)UART通用異步收發(fā)器模塊的方法,所設(shè)計的UART模塊充分利用了FPGA硬件可編程性、高度集成性、實時性的特點。實踐測試表明,該模塊設(shè)計具有高可靠性、便于擴展和移植的優(yōu)點。

【關(guān)鍵詞】FPGA UART 狀態(tài)機

通用異步收發(fā)器(Universal Asynchronous Receiver Transmitter,UART)是數(shù)字通信領(lǐng)域流行和廣泛使用的一種接口設(shè)備,它可以和各種標(biāo)準(zhǔn)串行接口,如RS232、RS485等進(jìn)行異步通信,具有傳輸距離遠(yuǎn)、成本低、可靠性高等優(yōu)點。

一般來說UART通信需要使用專門的接口協(xié)議芯片,但是這種協(xié)議芯片存在體積較大、接口復(fù)雜且成本較高的缺點。此外,這種芯片的結(jié)構(gòu)與功能相對固定,在設(shè)計中缺乏靈活性。本文介紹了利用FPGA實現(xiàn)UART通訊的方法,將原來UART專用協(xié)議芯片的功能集成到了FPGA中,提高了設(shè)計的靈活性與可靠性。

1 UART通訊原理

支持UART的串行接口目前比較常用的有RS232、RS422、RS485等,它們之間的區(qū)別主要表現(xiàn)在電氣特性上,但最基本的通訊原理是一樣的。UART模塊接收/發(fā)送的都是符合TTL(或CMOS)標(biāo)準(zhǔn)的邏輯電平,與外設(shè)之間還需要經(jīng)過專門的轉(zhuǎn)換芯片將通訊數(shù)據(jù)轉(zhuǎn)化為符合RS232、RS422或RS485標(biāo)準(zhǔn)的電平。

UART作為一種異步串行通訊方式,數(shù)據(jù)在通訊過程中是字節(jié)為單位按位傳輸,一般從最低有效位(LSB)開始。典型的UART通訊數(shù)據(jù)格式如圖1所示。

2 UART的FPGA實現(xiàn)

UART通訊模塊內(nèi)部邏輯結(jié)構(gòu)如圖2,可分為控制模塊、接收模塊和發(fā)送模塊,各個模塊的主要功能如下:

控制模塊:根據(jù)CPU寫入的數(shù)據(jù)配制UART通訊參數(shù),并根據(jù)接收、發(fā)送模塊回送的指令產(chǎn)生相應(yīng)中斷上報給CPU,對接收、發(fā)送模塊狀態(tài)進(jìn)行監(jiān)控、管理;

接收模塊:該模塊主要用于將接收到的串行數(shù)據(jù)轉(zhuǎn)化為并行數(shù)據(jù),再以本地總線形式發(fā)送給CPU。此外,該模塊還將接收過程中的參數(shù)上報給控制模塊,用于監(jiān)控管理以及接收中斷、錯誤中斷的產(chǎn)生。

發(fā)送模塊:該模塊主要用于將CPU要發(fā)送的數(shù)據(jù)在控制邏輯的調(diào)度下轉(zhuǎn)化為串行數(shù)據(jù)后發(fā)送出去,此外該模塊還將發(fā)送過程中的參數(shù)上報給控制模塊,用于監(jiān)控管理以及發(fā)送中斷、錯誤中斷的產(chǎn)生。

2.1 接收模塊的設(shè)計

該模塊的數(shù)據(jù)接收過程通過一個狀態(tài)機來實現(xiàn),其狀態(tài)轉(zhuǎn)移圖如圖3所示,狀態(tài)轉(zhuǎn)移所用的時鐘是波特率時鐘16倍頻clk16x。整個工作流程如下:

2.1.1 系統(tǒng)復(fù)位后

狀態(tài)機進(jìn)入idle狀態(tài)等待起始位,當(dāng)接收端電平由高變?yōu)榈停≧XD值由1變?yōu)?)時即為檢測到了一個起始位,狀態(tài)機進(jìn)入start狀態(tài);

2.1.2 start狀態(tài)下

等待8個clk16x周期后再判斷一次RXD的值,若不為0,則說明之前接收到的是由于線上干擾而引起的虛假起始位,狀態(tài)機返回idle狀態(tài);若仍為0則再等待8個clk16x周期后狀態(tài)機進(jìn)入shift狀態(tài);

2.1.3 shift狀態(tài)下

模塊每隔16個clk16x周期從RXD上讀取1bit的數(shù)據(jù)進(jìn)行移位操作,直到讀完全部8bit數(shù)據(jù)后,若奇偶校驗被使能,則狀態(tài)機進(jìn)入parity狀態(tài),否則直接進(jìn)入stop狀態(tài);

2.1.4 parity狀態(tài)下

模塊等待16個clk16x周期從RXD上讀取1bit的奇偶校驗位的值,之后狀態(tài)機進(jìn)入stop狀態(tài);

2.1.5 stop狀態(tài)下

模塊等待16個clk16x周期從RXD上讀取1bit的停止位的值,之后狀態(tài)機進(jìn)入done狀態(tài),停止位值經(jīng)取反操作后用做幀錯誤校驗位;

2.1.6 done狀態(tài)下

若奇偶校驗被使能,且奇偶檢驗與幀校驗均正確,或奇偶校驗未被使能,但幀校驗正確時,移位寄存器中的8bit數(shù)據(jù)被存入接收FIFO中,否則該數(shù)據(jù)被丟棄。狀態(tài)機將在1個clk16x周期后返回idle,等待新數(shù)據(jù)。

2.2 發(fā)送模塊的設(shè)計

該模塊的數(shù)據(jù)發(fā)送過程通過一個狀態(tài)機來實現(xiàn),其狀態(tài)轉(zhuǎn)移圖如圖4所示,狀態(tài)轉(zhuǎn)移所用的時鐘是波特率時鐘16倍頻clk16x。整個工作流程如下:

2.2.1 系統(tǒng)復(fù)位后

狀態(tài)機進(jìn)入idle狀態(tài)等待發(fā)送FIFO中寫入數(shù)據(jù),當(dāng)FIFO的非空標(biāo)志被置位時狀態(tài)機進(jìn)入start狀態(tài);

2.2.2 start狀態(tài)下

模塊先發(fā)送一個數(shù)據(jù)起始位,同時從FIFO中讀取一個字節(jié)的數(shù)據(jù)放入發(fā)送移位寄存器,然后狀態(tài)機進(jìn)入shift狀態(tài);

2.2.3 shift狀態(tài)下

模塊按照LSB在前,MSB在后的順序,每間隔16個clk16x周期從移位寄存器中移出1bit的數(shù)據(jù),直到移完全部8bit數(shù)據(jù)后,若奇偶校驗被使能,則狀態(tài)機進(jìn)入parity狀態(tài),否則直接進(jìn)入stop狀態(tài);

2.2.4 parity狀態(tài)下

模塊等待16個clk16x周期從TXD上發(fā)出1bit的奇偶校驗位,之后狀態(tài)機進(jìn)入stop狀態(tài);

2.2.5 stop狀態(tài)下

模塊等待16個clk16x周期從TXD上發(fā)出1bit的停止位(TXD上為1),之后狀態(tài)機進(jìn)入done狀態(tài);

2.2.6 done狀態(tài)下

表示一個字節(jié)數(shù)據(jù)發(fā)送完成,狀態(tài)機在1個clk16x周期后直接回到idle狀態(tài),等待發(fā)送新的數(shù)據(jù)。

2.3 控制模塊的設(shè)計

控制模塊的主要作用是根據(jù)CPU寫入的參數(shù)對UART進(jìn)行配制,此外還能根據(jù)接收/發(fā)送模塊的工作狀態(tài)產(chǎn)生中斷,并上報給CPU。該模塊內(nèi)部結(jié)構(gòu)由一個波特率時鐘發(fā)生器、三個寄存器以及中斷仲裁邏輯組成。

波特率時鐘發(fā)生器能對輸入的系統(tǒng)時鐘進(jìn)行分頻操作,從而產(chǎn)生相應(yīng)的波特率16倍頻后的時鐘clk16x。

三個寄存器分別是控制寄存器(conreg)、中斷使能寄存器(int_en_reg)以及狀態(tài)寄存器(statusreg)。其中conreg和int_en_reg是只寫存儲器,它們分別用于存儲CPU寫入的UART配制參數(shù)以及中斷使能條件,UART即按照這兩個寄存器中被寫入的參數(shù)進(jìn)行工作;statusreg是只讀存儲器,存儲了UART工作時的狀態(tài)數(shù)據(jù),CPU通過讀取這些狀態(tài)信息來做出相應(yīng)的操作。

控制模塊在中斷被使能的前提下,根據(jù)中斷仲裁邏輯,向CPU發(fā)送三種中斷:錯誤中斷、接收中斷、發(fā)送中斷。這三種中斷的產(chǎn)生條件如下:

(1)錯誤中斷。當(dāng)接收數(shù)據(jù)時,若奇偶校驗或幀校驗錯誤,則在接收端RXD上的串行數(shù)據(jù)全部移入移位寄存器后,該中斷即被置位;

(2)接收中斷。在接收到新數(shù)據(jù),并且接收到的數(shù)據(jù)被保存至接收FIFO后,該中斷即被置位;

(3)發(fā)送中斷。在發(fā)送數(shù)據(jù)時,當(dāng)發(fā)送FIFO中的數(shù)據(jù)被發(fā)送移位寄存器讀空以后,該中斷即被置位。

3 結(jié)論

本文提出了一種基于FPGA設(shè)計和實現(xiàn)UART的方法,通過利用FPGA片上邏輯資源來實現(xiàn)UART的基本功能,其通訊波特率、校驗方法、中斷方式均可根據(jù)實際需要進(jìn)行配制。此外,利用FPGA的可重配置性,還可以在FPGA上方便的實現(xiàn)多路UART通訊擴展,與傳統(tǒng)設(shè)計相比,能有效減少系統(tǒng)的PCB面積,降低系統(tǒng)的功耗,提高設(shè)計的穩(wěn)定性和可靠性,并可方便地進(jìn)行系統(tǒng)升級和移植。

參考文獻(xiàn)

[1]何健標(biāo),王宏遠(yuǎn),林靜宜,等.基于最佳接收的UART的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2006(8):55-58.

[2]何慧珠,秦麗,張會新.基于FPGA的UART IP設(shè)計與實現(xiàn)[J].微計算信息,2008,24(1):223-224.

[3]陳小琴.基于Verilog HDL的多功能信號發(fā)生器的設(shè)計與實現(xiàn)[J].儀器儀表學(xué)報, 2008,29(4):322-324.

[4]季雄,段繼海,胡媛媛,等.基于Verilog HDL的UART設(shè)計[J].微計算機信息,2006,6(2):230-232.

[5]趙延,葛利嘉,雙濤,基于FPGA的UART設(shè)計實現(xiàn)及其驗證方法[J],現(xiàn)代電子技術(shù),2008(17):163-164.

作者單位

蘇州長風(fēng)航空電子有限公司 江蘇省蘇州市 215151

猜你喜歡
狀態(tài)機
基于有限狀態(tài)機的交會對接飛行任務(wù)規(guī)劃方法
基于狀態(tài)機比對的狀態(tài)機推斷方案
雙口RAM讀寫正確性自動測試的有限狀態(tài)機控制器設(shè)計方法
FPGA設(shè)計中狀態(tài)機安全性研究
基于反熔絲FPGA的有限狀態(tài)機加固設(shè)計
基于VHDL的一個簡單Mealy狀態(tài)機