<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è) > 嵌入式系統 > 用FPGA/CPLD設計UART

用FPGA/CPLD設計UART

——
作者: 時(shí)間:2005-10-11 來(lái)源: 收藏

UART(即Universal Asynchronous Receiver Transmitter 通用異步收發(fā)器)是廣泛使用的串行數據傳輸協(xié)議。UART允許在串行鏈路上進(jìn)行全雙工的通信。---串行外設用到RS232-C 異步串行接口,一般采用專(zhuān)用的集成電路即UART 實(shí)現。如8250、8251、NS16450等芯片都是常見(jiàn)的UART器件,這類(lèi)芯片已經(jīng)相當復雜,有的含有許多輔助的模塊(如FIFO),有時(shí)我們不需要使用完整的UART的功能和這些輔助功能?;蛘咴O計上用到了FPGA/CPLD器件,那么我們就可以將所需要的UART功能集成到FPGA內部。使用VHDL將UART的核心功能集成,從而使整個(gè)設計更加緊湊、穩定且可靠。本文應用EDA技術(shù),基于FPGA/CPLD器件設計與實(shí)現UART。

一 UART 簡(jiǎn)介

1 UART 結構--- UART主要有由數據總線(xiàn)接口、控制邏輯、波特率發(fā)生器、發(fā)送部分和接收部分等組成。---功能包括微處理器接口,發(fā)送緩沖器(tbr)、發(fā)送移位寄存器(tsr)、幀產(chǎn)生、奇偶校驗、并轉串、數據接收緩沖器(rbr)、接收移位寄存器(rsr)、幀產(chǎn)生、奇偶校驗、串轉并。---圖1 是UART 的典型應用。

2 UART 的幀格式--- UART 的幀格式如圖2 所示。

---包括線(xiàn)路空閑狀態(tài)(idle,高電平)、起始位(start bit,低電平)、5~8位數據位(data bits)、校驗位(parity bit,可選)和停止位(stop bit,位數可為1、1.5、2 位)。---這種格式是由起始位和停止位來(lái)實(shí)現字符的同步。--- UART 內部一般有配置寄存器,可以配置數據位數(5~8 位)、是否有校驗位和校驗的類(lèi)型、停止位的位數(1,1.5,2)等設置。

二 UART 的設計與實(shí)現

1 UART 發(fā)送器---發(fā)送器每隔16個(gè)CLK16時(shí)鐘周期輸出1位,次序遵循1位起始位、8位數據位(假定數據位為8位)、1位校驗位(可選)、1位停止位。--- CPU何時(shí)可以往發(fā)送緩沖器tbr寫(xiě)入數據,也就是說(shuō)CPU要寫(xiě)數據到tbr時(shí)必須判斷當前是否可寫(xiě),如果不判這個(gè)條件,發(fā)送的數據會(huì )出錯。---數據的發(fā)送是由微處理器控制,微處理器給出wen 信號,發(fā)送器根據此信號將并行數據din[7..0]鎖存進(jìn)發(fā)送緩沖器tbr[7..0],并通過(guò)發(fā)送移位寄存器tsr[7..0]發(fā)送串行數據至串行數據輸出端dout。在數據發(fā)送過(guò)程中用輸出信號tre作為標志信號,當一幀數據發(fā)送完畢時(shí),tre信號為1,通知CPU在下個(gè)時(shí)鐘裝入新數據。---發(fā)送器端口信號如圖3 所示。

---引入發(fā)送字符長(cháng)度和發(fā)送次序計數器length_no,實(shí)現的部分VHDL 程序如下。

--- if std_logic_vector(length_no) = “0001” then --- tsr <= tbr ; --發(fā)送緩沖器tbr 數據進(jìn)入發(fā)送移位寄存器tsr --- tre <= '0' ; --發(fā)送移位寄存器空標志置“0” --- elsif std_logic_vector(length_no) = “0010” then --- dout <= '0' ; --發(fā)送起始位信號“0” --- elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” then --- tsr <= '0' & tsr(7 downto 1); --從低位到高位進(jìn)行移位輸出至串行輸出端dout --- dout <= tsr(0) ; --- parity <= parity xor tsr(0) ; --奇偶校驗--- elsif std_logic_vector(length_no) = “1011” then --- dout <= parity ; 校驗位輸出--- elsif std_logic_vector(length_no) = “1100” then --- dout <= '1' ; --停止位輸出--- tre <= '1' ; --發(fā)送完畢標志置“1” --- end if ;

---發(fā)送器仿真波形如圖4 所示。2 UART 接收器---串行數據幀和接收時(shí)鐘是異步的,發(fā)送來(lái)的數據由邏輯1 變?yōu)檫壿? 可以視為一個(gè)數據幀的開(kāi)始。接收器先要捕捉起始位,確定rxd輸入由1到0,邏輯0要8個(gè)CLK16時(shí)鐘周期,才是正常的起始位,然后在每隔16個(gè)CLK16時(shí)鐘周期采樣接收數據,移位輸入接收移位寄存器rsr,最后輸出數據dout。還要輸出一個(gè)數據接收標志信號標志數據接收完。---接收器的端口信號如圖5 所示。

 

---實(shí)現的部分VHDL 程序如下。

--- elsif clk1x'event and clk1x = '1' then ---if std_logic_vector(length_no) >= “0001” and std_logic_vector(length_no) <= “1001” then -----數據幀數據由接收串行數據端移位入接收移位寄存---rsr(0) <= rxda ; --- rsr(7 downto 1) <= rsr(6 downto 0) ; --- parity <= parity xor rsr(7) ; --- elsif std_logic_vector(length_no) = “1010” then --- rbr <= rsr ; --接收移位寄存器數據進(jìn)入接收緩沖--- ...... --- end if ;

---接收器仿真波形如圖6 所示。

3 波特率發(fā)生器--- UART 的接收和發(fā)送是按照相同的波特率進(jìn)行收發(fā)的。波特率發(fā)生器產(chǎn)生的時(shí)鐘頻率不是波特率時(shí)鐘頻率,而是波特率時(shí)鐘頻率的16倍,目的是為在接收時(shí)進(jìn)行精確地采樣,以提出異步的串行數據。---根據給定的晶振時(shí)鐘和要求的波特率算出波特率分頻數。---波特率發(fā)生器仿真波形如圖7 所示。

三小結---通過(guò)波特率發(fā)生器、發(fā)送器和接收器模塊的設計與仿真,能較容易地實(shí)現通用異步收發(fā)器總模塊,對于收發(fā)的數據幀和發(fā)生的波特率時(shí)鐘頻率能較靈活地改變,而且硬件實(shí)現不需要很多資源,尤其能較靈活地嵌入到FPGA/CPLD的開(kāi)發(fā)中。在EDA技術(shù)平臺上進(jìn)行設計、仿真與實(shí)現具有較好的優(yōu)越性。



關(guān)鍵詞: 網(wǎng)絡(luò )

評論


相關(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>