uart串口通信實驗報告_第1頁
uart串口通信實驗報告_第2頁
uart串口通信實驗報告_第3頁
uart串口通信實驗報告_第4頁
uart串口通信實驗報告_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

串口通信實驗報告基本實驗:16位的乘法器設(shè)計思想:乘法器根據(jù)以往學(xué)過數(shù)電的設(shè)計經(jīng)驗,應(yīng)該是移位相加的方法,設(shè)被乘數(shù)為[15:0]a,乘數(shù)為[15:0]b,則從b的最高位開始算起,c初值為0,為b最高位為1,則c就等于c+a;接下來,若b的次高位為1,則c左移一位加a,若為0則c左移一位就可以了,這樣的步驟做到b的最低位那么c的值就是a*b,當(dāng)然最好c是中間寄存器,這樣結(jié)果才不會出現(xiàn)中間值。實驗的源碼:modulemuti(clk,rst,ready,a,b,c);inputclk;inputrst;input[15:0]a;input[15:0]b;output[31:0]c;outputready;reg[31:0]c;regready;reg[31:0]temp;reg[5:0]n;always@(posedgeclkorposedgerst)beginif(rst)beginc<=0;ready<=1;temp<=0;n<=32;endelseif(ready)begintemp<=0;n<=32;ready<=0;endelseif(n)beginif(b[n-1])begintemp<=(temp<<1)+a;n<=n-1;endelsebegintemp<=temp<<1;n<=n-1;endendelsebeginc<=temp;n<=32;ready<=1;endendendmodul測試代碼:`timescale1ns/1nsmoduletb;regclk;reg[15:0]a;reg[15:0]b;regrst;wireready;wire[31:0]c;always#10clk=~clk;initialbeginrst<=1;clk<=0;a=0;b=0;#10rst=0;#21a=21;b=32;#650a=3;b=4;#700$stop;endmutimuti_unit(.a(a),.b(b),.rst(rst),.clk(clk),.ready(ready),.c(c));endmodule仿真結(jié)果:這邊a被乘數(shù),b是乘數(shù),當(dāng)rst為高時,則將c置0,ready置一,ready信號為高表示此時空閑可以計算,rst為低時則開始計算,21*32為672,3*4為12,在乘法操作時,ready信號為低電平表示在工作中不能再輸入進(jìn)行計算,當(dāng)計算結(jié)束則變?yōu)楦唠娖健3朔üδ艿靡詫崿F(xiàn)。進(jìn)階實驗:串口通信實驗基本要求:了解UART串口通信協(xié)議設(shè)計思想:主要是分成3個模塊,一個是波特率產(chǎn)生模塊,一個是發(fā)送模塊,一個是接收模塊,波特率產(chǎn)生模塊產(chǎn)生一個9600Hz的采樣脈沖,由于開發(fā)板上的固有頻率為50MHz,所以我需要分頻為50000000/9600=5208.3,即從0記到5207,當(dāng)記到2503時產(chǎn)生一個時鐘周期的高電平即可。發(fā)送模塊受到接受模塊的控制,接收模塊的輸出RXD連發(fā)送的TXD,RXD為高表示正在接收不能發(fā)送數(shù)據(jù),發(fā)送時采用并轉(zhuǎn)串發(fā)送,接收時為串轉(zhuǎn)并接收。實驗代碼:top文件moduletop(F50M,rst,datain,dataout,seg);inputF50M;/////50MHz的時鐘信號inputrst;///////////////復(fù)位信號input[7:0]datain;///////////輸入數(shù)據(jù)output[7:0]dataout;////////////////輸出數(shù)據(jù)output[3:0]seg;/////////////////板子上面選一個ledwirebps_start1;/////////////////當(dāng)正在發(fā)送時為高電平wirebps_start2;///////////////正在接收時為高電平wirecaiyang1;//////////////////////采樣的波特率信號wirecaiyang2;wireRXD_TXD;wiredataout;wirerx232_tx;///////////////////////中間的串行通信線brate1brate1(.F50M(F50M),.rst(rst),.bps_start1(bps_start1),.caiyang1(caiyang1));brate2brate2(.F50M(F50M),.rst(rst),.bps_start2(bps_start2),.caiyang2(caiyang2));revrev_u(.F50M(F50M),.rx232_tx(rx232_tx),.rst(rst),.caiyang2(caiyang2),.RXD(RXD_TXD),.dataout(dataout),.bps_start2(bps_start2) );sendsend_u(.F50M(F50M),.datain(datain),.rst(rst),.caiyang1(caiyang1),.TXD(RXD_TXD),.bps_start1(bps_start1),.rx232_tx(rx232_tx));segseg_u(.F50M(F50M),.seg(seg));endmodule波特率產(chǎn)生模塊:A.發(fā)送波特率產(chǎn)生模塊:modulebrate1(F50M,rst,bps_start1,caiyang1);inputF50M;inputrst;inputbps_start1; outputcaiyang1;reg[12:0]n;//50MHz/9600hz=5208,ncount0to5207regcaiyang1;//a9600boundratesignalways@(posedgeF50Mornegedgerst)beginif(!rst)beginn<=0;caiyang1<=0;endelseif((n==5207)||!bps_start1)////////////如果記滿5207或者發(fā)送數(shù)據(jù)結(jié)束就將caiyang2清0beginn<=0;caiyang1<=0;endelseif(n==2603)//////////////////////////////計數(shù)滿2603就產(chǎn)生一個時鐘周期的高電平beginn<=n+1;caiyang1<=1;endelsebeginn<=n+1;caiyang1<=0;endendendmoduleB.接收波特率產(chǎn)生模塊modulebrate2(F50M,rst,bps_start2,caiyang2);inputF50M;inputrst;inputbps_start2;outputcaiyang2;reg[12:0]n;//50MHz/9600hz=5208,ncount0to5207regcaiyang2;//a9600boundratesignalways@(posedgeF50Mornegedgerst)beginif(!rst)beginn<=0;caiyang2<=0;endelseif((n==5207)||!bps_start2)////////////如果記滿5207或者發(fā)送數(shù)據(jù)結(jié)束就將caiyang2清0beginn<=0;caiyang2<=0;endelseif(n==2603)beginn<=n+1;caiyang2<=1;endelsebeginn<=n+1;caiyang2<=0;endendendmodule發(fā)送模塊:modulesend(F50M,datain,caiyang1,TXD,rst,bps_start1,rx232_tx);inputF50M;input[7:0]datain;////輸入要發(fā)送的數(shù)據(jù)inputrst;inputcaiyang1;inputTXD;/////接收接收端的狀態(tài)數(shù)據(jù),若收到為1,表示接收端正在接收不能發(fā)送數(shù)據(jù),采樣其下降沿作為發(fā)送模塊的啟動時間點outputbps_start1;outputrx232_tx;輸出一個串行數(shù)據(jù)regrx232_tx;regbps_start1;rega;regb;regc;wireneg_TXD;//////////////////////////////////////////////////捕捉TXD下降沿表示可以開始發(fā)送數(shù)據(jù),always@(posedgeF50Mornegedgerst)beginif(!rst)begina<=1;b<=1;endelsebeginb<=a;a<=TXD;endendassignneg_TXD=~a&b;/////////////////////////////////////////////////////////將狀態(tài)置位和發(fā)送信號reg[4:0]n;regtxd_en;reg[7:0]temp_data;always@(posedgeF50Mornegedgerst)beginif(!rst)beginn<=0;bps_start1<=0;txd_en<=0;temp_data<=0;rx232_tx<=1;endelseif(neg_TXD)begintxd_en<=1;bps_start1<=1;temp_data<=datain;endelseif(n==12)/////////////////記到12表示發(fā)送結(jié)束,將所有狀態(tài)重置begintxd_en<=0;bps_start1<=0;n<=0;endelseif(txd_en)//////////////////發(fā)送使能,內(nèi)部的一個使能信號beginif(caiyang1)///////////////采樣波特率begincase(n)4'd0:beginrx232_tx<=0;n<=n+1;end////////加起始位04'd1:beginrx232_tx<=temp_data[0];n<=n+1;end////1到8為數(shù)據(jù)位4'd2:beginrx232_tx<=temp_data[1];n<=n+1;end4'd3:beginrx232_tx<=temp_data[2];n<=n+1;end4'd4:beginrx232_tx<=temp_data[3];n<=n+1;end4'd5:beginrx232_tx<=temp_data[4];n<=n+1;end4'd6:beginrx232_tx<=temp_data[5];n<=n+1;end4'd7:beginrx232_tx<=temp_data[6];n<=n+1;end4'd8:beginrx232_tx<=temp_data[7];n<=n+1;end4'd9:beginrx232_tx<=1;n<=n+1;end////////////加奇偶校驗位4'd10:beginrx232_tx<=1;n<=n+1;end///////////////截止位default:beginrx232_tx<=1;n<=n+1;end/////////其余時候均為1endcaseendendendendmodule接收模塊:modulerev(F50M,rx232_tx,rst,caiyang2,RXD,dataout,bps_start2);inputF50M;inputrx232_tx;////////發(fā)送過來的串行數(shù)據(jù)inputrst;inputcaiyang2;outputRXD;////////////當(dāng)正在接收時,RXD為1,接收完畢產(chǎn)生一個周期低電平表示接受完,連接發(fā)送端的TXD輸入output[7:0]dataout;outputbps_start2;regRXD;reg[7:0]dataout;regbps_start2;//////////////捕捉rx232_tx的下降沿rega;regb;wireneg_rx232;always@(posedgeF50Mornegedgerst)beginif(!rst)begina<=1;b<=1;endelsebeginb<=a;a<=rx232_tx;endendassignneg_rx232=~a&b;////////////////捕捉到下降沿時置1//////////////////////////////////////////////////////////////////////標(biāo)志位置位和串轉(zhuǎn)并從數(shù)據(jù)線到接收端的寄存器reg[7:0]temp;reg[3:0]n;regrxd_en;always@(posedgeF50Mornegedgerst)beginif(!rst)beginn<=0;dataout<=0;RXD<=0;bps_start2<=0;rxd_en<=0;temp<=0;///////////////////////復(fù)位信號endelseif(n==12)////////////當(dāng)計數(shù)到12的時候表示已經(jīng)接受完畢,將狀態(tài)全部初始到未傳時beginn<=0;rxd_en<=0;RXD<=0;bps_start2<=0;dataout<=temp;endelseif(neg_rx232)/////////////////如果捕捉到了信號的下降沿,表示得到了起始位0,則將狀態(tài)置一表示啟動接收beginbps_start2<=1;RXD<=1;rxd_en<=1;endelseif(rxd_en)//////////////////接收使能beginif(caiyang2)/////////////////按照9600波特率采樣beginif(n!=12)begincase(n)4'd1:begintemp[0]<=rx232_tx;n<=n+1;end//////從第二位開始接收數(shù)據(jù)4'd2:begintemp[1]<=rx232_tx;n<=n+1;end4'd3:begintemp[2]<=rx232_tx;n<=n+1;end4'd4:begintemp[3]<=rx232_tx;n<=n+1;end4'd5:begintemp[4]<=rx232_tx;n<=n+1;end4'd6:begintemp[5]<=rx232_tx;n<=n+1;end4'd7:begintemp[6]<=rx232_tx;n<=n+1;end4'd8:begintemp[7]<=rx232_tx;n<=n+1;enddefault:n<=n+1;///////////////////////////////////其余時刻不置位endcaseendendendendendmodule定義了一個seg模塊用來選擇哪個led燈moduleseg(F50M,seg);inputF50M;output[3:0]seg;reg[3:0]seg;always@(posedgeF50M)beginseg<=4'b0111;endendmodule約束條件NET"F50M"LOC="B8";NET"rst"LOC="H13";NET"datain[0]"LOC="R17";NET"datain[1]"LOC="N17";NET"datain[2]"LOC="L13";NET"datain[3]"L

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論