




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
通用異步接收發(fā)送器 的設計和實現(xiàn),何賓 2011.09,uart的設計和實現(xiàn)-本章概要,本章給出了pld器件在簡單通信系統(tǒng)的應用-uart設計。 通用異步接收/發(fā)送器的設計也是pld在通信系統(tǒng)的經典應 用。該章首先介紹了uart設計原理,其中包括uart原 理和設計描述、接收模塊設計,隨后介紹了uart的 vhdl代碼描述,最后介紹了urat的軟件仿真驗證和硬 件驗證。,uart的設計和實現(xiàn)-設計原理,基于通用異步接收發(fā)送器uart的rs-232接口是以前計算機上提供的一個串行數據接口,用來將接收的串行數據轉換成并行數據,同時將并行數據轉換成串行數據后發(fā)送出去。當pld和其它外設通過串口通信時就非常有用。uart發(fā)送的數據,經過電平轉換后,傳送到pld的外部串行總線接口,然后這些串行數據被送到pld內部進行處理。被處理的數據然后轉換為串行數據經電平轉換后傳回串口。,uart的設計和實現(xiàn)-設計原理,該設計包含下面幾個方面: 并行/串行和串行/并行數據轉換 使用用戶定義的奇偶校驗位(缺省設置為奇校驗) 數據波特率可修改(缺省9600) 包含測試代碼和測試向量,uart的設計和實現(xiàn)-符號描述圖,uart的設計和實現(xiàn)-原理和設計描述,uart設計主要包括兩部分:并行數據轉化成串行數 據,串行數據轉換成并行數據。 uart設計的接收端口將接收到的串行數據轉換成 并行數據,同時uart的發(fā)送端口負責并行數據轉換成串 行數據。 測試代碼完成對uart設計的驗證,該驗證已經在 xilinx大學計劃提供的開發(fā)平臺進行了驗證,該設計也很 容易的移植到其它的eda平臺上。,uart的設計和實現(xiàn)-原理和設計描述符號,uart的設計和實現(xiàn)-原理和設計描述,uart設計包含兩個主要模塊,這兩個模塊封裝在一 個uart的設計文件中。 這兩個模塊一個處理接收的串行數據,另一個處理發(fā) 送的串行數據。 接收模塊的端口接收一個字節(jié)的有效數據,并將其轉 換成8位的并行數據。轉換的并行數據放在dbout端口。 發(fā)送模塊將發(fā)送的數據送到dbin端口,并且將其轉換 成一個字節(jié)的串行發(fā)送數據,轉換完的數據txd端口上。,uart的設計和實現(xiàn)-接收模塊的設計,接收模塊接收串行數據并將其轉換為并行數據。該 設計包括下面幾個部分: 串行數據控制器 用于同步的兩個計數器 移位寄存器,移位寄存器保存來自rxd的數據。 錯誤比特控制器。 來自rxd串口的數據以一定的波特率被接收,所以 需要有個控制器同步接收數據的采集相位。串行同步控 制器的設計采用了一個狀態(tài)機和兩個同步計數器。在設 計中,在每個接收比特數據的中間采集數據。,uart的設計和實現(xiàn)-接收模塊狀態(tài)機,uart的設計和實現(xiàn)-接收模塊狀態(tài)機原理,當處于idle狀態(tài)時,串行數據管腳rxd處于高電平狀 態(tài),在該狀態(tài)一直等待直到檢測到rxd為低電平時,進入 到eightdelay狀態(tài)。 在該狀態(tài),主要是進行同步,使得在每個比特位的中間 采樣數據,計數器ctr比波特率快16倍。在該狀態(tài)下,ctr計 數到8。然后進入到waitfor0狀態(tài),waitfor1狀態(tài)跟在其 后,這兩個狀態(tài)的轉移由ctr的最高兩位確定。進入到 getdata狀態(tài)時,開始對rxd數據進行移位。,uart的設計和實現(xiàn)-接收模塊狀態(tài)機原理,這兩個狀態(tài)保證有足夠的延遲保證讀取采樣數據的 正中間。當計數器計數到10(8個數據位、一個奇偶位 和一個停止位),然后進入到checkstop狀態(tài)。這個狀 態(tài)進行奇偶校驗。當該狀態(tài)結束后,進入到idle狀態(tài)。,對接收數據進行采樣的時序的描述,uart的設計和實現(xiàn)-差錯控制的實現(xiàn),差錯控制寄存器分析接收到的數據,并對三種錯誤進 行判斷:奇偶錯、幀錯誤和溢出錯誤。 奇偶錯誤指接收數據的得到的校驗和與接收到的par不 一樣。當進行偶校驗的時候,d0到d7的和應該是偶數, 否則是奇校驗。該設計中缺省設置為偶校驗。當奇偶校驗 錯誤時,pe端口為高。 幀錯誤是指uart在給定的時序沒有正確的讀到數 據。當停止位不為1時,表示幀錯誤,此時fe端口為1。 溢出錯誤是指,當前幀接收完,但還沒有讀時下一幀 數據就到了的情況。當單字節(jié)的串行數據可讀時rda為 高,移位后的并行數據放在dbout端口。一旦rda端口 為高,且此時數據仍在dbout端口時,oe溢出錯誤標志 為高。,uart的設計和實現(xiàn) -接收模塊內各個子模塊的連接關系,uart的設計和實現(xiàn)-發(fā)送模塊的設計,發(fā)送模塊接收來自dbin模塊的數據,并以串行數據 的發(fā)送發(fā)送到txd端口上。 發(fā)送端口的波特率和接收數據的波特率一樣,接收和 發(fā)送波特率的修改方式一樣。 為了發(fā)送存儲在dbin端口的數據,發(fā)送模塊必須有 一個發(fā)送控制器、兩個控制數據的波特率的同步計數器和 發(fā)送移位寄存器。 兩個計數器中的一個計數器用于延遲發(fā)送控制器,另 一個計數器用來計算發(fā)送的串行數據位的個數。txd端口 和發(fā)送移位寄存器的最低位連接。,uart的設計和實現(xiàn)-發(fā)送模塊的狀態(tài)機,uart的設計和實現(xiàn)-發(fā)送模塊的狀態(tài)機,uart在idel狀態(tài),當wr為高時狀態(tài)發(fā)生變化。然 后,發(fā)送模塊加載dbin端口的數據,下一個狀態(tài)發(fā)送數 據。 transfer狀態(tài)準備發(fā)送移位寄存器發(fā)送數據。設置 load=1,移位寄存器開始加載數據,其順序是一個起始 位、一個字節(jié)的dbin數據、一個奇偶校驗位和一個停止 位。下一個狀態(tài)進入到shift狀態(tài)。在該狀態(tài)下,移位信號 置1,表示移位寄存器移1。tfincr信號也置1表示遞增數 據計數器。如果數據計數器不等于9,表示發(fā)送移位寄存 器沒有進行移位操作,此時進入delay狀態(tài)。如果移位完 成,此時進入waitwrite狀態(tài)。,uart的設計和實現(xiàn)-發(fā)送模塊的狀態(tài)機,在delay狀態(tài)下,發(fā)送數據按照正確的波特率發(fā)送數 據。當tdelayctr與波特率常數一樣時,結束該狀態(tài)。進 入到shift狀態(tài)。一旦進入到waitwrite狀態(tài),結束發(fā)送過 程。在這個狀態(tài)需要確認wr信號為高,才能開始發(fā)送 過程。,uart的設計和實現(xiàn) -發(fā)送模塊的狀態(tài)機內部結構,uart的設計和實現(xiàn)-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 std_logic; fe : out std_logic; oe : out std_logic; rst : in std_logic:= 0 ); end uartcomponent;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,architecture behavioral of uartcomponent is type rstate is(stridle,streightdelay,strgetdata,strwaitfor0,strwaitfor1,strcheckstop); type tstate is (sttidle,stttransfer,sttshift,sttdelay,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(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的設計和實現(xiàn)-uart的vhdl設計代碼,signal parerror : std_logic; signal frameerror : std_logic; signal ce : std_logic; signal ctrst : std_logic := 0; signal load : std_logic := 0; signal shift : std_logic := 0; signal par : std_logic; signal tclkrst : std_logic := 0; signal rshift : std_logic := 0; signal datarst : std_logic := 0; signal dataincr : std_logic := 0; signal tfincr : std_logic := 0; signal tdelayctr : std_logic_vector (12 downto 0); signal tdelayrst : std_logic := 0; signal strcur : rstate := stridle; signal strnext : rstate; signal sttcur : tstate:= sttidle; signal sttnext : tstate;,uart的設計和實現(xiàn)-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 tfreg(1) xor (tfreg(2) xor tfreg(3) xor (tfreg(4) xor tfreg(5) xor (tfreg(6) xor tfreg(7) );,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 時鐘分頻計數器 - process (clk, clkdiv) begin if (clk = 1 and clkevent) then if (clkdiv = bauddivide or ctrst = 1) then clkdiv = “0000000000“; else clkdiv = clkdiv +1; end if; end if; end process;,- -title: 傳輸延遲計數器 - process (clk, tdelayctr) begin if (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的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: ctr 設置 - process (clk) begin if clk = 1 and clkevent then if ctrst = 1 then ctr = “0000“; elsif clkdiv = bauddivide then ctr = ctr + 1; else ctr = ctr; end if; end if; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 傳輸計數器 - process (clk, tclkrst) begin if (clk = 1 and clkevent) then if tclkrst = 1 then tfctr = “0000“; elsif tfincr = 1 then tfctr = tfctr +1; end if; end if; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 錯誤和rda標志控制器 - process (clk, rst, rd, ce) begin if rd = 1 or rst = 1 then fe = 0; oe = 0; rda = 0; pe = 0; elsif clk = 1 and clkevent then if ce = 1 then fe = frameerror; pe = parerror; rdreg(7 downto 0) = rdsreg (7 downto 0); if rda = 1 then oe = 1; else oe = 0; rda = 1; end if; end if; end if; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: receiving shift register - process (clk, rshift) begin if clk = 1 and clkevent then if rshift = 1 then rdsreg = (rxd -,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 進入數據計數器 - process (clk, datarst) begin if (clk = 1 and clkevent) then if datarst = 1 then datactr = “0000“; elsif dataincr = 1 then datactr = datactr +1; end if; end if; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 接收狀態(tài)控制器 - process (clk, rst) begin if clk = 1 and clkevent then if rst = 1 then strcur = stridle; else strcur = strnext; end if; end if; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 接收狀態(tài)機 - process (strcur, ctr, rxd, datactr) begin case strcur is when stridle = dataincr dataincr ce ce ce dataincr = 0;rshift = 0;datarst = 0;ctrst = 0;ce = 1; strnext = stridle; end case; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 傳輸移位寄存器控制器 - process (load, shift, clk, tfsreg) begin if clk = 1 and clkevent then if load = 1 then tfsreg (10 downto 0) = (1 -,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: transfer state machine controller - process (clk, rst) begin if (clk = 1 and clkevent) then if rst = 1 then sttcur = sttidle; else sttcur = sttnext; end if; end if; end process;,uart的設計和實現(xiàn)-uart的vhdl設計代碼,- -title: 發(fā)送狀態(tài)機 - process (sttc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國復方多粘菌素B軟膏行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國卷筒計算器行業(yè)投資前景及策略咨詢研究報告
- 2024至2030年中國全紙制牛皮紙袋行業(yè)投資前景及策略咨詢研究報告
- 初中趣味考試試題及答案
- 2025年新型鋁基軸瓦材料項目發(fā)展計劃
- 牛津英語小學二年級上冊知識點
- 防風固沙林帶行業(yè)跨境出海戰(zhàn)略研究報告
- 薩提亞家庭治療模式改善二孩家庭親子關系的個案干預研究
- 智研咨詢發(fā)布:中國CXL內存行業(yè)市場發(fā)展環(huán)境及前景研究報告
- 高檔木制品企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 機電總承包合同
- 《彩色的夢》說課課件
- 港股通知識測試題答案
- 項目投資法律意見書
- 18 《文言文二則 鐵杵成針》 課件(共19張PPT)
- 人力資源服務機構年檢申請報告
- 第六章港澳臺學前教育的發(fā)展課件
- 資產傳承法商產說會陽光升課件
- 東營銀行2023年度招聘160名高校畢業(yè)生歷年試題(??键c甄選)含答案帶詳解析
- 護理倫理學(第二版)高職PPT完整全套教學課件
- 急診科運用PDCA循環(huán)提高預檢分診的規(guī)范性品管圈成果匯報
評論
0/150
提交評論