UART控制器設(shè)計(jì)_第1頁(yè)
UART控制器設(shè)計(jì)_第2頁(yè)
UART控制器設(shè)計(jì)_第3頁(yè)
UART控制器設(shè)計(jì)_第4頁(yè)
UART控制器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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)介

1、西安電子科技大學(xué)可編程邏輯器件原理、應(yīng)用與實(shí)驗(yàn)課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱UART控制器設(shè)計(jì)及驗(yàn)證研究生院學(xué)院代培生班成績(jī)姓名學(xué)號(hào)同作者實(shí)驗(yàn)日期2017年4月23日指導(dǎo)教師評(píng)語(yǔ):指導(dǎo)教師:年月日實(shí)驗(yàn)報(bào)告內(nèi)容基本要求及參考格式一、實(shí)驗(yàn)?zāi)康亩?、?shí)驗(yàn)所用儀器(或?qū)嶒?yàn)環(huán)境)三、實(shí)驗(yàn)基本原理及步驟(或方案設(shè)計(jì)及理論計(jì)算)四、實(shí)驗(yàn)數(shù)據(jù)記錄(或仿真及軟件設(shè)計(jì))五、實(shí)驗(yàn)結(jié)果分析及回答問(wèn)題(或測(cè)試環(huán)境及測(cè)試結(jié)果)目錄一任務(wù)簡(jiǎn)介11、1實(shí)驗(yàn)?zāi)康?1、2開(kāi)發(fā)工具平臺(tái)1二模塊設(shè)計(jì)22、1輸入模塊設(shè)計(jì)22、1、1機(jī)械按鍵消抖22、1、2矩陣鍵盤(pán)掃描32、1、3參量輸入及顯示輸入52、2顯示模塊62、3三態(tài)門(mén)控制模塊82、4UA

2、RT通信協(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開(kāi)發(fā)板實(shí)驗(yàn)結(jié)果17四總結(jié)20一任務(wù)簡(jiǎn)介1、1實(shí)驗(yàn)?zāi)康谋敬稳蝿?wù)的目標(biāo)為設(shè)計(jì)一個(gè)基于FPGA的串口通信控制器,具體技術(shù)要求如下:(1)實(shí)現(xiàn)與PC的雙向通信;(2)可以通過(guò)輸入模塊在開(kāi)發(fā)板上定義向PC發(fā)送的數(shù)據(jù);(3)數(shù)據(jù)幀長(zhǎng)度可調(diào)(6/7/8位);(4)通信波特率可調(diào);(5)在數(shù)碼管上實(shí)現(xiàn)波特率、輸入數(shù)據(jù)、接收數(shù)據(jù)的顯示。(6)按鍵A用于接收模式與輸入模式的選擇,按鍵B用于選擇輸入模式為波特率設(shè)置還就是發(fā)送數(shù)據(jù)設(shè)置,

3、按鍵C為發(fā)送確認(rèn)鍵,按鍵D用于選擇數(shù)據(jù)幀長(zhǎng)度,矩陣鍵盤(pán)(09)用于輸入波特率因子與發(fā)送數(shù)據(jù)(十六進(jìn)制顯示);各種模式均有數(shù)碼管顯示相應(yīng)內(nèi)容淇中數(shù)據(jù)幀長(zhǎng)度由四個(gè)LED燈表示。(7)操作流程:1、通信參數(shù)設(shè)置:在開(kāi)發(fā)板上選擇數(shù)據(jù)幀長(zhǎng)度、設(shè)置波特率、輸入發(fā)送數(shù)據(jù)幀;在PC端的串口通信助手中設(shè)置波特率與數(shù)據(jù)幀長(zhǎng)度;2、數(shù)據(jù)發(fā)送:按下C鍵向PC發(fā)送數(shù)據(jù),在PC端確認(rèn)接收的數(shù)據(jù);3、數(shù)據(jù)接收:由PC端向開(kāi)發(fā)板發(fā)送數(shù)據(jù),在開(kāi)發(fā)板上選擇數(shù)據(jù)接收模式即可顯示4、默認(rèn)設(shè)置:UART控制器默認(rèn)波特率為9600,默認(rèn)發(fā)送數(shù)據(jù)為8'h18;(8)以上內(nèi)容均需在開(kāi)發(fā)板上驗(yàn)證;實(shí)驗(yàn)截圖在本文第三部分給出。1、2開(kāi)發(fā)

4、工具平臺(tái)(1)基于CycloneIIEP2C5Q208C8核心的MAGIC3200_EP2c5開(kāi)發(fā)板,具有四位掃描式數(shù)碼管,RS232串口等外設(shè),時(shí)鐘CLK為50MHz;(2)開(kāi)發(fā)軟件為QuartusII13sp;(3)串口通信助手;(4)基于LP2303的USB-UART轉(zhuǎn)接線,用于與筆記本電腦進(jìn)行串口通信。MAGIC3200_EP2C5 開(kāi)發(fā)板USB-UART轉(zhuǎn)接線RS232 串 口串口通信助手圖1、1開(kāi)發(fā)平臺(tái)設(shè)備二模塊設(shè)計(jì)2、1輸入模塊設(shè)計(jì)輸入模塊采用了矩陣鍵盤(pán)與獨(dú)立按鍵,獨(dú)立按鍵用于模式選擇與發(fā)送確認(rèn),矩陣鍵盤(pán)用于數(shù)據(jù)的輸入。關(guān)于消抖部分,對(duì)于矩陣鍵盤(pán)來(lái)說(shuō)只要設(shè)置合適的掃描頻率就可以實(shí)

5、現(xiàn)消抖的功能,而對(duì)于獨(dú)立按鍵來(lái)說(shuō)就必須設(shè)計(jì)相應(yīng)的消抖模塊。2、2、1機(jī)械按鍵消抖模塊簡(jiǎn)介機(jī)械按鍵按下時(shí)的機(jī)械抖動(dòng)會(huì)產(chǎn)生很多個(gè)下降沿,而在邏輯上希望機(jī)械按鍵按下一次只產(chǎn)生一個(gè)下降沿,因此要進(jìn)行按鍵消抖。按鍵防抖動(dòng)其實(shí)就是通過(guò)延時(shí)判斷來(lái)做的,因?yàn)檫@種毛刺持續(xù)時(shí)間都在ms級(jí),當(dāng)檢測(cè)到按鍵狀態(tài)有變化時(shí),經(jīng)過(guò)一定延時(shí)后再次進(jìn)行確認(rèn)。消抖模塊如圖2、1所示,din為機(jī)械按鍵輸入,dout為消抖后的輸出。insl3圖2、1消抖模塊圖關(guān)鍵程序圖2、2為鍵盤(pán)消抖的狀態(tài)轉(zhuǎn)移圖,按鍵信號(hào)din按下時(shí)為低電平,平時(shí)為高電平。(1)狀態(tài)S0:輸入din信號(hào)產(chǎn)生跳變后,進(jìn)入斗犬態(tài)S0o如果din為0,進(jìn)入S1狀態(tài)。否則循

6、環(huán)檢測(cè)。(2)狀態(tài)S1:如果再次檢測(cè)到輸入信號(hào)為邏輯0信號(hào),則表明有按鍵按下,dout為0。狀態(tài)機(jī)結(jié)束。狀態(tài)機(jī)激勵(lì)時(shí)鐘周期為0、1s,以此實(shí)現(xiàn)延時(shí),即按鍵按下后0、1s檢測(cè)按鍵信號(hào),若按鍵信號(hào)為低電平,則輸出低電平完成消抖。din=1din=0消抖程序如下:always(posedgekeyclk)狀態(tài)機(jī)激勵(lì)beginif(RESET=0)pre_s=s0;elsepre_s=next_s;endalways(pre_s,next_s,din)/檢查按鍵begincase(pre_s)50: begindout=1;if(din=0)next_s=s1;elsenext_s=s0;end51:

7、 begindout=1;if(din=0)dout=0;elsenext_s=s0;enddefault:next_s=s0;endcaseend2、2、2矩陣鍵盤(pán)掃描簡(jiǎn)介及原理圖鍵盤(pán)掃描最大的優(yōu)點(diǎn)就就是能節(jié)約I/O。如果使用普通的方法,那么16個(gè)按鍵就需要16個(gè)I/O口,但通過(guò)掃描的方式來(lái)完成,卻只需要8個(gè),按鍵越多它所顯現(xiàn)的優(yōu)勢(shì)也就越明顯。矩陣鍵盤(pán)原理電路如圖2、3。鍵盤(pán)掃描將使用彳T掃描法實(shí)現(xiàn),即逐行掃描查詢法。具體操作為:行線的初始狀態(tài)輸出都為0,只要有高電平出現(xiàn),表明有按鍵被按下。在確認(rèn)有按鍵被按下的情況下,需要確定具體哪個(gè)按鍵被按下。以一定的掃描頻率依次將行線(key_out)電

8、平拉高,并檢測(cè)列線的輸入(key_in),確定具體哪個(gè)按鍵被按下。KLEY OUT網(wǎng) hJJNi2| KLEIai%LEY OIJTH) .Xspy cm”kfy amrr圖2、3矩陣鍵盤(pán)原理電路圖2、4鍵盤(pán)掃描模塊圖圖2、5鍵盤(pán)掃描模塊原理圖鍵盤(pán)掃描模塊如如圖2、4所示,輸入為reset信號(hào),clk信號(hào)(50MHz時(shí)鐘),模式切換開(kāi)關(guān)swith,列掃描信號(hào)key_in;輸出為行掃描信號(hào)key_out,波特率因子bote,鍵盤(pán)輸入值輸出Data0Data4,Data1、Data2、Data3、Data4為輸入模塊向顯示模塊的輸出,它們分別對(duì)應(yīng)四位數(shù)碼管千位、百位、十位、個(gè)位顯示的內(nèi)容。send

9、_data為發(fā)送數(shù)據(jù)幀寄存器,圖中給出的就是8位模式下的鍵盤(pán)掃描模塊,所以send_data位寬為8位,在7位與6位模式下掃描模塊send_data的位寬分別為7位與6位淇余部分與8位模式下的鍵盤(pán)掃描模塊基本一致。speaker為蜂鳴器信號(hào),因?yàn)殚_(kāi)發(fā)板設(shè)計(jì)上的一些問(wèn)題,若不定義開(kāi)發(fā)板的蜂鳴器管腳,蜂鳴器有時(shí)會(huì)響。關(guān)鍵程序其中掃描頻率由鍵盤(pán)掃描模塊內(nèi)置的分頻模塊實(shí)現(xiàn):always(posedgeclkornegedgereset)beginif(reset=0)time10ms<=0;/最初設(shè)計(jì)掃描時(shí)鐘周期為10ms,后來(lái)有改動(dòng)elseif(timecnt=1200000)掃描頻率為20H

10、z(20ms)begintime10ms<=time10ms;timecnt<=0;endelsetimecnt<=timecnt+1;end行輪掃的主要程序如下:key_out<=scanvalue;輸出行掃描值cpy_scanvalue<=scanvalue;備份掃描值,用于進(jìn)行列掃描case(scanvalue)/亍輪掃4'b0001:scanvalue<=4'b0010;4'b0010:scanvalue<=4'b0100;4'b0100:scanvalue<=4'b1000;4'b

11、1000:scanvalue<=4'b0001;default:scanvalue<=4'b0001;endcase將鍵盤(pán)掃描與數(shù)據(jù)輸入關(guān)聯(lián)的程序如下:case(key_in,cpy_scanvalue)8'b00010001:beginData0<=1;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)"1"8'b00100001:beginData0<=2;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)"2"8'b01000001:beginData0<=3

12、;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)"3"8'b10000001:beginData0<=4;counter<=counter+1;end/未使用8'b00010010:beginData0<=4;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)"4"8'b00100010:beginData0<=5;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)"5"8'b01000010:beginData0<=6;counter&l

13、t;=counter+1;end/對(duì)應(yīng)鍵盤(pán)"6"8'b10000010:beginData0<=4;counter<=counter+1;end/未使用8'b00010100:beginData0<=7;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)“7”8'b00100100:beginData0<=8;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)“8”8'b01000100:beginData0<=9;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)“9”8'

14、b10000100:beginData0<=4;counter<=counter+1;end/未使用8'b00011000:beginData0<=0;counter<=counter+1;end/對(duì)應(yīng)鍵盤(pán)“0”8'b00101000:beginData0<=2;counter<=counter+1;end/未使用8'b01001000:beginData0<=3;counter<=counter+1;end/未使用8'b10001000:beginData0<=4;counter<=counter+1

15、;end/未使用default:;/無(wú)鍵盤(pán)按下endcase如以上程序所示,每當(dāng)按下鍵盤(pán)對(duì)應(yīng)按鍵后,將有對(duì)應(yīng)數(shù)值寫(xiě)入寄存器Data0中,寄存器counter為當(dāng)前輸入對(duì)應(yīng)的位數(shù)。2、2、3參量輸入及顯示輸入鍵盤(pán)輸入數(shù)值的存儲(chǔ)程序如下:switch1=0(控制信號(hào)下文將詳細(xì)介紹)時(shí)進(jìn)入波特率設(shè)置模式,輸入的數(shù)值為波特率因子bote,bote為一個(gè)四位數(shù),此模式下可以通過(guò)矩陣鍵盤(pán)從千位到個(gè)位依次寫(xiě)數(shù),將每次輸入的值依次寫(xiě)入四位寄存器Data1、Data2、Data3、Data4中,最終組成一個(gè)完整的十進(jìn)制四位數(shù),其中counter為位數(shù)標(biāo)志位。Data1、Data2、Data3、Data4為輸入模

16、塊向顯示模塊的輸出,它們分別對(duì)應(yīng)四位數(shù)碼管千位、百位、十位、個(gè)位顯示的內(nèi)容。if(switch1=0)beginbote<=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;endendcaseif(

17、counter=5)counter<=0;endswitch=1時(shí)進(jìn)入發(fā)送數(shù)據(jù)設(shè)置模式,最終把鍵盤(pán)輸入值寫(xiě)入send_data,發(fā)送寄存器send_data為一個(gè)68位(可設(shè)置)的二進(jìn)制數(shù),用于存儲(chǔ)將要發(fā)送的數(shù)據(jù)幀。因?yàn)樗膫€(gè)Data寄存器位寬為4位,所以send_data的內(nèi)容只需要由兩個(gè)寄存器的數(shù)據(jù)構(gòu)成。令Datal、Data2為10,意思為關(guān)閉千位、百位的數(shù)碼管,這在顯示模塊部分將會(huì)詳細(xì)介紹。elsebeginsend_data<=Data3,Data4;Data1<=10;Data2<=10;case(counter)4'b0001:Data3<=D

18、ata0;4'b0010:Data4<=Data0;default:beginData3<=8;Data4<=8;endendcaseif(counter>2)counter<=0;end仿真結(jié)果:pnmjw.wwwj|jmvijirtnjijujvuuijvwvvvvwunjuwwmj(曲工。4%???REIE一口口二-00_;,.1:-亡,xm13工EX.q!oyTio乂5Yw乂【。工一1U$wX3一X!Xu-g1K8<0|Mlizi襦£tafe注"jj':'j:jjJX01口?X血"X.用.1.M.

19、)一些X,叫X,叫<J印QEOQJX_.IOIW10CT.XOWOJPKIX.loroicxi.3rciet.IlatdDDa.1siIlfttk3riatWTfl3*d圖2、6鍵盤(pán)掃描模塊仿真為了方便觀察結(jié)果,仿真中加快了時(shí)鐘與一些分頻的頻率。從仿真圖像可以瞧出,行線掃描信號(hào)key_out以一定頻率掃描,當(dāng)列掃描信號(hào)key_in有所輸入時(shí),輸入寄存器Data0、Data1、Data2、Data3、Data4都有相應(yīng)的變化。而且當(dāng)切換開(kāi)關(guān)switch按下時(shí),輸出信號(hào)bote與send_data都發(fā)生了相應(yīng)變化,這說(shuō)明波特率設(shè)置模式與發(fā)送數(shù)據(jù)寫(xiě)入模式的切換功能正常運(yùn)行。仿真表明輸入模塊在功

20、能上就是可行的。2、2顯示模塊模塊簡(jiǎn)介及原理圖顯示模塊用于驅(qū)動(dòng)開(kāi)發(fā)板上的四位數(shù)碼管顯示串口數(shù)據(jù),每個(gè)數(shù)碼管有八個(gè)控制位與一個(gè)片選位,還有一個(gè)用于顯示控制位。由于開(kāi)發(fā)板只給出了13個(gè)引腳用于控制四個(gè)數(shù)碼管因此必須采用數(shù)碼管掃描的形式來(lái)進(jìn)行顯示。因?yàn)槿搜塾幸曈X(jué)暫留的特性、一般說(shuō)來(lái),當(dāng)1秒鐘刷新24次以上,人眼就無(wú)法區(qū)分而認(rèn)為四個(gè)數(shù)碼管就是一起亮的。掃描具有節(jié)約引腳的優(yōu)點(diǎn),如果并行驅(qū)動(dòng)四位數(shù)碼管,那么至少需要33個(gè)引腳,而掃描法只需要13個(gè)引腳就可以實(shí)現(xiàn)。使用的就是共陽(yáng)數(shù)碼管,引腳電平為低時(shí)點(diǎn)亮。rDHJ6Eu1LED_AClkLEO.flDal:a113.j0LED/0LBR網(wǎng)3 QLED.ENI

21、DMa4|3 0皿豐L60.F3LED_G4LE3J/CC1LED.VCC2LEOVCC3LS3_VGG4LEjPQlrtMarst4J-l.圖2、7顯示模塊顯示模塊如圖2、6所示,輸入為reset信號(hào),50Mhz時(shí)鐘信號(hào)clk,前文提到的Data1、Data2、Data3、Data4顯示內(nèi)容輸入,分別對(duì)應(yīng)四位數(shù)碼管千位、百位、十位、個(gè)位的顯示內(nèi)容。輸出信號(hào)中的LED_ALED_G、LED_Point、LED_PointTime均為顯示控制信號(hào);LED_VCC1LED_VCC4為L(zhǎng)ED片選信號(hào),高電平有效,LED_EN1為使能信號(hào)。關(guān)鍵程序以下為數(shù)碼管掃描的關(guān)鍵程序:always(posedg

22、eclk)beginif(reset='b0)count<=0;elseif(count=6000)設(shè)置數(shù)碼管掃描頻率begincount<=0;if(scancnt>3)scancnt<=0;elsescancnt<=scancnt+1;endelsecount<=count+1;end以上程序主要作用就是,使變量scancnt掃描頻率在03內(nèi)累加循環(huán),scancnt有0123共四個(gè)狀態(tài),通過(guò)scancnt控制數(shù)碼管片選信號(hào),分別在四個(gè)數(shù)碼管上顯示內(nèi)容。譯碼部分見(jiàn)附錄??梢郧瞥鲭S著Data1與Data1的變化,LED控制信號(hào)與LED片選信號(hào)同時(shí)變化

23、,說(shuō)明顯示模塊功能正常。2、3三態(tài)門(mén)控制模塊模塊簡(jiǎn)介及原理圖在本任務(wù)頂層的設(shè)計(jì)中有些部分需要使用多輸入三態(tài)門(mén)來(lái)控制數(shù)據(jù)的傳輸,本部分將以任務(wù)中的一個(gè)多輸入三態(tài)門(mén)來(lái)介紹該模塊。模塊的原理圖與模塊圖如圖2、9所示圖2、9三態(tài)門(mén)模塊如圖所示,data1data4為輸入數(shù)據(jù),D1D4為輸出,若en=1則D1D4輸出data1data4的數(shù)據(jù),若en=0則D1D4輸出高阻。關(guān)鍵程序if(en=1)beginD1<=data1;D2<=data2;D3<=data3;D4<=data4;endelsebeginD1<=4'bzzzz;D2<=4'bzzz

24、z;D3<=4'bzzzz;D4<=4'bzzzz;end仿真結(jié)果鈔mIdE21X00j后三l±lKi(211此jAIU國(guó)D321田IS田D4kZZ.;52?2如田datalrID國(guó)idstaZcco和國(guó)熊c00詼5I±jc3fliiII圖2、10三態(tài)門(mén)仿真從仿真結(jié)果中可以瞧出,當(dāng)en為低電平時(shí)輸出為高阻,en為高電平時(shí)輸出等于輸入。這說(shuō)明三態(tài)門(mén)模塊功能正確。2、4UART通信協(xié)議幀格式及波特率設(shè)置模塊簡(jiǎn)介及原理圖基本的UART幀格式如圖所示。一個(gè)符M數(shù)據(jù)位停:tt 亡F*時(shí)枸 闈 船始世圖2、11URAT幀格式基本的UART幀格式包括起始位、數(shù)

25、據(jù)位、校驗(yàn)位與停止位四部分。一個(gè)字符幀數(shù)據(jù)由四部分組成:一個(gè)起始位(邏輯為0),緊接著一個(gè)5位到8位可變的數(shù)據(jù)位D0-D7,一個(gè)奇偶校驗(yàn)位(可選擇),最后就是停止位(邏輯1)。在沒(méi)有數(shù)據(jù)被傳輸時(shí),串行數(shù)據(jù)線上一直就是邏輯高電平。本次任務(wù)未設(shè)置奇偶校驗(yàn)。幀格式設(shè)置本次所設(shè)計(jì)的UART控制器支持長(zhǎng)度6、7、8位的幀格式,實(shí)現(xiàn)方式將在下文系統(tǒng)介紹中敘述,各個(gè)模塊間相互的切換由一個(gè)控制模塊實(shí)現(xiàn),模塊圖形由下圖所示:controlfinalDDDc2.0CLKl&d3.DJRESETinatG圖2、12控制模塊圖如圖所示,模塊輸入為50MHz時(shí)鐘CLK、RESET復(fù)位信號(hào),機(jī)械按鍵D對(duì)應(yīng)DDD信

26、號(hào),輸出信號(hào)為數(shù)據(jù)幀長(zhǎng)度控制信號(hào)c2、0,led3、0為數(shù)據(jù)幀長(zhǎng)度指示信號(hào)用于控制開(kāi)發(fā)板上的四個(gè)led燈。功能說(shuō)明:每按下機(jī)械D,數(shù)據(jù)幀長(zhǎng)度會(huì)以8-7-6-8順序改變一檔,而開(kāi)發(fā)板上從左到右的四個(gè)led燈會(huì)以相應(yīng)的順序發(fā)光表示目前數(shù)據(jù)幀的長(zhǎng)度;0111表示8位,1000表示7位,1001表木6位,系統(tǒng)默認(rèn)8位模式;0表不亮,1表不滅。關(guān)鍵程序數(shù)據(jù)幀長(zhǎng)度控制模塊由下列代碼實(shí)現(xiàn)/例化消抖模塊對(duì)機(jī)械按鍵 DDD消抖key5key5_1(CLK,RESET,DDD,DD);always(negedgeDD)/每按下機(jī)械按鍵D一次,狀態(tài)指示寄存器counter加1beginif(counter>2

27、)counter<=0;/counter大于2時(shí)清零elsecounter<=counter+1;endalways(posedgeDD)/ 8位模式/ 7位模式/ 6位模式/默認(rèn)8位模式beginif(counter=0)beginc<=3'b001;led<=4'b0111;endelseif(counter=1)beginc<=3'b010;led<=4'b1000;endelseif(counter=2)beginc<=3'b100;led<=4'b1001;endc<=3'b

28、001; led<=4'b0000; endelsebeginEnd仿真結(jié)果口U心11111科1JefOCTO'Jmoino*m祿53(0011gx.L、廉圖2、13控制模塊仿真輸出隨輸入規(guī)律變化,可以瞧出模塊功能正常。波特率設(shè)置:波特率發(fā)生器為傳輸提供了串行移位時(shí)鐘。波特率表示數(shù)據(jù)的傳送速率,即每秒傳輸二進(jìn)制的位數(shù)。波特率控制模塊實(shí)際上就是一個(gè)分頻器,產(chǎn)生相應(yīng)的符合RS232的波特率同步時(shí)鐘。因?yàn)殚_(kāi)發(fā)板自帶時(shí)鐘為50MHz,因此:波特率=50M/bote;可見(jiàn)其中波特率就是由波特率因子bote決定若bote=5208,則波特率為9600。關(guān)鍵程序always(posed

29、geCLKornegedgeRESET)beginif(ClockCount=bote)beginClock9600<=1;ClockCount<=0;endelsebeginClock9600<=0;ClockCount<=ClockCount+1;endend波特率發(fā)生器本質(zhì)為一個(gè)分頻器,bote為之前鍵盤(pán)輸入模塊送來(lái)的設(shè)定值。仿真結(jié)果該模塊的仿真驗(yàn)證將于下文中UART通信模塊的仿真中一并驗(yàn)證。2、5UART通信模塊模塊介紹及原理圖基本的UART僅有RXD與TXD兩條信號(hào)線,接收與發(fā)送之間相互不存在干擾,即全雙工。由于UART就是異步通信,要求RXD接口與TXD發(fā)送

30、端制定相應(yīng)的規(guī)則,對(duì)數(shù)據(jù)進(jìn)行同步,以使接收、發(fā)送之間協(xié)調(diào)一致。UART的工作原理就是將傳輸數(shù)據(jù)的每一個(gè)字符一位接一位地傳輸,以字符為單位從低位到高位逐位傳輸,一個(gè)字符表示一幀信息。如圖2、14所示,串口數(shù)據(jù)發(fā)送模塊與串口數(shù)據(jù)接收模塊以及相關(guān)分頻模塊都集成于同一個(gè)UART模塊中。輸入:CLK:50MHz時(shí)鐘;RESET:復(fù)位信號(hào);UART0_RX:接收數(shù)據(jù)弓I腳;KEYA:對(duì)應(yīng)機(jī)械按鍵C,為發(fā)送確認(rèn)鍵;bote14、0:由輸入模塊送來(lái)的波特率因子,用于設(shè)置波特率;SEND_DATA7、0:數(shù)據(jù)幀,在6位模式中位寬為6,在7位模式中位寬為7。輸出:UART0_TX:發(fā)送數(shù)據(jù)引腳;Data010、3

31、卜Data040、3:用于向顯示模塊傳遞接收的數(shù)據(jù)。uarlRESETUARTQ_TXCLKDataGip.OJ-UART0_RXOata0230'KEYADfita03pOJibcie|l4QSEND.DATAtr.ODataG430-inst?圖2、14UART模塊2、5、1串口數(shù)據(jù)發(fā)送模塊關(guān)鍵程序Clock9600為前文介紹的波特率發(fā)生器產(chǎn)生的波特率時(shí)鐘;always(posedgeClock9600orposedgeSend_en)beginif(Send_en=1)beginsend_count<=0;UART0_TX<=1;send_over<=1;end

32、串口清零elseif(Send_count=9)beginUART0_TX<=Send_data9;send_over<=0;end/發(fā)送完成elsebeginUART0_TX<=Send_dataSend_count;逐位由發(fā)送寄存器向串口寫(xiě)數(shù)據(jù)Send_count<=Send_count+1;endalways(posedgedoutornegedgeRESET)發(fā)送數(shù)據(jù)beginif(RESET=0)beginsend_en<=1;Send_data<=10'b1000000000;endelsebeginSend_en<=0;Send_

33、data<=last,SEND_DATA,start;/寫(xiě)入起始位與終止位if(Send_over=0)Send_en<=1;endend2、5、2串口數(shù)據(jù)接收模塊16個(gè)首先介紹采樣時(shí)鐘Clock3,它就是波特率的16倍,即串口上一個(gè)數(shù)據(jù)位長(zhǎng)度會(huì)有Clock3周期,如果在每個(gè)數(shù)據(jù)位的第8個(gè)Clock3周期上采樣,即在每個(gè)數(shù)據(jù)位的中間進(jìn)行取樣這樣可以使采樣值更加準(zhǔn)確可靠。此原理如圖2、15所示。®®O00©O®»*-LrLrLrLRrtrLn_rLJLmfao 件止府起哈倒0:16 St:ChKk.i'同明CKkU 國(guó)期沖 T

34、聞期it tClvckJI冷個(gè) ClwkJ 闿期圖2、15采樣原理關(guān)鍵程序接收采樣時(shí)鐘分頻模塊:always(posedgeCLKornegedgeRESET)beginif(ClockCount_UART0_RX=bote/16)/采樣頻率為波特率的16倍beginClock3<=1;ClockCount_UART0_RX<=0;endelsebeginClock3<=0;ClockCount_UART0_RX<=ClockCount_UART0_RX+1;endend檢測(cè)至ijUART0_RX出現(xiàn)下降沿時(shí),令UART0_RX_Hold=1,啟動(dòng)接收進(jìn)程;case(m

35、)/8位數(shù)據(jù)幀采樣24:beginUART0_RX_Data0<=UART0_RX;m<=m+1;end40:beginUART0_RX_Data1<=UART0_RX;m<=m+1;end56:beginUART0_RX_Data2<=UART0_RX;m<=m+1;end72:beginUART0_RX_Data3<=UART0_RX;m<=m+1;end88:beginUART0_RX_Data4<=UART0_RX;m<=m+1;end104:beginUART0_RX_Data5<=UART0_RX;m<=m+1

36、;end120:beginUART0_RX_Data6<=UART0_RX;m<=m+1;end136:beginUART0_RX_Data7<=UART0_RX;m<=m+1;end152:beginUART0_RX_Valid<=1;m<=m+1;end標(biāo)志串口數(shù)據(jù)接收完成168:beginm<=0;UART0_RX_Valid<=0;enddefault:m<=m+1;endcase接收數(shù)據(jù)輸出部分:(8位模式)Data01<=UART0_RX_Data3,UART0_RX_Data2,UART0_RX_Data1,UART0_

37、RX_Data0;Data02<=UART0_RX_Data7,UART0_RX_Data6,UART0_RX_Data5,UART0_RX_Data4;如果系統(tǒng)處于7位模式,那么Data01<=UART0_RX_Data3,UART0_RX_Data2,UART0_RX_Data1,UART0_RX_Data0;Data02<=start,UART0_RX_Data6,UART0_RX_Data5,UART0_RX_Data4;如果系統(tǒng)處于6位模式,那么Data01<=UART0_RX_Data3,UART0_RX_Data2,UART0_RX_Data1,UART0

38、_RX_Data0;Data02<=start,start,UART0_RX_Data5,UART0_RX_Data4;其中start=0。仿真結(jié)果圖2、16UART模塊仿真從仿真結(jié)果可以瞧出,波特率時(shí)鐘clock9600、采樣日鐘clock3均正常,UART0_TX有正確數(shù)據(jù)輸出,Data01與Data02正確反映了UART0_RX送來(lái)的數(shù)據(jù),因此UART通信模塊功能正確。三系統(tǒng)介紹3、1系統(tǒng)結(jié)構(gòu)介紹整個(gè)系統(tǒng)的結(jié)構(gòu)可以用以下框圖描述圖3、1系統(tǒng)框圖圖3、2操作流程接收數(shù)據(jù)選擇數(shù)據(jù)、1設(shè)置波特、廠輸入發(fā)送、|發(fā)送一可丁 幀長(zhǎng)度尸率廠數(shù)據(jù)/I顯小,顯示頂層圖如下一三三言三二y 一3-直=i

39、:二三JX耍一一二二hfb, Lrs三二.三于-LrJ Mr從圖3、1中可以瞧出整個(gè)系統(tǒng)的功能即為實(shí)現(xiàn)幀格式、波特率可調(diào)的全雙工串口通信并顯示相關(guān)數(shù)據(jù)信息。具體的操作流程如圖3、2所示。I:初始化圖3、3頂層圖圖中部分1為數(shù)據(jù)位寬6位的通信子系統(tǒng),部分2為數(shù)據(jù)位寬8位的通信子系統(tǒng),部分3為數(shù)據(jù)位寬8位的通信子系統(tǒng)部分4為數(shù)據(jù)幀長(zhǎng)度控制模塊,用于選擇哪一個(gè)系統(tǒng)運(yùn)作。端口說(shuō)明輸入:clk:50MHz時(shí)鐘;reset:復(fù)位信號(hào);switch:用于控制波特率輸入模式與發(fā)送數(shù)據(jù)輸入模式間的切換key_in3、0:鍵盤(pán)列掃描信號(hào);UART0_RX:接收數(shù)據(jù)弓I腳;B:機(jī)械按鍵,發(fā)送確認(rèn)鍵;s1:機(jī)械按鍵,

40、按下后顯示接收的數(shù)據(jù),再按下退出;DDD:機(jī)械按鍵,切換數(shù)據(jù)位寬。輸出:led3、0:數(shù)據(jù)位寬指示燈;key_out3、0:鍵盤(pán)行掃描信號(hào);speaker:蜂鳴器控制信號(hào);LED_ALED_G:顯示控制信號(hào);LED_Point,LED_PointTime:均為顯示控制信號(hào);LED_VCC1LED_VCC4:LED片選信號(hào);LED_EN1:使能彳t號(hào);UART0_TX:發(fā)送數(shù)據(jù)引腳。3、2系統(tǒng)子模塊介紹因?yàn)槿齻€(gè)通信子系統(tǒng)基本相似,所以本文僅介紹數(shù)據(jù)位寬6位的通信子系統(tǒng)。irgale.lnBkicM;優(yōu)$曰Resellreseti«y_ovl30|-SwWC-hhlkev_m(3.001

41、bDi-RxRKi-51311的-HtchLB3_Akey_n3'.01L3>_B1BLHJ_GUART0_RKLED_D141LH)_tMLm_ELHD_FLro_GLED_VCC1lLED_VCC2IED_VCC3LEDVCC4LED_Pamrt1L日七用力1UARID-TX2l>AlbBfcC12dlDIBElBffllEM11rF1gG1cicm亡NC21亡3C3.1£4C41poiitEePDnESimelpobnlPainntiIkien«7mist?,,圖3、4子系統(tǒng)圖3、4的子系統(tǒng)中左邊與右邊的模塊都就是多輸入三態(tài)門(mén),其使能信號(hào)由數(shù)據(jù)幀長(zhǎng)

42、度控制模塊控制,從而決定了在任何一時(shí)刻三個(gè)子系統(tǒng)只有一個(gè)系統(tǒng)處于工作狀態(tài)。該圖中間的模塊即為實(shí)現(xiàn)6位串口通信的功能模塊,其結(jié)構(gòu)如圖3、5所示。圖3、56位串口通信的功能模塊如圖3、5所示,串口通信模塊主要分為6個(gè)子模塊,各個(gè)子模塊在前文中都有介紹模塊說(shuō)明:模塊1:UART通信模塊,用于數(shù)據(jù)的接收與傳送,將接收到的數(shù)據(jù)經(jīng)過(guò)三態(tài)門(mén)(模塊4)傳送到顯示模塊;模塊2:輸入模塊,用于輸入波特率、發(fā)送數(shù)據(jù),將用戶輸入的數(shù)據(jù)經(jīng)過(guò)三態(tài)門(mén)(模塊3)發(fā)送到顯示模塊;模塊3,模塊4:三態(tài)門(mén)模塊,用于保證任何時(shí)刻只有一組顯示數(shù)據(jù)輸入顯示模塊進(jìn)行顯示;模塊5:顯示模塊,用于驅(qū)動(dòng)數(shù)碼管;模塊6:三態(tài)門(mén)控制模塊;用于選擇數(shù)碼管顯示的內(nèi)容。端口說(shuō)明輸如:clk:50MHz時(shí)鐘;reset:復(fù)位信號(hào);switch:用于控制波特率輸入模式與發(fā)送數(shù)據(jù)輸入模式間的切換;key_in3、0:鍵盤(pán)列掃描信號(hào);UART0_RX:接收數(shù)據(jù)弓I腳;B:機(jī)械按鍵,發(fā)送確認(rèn)鍵;s1:機(jī)械按鍵,按下后顯示接收的數(shù)據(jù),再按下退出;輸出:key_out3、0:鍵盤(pán)行掃描信號(hào);speaker:蜂鳴器控制信號(hào);LED_ALED_G:顯示控制信號(hào);LED_Point,LED_Poi

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論