基于FPGA的UART IP核設(shè)計(jì)與實(shí)現(xiàn)
關(guān)鍵詞:IP核;UART;Verilog HDL;FPGA
Abstract:This article introduces the design of a UART core based on FPGA. According to the protocol of serial communication, this core has the characteristic of modularity and configurability, and is ideal for SoC(system on a chip). Verilog hardware description language (HDL) in the Xilinx ISE environment has been used for its design, compilation and simulation. The UART IP core has been implemented using FPGA technology.
Keywords:IP core;UART;Verilog HDL;FPGA
1 引言
在數(shù)據(jù)采集系統(tǒng)中, 常需要進(jìn)行異步串行數(shù)據(jù)傳輸,目前廣泛使用的RS232異步串行接口,如8250、NS16450等專用集成芯片,雖然使用簡(jiǎn)單,卻有占用電路體積、引腳連接復(fù)雜等缺點(diǎn)。SoC(System on Chip,片上系統(tǒng))是ASIC設(shè)計(jì)中的新技術(shù),是以嵌入式系統(tǒng)為核心,以IP 復(fù)用技術(shù)為基礎(chǔ),集軟、硬件于一體的設(shè)計(jì)方法。使用IP復(fù)用技術(shù),將UART集成到FPGA芯片上,可增加系統(tǒng)的可靠性,縮小PCB板體積;其次由于IP核的特點(diǎn),使用IP核可使整個(gè)系統(tǒng)更加靈活,還可以根據(jù)需要進(jìn)行功能的升級(jí)、擴(kuò)充和裁減。
本文使用Verilog HDL語(yǔ)言編寫UART模塊,將其集成到FPGA芯片上,與芯片上的其它功能模塊構(gòu)成SoC片上系統(tǒng)。
2 UART模塊設(shè)計(jì)與實(shí)現(xiàn)
UART串行數(shù)據(jù)格式如圖1所示,串行數(shù)據(jù)包括8位數(shù)據(jù)(8 data bits)、1位起始位(start bit)、1位結(jié)束位(stop bit)、1位校驗(yàn)位(parity bit),共11位。
圖1. UART數(shù)據(jù)格式
UART模塊結(jié)構(gòu)如圖2所示,左邊發(fā)送鎖存器、發(fā)送移位寄存器和邏輯控制組成發(fā)送模塊(txmit),右邊接收鎖存器、接收移位寄存器和邏輯控制組成接收模塊(rxcver)。發(fā)送模塊和接收模塊除了共用復(fù)位信號(hào)、時(shí)鐘信號(hào)和并行數(shù)據(jù)線外,分別有各自的輸入、輸出和控制邏輯單元。
圖2. UART模塊結(jié)構(gòu)
2.1 波特率時(shí)鐘的控制
UART核包含一個(gè)可編程的波特率發(fā)生器,它給發(fā)送模塊和接收模塊提供發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的基準(zhǔn)時(shí)鐘,波特率發(fā)生器產(chǎn)生的時(shí)鐘mclkx16是串行數(shù)據(jù)波特率的16倍。它對(duì)系統(tǒng)時(shí)鐘進(jìn)n分頻,計(jì)算公式為:mclkx16=系統(tǒng)時(shí)鐘/波特率*16,針對(duì)不同波特率設(shè)定相應(yīng)的數(shù)值就可以得到期望的內(nèi)部波特率時(shí)鐘。
2.2 發(fā)送模塊設(shè)計(jì)
發(fā)送模塊分為三種模式:空閑模式、載入數(shù)據(jù)模式、移位模式。當(dāng)并行8位數(shù)據(jù)從總線寫入發(fā)送模塊后,發(fā)送模塊將并行數(shù)據(jù)裝入鎖存器thr中,然后在移位寄存器tsr中將數(shù)據(jù)移位,產(chǎn)生完整的發(fā)送序列(包括起始位,數(shù)據(jù)位,奇偶校驗(yàn)位和停止位),以相應(yīng)波特率從tx發(fā)送。發(fā)送模塊的輸入時(shí)鐘mclkx16是串行數(shù)據(jù)波特率的16倍,模塊內(nèi)部將其16分頻后得到波特率時(shí)鐘txclk。
在發(fā)送時(shí)序圖中我們看到輸入數(shù)據(jù)為8’b00001111,校驗(yàn)位為奇校驗(yàn),產(chǎn)生校驗(yàn)位為’1’。tx端依次輸出起始位’0’,8位數(shù)據(jù)’00001111’,校驗(yàn)位’1’。tsr移位寄存器中數(shù)據(jù)依次右移,高位在前兩次右移中補(bǔ)’1’,之后8次移位中高位補(bǔ)’0’。
下面是發(fā)送模塊主要程序段,使用Verilog HDL語(yǔ)言編寫。由于初始和移位程序比較簡(jiǎn)單,這里沒(méi)有給出。
always @(posedge txclk or posedge reset)
if (reset)
idle_reset; //初始程序
else
begin
if (txdone && txdatardy)
load_data; //將數(shù)據(jù)裝入tsr,并發(fā)送起始位
else
begin
shift_data; // tsr8位數(shù)據(jù)移位,并產(chǎn)生校驗(yàn)位
if (txdone )
tx <= 1'b1; // 輸出停止位
else if (paritycycle)
tx <= txparity; // 輸出校驗(yàn)位
else
tx <= tsr[0]; //輸出數(shù)據(jù)位
end
end
圖3. 發(fā)送時(shí)序
2.3 接收模塊設(shè)計(jì)
接收模塊也分為三種模式:空閑模式、檢測(cè)起始位模式、移位模式。首先捕捉起始位,
在mclkx16時(shí)鐘下不斷檢測(cè)從rx端輸入數(shù)據(jù)的起始位,當(dāng)檢測(cè)到起始位后,接收模塊由空閑模式轉(zhuǎn)換為移位模式,并且16分頻mclkx16產(chǎn)生rxclk波特率時(shí)鐘。此時(shí)rxclk時(shí)鐘的上升沿位于串行數(shù)據(jù)每一位的中間,這樣接下來(lái)的數(shù)據(jù)在每一位的中點(diǎn)采樣,能有效濾除噪聲影響。然后由rxclk控制在上升沿將數(shù)據(jù)位寫入移位寄存器rsr的rsr[7]位,并且rsr右移1位,照此過(guò)程8位數(shù)據(jù)全部寫入rsr,并且停止產(chǎn)生rxclk波特率時(shí)鐘。判斷奇偶校驗(yàn)、幀結(jié)構(gòu)和溢出標(biāo)志正確后,rsr寄存器中的數(shù)據(jù)寫入rhr數(shù)據(jù)鎖存寄存器中,最后由8位數(shù)據(jù)總線輸出轉(zhuǎn)換完成的數(shù)據(jù)。
rxclk時(shí)鐘的產(chǎn)生依靠判斷起始位,在起始位’0’的中點(diǎn)產(chǎn)生,并且在檢測(cè)到結(jié)束位后停止,如圖4所示。
圖4. 接收模塊波特率時(shí)鐘產(chǎn)生時(shí)序
接收移位程序段如下:
task shift_data;
begin
rsr <= rsr >> 1; // 寄存器右移一位
rsr[7] <= rxparity; // 數(shù)據(jù)裝入rsr[7]
rxparity <= rxstop;
rxstop <= rx;
paritygen <= paritygen ^ rxstop; // 產(chǎn)生奇偶比較標(biāo)志
end
endtask
由時(shí)序圖可以看到一個(gè)完整的數(shù)據(jù)幀的接收過(guò)程,hunt和idle標(biāo)志捕捉到起始位后,產(chǎn)生rxclk波特率時(shí)鐘,串行數(shù)據(jù)在rsr中移位,rsr中數(shù)據(jù)右移高位補(bǔ)零。當(dāng)起始位’0’移位到rsr[0]后,接收模塊在下一個(gè)clk上升沿返回空閑狀態(tài),返回空閑狀態(tài)后產(chǎn)生數(shù)據(jù)移位完成中斷rxrdy,數(shù)據(jù)可從8位數(shù)據(jù)總線讀出。
圖5. 接收時(shí)序
3 UART綜合
程序經(jīng)仿真驗(yàn)證后,須綜合生成IP核并嵌入FPGA中。使用Xilinx公司的Xilinx ISE工具綜合UART模塊,F(xiàn)PGA選用Xilinx公司的Spartan-IIE xc2s50E,系統(tǒng)時(shí)鐘40Mhz。經(jīng)Xilinx ISE綜合后,資源使用結(jié)果如下所示,表明使用少量FPGA的Slice和LUT單元就可生成UART核。
表1. 資源使用情況
Number of Slices |
108 out of 768 |
14% |
Number of Slice Flip Flops |
90 out of 1536 |
5% |
Number of 4 input LUTs |
195 out of 1536 |
12% |
Number of bonded IOBs |
25 out of 102 |
24% |
Number of GCLKs |
1 out of 4 |
25% |
UART核可靈活分成接收和發(fā)送兩部分,可根據(jù)需要選擇使用,節(jié)省系統(tǒng)資源;一些控制標(biāo)志字也可根據(jù)需要自行刪減和擴(kuò)充。最后將集成有UART核的FPGA數(shù)據(jù)采集系統(tǒng)與測(cè)試臺(tái)進(jìn)行異步串行通信實(shí)驗(yàn),通信數(shù)據(jù)經(jīng)檢測(cè)表明使用UART核傳輸數(shù)據(jù)穩(wěn)定可靠。
4 結(jié)束語(yǔ)
在數(shù)據(jù)采集系統(tǒng)中經(jīng)常采用UART異步串行通信接口作為數(shù)據(jù)采集系統(tǒng)的短距離串行通信。相對(duì)于傳統(tǒng)的UART芯片來(lái)說(shuō),集成在FPGA中的具有UART功能的IP核更有利于提高數(shù)據(jù)采集系統(tǒng)的可靠性和穩(wěn)定性,縮小電路體積。本文設(shè)計(jì)的UART IP核通過(guò)仿真驗(yàn)證,經(jīng)綜合、編譯、嵌入FPGA,成功應(yīng)用于數(shù)據(jù)采集系統(tǒng)的端口通信中。
參考文獻(xiàn)
[1] 侯伯亨, 顧新. VHDL硬件描述語(yǔ)言與數(shù)字邏輯電路設(shè)計(jì)[M]. 西安: 西安電子科技大學(xué)出版社, 19991
[2] 張莉, 楊永明. 基于CPLD的UART設(shè)計(jì)[J]. 微計(jì)算機(jī)信息. 2002. 2(18): 60-61
[3] Xilinx, Inc. Spartan-IIE 1.8V FPGA Functional Description , 2003, 9
[4] 劉 達(dá), 龔建榮. 系統(tǒng)級(jí)可編程芯片(SOPC)設(shè)計(jì)思想與開(kāi)發(fā)策略[J]. 現(xiàn)代電子技術(shù), 2002, (11): 124
[5] 周恒, 羅斯青. 基于FPGA的SOC設(shè)計(jì)策略[J]. 山西電子技術(shù), 2002, (11): 629