王志學(xué)
(廣東輕工職業(yè)技術(shù)學(xué)院,廣東 廣州 510000)
UART(Universal Asynchronous Receiver/Transmitter,通用異步收/發(fā)器),用于控制計(jì)算機(jī)與串行設(shè)備之間的數(shù)據(jù)通信,它提供了外設(shè)用到的RS-232C數(shù)據(jù)終端設(shè)備接口,使計(jì)算機(jī)可以和調(diào)制解調(diào)器或其它使用RS-232C接口的串行設(shè)備進(jìn)行通信。常見(jiàn)的UART有8250、8251、NS16450、NS16550等,這些芯片做的比較復(fù)雜,功能齊全。但是由于結(jié)構(gòu)和功能相對(duì)固定,因而不能根據(jù)我們的實(shí)際需要去裁剪和移植。當(dāng)我們不需要用到完整的UART功能和一些輔助功能時(shí),就可以將需要的UART功能集成到FPGA上,從而大大的減少了體積、簡(jiǎn)化了電路,也提高了系統(tǒng)的可靠性、穩(wěn)定性和靈活性。
UART是一種串行數(shù)據(jù)總線,用于異步通信,并且雙向通信,可實(shí)現(xiàn)全雙工傳輸和接收?;镜腢ART只需要兩條信號(hào)線(TXD、RXD)和一條地線就可以完成數(shù)據(jù)的相互通信,接收和發(fā)送互不干擾,這樣就大大節(jié)省了傳輸費(fèi)用。由于UART是異步通信,所以需要對(duì)數(shù)據(jù)進(jìn)行同步。基本的UART幀格式如圖1所示:
圖1 UART幀格式
從圖中可以看出,串行異步通信的幀格式包括四個(gè)部分:起始位、數(shù)據(jù)位、校驗(yàn)位和停止位。起始位在一個(gè)字符中占一位,并且必須為0,表示字符的開(kāi)始;起始位后面是數(shù)據(jù)位,一般為5至8位,由串行通信的初始化程序設(shè)定,數(shù)據(jù)的排列方式是低位在前,高位在后。數(shù)據(jù)位后面是校驗(yàn)位,該位可根據(jù)實(shí)際需要可選可不選;一個(gè)字符的最后是停止位,該位必須存在,表示一個(gè)字符的結(jié)束。停止位可以是1位、1.5位或2位。異步通信的這種由起始位開(kāi)始,停止位結(jié)束所構(gòu)成的一串二進(jìn)制數(shù)即為幀,從微觀來(lái)看,異步通信時(shí)一位一位的傳輸?shù)?,從宏觀來(lái)看,又是一幀一幀傳輸?shù)?。在一幀?shù)據(jù)中的每一位之間的時(shí)間間隔是一樣的,但是幀與幀之間的時(shí)間間隔是隨機(jī)的。
本文采用模塊設(shè)計(jì)的方法,并且針對(duì)實(shí)際要求,將整個(gè)軟件劃分為波特率發(fā)生器模塊、接收啟動(dòng)模塊、接收模塊和發(fā)送模塊四個(gè)部分。各模塊功能分析如下:
波特率發(fā)生器實(shí)際上就是一個(gè)簡(jiǎn)單的分頻器,它的功能是產(chǎn)生和RS-232C通信所采用的波特率同步的時(shí)鐘,這樣才能按照RS-232C的時(shí)序要求進(jìn)行數(shù)據(jù)的收發(fā)。而波特率發(fā)生器的系數(shù)在FPGA實(shí)現(xiàn)時(shí)一般是固定的,但對(duì)于不同的實(shí)現(xiàn),這個(gè)系數(shù)需要更改(因?yàn)镕PGA在設(shè)計(jì)時(shí)比較容易改動(dòng),而專用芯片不易改動(dòng),所以UART專用芯片一般通過(guò)添加一個(gè)接口以便在使用時(shí)改變波特率)??梢栽赩HDL語(yǔ)言中使用Generic語(yǔ)句,或在Verilog HDL語(yǔ)言中使用parameter語(yǔ)句使問(wèn)題得到解決。因發(fā)送和接收時(shí)對(duì)時(shí)鐘的要求不同,給發(fā)送模塊和接收模塊提供的時(shí)鐘頻率也不相同。當(dāng)發(fā)送數(shù)據(jù)時(shí),只需要將數(shù)據(jù)按照一定的速率串行的輸出就可以了,所以,發(fā)送的時(shí)鐘和發(fā)送的波特率是一致的;但是,在接收數(shù)據(jù)時(shí),在數(shù)據(jù)位的什么位置對(duì)數(shù)據(jù)信息進(jìn)行判斷非常的重要,最理想的情況就是在串行數(shù)據(jù)每一位的中點(diǎn)對(duì)數(shù)據(jù)進(jìn)行采樣,因?yàn)榘l(fā)送方和接收方的時(shí)鐘是不一致的,所以需要對(duì)每一位數(shù)據(jù)的時(shí)間進(jìn)行分段,分段越多,采樣時(shí)就越接近中點(diǎn),并且采樣時(shí)出現(xiàn)錯(cuò)誤的概率也越低,但是,分段越多,采樣的時(shí)間也越多,系統(tǒng)的開(kāi)銷越大,所以,實(shí)際設(shè)計(jì)時(shí),波特率發(fā)生器產(chǎn)生的分頻時(shí)鐘,是波特率時(shí)鐘頻率的16倍。波特率發(fā)生器模塊如圖2所示。clk16x是波特率發(fā)生器得到的分頻時(shí)鐘;clk是時(shí)鐘輸入信號(hào);rst是系統(tǒng)復(fù)位信號(hào)。
圖2 波特率發(fā)生器模塊示意圖
由于串行數(shù)據(jù)幀和接收時(shí)鐘是異步的,由高電平轉(zhuǎn)化為低電平可以視為一個(gè)數(shù)據(jù)幀的起始位。但是,在實(shí)際的電路中,會(huì)有多方面的原因干擾,為了避免毛刺影響,正確的判斷起始位的到來(lái),采樣時(shí)在時(shí)鐘的上升沿(即由波特率發(fā)生器提供的16倍于波特率的時(shí)鐘)檢驗(yàn)數(shù)據(jù)是否為低電平,如果接收到的是低電平,則開(kāi)始計(jì)數(shù),如果連續(xù)8個(gè)時(shí)鐘內(nèi)都是低電平,則表示起始信號(hào)有效,即要求接收到的起始位在波特率時(shí)鐘采樣過(guò)程中有一半是屬于邏輯0才表示接收到的起始位有效。如果在采樣時(shí),有一次檢驗(yàn)到高電平,即邏輯1時(shí),則認(rèn)為起始信號(hào)無(wú)效,返回初始的狀態(tài)重新等待下一個(gè)起始位信號(hào)。當(dāng)起始位的信號(hào)時(shí)有效時(shí),每隔16個(gè)時(shí)鐘采樣一次,這樣就保證了每次采樣都是在數(shù)據(jù)位的中點(diǎn)。
接收模塊如圖3所示。clk16x是由波特率發(fā)生器產(chǎn)生的分頻時(shí)鐘;rst是系統(tǒng)復(fù)位信號(hào);rxd是來(lái)自其他設(shè)備的串行數(shù)據(jù);data_ready表示"數(shù)據(jù)已準(zhǔn)備好",在rdn為1的情況下,并行數(shù)據(jù)轉(zhuǎn)換完畢就可以輸出,此時(shí)將data_ready置為0;在rdn不為1的情況下,串并轉(zhuǎn)換完成后將此data_ready置1以表示數(shù)據(jù)己經(jīng)轉(zhuǎn)換完畢,可以輸出了,通知接收模塊每隔16個(gè)clk16x周期采樣一次,接收UART幀中剩余的數(shù)據(jù)位,否則,接收模塊不工作。dout<7:0>是接收模塊將接收到的串行數(shù)據(jù)轉(zhuǎn)換成的并行數(shù)據(jù),送給發(fā)送模塊的輸入信號(hào)din<7:0>。
圖3 接收模塊示意圖
發(fā)送模塊相對(duì)于接收模塊要容易處理得多。只要每隔16個(gè)clk16x周期輸出1位即可,次序遵循1位起始位,8位數(shù)據(jù)位,1位停止位。發(fā)送模塊如圖4所示。din<7:0>是將要發(fā)送出去的并行數(shù)據(jù);clk16x、rst信號(hào)同接收模塊;wrn是數(shù)據(jù)發(fā)送的啟動(dòng)信號(hào);txd是發(fā)送出去的串行數(shù)據(jù)信號(hào)。
圖4 發(fā)送模塊示意圖
用FPGA實(shí)現(xiàn)UART功能,減少了系統(tǒng)的面積,降低了系統(tǒng)的功耗,提高了系統(tǒng)的穩(wěn)定性,同時(shí),由于數(shù)據(jù)幀和波特率都比較容易改變,大大的提高了系統(tǒng)設(shè)計(jì)的靈活性和可移植性。
[1]史故臣,石旭剛,左緒勇.基于FPGA的UART設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)新通信,2009.4:62-64
[2]聶濤,許世宏.基于 FPGA 的 UART 設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2006,29(2):127-129
[3]播松,黃繼業(yè).EDA 技術(shù)與 VHDL[M]北京:清華大學(xué)出版社,2007
[4]楊宗國(guó),李艷萍.基于FPGA的UART模塊的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2009,2:19-22
[5]黃智偉,王彥.FPGA系統(tǒng)設(shè)計(jì)與實(shí)踐[M].北京:電子工業(yè)出版社,2005
[6]潘松,王國(guó)棟.VHDL使用教程.電子科技大學(xué)出版社.1999