FPGA通用異步收發(fā)器設(shè)計_第1頁
FPGA通用異步收發(fā)器設(shè)計_第2頁
FPGA通用異步收發(fā)器設(shè)計_第3頁
FPGA通用異步收發(fā)器設(shè)計_第4頁
FPGA通用異步收發(fā)器設(shè)計_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、fpga通用異步收發(fā)器設(shè)計一設(shè)計目的1. 了解短距離串行傳輸接口。2了解 fpga 通用一部收發(fā)器的原理和應(yīng)用。二設(shè)計內(nèi)容(1)在信號線上共有兩種狀態(tài),可別離用邏輯1(高電平)和邏輯0(低電平)來區(qū)分。在發(fā)送器空閑時,數(shù)據(jù)線應(yīng)該維持在邏輯高電平狀態(tài)。(2)起始位( start bit ) :發(fā)送器是通過發(fā)送起始位而開始一個字符傳送,起始位使數(shù)據(jù)線處于邏輯0 狀態(tài),提示同意器數(shù)據(jù)傳輸即將開始。(3)數(shù)據(jù)位( data bits ) :起始位以后確實是傳送數(shù)據(jù)位。數(shù)據(jù)位一樣為8 位一個字節(jié)的數(shù)據(jù)(也有6 位、7 位的情形),低位( lsb )在前,高位( msb )在后。(4)校驗位( parit

2、y bit) :能夠以為是一個特殊的數(shù)據(jù)位。校驗位一樣用來判定接收的數(shù)據(jù)位有無錯誤,一樣是奇偶校驗。在利用中,該位常常取消。(5) 停止位:停止位在最后, 用以標志一個字符傳送的終止, 它對應(yīng)于邏輯 1 狀態(tài)。(6)位時刻:即每一個位的時刻寬度。 起始位、數(shù)據(jù)位、校驗位的位寬度是一致的,停止位有位、 1 位、位格式,一樣為1 位。(7)幀:從起始位開始到停止位終止的時刻距離稱之為一幀。(8)波特率: uart的傳送速度,用于說明數(shù)據(jù)傳送的快慢。在串行通信中,數(shù)據(jù)是按位進行傳送的,因此傳送速度用每秒鐘傳送數(shù)據(jù)位的數(shù)量來表示,稱之為波特率。如波特率 9600=9600bps(位/ 秒) 。uart

3、 的數(shù)據(jù)幀格式為:三設(shè)計原理fpga uart 系統(tǒng)組成fpga uart 由三個子模塊組成:(1)波特率發(fā)生器;startd0d1d2d3d4d5d6d7pstop起始位數(shù)據(jù)位校驗位停止位(2)接收模塊;(3)發(fā)送模塊;模塊設(shè)計1. 頂層模塊2. 波特率發(fā)生器3. uart接收器4. uart發(fā)送器1. 頂層模塊異步收發(fā)器的頂層模塊由波特率發(fā)生器、uart 接收器和 uart 發(fā)送器組成。uart 發(fā)送器的用途是將預(yù)備輸出的并行數(shù)據(jù)依照大體uart 幀格式轉(zhuǎn)為 txd信號串行輸出。uart 接收器接收 rxd 串行信號,并將其轉(zhuǎn)化為并行數(shù)據(jù)。波特率發(fā)生器確實是專門產(chǎn)生一個遠遠高于波特率的本地

4、時鐘信號對輸入rxd 不斷采樣,使接收器與發(fā)送器維持同步。頂層模塊的電路圖2. 波特率發(fā)生器波特率發(fā)生器事實上確實是一個分頻器。能夠依照給定的系統(tǒng)時鐘頻率(晶振時鐘)和要求的波特率算出波特率分頻因子,算出的波特率分頻因子作為分頻器的分頻數(shù)。特率分頻因子能夠依照不同的應(yīng)用需要更改。接收器由于串行數(shù)據(jù)幀和接收時鐘是異步的,由邏輯1 轉(zhuǎn)為邏輯 0 能夠被視為一個數(shù)據(jù)幀的起始位。但是,為了幸免毛刺阻礙,能夠取得正確的起始位信號,必需要求接收到的起始位在波特率時鐘采樣的進程中至少有一半都是屬于邏輯0 才可認定接收到的是起始位。由于內(nèi)部采樣時鐘bclk 周期(由波特率發(fā)生器產(chǎn)生) 是發(fā)送或接收波特率時鐘頻

5、率的 16 倍,因此起始位需要至少8 個持續(xù) bclk 周期的邏輯 0 被接收到,才以為起始位接收到,接著數(shù)據(jù)位和奇偶校驗位將每隔16 個 bclk 周期被采樣一次(即每一個波特率時鐘被采樣一次) 。若是起始位的確是16 個 bclk 周期長,那么接下來的數(shù)據(jù)將在每一個位的中點處被采樣。uart 接收器的接收狀態(tài)機接收狀態(tài)機一共有5 個狀態(tài):r_start (等待起始位)r_center(求中點)r_wait (等待采樣)r_sample(采樣)r_stop (停止位接收)r_start 狀態(tài)當 uart 接收器復(fù)位后,接收狀態(tài)機將處于這一個狀態(tài)。在此狀態(tài),狀態(tài)機一直在等待rxd 的電平跳轉(zhuǎn),

6、從邏輯1 變成邏輯 0,即起始位,這意味著新的一幀uart 數(shù)據(jù)幀的開始,一旦起始位被確信, 狀態(tài)機將轉(zhuǎn)入 r_center狀態(tài)。狀態(tài)圖中的 rxd_sync信號是 rxd 的同步信號,因為在進行邏輯1 或邏輯 0 判按時,不希望檢測的信號是不穩(wěn)固的,因此不直接檢測rxd 信號,而是檢測通過同步后的rxd_sync信號。r_center狀態(tài)關(guān)于異步串行信號,為了使每一次都檢測到正確的位信號,而且在較后的數(shù)據(jù)位檢測時累計誤差較小,顯然在每位的中點檢測是最為理想的。在本狀態(tài),確實是由起始位求出每位的中點, 通過對 bclk 的個數(shù)進行計數(shù)(rcnt16 ) ,但計數(shù)值不是想固然的“ 1000”,

7、要考慮通過一個狀態(tài), 也即通過了一個 bclk 周期,所希望取得的是在采樣時1/2 位。另外,可能在 r_start 狀態(tài)檢測到的起始位不是真正的起始位,可能是一個偶然顯現(xiàn)的干擾尖脈沖 (負脈沖)。這種干擾脈沖的周期是很短的,因此能夠以為維持邏輯0 超過 1/4 個位時刻的信號必然是起始位。r_wait 狀態(tài)當狀態(tài)機處于這一狀態(tài), 等待計滿 15 個 bclk ,在第 16 個 bclk 是進入 r_sample 狀態(tài)進行數(shù)據(jù)位的采樣檢測,同時也判定是不是搜集的數(shù)據(jù)位長度已達到數(shù)據(jù)幀的長度(framelen) ,若是到來,就說明停止位來臨了。framelen在設(shè)計時是可更改的(利用了gener

8、ic ) ,在本設(shè)計中默以為8,即對應(yīng)的uart 工作在 8位數(shù)據(jù)位、無校驗位格式。r_sample 狀態(tài)即數(shù)據(jù)位采樣檢測,完成后無條件狀態(tài)機轉(zhuǎn)入r_wait 狀態(tài), 等待下次數(shù)據(jù)位的到來。r_stop 狀態(tài)不管停止位是 1 仍是位,或是 2 位,狀態(tài)機在 r_stop 不具體檢測 rxd ,只是輸出幀接收完畢信號( rec_doneclk32mhz,resetb=reset,bclk=b); -頂層映射u2:reciever port map(bclkr=b,resetr=reset,rxdr=rxd,r_ready=rec_ready, rbuf=rec_buf); u3:transfer

9、 port map(bclkt=b,resett=reset,xmit_cmd_p=xmit_cmd_p_in, txdbuf=txdbuf_in,txd=txd_out,txd_done=txd_done_out); end behavioral; 頂層程序的仿真波特率發(fā)生器程序library ieee; use baud is port (clk,resetb:in std_logic; bclk:out std_logic); end baud; architecture behavioral of baud is begin process(clk,resetb) variable c

10、nt:integer; begin if resetb=1 then cnt:=0; bclk=208 then cnt:=0; bclk=1; -設(shè)置分頻系數(shù) else cnt:=cnt+1; bclk=0; end if; end if; end process; end behavioral; 波特率發(fā)生器程序的仿真uart 發(fā)送器 vhdl 程序- 文件名: 。- 功能: uart 發(fā)送器。- 說明:系統(tǒng)由五個狀態(tài)( x_idle,x_start,x_wait,x_shift,x_stop)和一個進程組成。library ieee; use transfer is generic(fr

11、amlent:integer:=8); port (bclkt,resett,xmit_cmd_p:in std_logic; -概念輸入輸出信號 txdbuf:in std_logic_vector(7 downto 0):=; txd:out std_logic; txd_done:out std_logic); end transfer; architecture behavioral of transfer is type states is (x_idle,x_start,x_wait,x_shift,x_stop); -概念個子狀態(tài)signal state:states:=x_id

12、le; signal tcnt:integer:=0; begin process(bclkt,resett,xmit_cmd_p,txdbuf) -主控時序、組合進程variable xcnt16:std_logic_vector(4 downto 0):=00000; -概念中間變量variable xbitcnt:integer:=0; variable txds:std_logic; begin if resett=1 then state=x_idle; txd_done -狀態(tài) 1,等待數(shù)據(jù)幀發(fā)送死令 if xmit_cmd_p=1 then state=x_start; txd_

13、done=0; else state -狀態(tài) 2,發(fā)送信號至起始位 if xcnt16=01111 then state=x_wait; xcnt16:=00000; else xcnt16:=xcnt16+1; txds:=0; state -狀態(tài) 3,等待狀態(tài) if xcnt16=01110 then if xbitcnt=framlent then state=x_stop;xbitcnt:=0;xcnt16:=00000; else state=x_shift; end if; else xcnt16:=xcnt16+1; statetxds:=txdbuf(xbitcnt); xbi

14、tcnt:=xbitcnt+1; state -狀態(tài) 5,停止位發(fā)送狀態(tài) if xcnt16=01111 then if xmit_cmd_p=0 then state=x_idle; xcnt16:=00000; else xcnt16:=xcnt16; state=x_stop; end if; txd_done=1; else xcnt16:=xcnt16+1; txds:=1; statestate=x_idle; end case; end if; txd=txds; end process; end behavioral; uart 發(fā)送器的仿真波形圖uart 接收器 vhdl 程

15、序- 文件名: 。- 功能: uart 同意器。- 說明:系統(tǒng)由五個狀態(tài)(r_start,r_center,r_wait,r_sample,r_stop)和兩個進library ieee; use reciever is generic(framlenr:integer:=8); port (bclkr,resetr,rxdr:in std_logic; -概念輸入輸出信號 r_ready:out std_logic; rbuf:out std_logic_vector(7 downto 0); end reciever; architecture behavioral of reciever

16、 is type states is (r_start,r_center,r_wait,r_sample,r_stop); -概念各子狀態(tài)signal state:states:=r_start; signal rxd_sync:std_logic; begin pro1:process(rxdr) begin if rxdr=0 then rxd_sync=0; else rxd_sync=1; end if; end process; pro2:process(bclkr,resetr,rxd_sync) -主控時序、組合進程variable count:std_logic_vector(

17、3 downto 0); -概念中間變量variable rcnt:integer:=0; variable rbufs:std_logic_vector(7 downto 0); begin if resetr=1 then state -狀態(tài) 1,等待起始位 if rxd_sync=0 then state=r_center; r_ready=0; rcnt:=0; else state=r_start; r_ready -狀態(tài) 2,求出每位的中點 if rxd_sync=0 then if count=0100 then state=r_wait; count:=0000; else count:=count+1; state=r_center; end if; else state -狀態(tài) 3,等待

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論