




已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
通用異步接收發(fā)送器 的設(shè)計(jì)和實(shí)現(xiàn),何賓 2011.09,uart的設(shè)計(jì)和實(shí)現(xiàn)-本章概要,本章給出了pld器件在簡(jiǎn)單通信系統(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ī)上提供的一個(gè)串行數(shù)據(jù)接口,用來(lái)將接收的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),同時(shí)將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)后發(fā)送出去。當(dāng)pld和其它外設(shè)通過(guò)串口通信時(shí)就非常有用。uart發(fā)送的數(shù)據(jù),經(jīng)過(guò)電平轉(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ì)包含下面幾個(gè)方面: 并行/串行和串行/并行數(shù)據(jù)轉(zhuǎn)換 使用用戶定義的奇偶校驗(yàn)位(缺省設(shè)置為奇校驗(yàn)) 數(shù)據(jù)波特率可修改(缺省9600) 包含測(cè)試代碼和測(cè)試向量,uart的設(shè)計(jì)和實(shí)現(xiàn)-符號(hào)描述圖,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ù)。 測(cè)試代碼完成對(duì)uart設(shè)計(jì)的驗(yàn)證,該驗(yàn)證已經(jīng)在 xilinx大學(xué)計(jì)劃提供的開(kāi)發(fā)平臺(tái)進(jìn)行了驗(yàn)證,該設(shè)計(jì)也很 容易的移植到其它的eda平臺(tái)上。,uart的設(shè)計(jì)和實(shí)現(xiàn)-原理和設(shè)計(jì)描述符號(hào),uart的設(shè)計(jì)和實(shí)現(xiàn)-原理和設(shè)計(jì)描述,uart設(shè)計(jì)包含兩個(gè)主要模塊,這兩個(gè)模塊封裝在一 個(gè)uart的設(shè)計(jì)文件中。 這兩個(gè)模塊一個(gè)處理接收的串行數(shù)據(jù),另一個(gè)處理發(fā) 送的串行數(shù)據(jù)。 接收模塊的端口接收一個(gè)字節(jié)的有效數(shù)據(jù),并將其轉(zhuǎn) 換成8位的并行數(shù)據(jù)。轉(zhuǎn)換的并行數(shù)據(jù)放在dbout端口。 發(fā)送模塊將發(fā)送的數(shù)據(jù)送到dbin端口,并且將其轉(zhuǎn)換 成一個(gè)字節(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ì)包括下面幾個(gè)部分: 串行數(shù)據(jù)控制器 用于同步的兩個(gè)計(jì)數(shù)器 移位寄存器,移位寄存器保存來(lái)自rxd的數(shù)據(jù)。 錯(cuò)誤比特控制器。 來(lái)自rxd串口的數(shù)據(jù)以一定的波特率被接收,所以 需要有個(gè)控制器同步接收數(shù)據(jù)的采集相位。串行同步控 制器的設(shè)計(jì)采用了一個(gè)狀態(tài)機(jī)和兩個(gè)同步計(jì)數(shù)器。在設(shè) 計(jì)中,在每個(gè)接收比特?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)一直等待直到檢測(cè)到rxd為低電平時(shí),進(jìn)入 到eightdelay狀態(tài)。 在該狀態(tài),主要是進(jìn)行同步,使得在每個(gè)比特位的中間 采樣數(shù)據(jù),計(jì)數(shù)器ctr比波特率快16倍。在該狀態(tài)下,ctr計(jì) 數(shù)到8。然后進(jìn)入到waitfor0狀態(tài),waitfor1狀態(tài)跟在其 后,這兩個(gè)狀態(tài)的轉(zhuǎn)移由ctr的最高兩位確定。進(jìn)入到 getdata狀態(tài)時(shí),開(kāi)始對(duì)rxd數(shù)據(jù)進(jìn)行移位。,uart的設(shè)計(jì)和實(shí)現(xiàn)-接收模塊狀態(tài)機(jī)原理,這兩個(gè)狀態(tài)保證有足夠的延遲保證讀取采樣數(shù)據(jù)的 正中間。當(dāng)計(jì)數(shù)器計(jì)數(shù)到10(8個(gè)數(shù)據(jù)位、一個(gè)奇偶位 和一個(gè)停止位),然后進(jìn)入到checkstop狀態(tài)。這個(gè)狀 態(tài)進(jìn)行奇偶校驗(yàn)。當(dāng)該狀態(tài)結(jié)束后,進(jìn)入到idle狀態(tài)。,對(duì)接收數(shù)據(jù)進(jìn)行采樣的時(shí)序的描述,uart的設(shè)計(jì)和實(shí)現(xiàn)-差錯(cuò)控制的實(shí)現(xiàn),差錯(cuò)控制寄存器分析接收到的數(shù)據(jù),并對(duì)三種錯(cuò)誤進(jìn) 行判斷:奇偶錯(cuò)、幀錯(cuò)誤和溢出錯(cuò)誤。 奇偶錯(cuò)誤指接收數(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) 錯(cuò)誤時(shí),pe端口為高。 幀錯(cuò)誤是指uart在給定的時(shí)序沒(méi)有正確的讀到數(shù) 據(jù)。當(dāng)停止位不為1時(shí),表示幀錯(cuò)誤,此時(shí)fe端口為1。 溢出錯(cuò)誤是指,當(dāng)前幀接收完,但還沒(méi)有讀時(shí)下一幀 數(shù)據(jù)就到了的情況。當(dāng)單字節(jié)的串行數(shù)據(jù)可讀時(shí)rda為 高,移位后的并行數(shù)據(jù)放在dbout端口。一旦rda端口 為高,且此時(shí)數(shù)據(jù)仍在dbout端口時(shí),oe溢出錯(cuò)誤標(biāo)志 為高。,uart的設(shè)計(jì)和實(shí)現(xiàn) -接收模塊內(nèi)各個(gè)子模塊的連接關(guān)系,uart的設(shè)計(jì)和實(shí)現(xiàn)-發(fā)送模塊的設(shè)計(jì),發(fā)送模塊接收來(lái)自dbin模塊的數(shù)據(jù),并以串行數(shù)據(jù) 的發(fā)送發(fā)送到txd端口上。 發(fā)送端口的波特率和接收數(shù)據(jù)的波特率一樣,接收和 發(fā)送波特率的修改方式一樣。 為了發(fā)送存儲(chǔ)在dbin端口的數(shù)據(jù),發(fā)送模塊必須有 一個(gè)發(fā)送控制器、兩個(gè)控制數(shù)據(jù)的波特率的同步計(jì)數(shù)器和 發(fā)送移位寄存器。 兩個(gè)計(jì)數(shù)器中的一個(gè)計(jì)數(shù)器用于延遲發(fā)送控制器,另 一個(gè)計(jì)數(shù)器用來(lái)計(jì)算發(fā)送的串行數(shù)據(jù)位的個(gè)數(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ù),下一個(gè)狀態(tài)發(fā)送數(shù) 據(jù)。 transfer狀態(tài)準(zhǔn)備發(fā)送移位寄存器發(fā)送數(shù)據(jù)。設(shè)置 load=1,移位寄存器開(kāi)始加載數(shù)據(jù),其順序是一個(gè)起始 位、一個(gè)字節(jié)的dbin數(shù)據(jù)、一個(gè)奇偶校驗(yàn)位和一個(gè)停止 位。下一個(gè)狀態(tài)進(jìn)入到shift狀態(tài)。在該狀態(tài)下,移位信號(hào) 置1,表示移位寄存器移1。tfincr信號(hào)也置1表示遞增數(shù) 據(jù)計(jì)數(shù)器。如果數(shù)據(jù)計(jì)數(shù)器不等于9,表示發(fā)送移位寄存 器沒(méi)有進(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ā)送過(guò) 程。在這個(gè)狀態(tài)需要確認(rèn)wr信號(hào)為高,才能開(kāi)始發(fā)送 過(guò)程。,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: 初始信號(hào)定義 - 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: 錯(cuò)誤和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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)物苗定價(jià)方案(3篇)
- 心理補(bǔ)償方案文案(3篇)
- 辦公行政費(fèi)用管理制度
- 學(xué)校籃球訓(xùn)練管理制度
- 公司隱患上報(bào)管理制度
- 小學(xué)衛(wèi)生健康管理制度
- 訴訟審計(jì)方案(3篇)
- 再次實(shí)施閉環(huán)管理制度
- 醫(yī)院非法集資管理制度
- DB62T 4482-2021 果園防雹網(wǎng)設(shè)計(jì)及架設(shè)技術(shù)規(guī)程
- 廣州市人力資源和社會(huì)保障局事業(yè)單位招聘工作人員【共500題含答案解析】模擬檢測(cè)試卷
- 發(fā)動(dòng)機(jī)機(jī)械-01.1cm5a4g63維修手冊(cè)
- 馬克思主義新聞?dòng)^十二講之第八講堅(jiān)持新聞?wù)鎸?shí)原則課件
- 交通信號(hào)控制系統(tǒng)檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 護(hù)理部用藥安全質(zhì)量評(píng)價(jià)標(biāo)準(zhǔn)
- 電子印鑒卡講解
- 中國(guó)本土私募股權(quán)基金的投資管理及退出(清華)
- 深基坑工程安全檢查表范本
- 汽車零部件規(guī)范申報(bào)ppt課件
- 門(mén)護(hù)板設(shè)計(jì)指導(dǎo)書(shū)RYSAT
- 沙盤(pán)游戲治療(課堂PPT)
評(píng)論
0/150
提交評(píng)論