<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于FPGA的UART IP核設計與實(shí)現

基于FPGA的UART IP核設計與實(shí)現

作者: 時(shí)間:2008-04-23 來(lái)源:網(wǎng)絡(luò ) 收藏
摘要:本文設計了一種基于核,該核符合串行通信協(xié)議,具有模塊化、兼容性和可配置性,適合于SoC應用。設計中使用VerilogHDL硬件描述語(yǔ)言在XilinxISE環(huán)境下進(jìn)行設計、仿真,最后在上嵌入實(shí)現了電路的異步串行通信功能。
關(guān)鍵詞;;VerilogHDL;

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 引言

在數據采集系統中, 常需要進(jìn)行異步串行數據傳輸,目前廣泛使用的RS232異步串行接口,如8250、NS16450等專(zhuān)用集成芯片,雖然使用簡(jiǎn)單,卻有占用電路體積、引腳連接復雜等缺點(diǎn)。SoC(System on Chip,片上系統)是ASIC設計中的新技術(shù),是以嵌入式系統為核心,以IP 復用技術(shù)為基礎,集軟、硬件于一體的設計方法。使用IP復用技術(shù),將UART集成到FPGA芯片上,可增加系統的可靠性,縮小PCB板體積;其次由于的特點(diǎn),使用IP核可使整個(gè)系統更加靈活,還可以根據需要進(jìn)行功能的升級、擴充和裁減。

本文使用Verilog HDL語(yǔ)言編寫(xiě)UART模塊,將其集成到FPGA芯片上,與芯片上的其它功能模塊構成SoC片上系統。

2 UART模塊設計與實(shí)現

UART串行數據格式如圖1所示,串行數據包括8位數據(8 data bits)、1位起始位(start bit)、1位結束位(stop bit)、1位校驗位(parity bit),共11位。

圖1. UART數據格式

UART模塊結構如圖2所示,左邊發(fā)送鎖存器、發(fā)送移位寄存器和邏輯控制組成發(fā)送模塊(txmit),右邊接收鎖存器、接收移位寄存器和邏輯控制組成接收模塊(rxcver)。發(fā)送模塊和接收模塊除了共用復位信號、時(shí)鐘信號和并行數據線(xiàn)外,分別有各自的輸入、輸出和控制邏輯單元。

圖2. UART模塊結構

2.1 波特率時(shí)鐘的控制

UART核包含一個(gè)可編程的波特率發(fā)生器,它給發(fā)送模塊和接收模塊提供發(fā)送數據和接收數據的基準時(shí)鐘,波特率發(fā)生器產(chǎn)生的時(shí)鐘mclkx16是串行數據波特率的16倍。它對系統時(shí)鐘進(jìn)n分頻,計算公式為:mclkx16=系統時(shí)鐘/波特率*16,針對不同波特率設定相應的數值就可以得到期望的內部波特率時(shí)鐘。

2.2 發(fā)送模塊設計

發(fā)送模塊分為三種模式:空閑模式、載入數據模式、移位模式。當并行8位數據從總線(xiàn)寫(xiě)入發(fā)送模塊后,發(fā)送模塊將并行數據裝入鎖存器thr中,然后在移位寄存器tsr中將數據移位,產(chǎn)生完整的發(fā)送序列(包括起始位,數據位,奇偶校驗位和停止位),以相應波特率從tx發(fā)送。發(fā)送模塊的輸入時(shí)鐘mclkx16是串行數據波特率的16倍,模塊內部將其16分頻后得到波特率時(shí)鐘txclk。

在發(fā)送時(shí)序圖中我們看到輸入數據為8’b00001111,校驗位為奇校驗,產(chǎn)生校驗位為’1’。tx端依次輸出起始位’0’,8位數據’00001111’,校驗位’1’。tsr移位寄存器中數據依次右移,高位在前兩次右移中補’1’,之后8次移位中高位補’0’。

下面是發(fā)送模塊主要程序段,使用Verilog HDL語(yǔ)言編寫(xiě)。由于初始和移位程序比較簡(jiǎn)單,這里沒(méi)有給出。

always @(posedge txclk or posedge reset)

if (reset)

idle_reset; //初始程序

else

begin

if (txdone txdatardy)

load_data; //將數據裝入tsr,并發(fā)送起始位

else

begin

shift_data; // tsr8位數據移位,并產(chǎn)生校驗位

if (txdone )

tx = 1'b1; // 輸出停止位

else if (paritycycle)

tx = txparity; // 輸出校驗位

else

tx = tsr[0]; //輸出數據位

end

end

圖3. 發(fā)送時(shí)序

2.3 接收模塊設計

接收模塊也分為三種模式:空閑模式、檢測起始位模式、移位模式。首先捕捉起始位,

在mclkx16時(shí)鐘下不斷檢測從rx端輸入數據的起始位,當檢測到起始位后,接收模塊由空閑模式轉換為移位模式,并且16分頻mclkx16產(chǎn)生rxclk波特率時(shí)鐘。此時(shí)rxclk時(shí)鐘的上升沿位于串行數據每一位的中間,這樣接下來(lái)的數據在每一位的中點(diǎn)采樣,能有效濾除噪聲影響。然后由rxclk控制在上升沿將數據位寫(xiě)入移位寄存器rsr的rsr[7]位,并且rsr右移1位,照此過(guò)程8位數據全部寫(xiě)入rsr,并且停止產(chǎn)生rxclk波特率時(shí)鐘。判斷奇偶校驗、幀結構和溢出標志正確后,rsr寄存器中的數據寫(xiě)入rhr數據鎖存寄存器中,最后由8位數據總線(xiàn)輸出轉換完成的數據。

rxclk時(shí)鐘的產(chǎn)生依靠判斷起始位,在起始位’0’的中點(diǎn)產(chǎn)生,并且在檢測到結束位后停止,如圖4所示。

圖4. 接收模塊波特率時(shí)鐘產(chǎn)生時(shí)序

接收移位程序段如下:

task shift_data;

begin

rsr = rsr >> 1; // 寄存器右移一位

rsr[7] = rxparity; // 數據裝入rsr[7]

rxparity = rxstop;

rxstop = rx;

paritygen = paritygen ^ rxstop; // 產(chǎn)生奇偶比較標志

end

endtask

由時(shí)序圖可以看到一個(gè)完整的數據幀的接收過(guò)程,hunt和idle標志捕捉到起始位后,產(chǎn)生rxclk波特率時(shí)鐘,串行數據在rsr中移位,rsr中數據右移高位補零。當起始位’0’移位到rsr[0]后,接收模塊在下一個(gè)clk上升沿返回空閑狀態(tài),返回空閑狀態(tài)后產(chǎn)生數據移位完成中斷rxrdy,數據可從8位數據總線(xiàn)讀出。

圖5. 接收時(shí)序

3 UART綜合

程序經(jīng)仿真驗證后,須綜合生成IP核并嵌入FPGA中。使用Xilinx公司的Xilinx ISE工具綜合UART模塊,FPGA選用Xilinx公司的Spartan-IIE xc2s50E,系統時(shí)鐘40Mhz。經(jīng)Xilinx ISE綜合后,資源使用結果如下所示,表明使用少量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ā)送兩部分,可根據需要選擇使用,節省系統資源;一些控制標志字也可根據需要自行刪減和擴充。最后將集成有UART核的FPGA數據采集系統與測試臺進(jìn)行異步串行通信實(shí)驗,通信數據經(jīng)檢測表明使用UART核傳輸數據穩定可靠。

4 結束語(yǔ)

在數據采集系統中經(jīng)常采用UART異步串行通信接口作為數據采集系統的短距離串行通信。相對于傳統的UART芯片來(lái)說(shuō),集成在FPGA中的具有UART功能的IP核更有利于提高數據采集系統的可靠性和穩定性,縮小電路體積。本文設計的UART IP核通過(guò)仿真驗證,經(jīng)綜合、編譯、嵌入FPGA,成功應用于數據采集系統的端口通信中。

參考文獻

[1] 侯伯亨, 顧新. VHDL硬件描述語(yǔ)言與數字邏輯電路設計[M]. 西安: 西安電子科技大學(xué)出版社, 19991

[2] 張莉, 楊永明. 基于CPLD的UART設計[J]. 微計算機信息. 2002. 2(18): 60-61

[3] Xilinx, Inc. Spartan-IIE 1.8V FPGA Functional Description , 2003, 9

[4] 劉 達, 龔建榮. 系統級可編程芯片(SOPC)設計思想與開(kāi)發(fā)策略[J]. 現代電子技術(shù), 2002, (11): 124

[5] 周恒, 羅斯青. 基于FPGA的SOC設計策略[J]. 山西電子技術(shù), 2002, (11): 629



關(guān)鍵詞: FPGA UART IP核

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>