基于FPGA 的簡化UART 電路設(shè)計
摘要: 本文闡述了通用異步發(fā)生器UART 的功能特點,介紹了用硬件描述語言Verilog 來開發(fā)各個模塊,并給出仿真結(jié)果。本設(shè)計使用Altera 的FPGA 芯片,將UART 的核心功能嵌入到FPGA 內(nèi)部,能夠?qū)崿F(xiàn)異步通信的功能,可以將其靈活地嵌入到各個通信系統(tǒng)中。
關(guān)鍵詞:FPGA;UART;Verilog HDL
0 引言
隨著嵌入式系統(tǒng)的廣泛推廣和應(yīng)用,UART ( Universal Asynchronous Receiver Transmiller )作為一種串行數(shù)據(jù)傳輸方式也得到廣泛的使用。UART 允許在串行鏈路上進行全雙工通信。串行外設(shè)到RS 232-C 異步串行接口一般采用專用的集成電路即UART 實現(xiàn)。常見的串行接口芯片如8250 、8251 、NS16450 等,能夠?qū)崿F(xiàn)比較全面的串行通信功能。而在實際應(yīng)用中,我們往往并不需要如此完整的功能,從而會造成資源的浪費和成本的提高。隨著EDA 技術(shù)的飛速發(fā)展,我們就可以根據(jù)自己的需求,將所需要的UART 功能集成到FPGA 內(nèi)部,從而簡化了電路、減小了體積、提高了系統(tǒng)的可靠性。基于這種思想,作者在設(shè)計中選用Altera 公司的EP1C12Q240CQ8,使用Verilog HDL 設(shè)計實現(xiàn)UART 的核心功能。1 UART 通信原理 串行通信分為兩種類型:同步通信方式和異步通行方式。UART 是通用異步發(fā)送器,是一種串行異步通信方式。它是各種設(shè)備之間進行通信的關(guān)鍵模塊,允許在串行鏈路上進行全雙工的通信。在發(fā)送端,并行的數(shù)字信號需要轉(zhuǎn)化成串行信號才能通過有線或無線傳輸?shù)搅硗庖慌_設(shè)備;而在接收端,串行信號必須要被恢復(fù)成并行信號才能進行數(shù)據(jù)處理。UART 就是用來處理這種數(shù)據(jù)與串口之間的串并和并串轉(zhuǎn)換的。
UART 傳送一個字符以起始位(Start Bit) 開始,以停止位(Stop Bit )結(jié)束,字符之間沒有固定的時間間隔要求。每一個字符的前面都有一個起始位(低電平),字符本身由5~8 位數(shù)據(jù)位組成,然后是一位校驗位(可選),最后是停止位(1 位,1 位半或2 位),停止位后面是不定長度的空閑位。停止位和空閑位都規(guī)定高電平,這樣就可以保證起始位開始處有一個下降沿。
圖1 數(shù)據(jù)傳輸格式
2 UART 在FPGA 中的實現(xiàn)
2.1UART 的硬件電路設(shè)計
在串行通信中,普遍采用的是RS-232 接口標準。硬件電路主要由FPGA 串口模塊、MAX3232 和DB-9 組成,電路圖如圖2 所示。數(shù)據(jù)從DB-9 的TxD 端進入,經(jīng)過MAX3232 進行電平轉(zhuǎn)換后由FPGA 串口模塊中的RxD 端進入,進行串并轉(zhuǎn)換后由數(shù)據(jù)總線進入FPGA 的其他模塊。數(shù)據(jù)處理后經(jīng)由數(shù)據(jù)總線進入FPGA 串口模塊,在其中進行并串轉(zhuǎn)換后由TxD 端輸出到MAX3232 中,經(jīng)電平轉(zhuǎn)換后由DB-9 的RxD 端輸出。
圖2 UART 硬件電路圖
1. 2.2 UART 的結(jié)構(gòu)設(shè)計 UART 主要由波特率發(fā)生模塊、發(fā)送模塊、接收模塊這三個部分組成。
2.2.1 波特率發(fā)生模塊
當UART 在發(fā)送數(shù)據(jù)的時候,只需要按照一定的速率將數(shù)據(jù)串行地移動出就可以了。然而,當UART 在接收串行的數(shù)據(jù)時,在什么時刻將數(shù)據(jù)移入移位寄存器是非常關(guān)鍵的。最理想的情況是在串行數(shù)據(jù)的每一位的中間時刻,對串行數(shù)據(jù)進行采樣。對每一位數(shù)據(jù)的時間進行分段,時間的分段越多,對串行數(shù)據(jù)的采樣就越靠近中點,由于接收方和發(fā)送方的時鐘不可能完全同步,時間的分段越多,接收方出現(xiàn)采樣錯誤的概率就越低。但時間的分段越多,也意味著采樣時間就越高,系統(tǒng)的開銷就越大。因此,在實際的設(shè)計中,采用16 倍于波特率的時鐘頻率。UART 收發(fā)的每一個數(shù)據(jù)寬度都是波特率發(fā)生器輸出的時鐘周期的16 倍。如按照9600b/s 進行收發(fā),那么波特率發(fā)生器的輸出時鐘頻率應(yīng)為9600×16Hz 。由于外部時鐘采用25MHz ,可以很簡單地通過總線寫入不同的數(shù)值到波特率發(fā)生器保持寄存器中,然后用計數(shù)器的方式生成所需要的各種波特率。計算公式為:25000000/(16 ×所期望的波特率)-1。
2. 2.2.2 發(fā)送模塊
發(fā)送模塊主要實現(xiàn)對并行數(shù)據(jù)的緩存,并串轉(zhuǎn)換,然后把串行數(shù)據(jù)按照既定數(shù)據(jù)幀格式進行輸出,其機構(gòu)如圖3 所示:
圖3 UART 發(fā)送模塊
a) data_input[7:0]是8 位并行數(shù)據(jù)的輸入端,轉(zhuǎn)換成串行數(shù)據(jù)后從txd 輸出;
b) wrn 是寫控制信號,為1 時禁止數(shù)據(jù)輸入,為0 時允許輸入;
c) reset 為系統(tǒng)復(fù)位輸入端,低電平有效;
d) clk 為系統(tǒng)時鐘信號輸入端,由波特率發(fā)生器產(chǎn)生;
e) tser 是并串轉(zhuǎn)換過程的標志:在沒有數(shù)據(jù)轉(zhuǎn)換時保持為1,在并串轉(zhuǎn)換開始時變成0,
并在轉(zhuǎn)換過程中保持為0; f) tbre 是整個工作過程的標志。實驗中串行數(shù)據(jù)結(jié)構(gòu)為1 位起始位,8 位數(shù)據(jù)位,1 位奇偶校驗位,1 位停止位。數(shù)據(jù) 的發(fā)送由外部接收模塊控制,接收模塊給出wrn 信號,UART 發(fā)送模塊根據(jù)此信號將并行數(shù)據(jù)data-input 鎖存進發(fā)送緩沖,并通過移位寄存器進行并串轉(zhuǎn)換,在轉(zhuǎn)換結(jié)束后加上奇偶校驗位,發(fā)送到端口txd 進行串行輸出。在整個工作過程中,輸出信號tbre 作為標志信號,在串行數(shù)據(jù)全部輸出完畢之后變成0, 并在發(fā)送模塊未工作時保持為0。
2.4 接收模塊
接收模塊的結(jié)構(gòu)如圖4 所示。接收模塊的作用是把收到的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)進行輸出,并判斷收到數(shù)據(jù)是否有錯。接收模塊的內(nèi)部結(jié)構(gòu)及工作過程與發(fā)送模塊類似,只不過接收模塊的工作和發(fā)送模塊的工作相反,是進行數(shù)據(jù)的串并轉(zhuǎn)換。
圖4 UART 接收模塊
a) rxd 接收串行數(shù)據(jù)輸入;
b) rdn 為輸入控制端,只有rdn 為0 時,并行數(shù)據(jù)才允許輸出;
c) data-ready 為數(shù)據(jù)是否準備好的標志;
d) parity-error 為校驗位是否出錯的標志;
e) framing-error 為幀是否出錯的標志;
f) data-out[7:0]為并行數(shù)據(jù)輸出端。
接收模塊從捕捉到數(shù)據(jù)串的第一個0 開始工作,然后把隨后依次輸入的8 個數(shù)據(jù)位通過移位在寄存器中完成竄并轉(zhuǎn)換,并將并行數(shù)據(jù)輸出至端口data-out 。將8 個數(shù)據(jù)位移位至寄存器后,接收模塊將檢測輸入數(shù)據(jù)串的最后一位是否為1(停止位)來判斷接收到的數(shù)據(jù)幀是否出錯,若不為1,就將輸出framing-error 置1。
3 仿真驗證在實驗中,作者選用Altera 公司的Cyclone 系列產(chǎn)品中的EP1C12Q240C8 芯片,硬件描述語言采用Verilog HDL,用Quartus 5.1 進行邏輯綜合,仿真工具則使用ModelSim6.0 。發(fā)送模塊和接收模塊的仿真結(jié)果分別如圖5 所示。發(fā)送的數(shù)據(jù)能夠嚴格按照串行通信協(xié)議進行傳輸;接收的數(shù)據(jù)也完全正確。通過仿真測試后,將程序下載到FPGA 芯片中運行,結(jié)果通信數(shù)據(jù)正確,電路工作穩(wěn)定、可靠。
圖5 發(fā)送和接收模塊仿真
4 結(jié)束語
用FPGA 實現(xiàn)了UART 通信功能,可以實現(xiàn)對數(shù)據(jù)的接收和發(fā)送,并可以在接收 數(shù)據(jù)時對其校驗位、停止位進行判斷,在發(fā)送數(shù)據(jù)時可以形成完整的一幀數(shù)據(jù)格式。本 文利用FPGA 設(shè)計實現(xiàn)了UART 的核心功能,可以和上位機進行異步串行通信。實驗 證明該UART 設(shè)計占用資源少,工作穩(wěn)定可靠。
本文作者創(chuàng)新觀點:本文對UART 系統(tǒng)結(jié)構(gòu)進行了模塊化分析,可以根據(jù)實際的需要可選擇地實現(xiàn)相應(yīng)的通信功能,簡化了電路設(shè)計,提高了系統(tǒng)的可靠性,可以靈活地嵌入到各個通信系統(tǒng)當中。