




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
.z.課程設計報告課程EDA技術與應用題目UART串口數據接收器院系物理與電子工程學院年級專業電子信息工程班級3班**學生**指導教師設計時間2010.12摘要UART(UniversalAsynchronousReceiverTransmitter通用異步收發器)是廣泛使用的串行數據傳輸協議。UART允許在串行鏈路上進行全雙工的通信。通過應用EDA技術,基于CPLD/FPGA器件設計與實現UART的波特率產生器、UART發送器和接收器及其整合電路,目的是熟練運用VHDL語言,掌握FPGA芯片的使用。波特率發生器、接收器和發送器是UART的三個核心功能模塊,利用VHDL語言對這三個功能模塊進行描述并加以整合,通過Ma*PlusII仿真,用C++編寫串口調試程序進行驗證,其結果完全符合UART協議的要求和預期的結果。關鍵詞:UART;串行通訊;VHDL語言;CPLD;仿真目錄第一章課題概述-3-1.1課題背景-3-1.2課題目的與意義-3-第二章相關理論與技術-4-2.1UART相關內容簡介-4-復雜可編程邏輯器件FPGA簡介-4-2.1.2RS-232介紹-4-2.1.3VHDL簡介-5-2.2UART協議介紹-6-2.3硬件結構設計-7-2.4軟件設計-7-2.5開發板介紹-8-第三章課題詳細設計與實現-9-3.1UART的整體設計-9-3.2波特率發生器-11-波特率介紹-11-波特率的分頻計算-11-3.3接收模塊設計-12-接收模塊原理-12-接收模塊仿真圖-12-3.4串口調試軟件-13-3.5功能測試-14-總結-16-參考文獻-18-第一章課題概述1.1課題背景UART協議是數據通信及控制系統中廣泛使用的一種全雙工串行數據傳輸協議。波特率發生器、接收器和發送器是UART的三個核心功能模塊,利用VHDL語言對這三個功能模塊進行描述并加以整合UART(即UniversalAsynchronousReceiverTransmitter通用異步收發器)是廣泛使用的串行數據傳輸協議。UART允許在串行鏈路上進行全雙工的通信。串行外設用到RS232-C異步串行接口,一般采用專用的集成電路即UART實現。如8250、8251、NS16450等芯片都是常見的UART器件,這類芯片已經相當復雜,有的含有許多輔助的模塊(如FIFO),有時我們不需要使用完整的UART的功能和這些輔助功能。或者設計上用到了FPGA/CPLD器件,則我們就可以將所需要的UART功能集成到FPGA內部。使用VHDL或Veriolog-HDL將UART的核心功能集成,從而使整個設計更加緊湊、穩定且可靠。本文應用EDA技術,基于FPGA/CPLD器件設計與實現UART。1.2課題目的與意義實際應用上,有時我們不需要使用完整的UART的功能和這些輔助功能。使用VHDL將所需要的UART的核心功能集成到FPGA/CPLD內部,就可以實現緊湊、穩定且可靠的UART數據傳輸。這樣,既可以滿足實際的應用,實現所要求的簡單的通信和控制,又能夠去除更多不需要的繁雜復雜的功能實現。第二章相關理論與技術2.1UART相關內容簡介復雜可編程邏輯器件FPGA簡介FPGA(Field-ProgrammableGateArray),即現場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。FPGA采用了邏輯單元陣列LCA(LogicCellArray)這樣一個概念,內部包括可配置邏輯模塊CLB(ConfigurableLogicBlock)、輸出輸入模塊IOB(InputOutputBlock)和內部連線(Interconnect)三個部分。FPGA芯片是小批量系統提高系統集成度、可靠性的最佳選擇之一。FPGA是由存放在片內RAM中的程序來設置其工作狀態的,因此,工作時需要對片內的RAM進行編程。用戶可以根據不同的配置模式,采用不同的編程方式。RS-232介紹RS232接口,就是普通電腦后面那個串口。一般為9針的,也有25針的。是1970年由美國電子工業協會(EIA)聯合貝爾系統、調制解調器廠家及計算機終端生產廠家共同制定的用于串行通訊的標準。它的全名是"數據終端設備(DTE)和數據通訊設備(DCE)之間串行二進制數據交換接口技術標準”(RS-232C,其中C表示此標準修改了三次).標準中包括了電氣和機械方面的規定.該標準規定采用一個25個腳的DB25連接器,對連接器的每個引腳的信號內容加以規定,還對各種信號的電平加以規定.后來隨著設備的不斷改進,成了目前大家普遍見到的9腳。在不使用傳輸控制信號的情況下,用3根線就可以傳輸了,9芯的是2收3發5地,25芯的是2發3收7地。兩設備用RS232相連的時候為收——發,發——收,地——地。VHDL簡介VHDL語言是一種用于電路設計的高級語言。它在80年代的后期出現。最初是由美國國防部開發出來供美軍用來提高設計的可靠性和縮減開發周期的一種使用*圍較小的設計語言。VHDL的英文全寫是:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage.翻譯成中文就是超高速集成電路硬件描述語言。因此它的應用主要是應用在數字電路的設計中。目前,它在中國的應用多數是用在FPGA/CPLD/EPLD的設計中。當然在一些實力較為雄厚的單位,它也被用來設計ASIC。VHDL主要用于描述數字系統的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式、描述風格以及語法是十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分,及端口)和內部(或稱不可視部分),既涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內部開發完成后,其他的設計就可以直接調用這個實體。這種將設計實體分成內外部分的概念是VHDL系統設計的基本點。2.2UART協議介紹基本的UART通信只需要兩條信號線(R*D,T*D)就可以完成數據的全雙工通信任務。T*D是UART發送端,為輸出;R*D是UART接收端,為輸入。UART的基本特點是:在信號線上共有兩種狀態,分別用邏輯1(高電平)和邏輯O(低電平)來區分。例如,在發送器空閑時,數據線保持在邏輯高電平狀態,發送器是通過發送起始位來開始一個數據幀的傳送,起始位使數據線處于邏輯O狀態,提示接收器數據傳輸即將開始。接著發送數據位,數據位一般為8位一個字節的數據(也有5位、6位或7位的情況),低位(LSB)在前,高位(MSB)在后。然后發送校驗位,校驗位一般用來判斷傳輸的數據位有無錯誤,一般是奇偶校驗。在使用中,該位常取消。停止位在最后,用以標識數據傳送的結束,它對應于邏輯1狀態。UART的幀格式包括起始位(startbit,低電平)、5—8位數據位(databits)、校驗位(paritybit,可選)和停止位(stopbit,位數可為1、1.5、2位)。這種格式是由起始位和停止位來實現字符的同步H1,如圖l所示。硬件結構設計UART處理的是并行數據轉為串行信號和串行數據轉為并行,但并不是簡單的轉換。分析UART的結構,可以看出UART主要由數據總線接口、控制邏輯接口、波特率發生器、發送邏輯和結束邏輯等部分組成,各部分間的關系如圖2所示。圖2UART通信接口結構圖2.4軟件設計軟件采用Altera公司的MA*+PLUSⅡ設計邏輯結構,設計的內容包括通用I/O地址譯碼器、各個寄存器以及UART核。UART核主要包括3個部分:波特率發生器、數據發送部分和數據接收部分。I/O地址譯碼器和UART核使用硬件描述語言VHDL來編寫實現。2.5開發板介紹本課程設計使用了Mars-EP1C3-SAlteraCycloneFPGA開發板(增強版),該開發板的主芯片采用Altera公司Cyclone系列FPGA芯片EP1C3T144;配置芯片:EPCS1;支持JTAG和AS下載模式;有源晶振:40MHZ
;復位芯片:stc811。開發板結構如圖3所示:圖3Mars-EP1C3-SAlteraCycloneFPGA開發板結構圖第三章課題詳細設計與實現3.1UART的整體設計一般UART通信通過兩條信號線完成數據的全雙工通信任務。其中,T*D是UART發送端,為輸出;R*D是UART接收端,為輸入。波特率發生器、接收器和發送器是UART的三個核心功能模塊。我們所做的設計主要為數據接收模塊。如圖4所示的即為接收器的硬件連接示意圖,數據從計算機的串口T*D端傳送給FPGA的R*D端,最后由LED顯示出數據。時鐘時鐘LED計算機的串口T*DCLKD11~D0FPGAR*D圖4硬件連接示意圖我們采用狀態機的方式來實現串口通訊功能,用一個接收狀態寄存器state_rec來表示當前狀態。空閑時state_rec=0,此時不斷監測接收端口的電平,如果低電平連續保持兩個時隙,則轉向接受數據狀態,state_rec的值從1-8跳轉,接受8bit數據。如果低電平沒有保持兩個時隙,則重新回到空閑狀態,state_rec=0。當八位數據接收完畢,則跳轉到停止狀態,state_rec=9,此時無論接收端口電平高低,均在下一個狀態周期跳轉回空閑狀態,準備接受下一位數據。若在較復雜的環境下通訊,則可以考慮增加一個通訊失敗狀態,若檢測到停止位為低電平,或者校驗位不滿足要求,則跳轉到失敗狀態。圖5為狀態轉換圖。圖5狀態轉換圖圖5UART狀態機示意圖圖5UART狀態機示意圖3.2波特率發生器波特率介紹波特率是指數據信號對載波的調制速率,它用單位時間內載波調制狀態改變的次數來表示,其單位是波特(Baud)。波特率與比特率的關系是比特率=波特率*單個調制狀態對應的二進制位數。模擬線路信號的速率,也稱調制速率,以波形每秒的振蕩數來衡量。如果數據不壓縮,波特率等于每秒鐘傳輸的數據位數,如果數據進行了壓縮,則每秒鐘傳輸的數據位數通常大于調制速率,使得交換使用波特和比特/秒偶爾會產生錯誤。波特率發生器不是產生波特率時鐘的,波特率時鐘頻率/波特率因子=波特率。波特率發生器的作用是從輸入時鐘轉換出需要的波特率clk。波特率的分頻計算產生波特率的主信號頻率是越高越好,這樣才可產生較高且精確的波特率。若是以40MHz主頻率要產生9600波特率則必須將此clock=40MHz除以分頻因子520,得到比特率的8倍頻,每個接收位將被分為8個時隙數進行同步。因此,實際波特率為40MHZ/520/8=9615.38,其誤差率為0.16%。3.3接收模塊設計接收模塊原理接收不是由本機啟動,而是由一個外部事件觸發的。在空閑狀態時,若接收線上出現一個下降沿,即視為一個可能的起始位,應該對其再次采樣加以確定。一個真實的起始位,其低電平維持時間為104.3ns。我們在起始位下降沿后,以波特率的8倍頻對接收線采樣兩次,若均為低電平,則表示該信號確實為低電平。否則,表明是一個干擾信號,UART仍回到空閑狀態。若確認接收線的狀態為低,則這個起始位得到確認,UART開始接收后續數據。UART核心在八倍波特率的時鐘下工作,因此每個接收狀態被分成八個時隙,僅檢測其中一個時隙的高低電平狀態來作為該數據位的電平,從而避開傳輸過程中可能出現的噪音。UART對數據接收的時序圖參見圖6,接收完畢UART又回到空閑狀態。接收模塊仿真圖設計所做的接收模塊為10位異步串口接收,即每接收一個字節的數據都要經過起始位,8位數據位以及停止位。如圖6所示的接收模塊時序仿真圖,空閑時,數據線保持邏輯高電平,接收到數據時起始位出現邏輯低電平,表示數據傳輸的開始。隨后接收8位數據位,通常采用ASCII碼,從最低位開始傳送。停止位標志著一個字節傳輸的結束,之后跳轉到空閑狀態,等待下一個數據的接收。UART設計在八倍波特率的時鐘下工作,因此為了減少噪聲干擾,我們將每個狀態分為8個時隙。接收數據時,只需對數據位的其中一個時隙的高低電平進行采樣,本設計中為第5個時隙,如圖7所示。圖6接收模塊的時序仿真圖圖7接收模塊各狀態時序仿真圖3.4串口調試軟件利用C++編寫了一個PC端串口發送調試軟件,其界面如圖8所示。通過串行通訊接口RS-232將PC機和開發板連接,設置好對應的端口,則可以自動建立連接,實現數據傳輸。圖8串口調試軟件界面3.5功能測試本課題中設計的所有模塊均采用VHDL硬件描述語言進行描述,在Altera公司的MA*PLUSII開發環境下進行程序的編譯、邏輯綜合和仿真以及管腳分配,在Mars-EP1C3-SAlteraCycloneFPGA開發板(增強版)上進行驗證。將開發板接上電源,輸入端跟電腦主機接口相連。在電腦上打開串口調試軟件,將串口改成1,會顯示串口成功打開,點一下圖上的LED燈,這時會有一個串行數據從電腦接口發出,發送到開發板上,經過開發板上的芯片處理,我們會發現與電腦圖上相同位置的開發板上的LED燈會亮。一切與預期結果一樣,測試成功。圖8功能測試圖總結這次EDA課程設計歷時一個多星期,在這段日子里,可以說是苦多于甜,但是可以學的到很多很多的東西,同時不僅可以鞏固以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次設計,進一步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。我們的課題是UART串口數據接收器,以前從來沒有聽說過這個器件,但當每一個子模塊編寫調試成功時,心里特別的開心。但是在編寫頂層文件的程序時,遇到了不少問題,特別是各元件之間的連接,以及信號的定義,總是有錯誤,在細心的檢查下,終于找出了錯誤和警告,排除困難后,程序編譯就通過了,心里終于舒了一口氣。在連接各個模塊的時候一定要注意各個輸入、輸出引腳的線寬,因為每個線寬是不一樣的,只要讓各個線寬互相匹配,才能得出正確的結果,否則,出現任何一點小的誤差就會導致整個文件系統的編譯出現錯誤提示,在器件的選擇上也有一定的技巧,只有選擇了合適當前電路所適合的器件,編譯才能得到完滿成功。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。總的來說,這次設計的結果還是比較成功的,在設計中遇到了很多問題,最后在華老師的辛勤的指導下,終于游逆而解,有點小小的成就感,終于覺得平時所學的知識有了實用的價值,達到了理論與實際相結合的目的,不僅學到了不少知識,而且鍛煉了自己的能力,使自己對以后的路有了更加清楚的認識,同時,對未來有了更多的信心。知識是無窮無盡的,知識的獲取需要一顆上進的心,老師將我們領進了門,下面的路就應該我們自己出去去走,即使充滿荊棘,也要努力奮斗向前沖。最后,對給過我幫助的所有同學和各位指導老師再次表示忠心的感謝!參考文獻【1】EDA技術與應用(第二版)**電子科技大學【2】FPGA/CPLD應用設計200例航空航天大學出版【3】基于FPGA的URAT設計,聶濤,許世宏《現代電子技術》2006年第二期總第217期附錄:接收模塊的源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYUARTISPORT(clk:INstd_logic;rst:INstd_logic;r*d:INstd_logic;--串行數據接收端seg_data:OUTstd_logic_vector(11DOWNTO0)--數碼管數據);ENDUART;ARCHITECTUREarchOFUARTIS--//////////////////innerreg////////////////////SIGNALdiv_reg:std_logic_vector(15DOWNTO0);--分頻計數器,分頻值由波特率決定。分頻后得到頻率8倍波特率的時鐘SIGNALdiv8_rec_reg:std_logic_vector(2DOWNTO0);--寄存器的計數值對應接收時當前位于的時隙數SIGNALstate_rec:std_logic_vector(3DOWNTO0);--接受狀態寄存器SIGNALclkbaud_rec:std_logic;--以波特率為頻率的接受使能信號SIGNALclkbaud8*:std_logic;--以8倍波特率為頻率的時鐘,它的作用是將發送或接受一個bit的時鐘周期分為8個時隙SIGNALrecstart:std_logic;--開始發送標志SIGNALrecstart_tmp:std_logic;--開始接受標志SIGNALr*d_reg1:std_logic;--接收寄存器1SIGNALr*d_reg2:std_logic;--接收寄存器2,因為接收數據為異步信號,故用兩級緩存SIGNALr*d_buf:std_logic_vector(7DOWNTO0);--接受數據緩存--//////////////////////////////////////////////CONSTANTdiv_par:std_logic_vector(15DOWNTO0):="00100";--分頻參數,其值由對應的波特率計算而得,按此參數分頻的時鐘頻率是波倍特率的8倍,此處值對應9600的波特率,即分頻出的時鐘頻率是9600*8 SIGNALt*d_*hdl3:std_logic;--SIGNALen :std_logic;--成功接收標志BEGINPROCESS(clk,rst)BEGINIF(NOTrst='1')THENdiv_reg<="00000";ELSIF(clk'EVENTANDclk='1')THENIF(div_reg=div_par-"00001")THENdiv_reg<="00000";ELSEdiv_reg<=div_reg+"00001";ENDIF;ENDIF;ENDPROCESS;--分頻得到8倍波特率的時鐘PROCESS(clk,rst)BEGINIF(NOTrst='1')THENclkbaud8*<='0';ELSIF(clk'EVENTANDclk='1')THENIF(div_reg=div_par-"00001")THENclkbaud8*<=NOTclkbaud8*;ENDIF;ENDIF;ENDPROCESS;--PROCESS(clkbaud8*,rst)BEGINIF(NOTrst='1')THENdiv8_rec_reg<="000";ELSEIF(clkbaud8*'EVENTANDclkbaud8*='1')THENIF(recstart='1')THEN--接收開始標志div8_rec_reg<=div8_rec_reg+"001";--接收開始后,時隙數在8倍波特率的時鐘下加1循環ENDIF; ENDIF;ENDIF;ENDPROCESS;PROCESS(div8_rec_reg)BEGINIF(div8_rec_reg="111")THENclkbaud_rec<='1';在第7個時隙,接收使能信號有效,將數據打入ELSEclkbaud_rec<='0';ENDIF;ENDPROCESS;PROCESS(clkbaud8*,rst)--接受PC機的數據BEGINIF(NOTrst='1')THENr*d_reg1<='0';r*d_reg2<='0';r*d_buf<="00000000";state_rec<="0000";recstart<='0';recstart_tmp<='0';ELSEIF(clkbaud8*'EVENTANDclkbaud8*='1')THENr*d_reg1<=r*d;r*d_reg2<=r*d_reg1;IF(state_rec="0000")THENIF(recstart_tmp='1')THENrecstart<='1';recstart_tmp<='0';state_rec<=state_rec+"0001";--(第2個8*baud)ELSEIF((NOTr*d_reg1ANDr*d_reg2)='1')THEN--檢測到起始位的下降沿,進入接受狀態(第1個8*baud)recstart_tmp<='1';ENDIF;ENDIF;ELSEIF(state_rec>="0001"ANDstate_rec<="1000")THENIF(clkbaud_rec='1')THENr*d_buf(7)<=r*d_reg2;r*d_buf(6DOWNTO0)<=r*d_buf(7DOWNTO1);state_rec<=state_rec+"0001";ENDIF;ELSEIF(state_rec="1001")THENIF(clkbaud_rec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 各科目機電工程考試復習指南試題及答案
- 軟件設計師職場優勢分析試題及答案
- 網絡工程實施方案試題及答案
- 四級計算機工資與軟件測試試題及答案
- 復習計劃的靈活性與調整能力2025年信息系統項目管理師試題及答案
- 網絡工程師職業前景及發展試題及答案
- 機電制造技術考題及答案
- 西方國家非暴力抗爭的政治影響試題及答案
- 西方國家與全球化的互動試題及答案
- 數據傳輸優化技術與實踐研究試題及答案
- 地下管道保護方案
- 中國世界文化遺產監測預警指標體系
- 日本表參道項目案例分析
- GB/T 17772-2018土方機械保護結構的實驗室鑒定撓曲極限量的規定
- 腦卒中風險評估(改良的弗明漢卒中量表)老年健康與醫養結合服務管理
- 09S304 衛生設備安裝圖集
- 《弟子規》謹篇(課件)
- 膝關節骨性關節炎的防治課件
- 防蛇蟲咬傷防中暑課件
- 車輛購置稅和車船稅課件
- 國開電大《人員招聘與培訓實務》形考任務4國家開放大學試題答案
評論
0/150
提交評論