資源描述:
《基于fpgacpld設計與實現(xiàn)uart - search readpudncom》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于FPGA/CPLD設計與實現(xiàn)UART[日期:2005-7-7]來源:今日電子?作者:江陰職業(yè)技術(shù)學院電子信息工程系井新宇[字體:大中小]摘要:UART是廣泛使用的串行數(shù)據(jù)通訊電路。本設計包含UART發(fā)送器、接收器和波特率發(fā)生器。設計應用EDA技術(shù),基于FPGA/CPLD器件設計與實現(xiàn)UART。關(guān)鍵詞:FPGA/CPLD;UART;VHDL---UART(即UniversalAsynchronousReceiverTransmitter通用異步收發(fā)器)是廣泛使用的串行數(shù)據(jù)傳輸協(xié)議。UART允許在串行鏈路上進行全雙工的通信。---串行外設用到RS232-C異步串行接口
2、,一般采用專用的集成電路即UART實現(xiàn)。如8250、8251、NS16450等芯片都是常見的UART器件,這類芯片已經(jīng)相當復雜,有的含有許多輔助的模塊(如FIFO),有時我們不需要使用完整的UART的功能和這些輔助功能?;蛘咴O計上用到了FPGA/CPLD器件,那么我們就可以將所需要的UART功能集成到FPGA內(nèi)部。使用VHDL將UART的核心功能集成,從而使整個設計更加緊湊、穩(wěn)定且可靠。本文應用EDA技術(shù),基于FPGA/CPLD器件設計與實現(xiàn)UART。一UART簡介1UART結(jié)構(gòu)---UART主要有由數(shù)據(jù)總線接口、控制邏輯、波特率發(fā)生器、發(fā)送部分和接收部分等組成。--
3、-功能包括微處理器接口,發(fā)送緩沖器(tbr)、發(fā)送移位寄存器(tsr)、幀產(chǎn)生、奇偶校驗、并轉(zhuǎn)串、數(shù)據(jù)接收緩沖器(rbr)、接收移位寄存器(rsr)、幀產(chǎn)生、奇偶校驗、串轉(zhuǎn)并。---圖1是UART的典型應用。2UART的幀格式---UART的幀格式如圖2所示。---包括線路空閑狀態(tài)(idle,高電平)、起始位(startbit,低電平)、5~8位數(shù)據(jù)位(databits)、校驗位(paritybit,可選)和停止位(stopbit,位數(shù)可為1、1.5、2位)。---這種格式是由起始位和停止位來實現(xiàn)字符的同步。---UART內(nèi)部一般有配置寄存器,可以配置數(shù)據(jù)位數(shù)(5~8
4、位)、是否有校驗位和校驗的類型、停止位的位數(shù)(1,1.5,2)等設置。二UART的設計與實現(xiàn)1UART發(fā)送器---發(fā)送器每隔16個CLK16時鐘周期輸出1位,次序遵循1位起始位、8位數(shù)據(jù)位(假定數(shù)據(jù)位為8位)、1位校驗位(可選)、1位停止位。---CPU何時可以往發(fā)送緩沖器tbr寫入數(shù)據(jù),也就是說CPU要寫數(shù)據(jù)到tbr時必須判斷當前是否可寫,如果不判這個條件,發(fā)送的數(shù)據(jù)會出錯。---數(shù)據(jù)的發(fā)送是由微處理器控制,微處理器給出wen信號,發(fā)送器根據(jù)此信號將并行數(shù)據(jù)din[7..0]鎖存進發(fā)送緩沖器tbr[7..0],并通過發(fā)送移位寄存器tsr[7..0]發(fā)送串行數(shù)據(jù)至串行
5、數(shù)據(jù)輸出端dout。在數(shù)據(jù)發(fā)送過程中用輸出信號tre作為標志信號,當一幀數(shù)據(jù)發(fā)送完畢時,tre信號為1,通知CPU在下個時鐘裝入新數(shù)據(jù)。---發(fā)送器端口信號如圖3所示。---引入發(fā)送字符長度和發(fā)送次序計數(shù)器length_no,實現(xiàn)的部分VHDL程序如下。---ifstd_logic_vector(length_no)=“0001”then---tsr<=tbr;--發(fā)送緩沖器tbr數(shù)據(jù)進入發(fā)送移位寄存器tsr---tre<='0';--發(fā)送移位寄存器空標志置“0”---elsifstd_logic_vector(length_no)=“0010”then---dout
6、<='0';--發(fā)送起始位信號“0”---elsifstd_logic_vector(length_no)>=“0011”andstd_logic_vector(length_no)<=“1010”then---tsr<='0'&tsr(7downto1);--從低位到高位進行移位輸出至串行輸出端dout---dout<=tsr(0);---parity<=parityxortsr(0);--奇偶校驗---elsifstd_logic_vector(length_no)=“1011”then---dout<=parity;校驗位輸出---elsifstd_logic_
7、vector(length_no)=“1100”then---dout<='1';--停止位輸出---tre<='1';--發(fā)送完畢標志置“1”---endif;---發(fā)送器仿真波形如圖4所示。2UART接收器---串行數(shù)據(jù)幀和接收時鐘是異步的,發(fā)送來的數(shù)據(jù)由邏輯1變?yōu)檫壿?可以視為一個數(shù)據(jù)幀的開始。接收器先要捕捉起始位,確定rxd輸入由1到0,邏輯0要8個CLK16時鐘周期,才是正常的起始位,然后在每隔16個CLK16時鐘周期采樣接收數(shù)據(jù),移位輸入接收移位寄存器rsr,最后輸出數(shù)據(jù)dout。還要輸出一個數(shù)據(jù)接收標志信號標志數(shù)據(jù)接收完。---接收器的