版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
./電子科技大學(xué)可編程邏輯器件原理、應(yīng)用與實驗課程實驗報告實驗名稱UART控制器設(shè)計及驗證成績研究生院學(xué)院代培生班成績學(xué)號同作者實驗日期2017年4月23日指導(dǎo)教師評語:指導(dǎo)教師:年月日實驗報告容基本要求及參考格式一、實驗?zāi)康亩?、實驗所用儀器〔或?qū)嶒灜h(huán)境三、實驗基本原理及步驟〔或方案設(shè)計及理論計算四、實驗數(shù)據(jù)記錄〔或仿真及軟件設(shè)計五、實驗結(jié)果分析及回答問題〔或測試環(huán)境及測試結(jié)果.目錄TOC\o"1-3"\h\u一任務(wù)簡介 11.1實驗?zāi)康?1.2開發(fā)工具平臺 1二模塊設(shè)計 22.1輸入模塊設(shè)計 22.1.1機械按鍵消抖 22.1.2矩陣鍵盤掃描 32.1.3參量輸入及顯示輸入 52.2顯示模塊 62.3三態(tài)門控制模塊 82.4UART通信協(xié)議幀格式及波特率設(shè)置 92.5UART通信模塊 102.5.1串口數(shù)據(jù)發(fā)送模塊 112.5.2串口數(shù)據(jù)接收模塊 12三系統(tǒng)介紹 133.1系統(tǒng)結(jié)構(gòu)介紹 133.2系統(tǒng)子模塊介紹 153.3開發(fā)板實驗結(jié)果 17四總結(jié) 20.一任務(wù)簡介1.1實驗?zāi)康谋敬稳蝿?wù)的目標(biāo)為設(shè)計一個基于FPGA的串口通信控制器,具體技術(shù)要求如下:<1>實現(xiàn)與PC的雙向通信;<2>可以通過輸入模塊在開發(fā)板上定義向PC發(fā)送的數(shù)據(jù);<3>數(shù)據(jù)幀長度可調(diào)<6/7/8位>;<4>通信波特率可調(diào);<5>在數(shù)碼管上實現(xiàn)波特率、輸入數(shù)據(jù)、接收數(shù)據(jù)的顯示。<6>按鍵A用于接收模式和輸入模式的選擇,按鍵B用于選擇輸入模式為波特率設(shè)置還是發(fā)送數(shù)據(jù)設(shè)置,按鍵C為發(fā)送確認鍵,按鍵D用于選擇數(shù)據(jù)幀長度,矩陣鍵盤<0~9>用于輸入波特率因子和發(fā)送數(shù)據(jù)<十六進制顯示>;各種模式均有數(shù)碼管顯示相應(yīng)容,其中數(shù)據(jù)幀長度由四個LED燈表示。<7>操作流程:1.通信參數(shù)設(shè)置:在開發(fā)板上選擇數(shù)據(jù)幀長度、設(shè)置波特率、輸入發(fā)送數(shù)據(jù)幀;在PC端的串口通信助手中設(shè)置波特率和數(shù)據(jù)幀長度;2.數(shù)據(jù)發(fā)送:按下C鍵向PC發(fā)送數(shù)據(jù),在PC端確認接收的數(shù)據(jù);3.數(shù)據(jù)接收:由PC端向開發(fā)板發(fā)送數(shù)據(jù),在開發(fā)板上選擇數(shù)據(jù)接收模式即可顯示;4.默認設(shè)置:UART控制器默認波特率為9600,默認發(fā)送數(shù)據(jù)為8’h18;<8>以上容均需在開發(fā)板上驗證;實驗截圖在本文第三部分給出。1.2開發(fā)工具平臺基于CycloneIIEP2C5Q208C8核心的MAGIC3200_EP2C5開發(fā)板,具有四位掃描式數(shù)碼管,RS232串口等外設(shè),時鐘CLK為50MHz;開發(fā)軟件為QuartusII13sp;串口通信助手;基于LP2303的USB-UART轉(zhuǎn)接線,用于與筆記本電腦進行串口通信。MAGIC3200_EP2C5開發(fā)板USB-UART轉(zhuǎn)接線RS232串口串口通信助手圖1.1開發(fā)平臺設(shè)備二模塊設(shè)計2.1輸入模塊設(shè)計輸入模塊采用了矩陣鍵盤和獨立按鍵,獨立按鍵用于模式選擇和發(fā)送確認,矩陣鍵盤用于數(shù)據(jù)的輸入。關(guān)于消抖部分,對于矩陣鍵盤來說只要設(shè)置合適的掃描頻率就可以實現(xiàn)消抖的功能,而對于獨立按鍵來說就必須設(shè)計相應(yīng)的消抖模塊。2.2.1機械按鍵消抖模塊簡介機械按鍵按下時的機械抖動會產(chǎn)生很多個下降沿,而在邏輯上希望機械按鍵按下一次只產(chǎn)生一個下降沿,因此要進行按鍵消抖。按鍵防抖動其實是通過延時判斷來做的,因為這種毛刺持續(xù)時間都在ms級,當(dāng)檢測到按鍵狀態(tài)有變化時,經(jīng)過一定延時后再次進行確認。消抖模塊如圖2.1所示,din為機械按鍵輸入,dout為消抖后的輸出。圖2.1消抖模塊圖關(guān)鍵程序圖2.2為鍵盤消抖的狀態(tài)轉(zhuǎn)移圖,按鍵信號din按下時為低電平,平時為高電平。<1>狀態(tài)S0:輸入din信號產(chǎn)生跳變后,進入狀態(tài)S0。如果din為0,進入S1狀態(tài)。否則循環(huán)檢測。<2>狀態(tài)S1:如果再次檢測到輸入信號為邏輯0信號,則表明有按鍵按下,dout為0。狀態(tài)機結(jié)束。狀態(tài)機激勵時鐘周期為0.1s,以此實現(xiàn)延時,即按鍵按下后0.1s檢測按鍵信號,若按鍵信號為低電平,則輸出低電平完成消抖。圖2.2消抖狀態(tài)機消抖程序如下:always<posedgekeyclk>//狀態(tài)機激勵begin if<RESET==0>pre_s=s0; elsepre_s=next_s;endalways<pre_s,next_s,din>//檢查按鍵begin case<pre_s>s0:begindout=1;if<din==0>next_s=s1;elsenext_s=s0;end s1:begindout=1;if<din==0>dout=0;elsenext_s=s0;end default:next_s=s0; endcaseend2.2.2矩陣鍵盤掃描簡介及原理圖鍵盤掃描最大的優(yōu)點就是能節(jié)約I/O口。如果使用普通的方法,那么16個按鍵就需要16個I/O口,但通過掃描的方式來完成,卻只需要8個,按鍵越多它所顯現(xiàn)的優(yōu)勢也就越明顯。矩陣鍵盤原理電路如圖2.3。鍵盤掃描將使用行掃描法實現(xiàn),即逐行掃描查詢法。具體操作為:行線的初始狀態(tài)輸出都為0,只要有高電平出現(xiàn),表明有按鍵被按下。在確認有按鍵被按下的情況下,需要確定具體哪個按鍵被按下。以一定的掃描頻率依次將行線<key_out>電平拉高,并檢測列線的輸入<key_in>,確定具體哪個按鍵被按下。圖2.3矩陣鍵盤原理電路圖2.4鍵盤掃描模塊圖圖2.5鍵盤掃描模塊原理圖鍵盤掃描模塊如如圖2.4所示,輸入為reset信號,clk信號<50MHz時鐘>,模式切換開關(guān)swith,列掃描信號key_in;輸出為行掃描信號key_out,波特率因子bote,鍵盤輸入值輸出Data0~Data4,Data1、Data2、Data3、Data4為輸入模塊向顯示模塊的輸出,它們分別對應(yīng)四位數(shù)碼管千位、百位、十位、個位顯示的容。send_data為發(fā)送數(shù)據(jù)幀寄存器,圖中給出的是8位模式下的鍵盤掃描模塊,所以send_data位寬為8位,在7位和6位模式下掃描模塊send_data的位寬分別為7位和6位,其余部分與8位模式下的鍵盤掃描模塊基本一致。speaker為蜂鳴器信號,因為開發(fā)板設(shè)計上的一些問題,若不定義開發(fā)板的蜂鳴器管腳,蜂鳴器有時會響。關(guān)鍵程序其中掃描頻率由鍵盤掃描模塊置的分頻模塊實現(xiàn):always<posedgeclkornegedgereset>begin if<reset==0>time10ms<=0;//最初設(shè)計掃描時鐘周期為10ms,后來有改動 elseif<timecnt==1200000>//掃描頻率為20Hz<20ms> begintime10ms<=~time10ms;timecnt<=0;end elsetimecnt<=timecnt+1;end行輪掃的主要程序如下: key_out<=scanvalue; //輸出行掃描值 cpy_scanvalue<=scanvalue;//備份掃描值,用于進行列掃描 case<scanvalue>//行輪掃 4'b0001:scanvalue<=4'b0010; 4'b0010:scanvalue<=4'b0100; 4'b0100:scanvalue<=4'b1000; 4'b1000:scanvalue<=4'b0001; default:scanvalue<=4'b0001; endcase將鍵盤掃描與數(shù)據(jù)輸入關(guān)聯(lián)的程序如下: case<{key_in,cpy_scanvalue}> 8'b00010001:beginData0<=1;counter<=counter+1;end//對應(yīng)鍵盤"1" 8'b00100001:beginData0<=2;counter<=counter+1;end//對應(yīng)鍵盤"2" 8'b01000001:beginData0<=3;counter<=counter+1;end//對應(yīng)鍵盤"3" 8'b10000001:beginData0<=4;counter<=counter+1;end//未使用 8'b00010010:beginData0<=4;counter<=counter+1;end//對應(yīng)鍵盤"4" 8'b00100010:beginData0<=5;counter<=counter+1;end//對應(yīng)鍵盤"5" 8'b01000010:beginData0<=6;counter<=counter+1;end//對應(yīng)鍵盤"6" 8'b10000010:beginData0<=4;counter<=counter+1;end//未使用 8'b00010100:beginData0<=7;counter<=counter+1;end//對應(yīng)鍵盤"7" 8'b00100100:beginData0<=8;counter<=counter+1;end//對應(yīng)鍵盤"8" 8'b01000100:beginData0<=9;counter<=counter+1;end//對應(yīng)鍵盤"9" 8'b10000100:beginData0<=4;counter<=counter+1;end//未使用 8'b00011000:beginData0<=0;counter<=counter+1;end//對應(yīng)鍵盤"0" 8'b00101000:beginData0<=2;counter<=counter+1;end//未使用 8'b01001000:beginData0<=3;counter<=counter+1;end//未使用 8'b10001000:beginData0<=4;counter<=counter+1;end//未使用 default: ;//無鍵盤按下 endcase如以上程序所示,每當(dāng)按下鍵盤對應(yīng)按鍵后,將有對應(yīng)數(shù)值寫入寄存器Data0中,寄存器counter為當(dāng)前輸入對應(yīng)的位數(shù)。2.2.3參量輸入及顯示輸入鍵盤輸入數(shù)值的存儲程序如下:switch1==0<控制信號下文將詳細介紹>時進入波特率設(shè)置模式,輸入的數(shù)值為波特率因子bote,bote為一個四位數(shù),此模式下可以通過矩陣鍵盤從千位到個位依次寫數(shù),將每次輸入的值依次寫入四位寄存器Data1、Data2、Data3、Data4中,最終組成一個完整的十進制四位數(shù),其中counter為位數(shù)標(biāo)志位。Data1、Data2、Data3、Data4為輸入模塊向顯示模塊的輸出,它們分別對應(yīng)四位數(shù)碼管千位、百位、十位、個位顯示的容。if<switch1==0>begin bote<=Data1*1000+Data2*100+Data3*10+Data4; case<counter> 4'b0001:Data1<=Data0; 4'b0010:Data2<=Data0; 4'b0011:Data3<=Data0; 4'b0100:Data4<=Data0; default:beginData1<=5;Data2<=2;Data3<=0;Data4<=8;end endcase if<counter==5>counter<=0; endswitch==1時進入發(fā)送數(shù)據(jù)設(shè)置模式,最終把鍵盤輸入值寫入send_data,發(fā)送寄存器send_data為一個6~8位<可設(shè)置>的二進制數(shù),用于存儲將要發(fā)送的數(shù)據(jù)幀。因為四個Data寄存器位寬為4位,所以send_data的容只需要由兩個寄存器的數(shù)據(jù)構(gòu)成。令Data1、Data2為10,意思為關(guān)閉千位、百位的數(shù)碼管,這在顯示模塊部分將會詳細介紹。elsebeginsend_data<={Data3,Data4}; Data1<=10; Data2<=10; case<counter> 4'b0001:Data3<=Data0; 4'b0010:Data4<=Data0; default:beginData3<=8;Data4<=8;end endcase if<counter>2>counter<=0;end 仿真結(jié)果:圖2.6鍵盤掃描模塊仿真為了方便觀察結(jié)果,仿真中加快了時鐘和一些分頻的頻率。從仿真圖像可以看出,行線掃描信號key_out以一定頻率掃描,當(dāng)列掃描信號key_in有所輸入時,輸入寄存器Data0、Data1、Data2、Data3、Data4都有相應(yīng)的變化。而且當(dāng)切換開關(guān)switch按下時,輸出信號bote和send_data都發(fā)生了相應(yīng)變化,這說明波特率設(shè)置模式和發(fā)送數(shù)據(jù)寫入模式的切換功能正常運行。仿真表明輸入模塊在功能上是可行的。2.2顯示模塊模塊簡介及原理圖顯示模塊用于驅(qū)動開發(fā)板上的四位數(shù)碼管顯示串口數(shù)據(jù),每個數(shù)碼管有八個控制位和一個片選位,還有一個用于顯示‘:’控制位。由于開發(fā)板只給出了13個引腳用于控制四個數(shù)碼管,因此必須采用數(shù)碼管掃描的形式來進行顯示。因為人眼有視覺暫留的特性.一般說來,當(dāng)1秒鐘刷新24次以上,人眼就無法區(qū)分而認為四個數(shù)碼管是一起亮的。掃描具有節(jié)約引腳的優(yōu)點,如果并行驅(qū)動四位數(shù)碼管,那么至少需要33個引腳,而掃描法只需要13個引腳就可以實現(xiàn)。使用的是共陽數(shù)碼管,引腳電平為低時點亮。圖2.7顯示模塊顯示模塊如圖2.6所示,輸入為reset信號,50Mhz時鐘信號clk,前文提到的Data1、Data2、Data3、Data4顯示容輸入,分別對應(yīng)四位數(shù)碼管千位、百位、十位、個位的顯示容。輸出信號中的LED_A~LED_G、LED_Point、LED_PointTime均為顯示控制信號;LED_VCC1~LED_VCC4為LED片選信號,高電平有效,LED_EN1為使能信號。關(guān)鍵程序以下為數(shù)碼管掃描的關(guān)鍵程序:always<posedgeclk>begin if<reset=='b0> count<=0; elseif<count==6000> //設(shè)置數(shù)碼管掃描頻率 begin count<=0; if<scancnt>3>scancnt<=0; elsescancnt<=scancnt+1; end elsecount<=count+1;end以上程序主要作用是,使變量scancnt掃描頻率在0~3累加循環(huán),scancnt有0123共四個狀態(tài),通過scancnt控制數(shù)碼管片選信號,分別在四個數(shù)碼管上顯示容。譯碼部分見附錄。仿真結(jié)果圖2.8顯示模塊仿真結(jié)果可以看出隨著Data1和Data1的變化,LED控制信號和LED片選信號同時變化,說明顯示模塊功能正常。2.3三態(tài)門控制模塊模塊簡介及原理圖在本任務(wù)頂層的設(shè)計中有些部分需要使用多輸入三態(tài)門來控制數(shù)據(jù)的傳輸,本部分將以任務(wù)中的一個多輸入三態(tài)門來介紹該模塊。模塊的原理圖和模塊圖如圖2.9所示圖2.9三態(tài)門模塊如圖所示,data1~data4為輸入數(shù)據(jù),D1~D4為輸出,若en=1則D1~D4輸出data1~data4的數(shù)據(jù),若en=0則D1~D4輸出高阻。關(guān)鍵程序if<en==1> beginD1<=data1;D2<=data2;D3<=data3;D4<=data4;end else beginD1<=4'bzzzz;D2<=4'bzzzz;D3<=4'bzzzz;D4<=4'bzzzz;end仿真結(jié)果圖2.10三態(tài)門仿真從仿真結(jié)果中可以看出,當(dāng)en為低電平時輸出為高阻,en為高電平時輸出等于輸入。這說明三態(tài)門模塊功能正確。2.4UART通信協(xié)議幀格式及波特率設(shè)置模塊簡介及原理圖基本的UART幀格式如圖所示。圖2.11URAT幀格式基本的UART幀格式包括起始位、數(shù)據(jù)位、校驗位和停止位四部分。一個字符幀數(shù)據(jù)由四部分組成:一個起始位〔邏輯為0,緊接著一個5位到8位可變的數(shù)據(jù)位D0-D7,一個奇偶校驗位〔可選擇,最后是停止位〔邏輯1。在沒有數(shù)據(jù)被傳輸時,串行數(shù)據(jù)線上一直是邏輯高電平。本次任務(wù)未設(shè)置奇偶校驗。幀格式設(shè)置本次所設(shè)計的UART控制器支持長度6、7、8位的幀格式,實現(xiàn)方式將在下文系統(tǒng)介紹中敘述,各個模塊間相互的切換由一個控制模塊實現(xiàn),模塊圖形由下圖所示:圖2.12控制模塊圖如圖所示,模塊輸入為50MHz時鐘CLK、RESET復(fù)位信號,機械按鍵D對應(yīng)DDD信號,輸出信號為數(shù)據(jù)幀長度控制信號c[2..0],led[3..0]為數(shù)據(jù)幀長度指示信號用于控制開發(fā)板上的四個led燈。功能說明:每按下機械D,數(shù)據(jù)幀長度會以8-7-6-8順序改變一檔,而開發(fā)板上從左到右的四個led燈會以相應(yīng)的順序發(fā)光表示目前數(shù)據(jù)幀的長度;0111表示8位,1000表示7位,1001表示6位,系統(tǒng)默認8位模式;0表示亮,1表示滅。關(guān)鍵程序數(shù)據(jù)幀長度控制模塊由下列代碼實現(xiàn):key5key5_1<CLK,RESET,DDD,DD>;//例化消抖模塊對機械按鍵DDD消抖always<negedgeDD>//每按下機械按鍵D一次,狀態(tài)指示寄存器counter加1beginif<counter>2>counter<=0;//counter大于2時清零elsecounter<=counter+1;endalways<posedgeDD>beginif<counter==0>beginc<=3'b001;led<=4'b0111;end//8位模式elseif<counter==1>beginc<=3'b010;led<=4'b1000;end//7位模式elseif<counter==2>beginc<=3'b100;led<=4'b1001;end//6位模式elsebeginc<=3'b001;led<=4'b0000;end//默認8位模式End仿真結(jié)果圖2.13控制模塊仿真輸出隨輸入規(guī)律變化,可以看出模塊功能正常。波特率設(shè)置:波特率發(fā)生器為傳輸提供了串行移位時鐘。波特率表示數(shù)據(jù)的傳送速率,即每秒傳輸二進制的位數(shù)。波特率控制模塊實際上是一個分頻器,產(chǎn)生相應(yīng)的符合RS232的波特率同步時鐘。因為開發(fā)板自帶時鐘為50MHz,因此:波特率=50M/bote;可見其中波特率是由波特率因子bote決定,若bote=5208,則波特率為9600。關(guān)鍵程序always<posedgeCLKornegedgeRESET>begin if<ClockCount==bote>beginClock9600<=1;ClockCount<=0;end else beginClock9600<=0;ClockCount<=ClockCount+1;endend波特率發(fā)生器本質(zhì)為一個分頻器,bote為之前鍵盤輸入模塊送來的設(shè)定值。仿真結(jié)果該模塊的仿真驗證將于下文中UART通信模塊的仿真中一并驗證。2.5UART通信模塊模塊介紹及原理圖基本的UART僅有RXD和TXD兩條信號線,接收和發(fā)送之間相互不存在干擾,即全雙工。由于UART是異步通信,要求RXD接口和TXD發(fā)送端制定相應(yīng)的規(guī)則,對數(shù)據(jù)進行同步,以使接收、發(fā)送之間協(xié)調(diào)一致。UART的工作原理是將傳輸數(shù)據(jù)的每一個字符一位接一位地傳輸,以字符為單位從低位到高位逐位傳輸,一個字符表示一幀信息。如圖2.14所示,串口數(shù)據(jù)發(fā)送模塊和串口數(shù)據(jù)接收模塊以及相關(guān)分頻模塊都集成于同一個UART模塊中。輸入:CLK:50MHz時鐘;RESET:復(fù)位信號;UART0_RX:接收數(shù)據(jù)引腳;KEYA:對應(yīng)機械按鍵C,為發(fā)送確認鍵;bote[14..0]:由輸入模塊送來的波特率因子,用于設(shè)置波特率;SEND_DATA[7..0]:數(shù)據(jù)幀,在6位模式中位寬為6,在7位模式中位寬為7。輸出:UART0_TX:發(fā)送數(shù)據(jù)引腳;Data01[0..3]~Data04[0..3]:用于向顯示模塊傳遞接收的數(shù)據(jù)。圖2.14UART模塊2.5.1串口數(shù)據(jù)發(fā)送模塊關(guān)鍵程序Clock9600為前文介紹的波特率發(fā)生器產(chǎn)生的波特率時鐘;always<posedgeClock9600orposedgeSend_en>beginif<Send_en==1>beginsend_count<=0;UART0_TX<=1;send_over<=1;end//串口清零elseif<Send_count==9>beginUART0_TX<=Send_data[9];send_over<=0;end//發(fā)送完成elsebeginUART0_TX<=Send_data[Send_count];//逐位由發(fā)送寄存器向串口寫數(shù)據(jù)Send_count<=Send_count+1;endalways<posedgedoutornegedgeRESET>//發(fā)送數(shù)據(jù)begin if<RESET==0>beginsend_en<=1;Send_data<=10'b1000000000;end else begin Send_en<=0; Send_data<={last,SEND_DATA,start};//寫入起始位和終止位 if<Send_over==0>Send_en<=1; endend2.5.2串口數(shù)據(jù)接收模塊首先介紹采樣時鐘Clock3,它是波特率的16倍,即串口上一個數(shù)據(jù)位長度會有16個Clock3周期,如果在每個數(shù)據(jù)位的第8個Clock3周期上采樣,即在每個數(shù)據(jù)位的中間進行取樣,這樣可以使采樣值更加準(zhǔn)確可靠。此原理如圖2.15所示。圖2.15采樣原理關(guān)鍵程序接收采樣時鐘分頻模塊:always<posedgeCLKornegedgeRESET>begin if<ClockCount_UART0_RX==bote/16>//采樣頻率為波特率的16倍beginClock3<=1;ClockCount_UART0_RX<=0;end elsebeginClock3<=0;ClockCount_UART0_RX<=ClockCount_UART0_RX+1;endend檢測到UART0_RX出現(xiàn)下降沿時,令UART0_RX_Hold=1,啟動接收進程; case<m> //8位數(shù)據(jù)幀采樣 24: beginUART0_RX_Data[0]<=UART0_RX;m<=m+1;end 40: beginUART0_RX_Data[1]<=UART0_RX;m<=m+1;end 56: beginUART0_RX_Data[2]<=UART0_RX;m<=m+1;end 72: beginUART0_RX_Data[3]<=UART0_RX;m<=m+1;end 88: beginUART0_RX_Data[4]<=UART0_RX;m<=m+1;end 104:beginUART0_RX_Data[5]<=UART0_RX;m<=m+1;end 120:beginUART0_RX_Data[6]<=UART0_RX;m<=m+1;end 136:beginUART0_RX_Data[7]<=UART0_RX;m<=m+1;end 152:beginUART0_RX_Valid<=1;m<=m+1;end//標(biāo)志串口數(shù)據(jù)接收完成 168:beginm<=0;UART0_RX_Valid<=0;end default:m<=m+1; endcase接收數(shù)據(jù)輸出部分:<8位模式>Data01<={UART0_RX_Data[3],UART0_RX_Data[2],UART0_RX_Data[1],UART0_RX_Data[0]};Data02<={UART0_RX_Data[7],UART0_RX_Data[6],UART0_RX_Data[5],UART0_RX_Data[4]};如果系統(tǒng)處于7位模式,那么Data01<={UART0_RX_Data[3],UART0_RX_Data[2],UART0_RX_Data[1],UART0_RX_Data[0]};Data02<={start,UART0_RX_Data[6],UART0_RX_Data[5],UART0_RX_Data[4]};如果系統(tǒng)處于6位模式,那么Data01<={UART0_RX_Data[3],UART0_RX_Data[2],UART0_RX_Data[1],UART0_RX_Data[0]};Data02<={start,start,UART0_RX_Data[5],UART0_RX_Data[4]};其中start=0。仿真結(jié)果圖2.16UART模塊仿真從仿真結(jié)果可以看出,波特率時鐘clock9600、采樣時鐘clock3均正常,UART0_TX有正確數(shù)據(jù)輸出,Data01和Data02正確反映了UART0_RX送來的數(shù)據(jù),因此UART通信模塊功能正確。三系統(tǒng)介紹3.1系統(tǒng)結(jié)構(gòu)介紹整個系統(tǒng)的結(jié)構(gòu)可以用以下框圖描述:圖3.1系統(tǒng)框圖從圖3.1中可以看出整個系統(tǒng)的功能即為實現(xiàn)幀格式、波特率可調(diào)的全雙工串口通信,并顯示相關(guān)數(shù)據(jù)信息。具體的操作流程如圖3.2所示。圖3.2操作流程頂層圖如下:圖3.3頂層圖圖中部分1為數(shù)據(jù)位寬6位的通信子系統(tǒng),部分2為數(shù)據(jù)位寬8位的通信子系統(tǒng),部分3為數(shù)據(jù)位寬8位的通信子系統(tǒng),部分4為數(shù)據(jù)幀長度控制模塊,用于選擇哪一個系統(tǒng)運作。端口說明輸入:clk:50MHz時鐘;reset:復(fù)位信號;switch:用于控制波特率輸入模式和發(fā)送數(shù)據(jù)輸入模式間的切換;key_in[3..0]:鍵盤列掃描信號;UART0_RX:接收數(shù)據(jù)引腳;B:機械按鍵,發(fā)送確認鍵;s1:機械按鍵,按下后顯示接收的數(shù)據(jù),再按下退出;DDD:機械按鍵,切換數(shù)據(jù)位寬。輸出:led[3..0]:數(shù)據(jù)位寬指示燈;key_out[3..0]:鍵盤行掃描信號;speaker:蜂鳴器控制信號;LED_A~LED_G:顯示控制信號;LED_Point,LED_PointTime:均為顯示控制信號;LED_VCC1~LED_VCC4:LED片選信號;LED_EN1:使能信號;UART0_TX:發(fā)送數(shù)據(jù)引腳。3.2系統(tǒng)子模塊介紹因為三個通信子系統(tǒng)基本相似,所以本文僅介紹數(shù)據(jù)位寬6位的通信子系統(tǒng)。圖3.4子系統(tǒng)圖3.4的子系統(tǒng)中左邊和右邊的模塊都是多輸入三態(tài)門,其使能信號由數(shù)據(jù)幀長度控制模塊控制,從而決定了在任何一時刻三個子系統(tǒng)只有一個系統(tǒng)處于工作狀態(tài)。該圖中間的模塊即為實現(xiàn)6位串口通信的功能模塊,其結(jié)構(gòu)如圖3.5所示。圖3.56位串口通信的功能模塊如圖3.5所示,串口通信模塊主要分為6個子模塊,各個子模塊在前文中都有介紹;模塊說明:模塊1:UART通信模塊,用于數(shù)據(jù)的接收和傳送,將接收到的數(shù)據(jù)經(jīng)過三態(tài)門<模塊傳送到顯示模塊;模塊2:輸入模塊,用于輸入波特率、發(fā)送數(shù)據(jù),將用戶輸入的數(shù)據(jù)經(jīng)過三態(tài)門<模塊發(fā)送到顯示模塊;模塊3,模塊4:三態(tài)門模塊,用于保證任何時刻只有一組顯示數(shù)據(jù)輸入顯示模塊進行顯示;模塊5:顯示模塊,用于驅(qū)動數(shù)碼管;模塊6:三態(tài)門控制模塊;用于選擇數(shù)碼管顯示的容。端口說明輸如:clk:50MHz時鐘;reset:復(fù)位信號;switch:用于控制波特率輸入模式和發(fā)送數(shù)據(jù)輸入模式間的切換;key_in[3..0]:鍵盤列掃描信號;UART0_RX:接收數(shù)據(jù)引腳;B:機械按鍵,發(fā)送確認鍵;s1:機械按鍵,按下后顯示接收的數(shù)據(jù),再按下退出;輸出:key_out[3..0]:鍵盤行掃描信號;speaker:蜂鳴器控制信號;LED_A~LED_G:顯示控制信號;LED_Point,LED_PointTime:均為顯示控制信號;LED_VCC1~LED_VCC4:LED片選信號;LED_EN1:使能信號;UART0_TX:發(fā)送數(shù)據(jù)引腳。3.3開發(fā)板實驗結(jié)果實驗條件:數(shù)據(jù)位寬:6位;波特率/波特率因子:38400/1304;發(fā)送數(shù)據(jù):2’h18;接收數(shù)據(jù):2’h32;圖
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年貸款擔(dān)保安排:投資擔(dān)保公司與貸款人協(xié)議3篇
- 2024年貨車掛靠平臺服務(wù)協(xié)議
- 2024建筑工班組長聘用合同書版B版
- 2024年版房地產(chǎn)購買銷售見證合同范本
- 2024年舞臺劇演員聘任協(xié)議樣本版B版
- 2024年環(huán)境保護項目保密協(xié)議
- 2024年航空公司飛機零部件采購合同
- 2024年環(huán)境治理技術(shù)研發(fā)合作合同
- 2024年零售店鋪租賃變更合同書版
- 2024年跨國公司高級管理人員聘用協(xié)議3篇
- 礦山治理專項研究報告范文
- 國家開放大學(xué)2023年7月期末統(tǒng)一試《11124流行病學(xué)》試題及答案-開放本科
- 貨運安全生產(chǎn)管理制度
- 施工圖審查招標(biāo)文件范文
- 幼兒園中班體育《我們愛運動》+課件
- 郭錫良《古代漢語》課件
- 外研版四年級英語下冊(一年級起點)全冊完整課件
- 防止電力生產(chǎn)事故的-二十五項重點要求(2023版)
- 教研室主任崗位申請書
- 職業(yè)培訓(xùn)師的8堂私房課:修訂升級版
- 改擴建工程施工圖設(shè)計說明
評論
0/150
提交評論