




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
通用異步接收發(fā)送器 的設(shè)計(jì)和實(shí)現(xiàn),何賓 2011.09,uart的設(shè)計(jì)和實(shí)現(xiàn)-本章概要,本章給出了pld器件在簡單通信系統(tǒng)的應(yīng)用-uart設(shè)計(jì)。 通用異步接收/發(fā)送器的設(shè)計(jì)也是pld在通信系統(tǒng)的經(jīng)典應(yīng) 用。該章首先介紹了uart設(shè)計(jì)原理,其中包括uart原 理和設(shè)計(jì)描述、接收模塊設(shè)計(jì),隨后介紹了uart的 vhdl代碼描述,最后介紹了urat的軟件仿真驗(yàn)證和硬 件驗(yàn)證。,uart的設(shè)計(jì)和實(shí)現(xiàn)-設(shè)計(jì)原理,基于通用異步接收發(fā)送器uart的rs-232接口是以前計(jì)算機(jī)上提供的一個串行數(shù)據(jù)接口,用來將接收的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),同時(shí)將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)后發(fā)送出去。當(dāng)pld和其它外設(shè)通過串口通信時(shí)就非常有用。uart發(fā)送的數(shù)據(jù),經(jīng)過電平轉(zhuǎn)換后,傳送到pld的外部串行總線接口,然后這些串行數(shù)據(jù)被送到pld內(nèi)部進(jìn)行處理。被處理的數(shù)據(jù)然后轉(zhuǎn)換為串行數(shù)據(jù)經(jīng)電平轉(zhuǎn)換后傳回串口。,uart的設(shè)計(jì)和實(shí)現(xiàn)-設(shè)計(jì)原理,該設(shè)計(jì)包含下面幾個方面: 并行/串行和串行/并行數(shù)據(jù)轉(zhuǎn)換 使用用戶定義的奇偶校驗(yàn)位(缺省設(shè)置為奇校驗(yàn)) 數(shù)據(jù)波特率可修改(缺省9600) 包含測試代碼和測試向量,uart的設(shè)計(jì)和實(shí)現(xiàn)-符號描述圖,uart的設(shè)計(jì)和實(shí)現(xiàn)-原理和設(shè)計(jì)描述,uart設(shè)計(jì)主要包括兩部分:并行數(shù)據(jù)轉(zhuǎn)化成串行數(shù) 據(jù),串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)。 uart設(shè)計(jì)的接收端口將接收到的串行數(shù)據(jù)轉(zhuǎn)換成 并行數(shù)據(jù),同時(shí)uart的發(fā)送端口負(fù)責(zé)并行數(shù)據(jù)轉(zhuǎn)換成串 行數(shù)據(jù)。 測試代碼完成對uart設(shè)計(jì)的驗(yàn)證,該驗(yàn)證已經(jīng)在 xilinx大學(xué)計(jì)劃提供的開發(fā)平臺進(jìn)行了驗(yàn)證,該設(shè)計(jì)也很 容易的移植到其它的eda平臺上。,uart的設(shè)計(jì)和實(shí)現(xiàn)-原理和設(shè)計(jì)描述符號,uart的設(shè)計(jì)和實(shí)現(xiàn)-原理和設(shè)計(jì)描述,uart設(shè)計(jì)包含兩個主要模塊,這兩個模塊封裝在一 個uart的設(shè)計(jì)文件中。 這兩個模塊一個處理接收的串行數(shù)據(jù),另一個處理發(fā) 送的串行數(shù)據(jù)。 接收模塊的端口接收一個字節(jié)的有效數(shù)據(jù),并將其轉(zhuǎn) 換成8位的并行數(shù)據(jù)。轉(zhuǎn)換的并行數(shù)據(jù)放在dbout端口。 發(fā)送模塊將發(fā)送的數(shù)據(jù)送到dbin端口,并且將其轉(zhuǎn)換 成一個字節(jié)的串行發(fā)送數(shù)據(jù),轉(zhuǎn)換完的數(shù)據(jù)txd端口上。,uart的設(shè)計(jì)和實(shí)現(xiàn)-接收模塊的設(shè)計(jì),接收模塊接收串行數(shù)據(jù)并將其轉(zhuǎn)換為并行數(shù)據(jù)。該 設(shè)計(jì)包括下面幾個部分: 串行數(shù)據(jù)控制器 用于同步的兩個計(jì)數(shù)器 移位寄存器,移位寄存器保存來自rxd的數(shù)據(jù)。 錯誤比特控制器。 來自rxd串口的數(shù)據(jù)以一定的波特率被接收,所以 需要有個控制器同步接收數(shù)據(jù)的采集相位。串行同步控 制器的設(shè)計(jì)采用了一個狀態(tài)機(jī)和兩個同步計(jì)數(shù)器。在設(shè) 計(jì)中,在每個接收比特?cái)?shù)據(jù)的中間采集數(shù)據(jù)。,uart的設(shè)計(jì)和實(shí)現(xiàn)-接收模塊狀態(tài)機(jī),uart的設(shè)計(jì)和實(shí)現(xiàn)-接收模塊狀態(tài)機(jī)原理,當(dāng)處于idle狀態(tài)時(shí),串行數(shù)據(jù)管腳rxd處于高電平狀 態(tài),在該狀態(tài)一直等待直到檢測到rxd為低電平時(shí),進(jìn)入 到eightdelay狀態(tài)。 在該狀態(tài),主要是進(jìn)行同步,使得在每個比特位的中間 采樣數(shù)據(jù),計(jì)數(shù)器ctr比波特率快16倍。在該狀態(tài)下,ctr計(jì) 數(shù)到8。然后進(jìn)入到waitfor0狀態(tài),waitfor1狀態(tài)跟在其 后,這兩個狀態(tài)的轉(zhuǎn)移由ctr的最高兩位確定。進(jìn)入到 getdata狀態(tài)時(shí),開始對rxd數(shù)據(jù)進(jìn)行移位。,uart的設(shè)計(jì)和實(shí)現(xiàn)-接收模塊狀態(tài)機(jī)原理,這兩個狀態(tài)保證有足夠的延遲保證讀取采樣數(shù)據(jù)的 正中間。當(dāng)計(jì)數(shù)器計(jì)數(shù)到10(8個數(shù)據(jù)位、一個奇偶位 和一個停止位),然后進(jìn)入到checkstop狀態(tài)。這個狀 態(tài)進(jìn)行奇偶校驗(yàn)。當(dāng)該狀態(tài)結(jié)束后,進(jìn)入到idle狀態(tài)。,對接收數(shù)據(jù)進(jìn)行采樣的時(shí)序的描述,uart的設(shè)計(jì)和實(shí)現(xiàn)-差錯控制的實(shí)現(xiàn),差錯控制寄存器分析接收到的數(shù)據(jù),并對三種錯誤進(jìn) 行判斷:奇偶錯、幀錯誤和溢出錯誤。 奇偶錯誤指接收數(shù)據(jù)的得到的校驗(yàn)和與接收到的par不 一樣。當(dāng)進(jìn)行偶校驗(yàn)的時(shí)候,d0到d7的和應(yīng)該是偶數(shù), 否則是奇校驗(yàn)。該設(shè)計(jì)中缺省設(shè)置為偶校驗(yàn)。當(dāng)奇偶校驗(yàn) 錯誤時(shí),pe端口為高。 幀錯誤是指uart在給定的時(shí)序沒有正確的讀到數(shù) 據(jù)。當(dāng)停止位不為1時(shí),表示幀錯誤,此時(shí)fe端口為1。 溢出錯誤是指,當(dāng)前幀接收完,但還沒有讀時(shí)下一幀 數(shù)據(jù)就到了的情況。當(dāng)單字節(jié)的串行數(shù)據(jù)可讀時(shí)rda為 高,移位后的并行數(shù)據(jù)放在dbout端口。一旦rda端口 為高,且此時(shí)數(shù)據(jù)仍在dbout端口時(shí),oe溢出錯誤標(biāo)志 為高。,uart的設(shè)計(jì)和實(shí)現(xiàn) -接收模塊內(nèi)各個子模塊的連接關(guān)系,uart的設(shè)計(jì)和實(shí)現(xiàn)-發(fā)送模塊的設(shè)計(jì),發(fā)送模塊接收來自dbin模塊的數(shù)據(jù),并以串行數(shù)據(jù) 的發(fā)送發(fā)送到txd端口上。 發(fā)送端口的波特率和接收數(shù)據(jù)的波特率一樣,接收和 發(fā)送波特率的修改方式一樣。 為了發(fā)送存儲在dbin端口的數(shù)據(jù),發(fā)送模塊必須有 一個發(fā)送控制器、兩個控制數(shù)據(jù)的波特率的同步計(jì)數(shù)器和 發(fā)送移位寄存器。 兩個計(jì)數(shù)器中的一個計(jì)數(shù)器用于延遲發(fā)送控制器,另 一個計(jì)數(shù)器用來計(jì)算發(fā)送的串行數(shù)據(jù)位的個數(shù)。txd端口 和發(fā)送移位寄存器的最低位連接。,uart的設(shè)計(jì)和實(shí)現(xiàn)-發(fā)送模塊的狀態(tài)機(jī),uart的設(shè)計(jì)和實(shí)現(xiàn)-發(fā)送模塊的狀態(tài)機(jī),uart在idel狀態(tài),當(dāng)wr為高時(shí)狀態(tài)發(fā)生變化。然 后,發(fā)送模塊加載dbin端口的數(shù)據(jù),下一個狀態(tài)發(fā)送數(shù) 據(jù)。 transfer狀態(tài)準(zhǔn)備發(fā)送移位寄存器發(fā)送數(shù)據(jù)。設(shè)置 load=1,移位寄存器開始加載數(shù)據(jù),其順序是一個起始 位、一個字節(jié)的dbin數(shù)據(jù)、一個奇偶校驗(yàn)位和一個停止 位。下一個狀態(tài)進(jìn)入到shift狀態(tài)。在該狀態(tài)下,移位信號 置1,表示移位寄存器移1。tfincr信號也置1表示遞增數(shù) 據(jù)計(jì)數(shù)器。如果數(shù)據(jù)計(jì)數(shù)器不等于9,表示發(fā)送移位寄存 器沒有進(jìn)行移位操作,此時(shí)進(jìn)入delay狀態(tài)。如果移位完 成,此時(shí)進(jìn)入waitwrite狀態(tài)。,uart的設(shè)計(jì)和實(shí)現(xiàn)-發(fā)送模塊的狀態(tài)機(jī),在delay狀態(tài)下,發(fā)送數(shù)據(jù)按照正確的波特率發(fā)送數(shù) 據(jù)。當(dāng)tdelayctr與波特率常數(shù)一樣時(shí),結(jié)束該狀態(tài)。進(jìn) 入到shift狀態(tài)。一旦進(jìn)入到waitwrite狀態(tài),結(jié)束發(fā)送過 程。在這個狀態(tài)需要確認(rèn)wr信號為高,才能開始發(fā)送 過程。,uart的設(shè)計(jì)和實(shí)現(xiàn) -發(fā)送模塊的狀態(tài)機(jī)內(nèi)部結(jié)構(gòu),uart的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 時(shí)鐘分頻計(jì)數(shù)器 - 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: 傳輸延遲計(jì)數(shù)器 - 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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: ctr 設(shè)置 - 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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 傳輸計(jì)數(shù)器 - 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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 錯誤和rda標(biāo)志控制器 - 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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: receiving shift register - process (clk, rshift) begin if clk = 1 and clkevent then if rshift = 1 then rdsreg = (rxd -,uart的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 進(jìn)入數(shù)據(jù)計(jì)數(shù)器 - 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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 接收狀態(tài)機(jī) - 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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 傳輸移位寄存器控制器 - process (load, shift, clk, tfsreg) begin if clk = 1 and clkevent then if load = 1 then tfsreg (10 downto 0) = (1 -,uart的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -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的設(shè)計(jì)和實(shí)現(xiàn)-uart的vhdl設(shè)計(jì)代碼,- -title: 發(fā)送狀態(tài)機(jī) - process (sttc
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保休閑茶幾套裝企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 智能溫控變色塑膠玩偶行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 潮汐能驅(qū)動游艇設(shè)計(jì)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 智能浴室安全系統(tǒng)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 智能電視操控行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 潮鞋直播帶貨平臺行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 智能溫控油炸鍋行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 智能電烤箱清潔行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 20250430-國金期貨-錫4月度報(bào)告
- 2025年飼料營養(yǎng)型添加劑項(xiàng)目建議書
- DEFORM-3D模擬控制(五):網(wǎng)格重劃分
- 先導(dǎo)化合物的優(yōu)化和結(jié)構(gòu)修飾藥物化學(xué)專家講座
- 并購重組試題
- 在線音樂網(wǎng)站設(shè)計(jì)論文
- 發(fā)動機(jī)機(jī)械-01.1cm5a4g63維修手冊
- 國家開放大學(xué)《行政組織學(xué)》形考1-5標(biāo)準(zhǔn)答案
- 急性會厭炎課件
- 單發(fā)跖骨骨折臨床路徑及表單
- 2021年西安經(jīng)開渭北城市發(fā)展集團(tuán)有限公司招聘筆試試題及答案解析
- DB62∕T 3176-2019 建筑節(jié)能與結(jié)構(gòu)一體化墻體保溫系統(tǒng)應(yīng)用技術(shù)規(guī)程
- 電氣爐焊接工藝的自動化控制線設(shè)計(jì)
評論
0/150
提交評論