




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、串口通信設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康?、熟練使用ISE設(shè)計(jì)工具;2、理解串口傳輸協(xié)議。理解采用“自頂向下”設(shè)計(jì)思路,分解模塊的方法;3、在ISE使用Verilog HDL設(shè)計(jì)串口接收模塊,完成仿真、下載。二、 實(shí)驗(yàn)原理1、串口傳輸協(xié)議概述設(shè)計(jì)完成異步串口通信通用異步收發(fā)是一種典型的異步串口通信,簡(jiǎn)稱UART。串口通信時(shí)序如圖1所示。圖1 通用異步收發(fā)時(shí)序圖由圖1可以看出,在沒(méi)有數(shù)據(jù)傳送時(shí),通信線會(huì)一直處于高電平,即邏輯1狀態(tài);當(dāng)有數(shù)據(jù)傳送時(shí),數(shù)據(jù)幀以起始位開(kāi)始,以停止位結(jié)束。起始位為低電平,即邏輯0狀態(tài);停止位為高電平,即邏輯1狀態(tài),其持續(xù)時(shí)間可選為1位、1.5位或2位(本次設(shè)計(jì)選擇持續(xù)時(shí)間1位)。接收
2、端在接收到停止位后,知道一幀數(shù)據(jù)已經(jīng)傳完,轉(zhuǎn)為等待數(shù)據(jù)接收狀態(tài);只要再接收到0狀態(tài),即為新一幀數(shù)據(jù)的起始狀態(tài)。數(shù)據(jù)幀的數(shù)據(jù)位低位(LSB)在前,高位(MSB)在后,根據(jù)不同的編碼規(guī)則,數(shù)據(jù)位可能為5位、6位、7位或者8位(本次設(shè)計(jì)數(shù)據(jù)位定位8位)。校驗(yàn)位也可根據(jù)需要選擇奇校驗(yàn)、偶校驗(yàn)或者不要校驗(yàn)(本次設(shè)計(jì)不要校驗(yàn)位)。2、串口時(shí)序分析本次FPGA系統(tǒng)時(shí)鐘是40MHZ,則一位數(shù)據(jù)傳輸時(shí)間相當(dāng)于(1/9600)/(1/40M)=4167個(gè)40MHZ時(shí)鐘周期。設(shè)一幀數(shù)據(jù)位數(shù)=1(開(kāi)始位)+8(數(shù)據(jù)位)+1(校驗(yàn)位)+1(結(jié)束位)=11位,所以傳輸一幀數(shù)據(jù)的時(shí)間是11*1/9600=0.3333s。為
3、了穩(wěn)定采集串口數(shù)據(jù)幀的數(shù)據(jù),需要在每位數(shù)據(jù)的“中間時(shí)刻”采樣,由此,需要在每位數(shù)據(jù)開(kāi)始時(shí)刻對(duì)時(shí)鐘進(jìn)行計(jì)數(shù),若系統(tǒng)時(shí)鐘是40MHZ,則在計(jì)數(shù)至4167/2=2084時(shí)采樣此時(shí)刻的數(shù)值。3、數(shù)據(jù)顯示PC通過(guò)串口發(fā)送的數(shù)據(jù)應(yīng)該在下載板上有所顯示,以此來(lái)確定發(fā)送成功與否。所以實(shí)驗(yàn)中用到8個(gè)數(shù)碼管以二進(jìn)制的方式來(lái)顯示通過(guò)串口助手發(fā)送的兩個(gè)十六進(jìn)制的數(shù)據(jù)。4、本次實(shí)驗(yàn)的設(shè)計(jì)一共有20個(gè)端口輸入信號(hào):CLK系統(tǒng)時(shí)鐘;RSTn復(fù)位信號(hào);Rx_EN_Sig通信使能信號(hào)。Rx_Pin_In串口數(shù)據(jù)輸入。輸出信號(hào):SEG7:0數(shù)碼管段選信號(hào);CON7:0數(shù)碼管位選信號(hào)。三、 實(shí)驗(yàn)步驟1、整個(gè)系統(tǒng)主要設(shè)計(jì)的模塊是:幀
4、監(jiān)測(cè)開(kāi)始模塊(detect_module)、數(shù)據(jù)位中心定位模塊(Rx_Rbps_module)、數(shù)據(jù)裝載模塊(Rx_Control_module)和數(shù)碼管顯示模塊(display_module)。接下來(lái)進(jìn)行進(jìn)行分模塊設(shè)計(jì)。2、幀監(jiān)測(cè)開(kāi)始模塊(detect_module)檢測(cè)串行輸入數(shù)據(jù)RX_Pin_In的值,判斷是否開(kāi)始傳送一幀的數(shù)據(jù)。并將判斷結(jié)果H2L_Sig輸送給數(shù)據(jù)裝載模塊(Rx_Control_module)。模塊結(jié)構(gòu)圖如圖2:圖2 幀監(jiān)測(cè)開(kāi)始模塊3、數(shù)據(jù)位中心定位模塊(Rx_Rbps_module)為了穩(wěn)定采集串口數(shù)據(jù)幀的數(shù)據(jù),需要在每位數(shù)據(jù)的“中間時(shí)刻”采樣,所以需要一個(gè)該模塊用來(lái)
5、檢測(cè)每一位數(shù)據(jù)的持續(xù)時(shí)間的“中間時(shí)刻”。該模塊原理為:當(dāng)接收到數(shù)據(jù)裝載模塊傳來(lái)的一個(gè)“當(dāng)前數(shù)據(jù)有效(Count_Sig = 1)”的信號(hào)時(shí)開(kāi)始計(jì)數(shù),一直計(jì)數(shù)到該數(shù)據(jù)持續(xù)時(shí)間的一半時(shí)便發(fā)送一個(gè)確認(rèn)信號(hào)(BPS_CLK = 1)給數(shù)據(jù)裝載模塊,提示其開(kāi)始進(jìn)行數(shù)據(jù)采集。模塊結(jié)構(gòu)圖如圖3:圖3 數(shù)據(jù)位中心定位模塊4、數(shù)據(jù)裝載模塊(Rx_Control_module)該模塊用來(lái)接收自串口發(fā)送來(lái)的數(shù)據(jù),并進(jìn)行判斷,將8位數(shù)據(jù)裝載到寄存器中。并且在每接收完一幀數(shù)據(jù)時(shí)給顯示模塊一個(gè)確認(rèn)信號(hào)(RX_Done_Sig=1),讓數(shù)碼管更新顯示。模塊結(jié)構(gòu)圖如圖4:圖4 數(shù)據(jù)裝載模塊5、數(shù)碼管顯示模塊(display_
6、module)在接收到來(lái)自數(shù)據(jù)裝載模塊發(fā)送的數(shù)據(jù)接收完畢的信號(hào)之后,將接收到的數(shù)據(jù)按位顯示到每一位數(shù)碼管上。模塊結(jié)構(gòu)圖如圖5:圖5 數(shù)碼管顯示模塊6、頂層模塊(top)對(duì)各個(gè)模塊進(jìn)行仿真驗(yàn)證,確認(rèn)無(wú)誤后。例化各個(gè)模塊并將它們連接到一起。則系統(tǒng)結(jié)構(gòu)圖如圖6:圖6 系統(tǒng)結(jié)構(gòu)圖7、根據(jù)板子鎖定引腳,并生成下載文件。CLK為系統(tǒng)40M時(shí)鐘即是P82腳;RSTn復(fù)位信號(hào)選擇撥碼開(kāi)關(guān)1,即P20腳;Rx_EN_Sig使能信號(hào)選擇撥碼開(kāi)關(guān)2,即P26腳;Rx_Pin_In為串口0的RX端,即P14;CON0:7數(shù)碼管位選信號(hào)鎖定對(duì)應(yīng)的數(shù)碼管共陽(yáng)端引腳,LED0:7即選擇對(duì)應(yīng)的數(shù)碼管腳鎖定即可。四、 實(shí)驗(yàn)結(jié)果
7、1、數(shù)據(jù)裝載模塊(Rx_Control_module)與數(shù)據(jù)位中心定位模塊(Rx_Rbps_module)連接仿真測(cè)試激勵(lì)文件的編寫(xiě)應(yīng)該首先產(chǎn)生40M的CLK時(shí)鐘信號(hào),然后復(fù)位信號(hào)無(wú)效,使能信號(hào)有效,幀開(kāi)始信號(hào)H2L_Sig有效。然后再每104166個(gè)時(shí)鐘給Rx_Pin_In一個(gè)值,該激勵(lì)文件給定的值為:1001 0101。圖7 數(shù)據(jù)裝載波形圖由圖可知,模塊實(shí)現(xiàn)了依次將數(shù)據(jù)1001 0101裝載到寄存器Rx_Data7:0里。2、數(shù)碼管顯示模塊(display_module)激勵(lì)文件的編寫(xiě)應(yīng)該為首先產(chǎn)生一個(gè)40M的CLK時(shí)鐘信號(hào),然后復(fù)位信號(hào)無(wú)效,幀數(shù)據(jù)接收完畢即Rx_Done_Sig = 1
8、。給一個(gè)Rx_Data7:0賦一個(gè)值,看是否顯示正確,即通過(guò)CON7:0和SEG7:0聯(lián)立觀察。圖8 數(shù)碼管顯示由圖形可知,給Rx_Data7:0賦值為1111 1101。在看CON7:0和SEG7:0,數(shù)碼管1顯示的為1,數(shù)碼管2顯示的為0,數(shù)碼管3數(shù)碼管7都顯示的為1,故模塊設(shè)計(jì)無(wú)誤。3、下載到實(shí)驗(yàn)板上面后的結(jié)果將撥動(dòng)開(kāi)關(guān)0和1都撥動(dòng)到上方,即為高電平時(shí)。數(shù)碼管初始顯示為0。連接好串口線,打開(kāi)串口助手,打開(kāi)串口以十六進(jìn)制的方式發(fā)送兩位數(shù)據(jù)如11。此時(shí)下載板上的數(shù)碼管顯示為00010001,即是十六進(jìn)制的數(shù)據(jù)11對(duì)應(yīng)的二進(jìn)制下的數(shù)據(jù)。圖9 數(shù)碼管顯示4、VGA下載實(shí)驗(yàn)效果下載后,將板子的VG
9、A線連接顯示器上面。顯示器顯示如圖10所示,撥動(dòng)撥碼開(kāi)關(guān)0,顯示器顯示另一張圖形如圖11所示。圖10 VGA顯示圖11 VGA顯示五、 思考題1、簡(jiǎn)述幀開(kāi)始監(jiān)測(cè)模塊(detect_module),數(shù)據(jù)位中心定位模塊(rx_bps_module),數(shù)據(jù)裝載模塊(rx_control_module)的功能各是什么?這三個(gè)模塊是如何配合實(shí)現(xiàn)了串口數(shù)據(jù)的接收?答:幀開(kāi)始檢測(cè)模塊的功能是檢測(cè)該數(shù)據(jù)傳送的位數(shù);數(shù)據(jù)位中心定位模塊的功能是從數(shù)據(jù)的穩(wěn)定狀態(tài)提取數(shù)據(jù);數(shù)據(jù)裝載模塊的功能是將取得的完整的數(shù)據(jù)傳輸給FPGA顯示。2、如果串口比特率改為115200 bps,代碼應(yīng)該做怎樣的修改?module rx_b
10、ps_module(CLK, RSTn,Count_Sig,BPS_CLK );input CLK;input RSTn;input Count_Sig;output BPS_CLK;reg 11:0Count_BPS;always ( posedge CLK or negedge RSTn )if( !RSTn ) Count_BPS <= 8'd0;else if( Count_BPS = 8'd173 )Count_BPS <= 8'd0;else if( Count_Sig ) Count_BPS <= Count_BPS + 1'b1
11、; else Count_BPS <= 8'd0;assign BPS_CLK = ( Count_BPS = 12'd1041 ) ? 1'b1 : 1'b0;endmodule3、如果要設(shè)計(jì)串口數(shù)據(jù)發(fā)送模塊,該如何設(shè)計(jì),簡(jiǎn)要寫(xiě)出設(shè)計(jì)系統(tǒng)任務(wù)書(shū)(包括設(shè)計(jì)目標(biāo),功能模塊劃分,子模塊功能描述等)答:串口數(shù)據(jù)發(fā)送模塊設(shè)計(jì)目的:通過(guò)在FPGA板上輸入數(shù)據(jù),然后在電腦的串口端顯示數(shù)據(jù);功能模塊劃分:按鍵(作為數(shù)據(jù)的輸入),數(shù)碼管(顯示當(dāng)前數(shù)據(jù)用于比較電腦端接受的數(shù)據(jù)是否正確),狀態(tài)接受(處于某個(gè)狀態(tài)時(shí)數(shù)據(jù)的狀態(tài)),分頻模塊。六、 代碼1、頂層模塊代碼:timesc
12、ale 1ns / 1psmodule top(CLK,RSTn,Rx_EN_Sig,Rx_Pin_In,SEG,CON);input CLK;input RSTn;input Rx_EN_Sig;input Rx_Pin_In;output 7:0 SEG;output 7:0 CON;wire H2L_Sig;wire Count_Sig;wire BPS_CLK;wire Rx_Done_Sig;wire 7:0 Rx_Data;detect_module detect(.CLK(CLK),.RSTn(RSTn),.Rx_Pin_In(Rx_Pin_In),.H2L_Sig(H2L_Si
13、g);Rx_Control_module Rx_Control(.CLK(CLK),.RSTn(RSTn).H2L_Sig(H2L_Sig),.Rx_Pin_In(Rx_Pin_In),.BPS_CLK(BPS_CLK), .Rx_EN_Sig(Rx_EN_Sig),.Count_Sig(Count_Sig),.Rx_Data(Rx_Data),.Rx_Done_Sig(Rx_Done_Sig);Rx_bps_module Rx_bps(.CLK(CLK),.RSTn(RSTn),.Count_Sig(Count_Sig),.BPS_CLK(BPS_CLK);display_module di
14、splay(.CLK(CLK),.RSTn(RSTn),.Rx_Done_Sig(Rx_Done_Sig),.Rx_Data(Rx_Data),.SEG(SEG),.CON(CON);endmodule2、幀監(jiān)測(cè)開(kāi)始模塊(detect_module):timescale 1ns / 1ps/幀開(kāi)始監(jiān)測(cè)模塊(detect_module)module detect_module(CLK,RSTn,Rx_Pin_In,H2L_Sig);input CLK;input RSTn; /復(fù)位信號(hào)input Rx_Pin_In; /串行輸入數(shù)據(jù)RX_Pin_Inoutput H2L_Sig; reg H2L
15、_F1;reg H2L_F2; always ( posedge CLK or negedge RSTn )if( !RSTn )beginH2L_F1 <= 1'b1;H2L_F2 <= 1'b1;endelsebeginH2L_F1 <= Rx_Pin_In;H2L_F2 <= H2L_F1; endassign H2L_Sig = H2L_F2 & !H2L_F1;endmodule3、數(shù)據(jù)位中心定位模塊(Rx_Rbps_module):timescale 1ns / 1ps/數(shù)據(jù)位中心定位模塊(Rx_Rbps_module)module
16、Rx_bps_module(CLK,RSTn,Count_Sig,BPS_CLK);input CLK;input RSTn; /復(fù)位信號(hào) RSTn,當(dāng)RSTn=0,系統(tǒng)復(fù)位input Count_Sig; /串口數(shù)據(jù)幀開(kāi)始確認(rèn)信號(hào):Count_Sig,當(dāng) Count_Sig=1, /表示串口輸入幀開(kāi)始時(shí)刻,持續(xù)一個(gè)系統(tǒng)時(shí)鐘周期output BPS_CLK; /BPS_CLK,當(dāng)計(jì)數(shù)至每一位的中間位置,BPS_CLK=1, /提示信號(hào)采集時(shí)間到,否則不進(jìn)行信號(hào)采集reg 12:0Count_BPS;parameter12:0 BPS = 13'd4167; /2083*2(40Mhz)
17、always ( posedge CLK or negedge RSTn )if( !RSTn )Count_BPS <= 13'd0; /計(jì)數(shù)else if( Count_BPS = BPS )Count_BPS <= 13'd0;else if( Count_Sig )Count_BPS <= Count_BPS + 1'b1;elseCount_BPS <= 13'd0;assign BPS_CLK = ( Count_BPS = BPS/2 ) ? 1'b1 : 1'b0; endmodule4、數(shù)據(jù)裝載模塊(Rx
18、_Control_module):timescale 1ns / 1ps/數(shù)據(jù)裝載模塊(Rx_Control_module)module Rx_Control_module(CLK,RSTn,H2L_Sig,Rx_Pin_In,BPS_CLK,Rx_EN_Sig,Count_Sig,Rx_Data,Rx_Done_Sig);input CLK;input RSTn; /復(fù)位信號(hào) RSTn,當(dāng)RSTn=0時(shí),系統(tǒng)復(fù)位input H2L_Sig; /幀開(kāi)始信號(hào)H2L_Sig,當(dāng)H2L_Sig=1,表示一幀信號(hào)開(kāi)始input Rx_EN_Sig; /串口接收使能信號(hào) RX_En_Sig,/當(dāng)RX_E
19、n_Sig=1,系統(tǒng)正常工作。反正不接收數(shù)據(jù)input Rx_Pin_In; /串口數(shù)據(jù)輸入信號(hào): RX_Pin_Ininput BPS_CLK; /位中心定位信號(hào):BPS_CLKoutput Count_Sig; /數(shù)據(jù)位有效信號(hào) Count_Sig,/當(dāng)Count_Sig=1,表示有效位傳輸output 7:0 Rx_Data;/裝載好的串口數(shù)據(jù):RX_Data,位寬為8bitsoutput Rx_Done_Sig; /串口數(shù)據(jù)接收結(jié)束信號(hào): RX_Done_Sig, /當(dāng)RX_Done_Sig=1表示一幀串口數(shù)據(jù)接收完畢reg 3:0i = 4'b0;reg 7:0rData =
20、 8'd0;reg isCount = 1'b0;reg isDone = 1'b0;always ( posedge CLK or negedge RSTn )if( !RSTn )begini <= 4'd0;rData <= 8'd0;isCount <= 1'b0;isDone <= 1'b0;endelse if(Rx_EN_Sig )case ( i )4'd0 :if( H2L_Sig ) begin i <= i + 1'b1; isCount <= 1'b1;
21、end4'd1 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8, 4'd9 :if( BPS_CLK ) begin i<=i+1'b1;rDatai-2<=Rx_Pin_In;end4'd10 :if( BPS_CLK ) begin i <= i + 1'b1; end4'd11 :if( BPS_CLK ) begin i <= i +
22、1'b1; end4'd12 :begin I<= i + 1'b1; isDone<= 1'b1; isCount<= 1'b0; end4'd13 :begin i <= 1'b0; isDone <= 1'b0; endendcaseassign Count_Sig = isCount;assign Rx_Data = rData;assign Rx_Done_Sig = isDone;endmodule5、數(shù)碼管顯示模塊(display_module):timescale 1ns / 1ps/
23、顯示模塊(display_module)module display_module(CLK,RSTn,Rx_Done_Sig,Rx_Data,SEG,CON);input CLK;input RSTn;input Rx_Done_Sig; /串口數(shù)據(jù)接收結(jié)束信號(hào): RX_Done_Sig, /當(dāng)RX_Done_Sig=1表示一幀串口數(shù)據(jù)接收完畢input7:0 Rx_Data; /裝載好的串口數(shù)據(jù):RX_Data,位寬為8bitsoutput7:0 SEG;output7:0 CON;reg7:0 SEG;reg7:0 CON;reg23:0 CNT;reg2:0 dig;always (po
24、sedge CLK or negedge RSTn)if(!RSTn) begindig <= 3'b000;CNT <= 24'b0;endelse beginif(CNT = 24'd25000)beginCNT <= 24'b0;if(dig = 3'd7)dig <= 3'd0;elsedig <= dig + 1'b1;endelseCNT <= CNT + 1'b1;endreg 7:0 Data = 8'b00000000; /數(shù)據(jù)寄存器/Rx_Done_Sig信號(hào)上升沿來(lái)
25、到時(shí)將串口接收到的數(shù)據(jù)送給Dataalways (posedge Rx_Done_Sig) Data <= Rx_Data;always (posedge CLK or negedge RSTn)if(!RSTn) beginSEG <= 8'b1000000;CON <= 8'b11111111;endelsecase(dig)3'd0 : begin SEG<= display(Data0);CON <= 8'b1111_1110;end3'd1 : begin SEG<= display(Data1);CON <= 8'b1111_1101;end3'd2 : begin SEG<= display(Data2);CON <= 8'b1111_1011;end3'd3 : begin SEG<= display(Data3);CON <= 8'b1111_0111;end3'd4 : begin SEG<= display(Data4);CON <= 8'b1110_1111;end3'd5 : begin SEG<= display(Data5
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年財(cái)務(wù)審計(jì)與內(nèi)控體系考核專業(yè)知識(shí)試題及答案
- 2025年房產(chǎn)估價(jià)師考試試卷及答案
- 2025年法律職業(yè)資格考試題及答案
- 小班美術(shù)欣賞教案
- 健身房設(shè)備安全操作規(guī)范
- 腫瘤病人創(chuàng)新護(hù)理措施
- 2025年邯鄲貨運(yùn)資格證考試題
- 教育行業(yè)教育培訓(xùn)結(jié)業(yè)證明書(shū)(5篇)
- 重視心理健康的重要性
- 《法語(yǔ)語(yǔ)法之現(xiàn)在分詞講解:大學(xué)法語(yǔ)教學(xué)教案》
- GB/T 45236-2025化工園區(qū)危險(xiǎn)品運(yùn)輸車輛停車場(chǎng)建設(shè)規(guī)范
- 深圳市勞動(dòng)合同樣本大全
- GB/T 45144-2024道路車輛車輪和輪輞使用、維護(hù)和安全的一般要求及報(bào)廢條件
- 2025年中考物理終極押題猜想(新疆卷)(考試版A4)
- 護(hù)理文化建設(shè)與人文護(hù)理
- 《植物生理學(xué)》章節(jié)復(fù)習(xí)提綱(大學(xué)期末復(fù)習(xí)資料)
- 醫(yī)療集團(tuán)醫(yī)保統(tǒng)一管理制度
- 《招投標(biāo)培訓(xùn)》課件
- 精裝修施工的監(jiān)理細(xì)則
- 醫(yī)療質(zhì)量和醫(yī)療安全培訓(xùn)
評(píng)論
0/150
提交評(píng)論