資源描述:
《UART收發(fā)器設(shè)計(jì)實(shí)例》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、UART收發(fā)器設(shè)計(jì)實(shí)例UART(UniversalAsynchronousReceiverTransmitter,通用異步收發(fā)器)是廣泛使用的異步串行數(shù)據(jù)通信協(xié)議。下面首先介紹UART硬件接口及電平轉(zhuǎn)換電路,分析UART的傳輸時(shí)序并利用VerilogHDL語(yǔ)言進(jìn)行建模與仿真,最后通過(guò)開(kāi)發(fā)板與PC相連進(jìn)行RS-232通信來(lái)測(cè)試UART收發(fā)器的正確性。UART界面介紹本節(jié)所介紹的UART即美國(guó)電子工業(yè)協(xié)會(huì)定義的RS-232C,簡(jiǎn)稱RS-232。RS-232的接口一般有9針的DB9和25針的DB25,這里以9針為例,它的各個(gè)引腳的定義如表。DB9的引腳定義引腳功能縮寫(xiě)1資料載波檢測(cè)DCD2數(shù)據(jù)
2、接收RXD3資料發(fā)送TXD4資料終端準(zhǔn)備DTR5地GND6資料設(shè)備準(zhǔn)備就緒DSR7發(fā)送請(qǐng)求RTS8清除發(fā)送CTS9地GND由于RS-232的電氣特性與FPGA引腳不相同,因此它們之間不能直接相連,對(duì)于RS-232的數(shù)據(jù)線,當(dāng)為邏輯“1”時(shí),對(duì)應(yīng)電平是-15V~-3V;當(dāng)為邏輯“0”時(shí),對(duì)應(yīng)電平是15V~3V。因此,與FPGA相連之前必須進(jìn)行電平轉(zhuǎn)換,轉(zhuǎn)換原理圖如圖所示RS-232電平轉(zhuǎn)換原理圖UART傳輸時(shí)序UART傳輸時(shí)序如圖UART傳輸時(shí)序發(fā)送數(shù)據(jù)過(guò)程:空閑狀態(tài),線路處于高電位;當(dāng)收到發(fā)送數(shù)據(jù)指令后,拉低線路一個(gè)數(shù)據(jù)位的時(shí)間T,接著數(shù)據(jù)按低位到高位依次發(fā)送,數(shù)據(jù)發(fā)送完畢后,接著發(fā)送奇
3、偶校驗(yàn)位和停止位(停止位為高電位),一幀資料發(fā)送結(jié)束。接收數(shù)據(jù)過(guò)程:空閑狀態(tài),線路處于高電位;當(dāng)檢測(cè)到線路的下降沿(線路電位由高電位變?yōu)榈碗娢唬r(shí)說(shuō)明線路有數(shù)據(jù)傳輸,按照約定的波特率從低位到高位接收數(shù)據(jù),數(shù)據(jù)接收完畢后,接著接收并比較奇偶校驗(yàn)位是否正確,如果正確則通知后續(xù)設(shè)備準(zhǔn)備接收數(shù)據(jù)或存入緩存。由于UART是異步傳輸,沒(méi)有傳輸同步時(shí)鐘。為了能保證數(shù)據(jù)傳輸?shù)恼_性,UART采用16倍數(shù)據(jù)波特率的時(shí)鐘進(jìn)行采樣。每個(gè)數(shù)據(jù)有16個(gè)時(shí)鐘采樣,取中間的采樣值,以保證采樣不會(huì)滑碼或誤碼。一般UART一幀的數(shù)據(jù)位數(shù)為8,這樣即使每個(gè)數(shù)據(jù)有一個(gè)時(shí)鐘的誤差,接收端也能正確地采樣到數(shù)據(jù)。UART的接收數(shù)據(jù)
4、時(shí)序?yàn)椋寒?dāng)檢測(cè)到數(shù)據(jù)的下降沿時(shí),表明線路上有數(shù)據(jù)進(jìn)行傳輸,這時(shí)計(jì)數(shù)器CNT開(kāi)始計(jì)數(shù),當(dāng)計(jì)數(shù)器為24=16+8時(shí),采樣的值為第0位數(shù)據(jù);當(dāng)計(jì)數(shù)器的值為40時(shí),采樣的值為第1位數(shù)據(jù),依此類推,進(jìn)行后面6個(gè)數(shù)據(jù)的采樣。如果需要進(jìn)行奇偶校驗(yàn),則當(dāng)計(jì)數(shù)器的值為152時(shí),采樣的值即為奇偶位;當(dāng)計(jì)數(shù)器的值為168時(shí),采樣的值為“1”表示停止位,一幀數(shù)據(jù)接收完成。本節(jié)章將按上面的算法進(jìn)行VerilogHDL語(yǔ)言建模與仿真。UART分頻器假設(shè)數(shù)據(jù)的波特率為p,則所需時(shí)鐘的頻率為16*p。以波特率p為115200為例,系統(tǒng)時(shí)鐘為50MHz,則分頻系數(shù)為50000000/(16*115200)=27.127,
5、取整為27。分頻器VerilogHDL語(yǔ)言代碼如下:moduleclkdiv(clk,clkout);inputclk;//系統(tǒng)時(shí)鐘outputclkout;//采樣時(shí)鐘輸出regclkout;reg[15:0]cnt;always@(posedgeclk)//分頻進(jìn)程beginif(cnt==16'd12)beginclkout<=1'b1;cnt<=cnt+16'd1;endelseif(cnt==16'd26)beginclkout<=1'b0;cnt<=16'd0;endelsebegincnt<=cnt+16'd1;endendendmodule保存文件為clkdiv.v,單擊
6、Files→Create/Update→CreateSymbolFilesforCurrentFile命令,為clkdiv.v生成原理圖模塊。新建一個(gè)原理圖文件,在原理圖空白處雙擊,在彈出的Symbol對(duì)話框中選擇Project→clkidv模塊,單擊OK按鈕退出Symbol對(duì)話框。在原理圖的適當(dāng)位置放置clkdiv模塊,并添加輸入輸出模塊。保存原理圖為uartrxtx.bdf。編譯工程文件,編譯無(wú)誤后單擊Processing→GenerateFunctionalSimulationNetlist,產(chǎn)生功能仿真網(wǎng)表。新建波形仿真文件,加入輸入輸出信號(hào),設(shè)置系統(tǒng)時(shí)鐘信號(hào)clk的周期為20n
7、s,保存波形文件為uartrxtx.vwf,單擊按鈕進(jìn)行分頻器的波形仿真,波形仿真報(bào)告如圖所示。分頻器的波形仿真報(bào)告波形仿真報(bào)告說(shuō)明:分頻時(shí)鐘輸出實(shí)現(xiàn)了所需的27分頻,分頻模塊得到正確驗(yàn)證。UART發(fā)送模塊UART發(fā)送模塊的功能:接收到發(fā)送指令后,把數(shù)據(jù)按UART協(xié)議輸出,先輸出一個(gè)低電平的起始位,然后從低到高輸出8個(gè)數(shù)據(jù)位,接著是可選的奇偶校驗(yàn)位,最后是高電平的停止位。VerilogHDL語(yǔ)言代碼如下:moduleuarttx(c