基于FPGA技術(shù)的RS 232接口時序電路設(shè)計
摘要:RS 232接口是現(xiàn)在最常用的一種通信接口。隨著FPGA技術(shù)的高速發(fā)展,一些常見的接口電路的時序電路可以通過FPGA實現(xiàn),通過這種設(shè)計可減少電路系統(tǒng)元件的數(shù)量,提高系統(tǒng)集成度和可靠性。詳細(xì)闡述了如何通過FPGA實現(xiàn)RS 232接口的時序邏輯設(shè)計。
關(guān)鍵詞:FPGA;時序電路;RS 232;串行通信
0 引言
RS 232接口是1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機(jī)終端生產(chǎn)廠家共同制定的用于串行通信的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通信設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”。該標(biāo)準(zhǔn)規(guī)定采用一個25個腳的DB25連接器,對連接器的每個引腳的信號內(nèi)容加以規(guī)定,還對各種信號的電平加以規(guī)定。隨著設(shè)備的不斷改進(jìn),出現(xiàn)了代替DB25的DB9接口,現(xiàn)在都把RS 232接口叫做DB9。RS 232接口是最常見的一種串行通信接口,普通PC機(jī)一般都具有此類接口,其最高通信速率(波特率)為115.2 Kb/s。采用9 600b/s進(jìn)行數(shù)據(jù)傳輸交換的應(yīng)用較多。通過FPGA實現(xiàn)其時序電路,主要完成發(fā)送和接收兩部分邏輯電路的設(shè)計。
1 發(fā)送邏輯電路的設(shè)計
1.1 時序近似
RS 232接口可選的波特率如9 600b/s,115.2 Kb/s等同11.059 2 MHz的時鐘有著整數(shù)倍的關(guān)系,但通常情況下提供FPGA的時鐘大多采用頻率為40~80 MHz,同11.059 2 MHz之間存在一定的時序誤差。
例如一個由1個起始位,8個數(shù)據(jù)位,1個停止位組成,假定串行信號的波特率為9 600b/s,則每個位的時序時間為:
104 166.666 666 666 666 666 666 666 666 67 ns
相當(dāng)于80 MHz計數(shù)器計數(shù)到:
8 333.333 333 333 333 333 333 333 333 333 3舍去小數(shù)部分。
由80 MHz驅(qū)動的計數(shù)器產(chǎn)生時序時每個字符誤差為4.166 666 666 666 666 666 666 666 666 666 7 ns。這樣由10個字符組成的一次發(fā)射時序誤差約為41.7 ns小于1/1 000可以忽略不計。
1.2 發(fā)送時序設(shè)計
RS 232接口的時序電路由啟動電路、字符產(chǎn)牛電路、同步時鐘產(chǎn)生電路。波特率控制電路,和時序關(guān)閉電路組成。發(fā)送時序電路原理框圖如圖1所示。
1.3 發(fā)送電路原理描述
以波特率為9 600b/s的時序為例,在發(fā)送數(shù)據(jù)之前,系統(tǒng)微處理器將相應(yīng)波特率參數(shù)鎖存在FPGA內(nèi)部的波特率控制電路的寄存器內(nèi)(由觸發(fā)器構(gòu)建),使每次輸出的字符同步信號的周期為104.167μs(對應(yīng)波特率9 600b/s)。
當(dāng)系統(tǒng)發(fā)出發(fā)送啟動信號時,字符時序電路以每個字符104.167μs的速率在預(yù)發(fā)射數(shù)據(jù)的邏輯電平控制之下輸出時序信號,同時在時序中插入停止位和起始位字符信號。
在完成上述發(fā)送時序的過程中,時序計數(shù)控制電路會檢測發(fā)送時序的工作狀態(tài),當(dāng)檢測每次時序的停止位完成輸出后,時序計數(shù)控制電路會發(fā)出時序關(guān)閉反饋信號,使電路回復(fù)到預(yù)發(fā)射的初始工作狀態(tài),并等待處理器再次觸發(fā)時序電路和對數(shù)據(jù)參數(shù)的重置。
2 接收邏輯電路的設(shè)計
2.1 接收時序設(shè)計
接收時序電路原理框圖如圖2所示。
2.2 接收電路原理描述
以波特率為9 600b/s的時序為例,在接收數(shù)據(jù)之前系統(tǒng)微處理器將相應(yīng)波特率參數(shù)鎖存在FPGA內(nèi)部的波特率控制電路的寄存器內(nèi)(由觸發(fā)器構(gòu)建),使每次輸出的字符位同步信號的周期為104.167 μs(對應(yīng)波特率9 600b/s)。字符位同步信號是接收電路存儲接收數(shù)據(jù)邏輯狀態(tài)的關(guān)鍵。作為同步時鐘信號,該信號可驅(qū)動接收到的串行數(shù)據(jù)電平輸入移位寄存器內(nèi)并鎖存。
當(dāng)系統(tǒng)接收到一幀串行信號時,首先要判斷是否是新的一幀數(shù)據(jù),接收判決電路通過對輸入串行信號的起始位字符脈寬進(jìn)行裁決,按照RS 232接口通信協(xié)議在某一特性波特率下,一幀信號的起始是一定脈寬的負(fù)脈沖。通過計數(shù)器可以檢測到負(fù)脈沖的起始時間和脈沖寬度,當(dāng)脈沖寬度達(dá)到某一數(shù)值時啟動接收時序。
接收時序電路會通過被記錄下的接收信號的準(zhǔn)確到達(dá)時間,推算出每個串行數(shù)據(jù)位對應(yīng)的時序時刻,從而輸出對應(yīng)每個位中間時刻的字符位同步信號(脈沖)作為接收移位寄存器的同步時鐘信號驅(qū)動移位寄存器對接收數(shù)據(jù)電平的記錄。
被鎖存的數(shù)據(jù)通過并行總線被系統(tǒng)微處理器提取。這一過程可以通過對處理器的中斷實現(xiàn),但需要接收時序電路在完成數(shù)據(jù)接收后立即產(chǎn)生一個中斷信號,通知處理器提取接收數(shù)據(jù)。
接收時序計數(shù)器會對接收時序時間進(jìn)行檢測,當(dāng)接收時序到達(dá)結(jié)束時刻時,其輸出的時序關(guān)閉反饋信號會使接收電路恢復(fù)到初始工作電路,等待下一幀數(shù)據(jù)的到達(dá)。
3 結(jié)論
通過FPGA實現(xiàn)RS 232接口時序邏輯電路,已經(jīng)在工程實踐過程中實現(xiàn)了接口標(biāo)準(zhǔn)規(guī)定的全部功能??梢哉J(rèn)為,通過FPGA的邏輯電路設(shè)計可以完全取代專用芯片。介于FPGA的可塑性和靈活性,可以通過相應(yīng)邏輯電路設(shè)計實現(xiàn)包括以太網(wǎng),USB、RS 485等常見的數(shù)據(jù)接口。