




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、該電子教案為一書的配套教學資源版權所有,不得用于其它商業用途通用異步接收發送器 的設計和實現何賓2011.09 uart的設計和實現-本章概要 本章給出了pld器件在簡單通信系統的應用-uart設計。通用異步接收/發送器的設計也是pld在通信系統的經典應用。該章首先介紹了uart設計原理,其中包括uart原理和設計描述、接收模塊設計,隨后介紹了uart的vhdl代碼描述,最后介紹了urat的軟件仿真驗證和硬件驗證。 uart的設計和實現-設計原理 基于通用異步接收發送器uart的rs-232接口是以前計算機上提供的一個串行數據接口,用來將接收的串行數據轉換成并行數據,同時將并行數據轉換成串行數
2、據后發送出去。當pld和其它外設通過串口通信時就非常有用。uart發送的數據,經過電平轉換后,傳送到pld的外部串行總線接口,然后這些串行數據被送到pld內部進行處理。被處理的數據然后轉換為串行數據經電平轉換后傳回串口。 uart的設計和實現-設計原理 該設計包含下面幾個方面:并行/串行和串行/并行數據轉換使用用戶定義的奇偶校驗位(缺省設置為奇校驗)數據波特率可修改(缺省9600)包含測試代碼和測試向量 uart的設計和實現-符號描述圖 uartrxd txd dbin dboutrda rdard tbewr perst e feuart的設計和實現-原理和設計描述 uart設計主要包括兩部
3、分:并行數據轉化成串行數據,串行數據轉換成并行數據。 uart設計的接收端口將接收到的串行數據轉換成并行數據,同時uart的發送端口負責并行數據轉換成串行數據。 測試代碼完成對uart設計的驗證,該驗證已經在xilinx大學計劃提供的開發平臺進行了驗證,該設計也很容易的移植到其它的eda平臺上。uart的設計和實現-原理和設計描述符號 接收模塊接收模塊rxd dbout rda rdard peclk oe fe 發送模塊發送模塊dbin txd wr tbe clk uart的設計和實現-原理和設計描述 uart設計包含兩個主要模塊,這兩個模塊封裝在一個uart的設計文件中。 這兩個模塊一個
4、處理接收的串行數據,另一個處理發送的串行數據。 接收模塊的端口接收一個字節的有效數據,并將其轉換成8位的并行數據。轉換的并行數據放在dbout端口。 發送模塊將發送的數據送到dbin端口,并且將其轉換成一個字節的串行發送數據,轉換完的數據txd端口上。uart的設計和實現-接收模塊的設計 接收模塊接收串行數據并將其轉換為并行數據。該設計包括下面幾個部分:l串行數據控制器l用于同步的兩個計數器l移位寄存器,移位寄存器保存來自rxd的數據。l錯誤比特控制器。 來自rxd串口的數據以一定的波特率被接收,所以需要有個控制器同步接收數據的采集相位。串行同步控制器的設計采用了一個狀態機和兩個同步計數器。在
5、設計中,在每個接收比特數據的中間采集數據。uart的設計和實現-接收模塊狀態機datactr!=”1010”ctr(3)=1 ordatactr!=”1010”rxd=1idledatarst=1ctrst=1eightdelaydatarst=1waitfor0waitfor1checkstopce=1getdatadataincr=1rshift=1rstrxd=0ctr!=”1000”ctr!=”1000”ctr(3)=0ctr(3)=1ctr(3)=0anddatactr!=”1010”uart的設計和實現-接收模塊狀態機原理 當處于idle狀態時,串行數據管腳rxd處于高電平狀態,在
6、該狀態一直等待直到檢測到rxd為低電平時,進入到eightdelay狀態。 在該狀態,主要是進行同步,使得在每個比特位的中間采樣數據,計數器ctr比波特率快16倍。在該狀態下,ctr計數到8。然后進入到waitfor0狀態,waitfor1狀態跟在其后,這兩個狀態的轉移由ctr的最高兩位確定。進入到getdata狀態時,開始對rxd數據進行移位。 uart的設計和實現-接收模塊狀態機原理 這兩個狀態保證有足夠的延遲保證讀取采樣數據的正中間。當計數器計數到10(8個數據位、一個奇偶位和一個停止位),然后進入到checkstop狀態。這個狀態進行奇偶校驗。當該狀態結束后,進入到idle狀態。 st
7、art d0 d1 d2 d3 d4 d5 d6 d7 par stop對接收數據進行采樣的時序的描述uart的設計和實現-差錯控制的實現 差錯控制寄存器分析接收到的數據,并對三種錯誤進行判斷:奇偶錯、幀錯誤和溢出錯誤。 奇偶錯誤指接收數據的得到的校驗和與接收到的par不一樣。當進行偶校驗的時候,d0到d7的和應該是偶數,否則是奇校驗。該設計中缺省設置為偶校驗。當奇偶校驗錯誤時,pe端口為高。 幀錯誤是指uart在給定的時序沒有正確的讀到數據。當停止位不為1時,表示幀錯誤,此時fe端口為1。 溢出錯誤是指,當前幀接收完,但還沒有讀時下一幀數據就到了的情況。當單字節的串行數據可讀時rda為高,移
8、位后的并行數據放在dbout端口。一旦rda端口為高,且此時數據仍在dbout端口時,oe溢出錯誤標志為高。 uart的設計和實現-接收模塊內各個子模塊的連接關系uart的設計和實現-發送模塊的設計 發送模塊接收來自dbin模塊的數據,并以串行數據的發送發送到txd端口上。 發送端口的波特率和接收數據的波特率一樣,接收和發送波特率的修改方式一樣。 為了發送存儲在dbin端口的數據,發送模塊必須有一個發送控制器、兩個控制數據的波特率的同步計數器和發送移位寄存器。 兩個計數器中的一個計數器用于延遲發送控制器,另一個計數器用來計算發送的串行數據位的個數。txd端口和發送移位寄存器的最低位連接。 ua
9、rt的設計和實現-發送模塊的狀態機tfctr=”1001”wr=0idletdelayrst=1tbe=1transfertdelayrst=load=1tclkrst=1shiftshift=1tfctr=1delaycheckstopce=1rstwr=1tfctr!=”1001”tdelayctr=bandrateuart的設計和實現-發送模塊的狀態機 uart在idel狀態,當wr為高時狀態發生變化。然后,發送模塊加載dbin端口的數據,下一個狀態發送數據。 transfer狀態準備發送移位寄存器發送數據。設置load=1,移位寄存器開始加載數據,其順序是一個起始位、一個字節的dbin
10、數據、一個奇偶校驗位和一個停止位。下一個狀態進入到shift狀態。在該狀態下,移位信號置1,表示移位寄存器移1。tfincr信號也置1表示遞增數據計數器。如果數據計數器不等于9,表示發送移位寄存器沒有進行移位操作,此時進入delay狀態。如果移位完成,此時進入waitwrite狀態。 uart的設計和實現-發送模塊的狀態機 在delay狀態下,發送數據按照正確的波特率發送數據。當tdelayctr與波特率常數一樣時,結束該狀態。進入到shift狀態。一旦進入到waitwrite狀態,結束發送過程。在這個狀態需要確認wr信號為高,才能開始發送過程。 uart的設計和實現-發送模塊的狀態機內部結構
11、uart的設計和實現-uart的vhdl設計代碼 entity uartcomponent is port ( txd : out std_logic:= 1; rxd : in std_logic; clk : in std_logic; dbin : in std_logic_vector (7 downto 0); dbout : out std_logic_vector (7 downto 0); rda : inout std_logic; tbe : out std_logic := 1; rd : in std_logic; wr : in std_logic; pe : out
12、 std_logic; fe : out std_logic; oe : out std_logic; rst : in std_logic:= 0 );end uartcomponent;uart的設計和實現-uart的vhdl設計代碼architecture behavioral of uartcomponent is type rstate is(stridle,streightdelay,strgetdata,strwaitfor0,strwaitfor1,strcheckstop); type tstate is (sttidle,stttransfer,sttshift,sttde
13、lay,sttwaitwrite); constant baudrate :std_logic_vector(12 downto 0) := 1010001011000; constant bauddivide : std_logic_vector(8 downto 0) := 101000110; signal rdreg : std_logic_vector(7 downto 0) := 00000000; signal rdsreg : std_logic_vector(9 downto 0) := 1111111111; signal tfreg : std_logic_vector(
14、7 downto 0); signal tfsreg : std_logic_vector(10 downto 0) := 11111111111; signal clkdiv : std_logic_vector(9 downto 0):= 0000000000; signal ctr : std_logic_vector(3 downto 0):= 0000; signal tfctr : std_logic_vector(3 downto 0):= 0000 signal datactr : std_logic_vector(3 downto 0):= 0000;uart的設計和實現-u
15、art的vhdl設計代碼 uart的設計和實現-uart的vhdl設計代碼begin-title: 初始信號定義-frameerror = not rdsreg(9);parerror = not ( rdsreg(8) xor (rdsreg(0) xor rdsreg(1) xor (rdsreg(2) xor rdsreg(3) xor (rdsreg(4) xor rdsreg(5) xor (rdsreg(6) xor rdsreg(7) );dbout = rdreg;tfreg = dbin;txd = tfsreg(0);par = not ( (tfreg(0) xor tf
16、reg(1) xor (tfreg(2) xor tfreg(3) xor (tfreg(4) xor tfreg(5) xor (tfreg(6) xor tfreg(7) );uart的設計和實現-uart的vhdl設計代碼-title: 時鐘分頻計數器 - process (clk, clkdiv) beginif (clk = 1 and clkevent) then if (clkdiv = bauddivide or ctrst = 1) thenclkdiv = 0000000000; else clkdiv = clkdiv +1; end if;end if; end pro
17、cess;-title: 傳輸延遲計數器 -process (clk, tdelayctr)beginif (clk = 1 and clkevent) then if (tdelayctr = baudrate or tdelayrst = 1) then tdelayctr = 0000000000000; else tdelayctr = tdelayctr+1; end if;end if;end process;-uart的設計和實現-uart的vhdl設計代碼-title: ctr 設置-process (clk)begin if clk = 1 and clkevent then
18、if ctrst = 1 then ctr = 0000; elsif clkdiv = bauddivide then ctr = ctr + 1;else ctr = ctr; end if; end if;end process;uart的設計和實現-uart的vhdl設計代碼-title: 傳輸計數器-process (clk, tclkrst) beginif (clk = 1 and clkevent) then if tclkrst = 1 then tfctr = 0000; elsif tfincr = 1 then tfctr = tfctr +1; end if;end
19、if;end process;uart的設計和實現-uart的vhdl設計代碼uart的設計和實現-uart的vhdl設計代碼-title: receiving shift register - process (clk, rshift)beginif clk = 1 and clkevent then if rshift = 1 thenrdsreg = (rxd & rdsreg(9 downto 1); end if;end if;end process;-uart的設計和實現-uart的vhdl設計代碼-title: 進入數據計數器 - process (clk, datars
20、t)beginif (clk = 1 and clkevent) thenif datarst = 1 then datactr = 0000; elsif dataincr = 1 then datactr = datactr +1;end if; end if;end process;uart的設計和實現-uart的vhdl設計代碼-title: 接收狀態控制器 -process (clk, rst)beginif clk = 1 and clkevent then if rst = 1 then strcur = stridle; else strcur = strnext; end i
21、f;end if; end process;uart的設計和實現-uart的vhdl設計代碼end process;uart的設計和實現-uart的vhdl設計代碼uart的設計和實現-uart的vhdl設計代碼-title: transfer state machine controller -process (clk, rst)beginif (clk = 1 and clkevent) thenif rst = 1 then sttcur = sttidle;else sttcur tbe = 1;tclkrst = 0; tfincr = 0; shift = 0; load = 0;tdelayrst = 1; if wr = 0 then sttnext = sttidle; else sttnext tbe = 0; shift = 0;load = 1; tclkrst = 1; tfincr = 0;tdelayrst = 1; sttnext tbe = 0;shift = 1;load = 0;tfincr = 1;tclkrst = 0;tdela
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論