版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、Verilog HDL復(fù)雜數(shù)字系統(tǒng)設(shè)計南通大學(xué)電子信息學(xué)院本課程主要內(nèi)容數(shù)字系統(tǒng)實例:數(shù)字系統(tǒng)實例:nFIFOn異步串行通信接口n調(diào)制解調(diào)器nI2C接口的接口的EEPROM讀寫器讀寫器nCISC CPUnRISC CPU例例1:一個掛在總線上的:一個掛在總線上的8位寄存器。位寄存器。module register0(db,nce,nwe) ;inout7:0 db ;input nce,nwe;reg7:0 q;assign db= (nce |(!nwe)?8bzzzzzzzz :q;always (posedge nwe) begin if(nce=0) q=db;endendmodule
2、復(fù)習(xí)例2:帶有異步清零端的同步4位二進制加法計數(shù)器module ncounter(rst, clk, q );input rst, clk;output3:0 q;reg3:0 q;always( posedge clk or negedge rst) if (!rst) q=0; else if (q=15) q=0; else q=q+1;endmodule同步清零?例例3:分頻器的設(shè)計:分頻器的設(shè)計module nfrequency( rst, clk, q );input rst, clk;output3:0 q;reg3:0 q;always( posedge clk or nege
3、dge rst )if (!rst)q=0;else if (q=15) /可以實現(xiàn)可以實現(xiàn)16分頻分頻q=0;elseq=q+1;endmodule同步清零?其它分頻系數(shù)?例例4:11111010000序列檢測器序列檢測器module shift(q,s,d,clk);output11:0 q;output s;input d;input clk;reg11:0 q;reg s;always (posedge clk)begin q=q1; q0=d; endalways (posedge clk) if(q=12b 11111010000) s=1; else s=0;endmodule例
4、例5:設(shè)計一個容量為:設(shè)計一個容量為1kB的的RAM。module memory (d,a,we,rd);inout7:0 d;input9:0 addr;input we,rd;wire7:0 q ;assign d= rd ? q: 8hzz;lpm_ram_dp0 ram0(d ,a , a ,we,rd,q);endmodule1.以結(jié)構(gòu)描述方式實現(xiàn)下列邏輯: Y=ABC+DE+ CFG2.試設(shè)計一個具有使能端ncs的2-4譯碼器。3.中斷請求有效電平為高電平,中斷請求輸入線INTR0INTR15中INTR15優(yōu)先權(quán)最高。試設(shè)計一個中斷優(yōu)先權(quán)編碼器。當(dāng)有中斷請求時,INT=1,同時輸出
5、中斷請求輸入線的編碼V;否則INT=0,V的輸出任意。4.試設(shè)計一個4位加減運算器,輸入為A、B、CIN、M,輸出為OUT和COUT。當(dāng)M=0時執(zhí)行加法運算, M=1時,執(zhí)行減法運算。5.試設(shè)計一個14分頻器,要求占空比1:1。6.試設(shè)計一個具有三態(tài)輸出緩沖的8位數(shù)據(jù)寄存器。7.試設(shè)計一個具有清0和置數(shù)功能的8位二進制加1計數(shù)器。8. 設(shè)計一個8位的加/減計數(shù)器。時鐘信號為 clk,同步清0信號為rst。 clk上升沿時刻,當(dāng)inc=1計數(shù)器加2,當(dāng)dec=1計數(shù)器減1,其它情況時計數(shù)器保持不變。 9.設(shè)計一個16位移位寄存器。10.設(shè)計一個16位雙向移位寄存器,當(dāng)d=0時右移, d=1時左移
6、。11.設(shè)計一個產(chǎn)生0100100111的序列信號發(fā)生器。12.試以調(diào)用庫函數(shù)的方法設(shè)計一個容量為8K24bit的RAM。其雙向數(shù)據(jù)線為D 0:23,地址線為A0:12,寫信號為new (低電平有效),讀信號為nrd(低電平有效)。13.設(shè)計一個位寬為8位、深度為8層的堆棧。14.試按下圖設(shè)計VerilogHDL模型。s0s1s2s3s411/00?/010/101/000/11?/01?/000/001/100/01?/01?/010/100/001/1?1/0第一章 先進先出數(shù)據(jù)緩沖器設(shè)計1.1 FIFO工作原理工作原理先進先出數(shù)據(jù)管理 ph-頭指針(指向第一個數(shù)據(jù)) pe-尾指針(指向第
7、一個空單元) 判緩沖器空條件: 當(dāng)pe=ph-空判緩沖器滿條件: 當(dāng)pe+1=ph-滿clknresetfifo_infifo_outfifo_wrfifo_rdbusyemptyfullFIFOclknresetfifo_infifo_outfifo_wrfifo_rdbusyemptyfullFIFOfifo_infifo_outrdwrphpe,qrdenwrenwraddressdatardaddressRAM1.2 狀態(tài)轉(zhuǎn)換圖狀態(tài)轉(zhuǎn)換圖n采用同步時序n狀態(tài)機: 3個狀態(tài)stopwritereadfifo_rd=1 / rd=1fifo_rd=0 / rd=0fifo_wr=1 / w
8、r=1fifo_wr=0 / wr=0n寫操作寫操作-需要2個clk完成n讀操作讀操作-需要2個clk完成1.3 FIFO模型設(shè)計之一模型設(shè)計之一/FIFO /Size:255Bytesmodule fifo(clk,nreset,pe,ph,fifo_in,fifo_out,fifo_wr,fifo_rd, busy,empty,full,state,wr,rd);input clk,nreset,fifo_wr,fifo_rd;/input7:0 fifo_in;output1:0 state;output empty,full,wr,rd,busy;/output7:0 fifo_out
9、,pe,ph;reg1:0 state;reg7:0 fifo_out;reg wr,rd,empty,full;/fifo write , read ,empty , fullreg7:0pe,ph; /fifo point:P_end,P_headparameter write=1,read=2,stop=0;always(posedge clk)if (nreset=0) begin pe=0;ph=0; endelse case(state) stop: if( fifo_wr=1 & pe+1!=ph) /write start begin rd=0; wr=1;state=
10、write;busy=1; end else if(fifo_rd=1 & pe!=ph) /read start begin wr=0;rd=1;state=read;busy=1; end else begin wr=0;rd=0;state=stop;busy=0; if(ph=pe) empty=1; else if(pe+1=ph) full=1; else begin empty=0; full=0; end end write: if( fifo_wr=0 ) /end of write begin pe=pe+1;wr=0;rd=0;state=stop;busy=0;
11、 empty=0; if(pe+2=ph) full=1; else full=0; end read: if(fifo_rd=0) /end of read begin ph=ph+1;wr=0;rd=0;state=stop;busy=0;full=0; if(ph+1=pe) empty=1; else empty=0; end endcaselpm_ram_dp1 ram0(fifo_in,pe,ph,wr,rd,fifo_out); /module lpm_ram_dp0(data,wraddress,rdaddress,wren,rden,q);endmodule仿真結(jié)果:1.4
12、FIFO模型設(shè)計之二n支持連續(xù)寫,連續(xù)讀。n啟動寫操作,外部單一時鐘節(jié)拍寫,實際完成需滯后一拍n啟動讀操作,外部單一時鐘節(jié)拍讀,但需等待一拍n讀、寫不可同時進行/Fifo of continuous operation /Size:255Bytesmodule fifo_c(clk,nreset,pe,ph,fifo_in,fifo_out,data, fifo_wr,fifo_rd,busy,empty,full,state,wr,rd);input clk,nreset,fifo_wr,fifo_rd;/input7:0 fifo_in;output1:0 state;output emp
13、ty,full,wr,rd,busy;/output7:0 fifo_out,pe,ph,data; reg1:0 state;reg7:0 fifo_out,data;reg wr,rd,empty,full,busy; /fifo write , read ,empty , fullreg7:0pe,ph; /fifo point:P_end,P_headparameter write=1,read=2,stop=0;always(posedge clk)if (nreset=0) begin pe=0;ph=0; endelse case(state) stop: if( fifo_wr
14、=1 & pe+8b00000001 !=ph) /write start begin rd=0;wr=1;state=write;busy=1;data=fifo_in; end else if(fifo_rd=1 & pe!=ph) /read start begin wr=0;rd=1;state=read;busy=1; end else begin wr=0;rd=0;state=stop;busy=0; if(ph=pe) empty=1; else if(pe+1=ph) full=1; else begin empty=0; full=0; end end wr
15、ite: begin pe=pe+ 8b00000001;data=fifo_in; if( fifo_wr=0) /end of write begin wr=0;rd=0;state=stop;busy=0; empty=0; if(pe+ 8b00000010 =ph) full=1; else full=0; end else /write continue if(pe+ 8b00000010 =ph) begin / buffer is full. not to write. full=1; wr=0;rd=0;state=stop; busy=0; empty=0; end els
16、e /write continue begin wr=1;rd=0; state=write; busy=1; empty=0; end endread: begin ph=ph+ 8b00000001; if(fifo_rd=0) /end of read begin wr=0;rd=0;state=stop;busy=0;full=0; if(ph+ 8b00000001 =pe) empty =1; else empty=0; end else /read continue if(ph+ 8b00000001 =pe) / empty begin wr=0;rd=0;state=stop
17、;busy=0;full=0; end else / not empty begin wr=0;rd=1;state=read;busy=1; end end endcaselpm_ram_dp1 ram0(data,pe,ph,wr,rd,clk,fifo_out); endmodule實驗1 FIFO設(shè)計與仿真驗證要求:緩沖大于100級數(shù)據(jù)寬度16位習(xí)題習(xí)題1設(shè)計一個產(chǎn)生設(shè)計一個產(chǎn)生0100100111的序列信號發(fā)生器。的序列信號發(fā)生器。習(xí)題習(xí)題2試以調(diào)用庫函數(shù)的方法設(shè)計一個容量為試以調(diào)用庫函數(shù)的方法設(shè)計一個容量為8K24bit的的RAM。其雙向數(shù)據(jù)線為。其雙向數(shù)據(jù)線為D 0:23,地址線
18、為,地址線為A0:12,寫,寫信號為信號為new (低電平有效)(低電平有效),讀信號為讀信號為nrd(低電平有效)。(低電平有效)。習(xí)題習(xí)題3 設(shè)計一個設(shè)計一個8位的加位的加/減計數(shù)器。時鐘信號為減計數(shù)器。時鐘信號為 clk,同,同步清步清0信號為信號為rst。 clk上升沿時刻,當(dāng)上升沿時刻,當(dāng)inc=1計數(shù)器加計數(shù)器加2,當(dāng),當(dāng)dec=1計數(shù)器減計數(shù)器減2,其它情況時計數(shù)器保持不變,其它情況時計數(shù)器保持不變。 習(xí)題習(xí)題4設(shè)計一個位寬為設(shè)計一個位寬為8位、深度為位、深度為8層的堆棧。層的堆棧。第二章 定時器/計數(shù)器接口電路設(shè)計目的:設(shè)計一個與INTEL8253兼容的定時器/計數(shù)器2.1定時
19、器/計數(shù)器接口電路的功能n3通道、6種工作方式n16位計數(shù)器(每個計數(shù)器可按二進制或十進制來計數(shù),時鐘脈沖下降沿使計數(shù)器進行減1操作 )計數(shù)器初值寄存器GATECLKiOUTi減1計數(shù)器16位計數(shù)通道結(jié)構(gòu):可編程可編程地址線地址線:A1A0端口地址端口地址 :A1A0= 0 0- CN0數(shù)據(jù)端口 0 1- CN1數(shù)據(jù)端口 1 0- CN2數(shù)據(jù)端口 1 1-控制端口數(shù)據(jù)線:D7-D0控制線:/we, /rd, /cs通道I/O:clk0 , out0, gate0 clk1 , out1, gate1 clk2 , out2, gate22.2 8253的內(nèi)部結(jié)構(gòu)和引腳特性數(shù)據(jù)總線緩沖器讀/寫控
20、制邏輯控制字寄存器計數(shù)器0計數(shù)器1計數(shù)器2CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2RDWRCSA0A1CSWRRDD7D0GNDVCCA01121324b) 引腳圖a) 內(nèi)部結(jié)構(gòu)圖CLK0GATE0OUT0A1CLK1GATE1OUT1GATE2OUT2CLK2D7D02.3 8253控制字格式 SC1SC2RW1RW2M2M1M0BCD00:計數(shù)器001:計數(shù)器110:計數(shù)器211:無意義00:鎖存計數(shù)值01:只讀寫低8位10:只讀寫高8位11:先讀寫低8位 后讀寫高8位000:方式0001:方式1X10:方式2X11:方式3100:方式4101:方式5
21、0:二進制計數(shù)1:十進制計數(shù)D7D6D5D4D3D2D1D0編程步驟:先寫控制字(到控制口)再寫計數(shù)器初值(到相應(yīng)的通道端口)2.4 工作方式與工作時序工作方式與工作時序 1方式方式0(單脈沖發(fā)生器)(單脈沖發(fā)生器)n計數(shù)器只計一遍??刂谱謱懭牒螅琌UT端為低;當(dāng)計數(shù)初值寫入后,在下一個CLK脈沖的下降沿將計數(shù)初值寄存器內(nèi)容裝入減1計數(shù)寄存器,然后計數(shù)器開始減1計數(shù),在計數(shù)期間,當(dāng)減1計數(shù)器回0之前,輸出端OUT維持低電平。n當(dāng)計數(shù)值回0時,OUT輸出端變?yōu)楦唠娖?,并保持到重新寫入新的控制字或新的計?shù)值為止??勺鳛橹袛嗾埱笮盘?。n在計數(shù)過程中,若GATE信號變?yōu)榈碗娖?,則在低電平期間暫停計數(shù),
22、減1計數(shù)寄存器值保持不變。 n在計數(shù)過程中,若重新寫入新的計數(shù)初值,則在下一個CLK脈沖的下降沿,減1計數(shù)寄存器以新的計數(shù)初值重新開始計數(shù)過程。 8253方式0三種情況的時序波形 CLKGATEOUT43210WRCLKGATEOUT43321CWN=40WRCLKGATEOUT43232CWN=4N=310WRCWN=4方式方式2(周期脈沖發(fā)生器)(周期脈沖發(fā)生器) 可產(chǎn)生周期性的負脈沖信號,負脈沖寬度為一個時鐘周期。寫入控制字后,OUT端變?yōu)楦唠娖剑鬐ATE為高電平,當(dāng)寫入計數(shù)初值后,在下一個CLK的下降沿將計數(shù)初值寄存器內(nèi)容裝入減1計數(shù)寄存器,并開始減1計數(shù)。當(dāng)減1計數(shù)寄存器的值為1時
23、,OUT端輸出低電平;減1計數(shù)寄存器回0時OUT端輸出高電平,并開始一個新的計數(shù)過程。在減1計數(shù)寄存器未減到1時,GATE信號由高變低,則停止計數(shù)。但當(dāng)GATE由低變高時,則重新將計數(shù)初值寄存器內(nèi)容裝入減1計數(shù)寄存器,并重新開始計數(shù)。GATE信號保持高電平,但在計數(shù)過程中重新寫入計數(shù)初值,則當(dāng)正在計數(shù)的一輪結(jié)束并輸出一個CLK周期的負脈沖后,將以新的初值進行計數(shù)。 8253方式2下的三種情況:WRCLKGATEOUT32132CWN=31WRCLKGATEOUT32213CWN=32WRCLKGATEOUT32154CWN=33N=512.5 設(shè)計與仿真設(shè)計與仿真 控制口編程狀態(tài)機:state
24、0=00-未編程或完畢 01-已寫控制字(等待輸入數(shù)據(jù)) 10-已寫1字節(jié)數(shù)據(jù)(等待輸入下一數(shù)據(jù))通道0方式0狀態(tài)機:cnt0_f=0-未啟動(未裝入計數(shù)初值寄存器內(nèi)容) 1-已裝入,作減1計數(shù) 2-已回0,不自動裝入通道0方式2狀態(tài)機:cnt0_f=0-未啟動或等待裝入計數(shù)初值寄存器內(nèi)容 1-已裝入,作減1計數(shù) 啟動標(biāo)志: start0_f=0, 不啟動 =1, 啟動(當(dāng)編程完畢)/timer/counter:8253module timer(out0,clk0,d,gate0,a0,a1,nwe,nrd,ncs,cnt0,cnt0_f,control0); input clk0,gate0
25、,a0,a1,nwe,nrd,ncs; inout 7:0 d; output out0; output 15:0 cnt0; output 1:0 cnt0_f; output 7:0 control0; reg 7:0 control0; reg 15:0 cnt0_b,cnt0; reg 1:0 state0; reg 1:0 cnt0_f; reg start0_f,out0; wire clock0;assign d=(!nrd & !ncs & !a0 & !a1)? cnt07:0:8bzzzzzzzz; /read low_byte of cnt0ass
26、ign d=(!nrd & !ncs & a0 & !a1)? cnt015:8:8bzzzzzzzz; /read high_byte of cnt0assign clock0=clk0 & start0_f & gate0;/8253 programalways (negedge start0_f or negedge clock0) if(start0_f=0) begin cnt0_f=0;out0=1; endelse begin case(control03:1) if( start0_f=1 ) /mode 0 /state=2o00 if
27、(cnt0_f=0 ) /load / start_f=1 begin cnt015:0=cnt0_b15:0;cnt0_f=1;out0=0; end else if( cnt0!=1 & cnt0_f=1) begin out0=0;cnt0=cnt0-1; end else begin out0=1;cnt0_f=2; end if( start0_f=1 ) /mode 2 state=2o00 if(cnt0_f=0 ) /load begin cnt0=cnt0_b;cnt0_f=1;out0=1; end else if( cnt0=2 & cnt0_f=1) b
28、egin out0=0;cnt0=cnt0-1;cnt0_f=0 ; end else cnt0=cnt0-1; default : cnt0_f=0 ; endcase endendmodule方式0仿真結(jié)果:方式2仿真結(jié)果:實驗二 定時器/計數(shù)器設(shè)計與仿真驗證作業(yè)1.設(shè)計一個同步計數(shù)式單穩(wěn)態(tài)觸發(fā)器。如下圖示,已知clk為10MHz,脈沖k觸發(fā)后,輸出q為100uS的脈沖。clkkq2.設(shè)計一個16bit移位寄存器(右移),設(shè)移位時鐘信號為clk。將RAM(256*16bit)中的數(shù)據(jù)不斷依次取出,移位輸出。3.試設(shè)計一個模塊,能輸出如下圖所示的波形。t(us)1231Vmodule gen
29、(clk,reset,wren,din,wraddr,out);input clk,reset,wren;input 15:0din;input 7:0wraddr;output out;reg7:0rdaddr;reg load;reg3:0 count;reg15:0q;wire rden,out;always (posedge clk)if (reset) begin count=0;load=1;rdaddr=0;endelse if (count=15) begin count=0;load=1;end else if (count=7) begin rdaddr=rdaddr+1;
30、 count=count+1;load=0;end else begin count=count+1;load=0;endalways (posedge clk)if(load) q=dout;else begin q1;q15=0;endlpm_ram_dp0 ram0(din,wraddr,rdaddr,wren,rden, dout);assign out=q0;assign rden=1;endmodule第三章 異步串行通信接口設(shè)計起始位D0D1D2D3D4D5D6D7停止位空閑狀態(tài)異步串行通信的數(shù)據(jù)幀結(jié)構(gòu)異步串行通信的數(shù)據(jù)幀結(jié)構(gòu):波特率波特率(baud rate)例例:空閑狀態(tài)起始
31、起始位位1 1位位數(shù)據(jù)數(shù)據(jù)7-87-8位位校驗校驗位位1 1位位停止停止位位1 1位位例例3-1:異步串行輸出接口異步串行輸出接口UART_TXdinwrcedbftxdresetclkdbf-data buffer fullmodule uart_tx(clk,din,nreset, wr,ce,dbf, txd);input clk,nreset ,wr,ce;/clk=0.694MHz/baud=0.694Mhz/12=57.6kHzinput 7:0din; output txd,dbf;reg7:0 data;reg9:0 shift;reg4:0 count,t;reg3:0 st
32、ate;reg 1:0 state0;reg dbf,tbr; / dbf-data buffer full.tbr-transmit buffer ready.例例3-1:assign txd=shift0;always(posedge clk or negedge nreset)if (nreset=0) state0=0;else case(state0) 0:if(wr=1 & ce=1) begin data=din;state0=1;end 1:if(wr=0 | ce=0) begin dbf=1;state0=2;end 2:if(tbr=1) begin dbf=0;
33、state0=0;end endcasealways(posedge clk or negedge nreset)if (nreset=0) begin state=0; shift=10b1;end elsecase(state)4b0000:if(t=11 & dbf=1) begin tbr=1; state=1;t=0; shift9=1; shift8:1=data7:0; shift0=0; /bit0:start bit end else if (t11) t=t+1;4b0001: if(t=11) /bit1:d0 begin shift1; shift9=1; st
34、ate=2;t=0; tbr=0; end else t=t+1;4b0010: if(t=11) /bit2:d1 begin shift1; shift9=1; state=3;t=0; end else t=t+1;4b0011: if(t=11) /bit3:d2 begin shift1; shift9=1; state=4;t=0; end else t=t+1; 4b0100: if(t=11) /bit4:d3 begin shift1; shift9=1; state=5;t=0; end else t=t+1; 4b0101: if(t=11) /bit5:d4 begin
35、 shift1; shift9=1; state=6;t=0; end else t=t+1;4b0110: if(t=11) /bit6:d5 begin shift1; shift9=1; state=7;t=0; end else t=t+1;4b0111: if(t=11) /bit7:d6 begin shift1; shift9=1; state=8;t=0; end else t=t+1;4b1000: if(t=11) /bit8:d7 begin shift1; shift9=1; state=9;t=0; end else t=t+1;4b1001: if(t=11) /b
36、it9:stop begin shift1;shift9=1; state=0;t=0; end else t=t+1;default : begin t=0; state=0;endendcaseendmodule異步串行輸出接口仿真異步串行輸出接口仿真AC75停止位起始位AC710075停止位起始位data例例3-2:異步串行輸入接口異步串行輸入接口UART_RXrdceerrorrxdclkrdcrdc-receive data completed單工異步串行輸入、輸出接口單工異步串行輸入、輸出接口UART_TXdinwrcedbftxdresetclkdataUART_RXrdceer
37、rorrxdclkrdcMPU1MPU 2雙工異步串行輸入輸出接口雙工異步串行輸入輸出接口UARTdinwrcedbftxdresetclkdataUARTrdceerrorrxdclkMPU1MPU 2txdrxderrorrdcrdcresetrddbfwr起始位D0D1D2D3D4D5D6D7停止位空閑狀態(tài)如何識別起始位?如何判別數(shù)據(jù)?如何判別停止位?module uart_rx(clk,rxd,rd,ce,data,s,t,error,rdc,nreset);input clk,rxd,nreset;/clk=0.694MHzinput rd,ce;output error,rdc;/
38、rdc-receive data completedoutput 7:0 data;output 3:0 s;output 4:0 t;reg 4:0 t;reg 3:0 s;reg 7:0 data0,data1;reg error,rdc;reg rdf;reg 7:0 data;/rdf-read data flagalways (ce or rd)if(ce & rd) =1 ) begin data= data1; rdf=1; endelse begin data=8hzz; rdf=0; end always (posedge clk) /baud=57.600khzif
39、(!nreset) begin data1 = 8h00; rdc = 0; s = 0; t = 0; data0 = 8h00; error = 0; endelse begin if (rdf=1)rdc=0; case(s) 0:if(rxd=1)begin s=1;t=0;end/ 1:if(rxd=0)begin s=2;t=t+1;end 2:if(t=6) begin if(rxd=0) begin s=3;t=0;error=0;end else begin s=1;t=0; end end else t=t+1; 3:if(t=11) begin data00=rxd;t=
40、0;s=4;end else t=t+1; 4:if(t=11) begin data01=rxd;t=0;s=5;end else t=t+1; 5:if(t=11) begin data02=rxd;t=0;s=6;end else t=t+1; 6:if(t=11) begin data03=rxd;t=0;s=7;end else t=t+1; 7:if(t=11) begin data04=rxd;t=0;s=8;end else t=t+1; 8:if(t=11) begin data05=rxd;t=0;s=9;end else t=t+1; 9:if(t=11) begin d
41、ata06=rxd;t=0;s=10;end else t=t+1; 10:if(t=11) begin data07=rxd;t=0;s=11;end else t=t+1; 11:if(t=11) if(rxd=1) begin t=0;s=0;data1=data0;error=0; rdc=1; end else begin error=1;t=0;s=0;end/frame error or overflow error else t=t+1; default:begin t=0;s=0;end endcase endendmodule 異步串行輸入接口仿真異步串行輸入接口仿真實驗3
42、 異步串行通信接口設(shè)計與仿真要求:1)設(shè)計異步串行通信接口發(fā)送模塊并仿真)設(shè)計異步串行通信接口發(fā)送模塊并仿真2)設(shè)計異步串行通信接口接收模塊并仿真)設(shè)計異步串行通信接口接收模塊并仿真3)設(shè)計頂層模塊,實現(xiàn)與)設(shè)計頂層模塊,實現(xiàn)與PC機通信機通信UART_TXdinwrcedbftxdresetclkdataUART_RXrdceerrorrxdclkrdcPCresetUARTDE2(RS232)(TTL)txdrxd(TTL)(RS232)MAX232參考程序module uart(CLOCK_50,UART_RXD,UART_TXD,LEDR,LEDG,KEY);input CLOCK_5
43、0;input 0:0KEY;input UART_RXD;output UART_TXD; output 0:0LEDR; output 1:0LEDG;wire 7:0 data_rx;wire nreset,error,rdc,dbf;assign nreset = KEY0; /resetassign LEDR0 = error;assign LEDG0 = rdc;assign LEDG1 = dbf;reg rd_rx,ce_rx;reg wr_tx,ce_tx;always (posedge clk)beginif(rdc = 1)begin ce_rx = 1; rd_rx =
44、 1; endelse begin ce_rx = 0; rd_rx = 0; end if(ce_rx = 1 & rd_rx = 1) begin wr_tx = 1;ce_tx = 1;endelse begin wr_tx = 0;ce_tx Import Assignment,打開對話框,調(diào)入引腳對應(yīng)文件DE2_pin_assignments_uart.txt即可。2)Assignments-pins3)鎖好引腳后由鎖好引腳后由Processing - Start compilation進行全編譯進行全編譯DE2_pin_assignments_uart.txtTo,Loca
45、tionKEY0,PIN_G26LEDR0,PIN_AE23LEDG0,PIN_AE22LEDG1,PIN_AF22CLOCK_50,PIN_N2UART_RXD,PIN_C25UART_TXD,PIN_B251)如果編譯沒有錯誤,準(zhǔn)備下載。如果編譯沒有錯誤,準(zhǔn)備下載。 由由Tools - Progammer2)硬件設(shè)置硬件設(shè)置:Currently selected hardware:usb 下載:3)彈出如下對話框,下載前做如下設(shè)置:彈出如下對話框,下載前做如下設(shè)置:n點擊點擊“Add File”,選擇,選擇uart.sof文件,文件,n設(shè)置設(shè)置Mode為為“JTAG”,點擊,點擊“Star
46、t”,開始下載,開始下載n在PC上運行”串口調(diào)試助手”n設(shè)定波特率為57600,無校驗,數(shù)據(jù)位8位,停止位1位n在發(fā)送區(qū)發(fā)字符,接收區(qū)能收到.與PC機通信:第4章 調(diào)制解調(diào)器設(shè)計 在數(shù)字通信系統(tǒng)中,一般將原始信號經(jīng)過量化編碼變成二進制碼流,稱為基帶信號。 數(shù)字基帶信號一般不適合于直接傳輸,如通過公共電話網(wǎng)絡(luò)傳輸數(shù)字信號時,由于電話網(wǎng)絡(luò)帶寬為3.4KHZ,因此數(shù)字信號不能直接在上面?zhèn)鬏?。此時可將數(shù)字信號進行調(diào)制后再進行傳輸。4.1 2FSK調(diào)制原理實現(xiàn)方法S2fsk(t)載波發(fā)生器1載波發(fā)生器22選1s(t)f1f2調(diào)制器f02選1f1Sin(w0t)Sin(w1t)DACClock(66MHz
47、)100.825MHz1.1MHz移位寄存器9696Tclk/8=12Tf096Tclk/6=16Tf1clk=6.6MHz基帶信號n解調(diào)原理(非相干解調(diào)法,由鑒相器實現(xiàn))解調(diào)器DD11&clrclrQQfifrADC10: cap=cap+101: cap=cap-1Clock(66MHz)700.942MHz抽樣判決module TOP( clock, /輸入時鐘66MHZ reset, /異步復(fù)位信號 高電平有效 d_out, d0, Dout,data,cap,qi,qr);input clock;input reset;output 7:0d_out,data;output
48、d0,qi,qr;output Dout; output 5:0cap;reg 7:0data;reg3:0 cnt0;assign clk=cnt03;/6.6MHZalways (posedge clock ) if(cnt0=9) cnt0=0; else cnt0=cnt0+1b1;always (posedge clk ) if(reset) data=8b1010_1100; wire busy;modulation fsk_mo( .reset(reset), .clk(clk), .data(data), .busy(busy), .d_out(d_out), .d0(d0)
49、);demodulation fsk_de( .reset(reset), .clock(clock), .AD_data(d_out), .Dout(Dout), .cap(cap),.qi(qi),.qr(qr) );endmodule module modulation(reset,clk,data,busy,d_out,d0);input reset,clk;input 7:0data;output 7:0d_out;/input of dac output busy,d0;reg7:0 d_out;reg7:0 data_buf;reg3:0 stat0,stat1;reg11:0c
50、nt;reg busy;reg d0;always(posedge clk) d0=data_buf0; always(posedge clk) if (reset=1) cnt=0;else case(cnt)95:begin data_buf1;cnt=cnt+1b1;busy=0;end191:begin data_buf1;cnt=cnt+1b1;end287:begin data_buf1;cnt=cnt+1b1;end383:begin data_buf1;cnt=cnt+1b1;end479:begin data_buf1;cnt=cnt+1b1;end575:begin dat
51、a_buf1;cnt=cnt+1b1;end672:begin data_buf1;cnt=cnt+1b1;busy=1;end768:begin data_buf=data;cnt=0;enddefault: cnt=cnt+1b1; endcasealways(posedge clk)if (data_buf0=0) case(stat0)0:begin d_out=128;stat0=stat0+1b1;end1:begin d_out=128+71;stat0=stat0+1b1;end2:begin d_out=128+100;stat0=stat0+1b1;end3:begin d
52、_out=128+71;stat0=stat0+1b1;end4:begin d_out=128;stat0=stat0+1b1;end5:begin d_out=128-71;stat0=stat0+1b1;end6:begin d_out=128-100;stat0=stat0+1b1;end7:begin d_out=128-71;stat0=0;stat1=0;enddefault begin d_out=128;stat0=1b0;end endcaseelse case(stat1)0:begin d_out=128;stat1=stat1+1b1;end1:begin d_out
53、=128+82;stat1=stat1+1b1;end2:begin d_out=128+82;stat1=stat1+1b1;end3:begin d_out=128;stat1=stat1+1b1;end4:begin d_out=128-82;stat1=stat1+1b1;end5:begin d_out=128-82;stat1=0;stat0=0;enddefault: begin d_out=128;stat1138)fi=1; /fi is input of demodulation else if(AD_data118) fi=0;endalways (posedge clo
54、ck)/begin if(count=69) /fr=66MHz/70=0.942MHz, f0=6.6MHz/8=0.825MHz,f1=6.6MHz/6=1.1MHzcount=0;else count=count+1;if(count35)fr=35)fr=1;endalways (posedge fr or posedge clr) /qr_dffif(clr=1) qr=0;else qr=1;always (posedge fi or posedge clr) /qi_dffif(clr=1) qi=0;else qi=1;always (posedge clock or pose
55、dge reset) if(reset) cap20)cap=cap-1;else if(qr=0 & qi=1 & cap40)cap=30)Dout=1;else if(cap30)Dout=0;endmodule4.2 2PSK調(diào)制器實現(xiàn)方案:S(t)S2psk(t)0例:f02選1f1Sin( t)Sin(t+)DACClock(66MHz)16 = 2 4.125 /16(MHz)Clk4.125MHzfout移位寄存器基帶信號16LOADDATA解調(diào)器實現(xiàn)方案:2PSKBPFLPF抽樣判決定時脈沖COS wcty(t) s(t) x(t) s(t) ADCABSfi
56、p0=p1;p1=p2; p14=p15;if (q=1)p15= AD;elsep15= - AD;QDAD_datapq(1,-1)p110LPF1D_outAD*qD_out1110AD轉(zhuǎn)換為補碼(偏移碼)VCO2LPF鑒相器PLLAD_datamodule psk_1( clock, /輸入時鐘66MHZ reset, /異步復(fù)位信號 高電平有效 d_out, d0, Dout,data,cap,q,p15,d,AD);input clock;input reset;output 7:0d_out,data;output d0,q,d;output 11:0p15;output 7:0
57、AD; output Dout; output 11:0cap;reg 7:0data;reg 3:0cnt;wire busy;assign clk=cnt3;always(posedge clock)cnt=cnt+1;always (posedge clk ) if(reset) data=8b1010_1101; modulation mo( .reset(reset), .clk(clk), .data(data), .busy(busy), .d_out(d_out), .d0(d0) );demodulation de( .reset(reset), .clock(clock),
58、 .AD_data(d_out), .Dout(Dout), .cap(cap),.q(q),.p15(p15),.d(d),.AD(AD) );endmodule module modulation(reset,clk,data,busy,d_out,d0);input reset,clk;/clk-4.125MHzinput 7:0data;output 7:0d_out;/input of dac output busy,d0;reg7:0 d_out;reg7:0 data_buf;reg3:0 stat0,stat1;reg busy;reg d0;reg6:0cnt;/16*8al
59、ways(posedge clk) d0=data_buf0; / mod 128always(posedge clk) if (reset=1) begin cnt=0;stat0=0;stat1=0;endelsebegin case(cnt)15:begin data_buf1;cnt=cnt+1b1;busy=0;end 31:begin data_buf1;cnt=cnt+1b1;end47:begin data_buf1;cnt=cnt+1b1;end63:begin data_buf1;cnt=cnt+1b1;end79:begin data_buf1;cnt=cnt+1b1;e
60、nd95:begin data_buf1;cnt=cnt+1b1;end111:begin data_buf1;cnt=cnt+1b1;busy=1;end127:begin data_buf=data;cnt=0;enddefault: cnt=cnt+1b1; endcaseif (data_buf0=1) case(stat0)0:begin d_out=128;stat0=stat0+1b1;end1:begin d_out=128+38;stat0=stat0+1b1;end2:begin d_out=128+71;stat0=stat0+1b1;end3:begin d_out=128+92;stat0=stat0+1b1;end4:begin d_out=128+100;stat0=stat0+1b1;end5:begin d_out=128
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版節(jié)能環(huán)保設(shè)施運營管理合同范本3篇
- 二零二五年汽車租賃公司兼職司機合同3篇
- 二零二五版家居用品寄售代理合同范本3篇
- 二零二五版草原生態(tài)補償機制承包合同3篇
- 二零二五版插畫師合作合同范本-漫畫創(chuàng)作合作與版權(quán)歸屬協(xié)議3篇
- 二零二五版建筑工程施工企業(yè)施工許可證注銷合同3篇
- 二零二五版安徽農(nóng)民工就業(yè)跟蹤服務(wù)合同范本3篇
- 2025版塊石石材礦山投資合作合同3篇
- 基于2025年度行業(yè)標(biāo)準(zhǔn)的招投標(biāo)實習(xí)合同3篇
- 二零二五年金融創(chuàng)新抵押借款合同范本分享3篇
- 蔣詩萌小品《誰殺死了周日》臺詞完整版
- TB 10010-2008 鐵路給水排水設(shè)計規(guī)范
- 黑色素的合成與美白產(chǎn)品的研究進展
- 建筑史智慧樹知到期末考試答案2024年
- 金蓉顆粒-臨床用藥解讀
- 社區(qū)健康服務(wù)與管理教案
- 2023-2024年家政服務(wù)員職業(yè)技能培訓(xùn)考試題庫(含答案)
- 2023年(中級)電工職業(yè)技能鑒定考試題庫(必刷500題)
- 藏歷新年文化活動的工作方案
- 果酒釀造完整
- 第4章-理想氣體的熱力過程
評論
0/150
提交評論