《Verilog HDL语言学习教程.pptx》由会员分享,可在线阅读,更多相关《Verilog HDL语言学习教程.pptx(234页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本课程主要内容数字系统实例:FIFO异步串行通信接口调制解调器I2C接口的EEPROM读写器CISCCPURISCCPU第1页/共234页第2页/共234页例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复习第3页/共234页例2:带有异步清零端的同步4位二进制加法计数器module ncounter(rst,c
2、lk,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同步清零?第4页/共234页例3:分频器的设计module nfrequency(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)/可以实现16分频q=0;elseq=q+1;endmodu
3、le同步清零?其它分频系数?第5页/共234页例4:序列检测器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)s=1;else s=0;endmodule第6页/共234页例5:设计一个容量为1kB的RAM。module memory(d,a,we,rd);inout7:0 d;input9:0 addr;input we,rd;wire7:0 q;assign d=rd
4、?q:8hzz;lpm_ram_dp0 ram0(d,a,a,we,rd,q);endmodule第7页/共234页1.以结构描述方式实现下列逻辑:Y=ABC+DE+CFG2.试设计一个具有使能端ncs的2-4译码器。3.中断请求有效电平为高电平,中断请求输入线INTR0INTR15中INTR15优先权最高。试设计一个中断优先权编码器。当有中断请求时,INT=1,同时输出中断请求输入线的编码V;否则INT=0,V的输出任意。4.试设计一个4位加减运算器,输入为A、B、CIN、M,输出为OUT和COUT。当M=0时执行加法运算,M=1时,执行减法运算。5.试设计一个14分频器,要求占空比1:1。
5、6.试设计一个具有三态输出缓冲的8位数据寄存器。7.试设计一个具有清0和置数功能的8位二进制加1计数器。8.设计一个8位的加/减计数器。时钟信号为 clk,同步清0信号为rst。clk上升沿时刻,当inc=1计数器加2,当dec=1计数器减1,其它情况时计数器保持不变。9.设计一个16位移位寄存器。10.设计一个16位双向移位寄存器,当d=0时右移,d=1时左移。11.设计一个产生0100100111的序列信号发生器。第8页/共234页12.试以调用库函数的方法设计一个容量为8K24bit的RAM。其双向数据线为D 0:23,地址线为A0:12,写信号为new(低电平有效),读信号为nrd(低
6、电平有效)。13.设计一个位宽为8位、深度为8层的堆栈。14.试按下图设计VerilogHDL模型。s0s1s2s3s411/00?/010/101/000/11?/01?/000/001/100/01?/01?/010/100/001/1?1/0第9页/共234页第一章 先进先出数据缓冲器设计1.1 FIFO工作原理先进先出数据管理 ph-头指针(指向第一个数据)pe-尾指针(指向第一个空单元)判缓冲器空条件:当pe=ph-空判缓冲器满条件:当pe+1=ph-满第10页/共234页clknresetfifo_infifo_outfifo_wrfifo_rdbusyemptyfullFIFO第
7、11页/共234页clknresetfifo_infifo_outfifo_wrfifo_rdbusyemptyfullFIFOfifo_infifo_outrdwrphpe,qrdenwrenwraddressdatardaddressRAM第12页/共234页1.2状态转换图采用同步时序状态机:3个状态stopwritereadfifo_rd=1/rd=1fifo_rd=0/rd=0fifo_wr=1/wr=1fifo_wr=0/wr=0n写操作-需要2个clk完成n读操作-需要2个clk完成第13页/共234页1.3FIFO模型设计之一/FIFO/Size:255Bytesmodulef
8、ifo(clk,nreset,pe,ph,fifo_in,fifo_out,fifo_wr,fifo_rd,busy,empty,full,state,wr,rd);inputclk,nreset,fifo_wr,fifo_rd;/input7:0fifo_in;output1:0state;outputempty,full,wr,rd,busy;/output7:0fifo_out,pe,ph;reg1:0state;reg7:0fifo_out;regwr,rd,empty,full;/fifowrite,read,empty,fullreg7:0pe,ph;/fifopoint:P_en
9、d,P_headparameterwrite=1,read=2,stop=0;第14页/共234页always(posedgeclk)if(nreset=0)beginpe=0;ph=0;endelsecase(state)stop:if(fifo_wr=1&pe+1!=ph)/writestartbeginrd=0;wr=1;state=write;busy=1;endelseif(fifo_rd=1&pe!=ph)/readstartbeginwr=0;rd=1;state=read;busy=1;endelsebeginwr=0;rd=0;state=stop;busy=0;if(ph=
10、pe)empty=1;elseif(pe+1=ph)full=1;elsebeginempty=0;full=0;endend第15页/共234页write:if(fifo_wr=0)/endofwritebeginpe=pe+1;wr=0;rd=0;state=stop;busy=0;empty=0;if(pe+2=ph)full=1;elsefull=0;endread:if(fifo_rd=0)/endofreadbeginph=ph+1;wr=0;rd=0;state=stop;busy=0;full=0;if(ph+1=pe)empty=1;elseempty=0;endendcas
11、elpm_ram_dp1ram0(fifo_in,pe,ph,wr,rd,fifo_out);/modulelpm_ram_dp0(data,wraddress,rdaddress,wren,rden,q);endmodule第16页/共234页仿真结果:第17页/共234页1.4 FIFO模型设计之二n支持连续写,连续读。n启动写操作,外部单一时钟节拍写,实际完成需滞后一拍n启动读操作,外部单一时钟节拍读,但需等待一拍n读、写不可同时进行第18页/共234页/Fifo of continuous operation /Size:255Bytesmodule fifo_c(clk,nreset
12、,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 empty,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;
13、/fifo point:P_end,P_headparameter write=1,read=2,stop=0;第19页/共234页always(posedge clk)if(nreset=0)begin pe=0;ph=0;endelse case(state)stop:if(fifo_wr=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;bus
14、y=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 第20页/共234页write: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 con
15、tinue if(pe+8b00000010=ph)begin /buffer is full.not to write.full=1;wr=0;rd=0;state=stop;busy=0;empty=0;end else /write continue begin wr=1;rd=0;state=write;busy=1;empty=0;end end第21页/共234页read: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
16、=pe)empty=1;else empty=0;end else /read continue if(ph+8b00000001=pe)/empty begin wr=0;rd=0;state=stop;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第22页/共234页实验1FIFO设计与仿真验证要求:缓冲大于100级数据宽度16位第23页/共234页习题1设计一
17、个产生0100100111的序列信号发生器。习题2试以调用库函数的方法设计一个容量为8K24bit的RAM。其双向数据线为D 0:23,地址线为A0:12,写信号为new(低电平有效),读信号为nrd(低电平有效)。习题3 设计一个8位的加/减计数器。时钟信号为 clk,同步清0信号为rst。clk上升沿时刻,当inc=1计数器加2,当dec=1计数器减2,其它情况时计数器保持不变。习题4设计一个位宽为8位、深度为8层的堆栈。第24页/共234页第二章定时器/计数器接口电路设计目的:设计一个与INTEL8253兼容的定时器/计数器2.1定时器/计数器接口电路的功能3通道、6种工作方式16位计数
18、器(每个计数器可按二进制或十进制来计数,时钟脉冲下降沿使计数器进行减1操作)计数器初值寄存器GATECLKiOUTi减1计数器16位计数通道结构:第25页/共234页可编程可编程地址线地址线:A1A0端口地址端口地址:A1A0=0 0-CN0数据端口 0 1-CN1数据端口 1 0-CN2数据端口 1 1-控制端口数据线:D7-D0控制线:/we,/rd,/cs通道I/O:clk0,out0,gate0 clk1,out1,gate1 clk2,out2,gate2第26页/共234页2.2 82532.2 8253的内部结构和引脚特性的内部结构和引脚特性第27页/共234页2.3 8253控
19、制字格式 第28页/共234页编程步骤:先写控制字(到控制口)再写计数器初值(到相应的通道端口)第29页/共234页2.4工作方式与工作时序1方式0(单脉冲发生器)计数器只计一遍。控制字写入后,OUT端为低;当计数初值写入后,在下一个CLK脉冲的下降沿将计数初值寄存器内容装入减1计数寄存器,然后计数器开始减1计数,在计数期间,当减1计数器回0之前,输出端OUT维持低电平。当计数值回0时,OUT输出端变为高电平,并保持到重新写入新的控制字或新的计数值为止。可作为中断请求信号。在计数过程中,若GATE信号变为低电平,则在低电平期间暂停计数,减1计数寄存器值保持不变。在计数过程中,若重新写入新的计数
20、初值,则在下一个CLK脉冲的下降沿,减1计数寄存器以新的计数初值重新开始计数过程。第30页/共234页82538253方式方式0 0三种情况的时序波三种情况的时序波形形第31页/共234页方式2(周期脉冲发生器)可产生周期性的负脉冲信号,负脉冲宽度为一个时钟周期。写入控制字后,OUT端变为高电平,若GATE为高电平,当写入计数初值后,在下一个CLK的下降沿将计数初值寄存器内容装入减1计数寄存器,并开始减1计数。当减1计数寄存器的值为1时,OUT端输出低电平;减1计数寄存器回0时OUT端输出高电平,并开始一个新的计数过程。在减1计数寄存器未减到1时,GATE信号由高变低,则停止计数。但当GATE
21、由低变高时,则重新将计数初值寄存器内容装入减1计数寄存器,并重新开始计数。GATE信号保持高电平,但在计数过程中重新写入计数初值,则当正在计数的一轮结束并输出一个CLK周期的负脉冲后,将以新的初值进行计数。第32页/共234页8253方式2下的三种情况:第33页/共234页2.5设计与仿真控制口编程状态机:state0=00-未编程或完毕01-已写控制字(等待输入数据)10-已写1字节数据(等待输入下一数据)第34页/共234页通道0方式0状态机:cnt0_f=0-未启动(未装入计数初值寄存器内容)1-已装入,作减1计数 2-已回0,不自动装入通道0方式2状态机:cnt0_f=0-未启动或等待
22、装入计数初值寄存器内容 1-已装入,作减1计数 启动标志:启动标志:start0_f=0,不启动不启动=1,启动(当启动(当编程完毕)编程完毕)第35页/共234页/timer/counter:8253moduletimer(out0,clk0,d,gate0,a0,a1,nwe,nrd,ncs,cnt0,cnt0_f,control0);inputclk0,gate0,a0,a1,nwe,nrd,ncs;inout7:0d;outputout0;output15:0cnt0;output1:0cnt0_f;output7:0control0;reg7:0control0;reg15:0cnt
23、0_b,cnt0;reg1:0state0;reg1:0cnt0_f;regstart0_f,out0;wireclock0;第36页/共234页assignd=(!nrd&!ncs&!a0&!a1)?cnt07:0:8bzzzzzzzz;/readlow_byteofcnt0assignd=(!nrd&!ncs&a0&!a1)?cnt015:8:8bzzzzzzzz;/readhigh_byteofcnt0assignclock0=clk0&start0_f&gate0;第37页/共234页always(posedgenwe)always(posedgenwe)/8253programcas
24、e(state0)case(state0)2b00:2b00:if(ncs=0&a0=1&a1=1&d7:6=2b00)if(ncs=0&a0=1&a1=1&d7:6=2b00)begincontrol0=d;start0_f=0;state0=2b01;endbegincontrol0=d;start0_f=0;state0=2b01;end2b01:2b01:if(control05:4=2b11&a0=0&a1=0)if(control05:4=2b11&a0=0&a1=0)beginstate0=2b10;cnt0_b7:0=d;endbeginstate0=2b10;cnt0_b7:
25、0=d;endelseif(control05:4=2b01&a0=0&a1=0)elseif(control05:4=2b01&a0=0&a1=0)beginbeginstate0=2b00;start0_f=1;cnt0_b7:0=d;endstate0=2b00;start0_f=1;cnt0_b7:0=d;endelseif(control05:4=2b10&a0=0&a1=0)elseif(control05:4=2b10&a0=0&a1=0)beginbeginstate0=2b00;start0_f=1;cnt0_b15:8=d;endstate0=2b00;start0_f=1
26、;cnt0_b15:8=d;end2b10:2b10:if(control05:4=2b11&a0=0&a1=0)if(control05:4=2b11&a0=0&a1=0)beginbeginstate0=2b00;start0_f=1;cnt0_b15:8=d;endstate0=2b00;start0_f=1;cnt0_b15:8=d;endendcaseendcase第38页/共234页always(negedgestart0_fornegedgeclock0)if(start0_f=0)begincnt0_f=0;out0=1;endelsebegincase(control03:1
27、)2b000:2b000:if(start0_f=1)/mode0/state=2o00if(cnt0_f=0)/load/start_f=1begincnt015:0=cnt0_b15:0;cnt0_f=1;out0=0;endelseif(cnt0!=1&cnt0_f=1)beginout0=0;cnt0=cnt0-1;endelsebeginout0=1;cnt0_f=2;end第39页/共234页2b010:2b010:if(start0_f=1)/mode2state=2o00beginbeginif(cnt0_f=0)/loadbegincnt0=cnt0_b;cnt0_f=1;o
28、ut0=1;endelseif(cnt0=2&cnt0_f=1)beginout0=0;cnt0=cnt0-1;cnt0_f=0;endelsecnt0=cnt0-1;endenddefault:cnt0_f=0;endcaseendendmodule第40页/共234页方式0仿真结果:第41页/共234页方式2仿真结果:第42页/共234页实验二定时器/计数器设计与仿真验证第43页/共234页作业1.设计一个同步计数式单稳态触发器。如下图示,已知clk为10MHz,脉冲k触发后,输出q为100uS的脉冲。clkkq第44页/共234页2.设计一个16bit移位寄存器(右移),设移位时钟信号为
29、clk。将RAM(256*16bit)中的数据不断依次取出,移位输出。3.试设计一个模块,能输出如下图所示的波形。t(us)1231V第45页/共234页modulegen(clk,reset,wren,din,wraddr,out);inputclk,reset,wren;input15:0din;input7:0wraddr;outputout;reg7:0rdaddr;regload;reg3:0count;reg15:0q;wirerden,out;第46页/共234页always(posedge clk)if(reset)begin count=0;load=1;rdaddr=0;e
30、ndelse if(count=15)begin count=0;load=1;end else if(count=7)begin rdaddr=rdaddr+1;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第47页/共234页第三章
31、异步串行通信接口设计起始位D0D1D2D3D4D5D6D7停止位空闲状态异步串行通信的数据帧结构:波特率(baud rate)例:空闲状态起始起始位位1 1位位数据数据7-87-8位位校验校验位位1 1位位停止停止位位1 1位位第48页/共234页例3-1:异步串行输出接口UART_TXdinwrcedbftxdresetclkdbf-data buffer full第49页/共234页moduleuart_tx(clk,din,nreset,wr,ce,dbf,txd);inputclk,nreset,wr,ce;/clk=0.694MHz/baud=0.694Mhz/12=57.6kHzi
32、nput7:0din;outputtxd,dbf;reg7:0data;reg9:0shift;reg4:0count,t;reg3:0state;reg1:0state0;regdbf,tbr;/dbf-databufferfull.tbr-transmitbufferready.例3-1:第50页/共234页assigntxd=shift0;always(posedgeclkornegedgenreset)if(nreset=0)state0=0;elsecase(state0)0:if(wr=1&ce=1)begindata=din;state0=1;end1:if(wr=0|ce=0)
33、begindbf=1;state0=2;end2:if(tbr=1)begindbf=0;state0=0;endendcase第51页/共234页always(posedgeclkornegedgenreset)if(nreset=0)beginstate=0;shift=10b1;endelsecase(state)4b0000:if(t=11&dbf=1)begintbr=1;state=1;t=0;shift9=1;shift8:1=data7:0;shift0=0;/bit0:startbitendelseif(t11)t=t+1;4b0001:if(t=11)/bit1:d0beg
34、inshift1;shift9=1;state=2;t=0;tbr=0;endelset=t+1;4b0010:if(t=11)/bit2:d1beginshift1;shift9=1;state=3;t=0;endelset=t+1;4b0011:if(t=11)/bit3:d2beginshift1;shift9=1;state=4;t=0;endelset=t+1;第52页/共234页4b0100:if(t=11)/bit4:d3beginshift1;shift9=1;state=5;t=0;endelset=t+1;4b0101:if(t=11)/bit5:d4beginshift1
35、;shift9=1;state=6;t=0;endelset=t+1;4b0110:if(t=11)/bit6:d5beginshift1;shift9=1;state=7;t=0;endelset=t+1;4b0111:if(t=11)/bit7:d6beginshift1;shift9=1;state=8;t=0;endelset=t+1;4b1000:if(t=11)/bit8:d7beginshift1;shift9=1;state=9;t=0;endelset=t+1;4b1001:if(t=11)/bit9:stopbeginshift1;shift9=1;state=0;t=0;
36、endelset=t+1;default:begint=0;state=0;endendcaseendmodule第53页/共234页异步串行输出接口仿真AC75停止位起始位第54页/共234页AC710075停止位起始位第55页/共234页data例3-2:异步串行输入接口UART_RXrdceerrorrxdclkrdcrdc-receive data completed第56页/共234页单工异步串行输入、输出接口UART_TXdinwrcedbftxdresetclkdataUART_RXrdceerrorrxdclkrdcMPU1MPU 2第57页/共234页双工异步串行输入输出接口
37、UARTdinwrcedbftxdresetclkdataUARTrdceerrorrxdclkMPU1MPU 2txdrxderrorrdcrdcresetrddbfwr第58页/共234页起始位D0D1D2D3D4D5D6D7停止位空闲状态如何识别起始位?如何判别数据?如何判别停止位?第59页/共234页moduleuart_rx(clk,rxd,rd,ce,data,s,t,error,rdc,nreset);inputclk,rxd,nreset;/clk=0.694MHzinputrd,ce;outputerror,rdc;/rdc-receivedatacompletedoutpu
38、t7:0data;output3:0s;output4:0t;reg4:0t;reg3:0s;reg7:0data0,data1;regerror,rdc;regrdf;reg7:0data;/rdf-readdataflag例例3-2:3-2:第60页/共234页always(ceorrd)if(ce&rd)=1)begindata=data1;rdf=1;endelsebegindata=8hzz;rdf=0;end第61页/共234页always(posedgeclk)/baud=57.600khzif(!nreset)begindata1=8h00;rdc=0;s=0;t=0;data
39、0=8h00;error=0;endelsebeginif(rdf=1)rdc=0;case(s)0:if(rxd=1)begins=1;t=0;end/1:if(rxd=0)begins=2;t=t+1;end2:if(t=6)beginif(rxd=0)begins=3;t=0;error=0;endelsebegins=1;t=0;endendelset=t+1;第62页/共234页3:if(t=11)begindata00=rxd;t=0;s=4;endelset=t+1;4:if(t=11)begindata01=rxd;t=0;s=5;endelset=t+1;5:if(t=11)
40、begindata02=rxd;t=0;s=6;endelset=t+1;6:if(t=11)begindata03=rxd;t=0;s=7;endelset=t+1;7:if(t=11)begindata04=rxd;t=0;s=8;endelset=t+1;8:if(t=11)begindata05=rxd;t=0;s=9;endelset=t+1;9:if(t=11)begindata06=rxd;t=0;s=10;endelset=t+1;10:if(t=11)begindata07=rxd;t=0;s=11;endelset=t+1;11:if(t=11)if(rxd=1)begin
41、t=0;s=0;data1=data0;error=0;rdc=1;endelsebeginerror=1;t=0;s=0;end/frameerrororoverflowerrorelset=t+1;default:begint=0;s=0;endendcaseendendmodule第63页/共234页异步串行输入接口仿真第64页/共234页实验3异步串行通信接口设计与仿真要求:1)设计异步串行通信接口发送模块并仿真2)设计异步串行通信接口接收模块并仿真3)设计顶层模块,实现与PC机通信第65页/共234页UART_TXdinwrcedbftxdresetclkdataUART_RXrdc
42、eerrorrxdclkrdcPCresetUARTDE2(RS232)(TTL)txdrxd(TTL)(RS232)MAX232第66页/共234页参考程序moduleuart(CLOCK_50,UART_RXD,UART_TXD,LEDR,LEDG,KEY);inputCLOCK_50;input0:0KEY;inputUART_RXD;outputUART_TXD;output0:0LEDR;output1:0LEDG;wire7:0data_rx;wirenreset,error,rdc,dbf;assignnreset=KEY0;/resetassignLEDR0=error;ass
43、ignLEDG0=rdc;assignLEDG1=dbf;regrd_rx,ce_rx;regwr_tx,ce_tx;always(posedgeclk)beginif(rdc=1)begince_rx=1;rd_rx=1;endelsebegince_rx=0;rd_rx=0;endif(ce_rx=1&rd_rx=1)beginwr_tx=1;ce_tx=1;endelsebeginwr_tx=0;ce_txImport Assignment,打开对话框,调入引脚对应文件DE2_pin_assignments_uart.txt即可。2)Assignments-pins3)锁好引脚后由Pro
44、cessing-Start compilation进行全编译第75页/共234页DE2_pin_assignments_uart.txtTo,LocationKEY0,PIN_G26LEDR0,PIN_AE23LEDG0,PIN_AE22LEDG1,PIN_AF22CLOCK_50,PIN_N2UART_RXD,PIN_C25UART_TXD,PIN_B25第76页/共234页1)如果编译没有错误,准备下载。由Tools-Progammer2)硬件设置:Currently selected hardware:usb 下载:第77页/共234页3)弹出如下对话框,下载前做如下设置:点击“AddF
45、ile”,选择uart.sof文件,设置Mode为“JTAG”,点击“Start”,开始下载第78页/共234页在PC上运行”串口调试助手”设定波特率为57600,无校验,数据位8位,停止位1位在发送区发字符,接收区能收到.与PC机通信:第79页/共234页第4章调制解调器设计 在数字通信系统中,一般将原始信号经过量化编码变成二进制码流,称为基带信号。数字基带信号一般不适合于直接传输,如通过公共电话网络传输数字信号时,由于电话网络带宽为3.4KHZ,因此数字信号不能直接在上面传输。此时可将数字信号进行调制后再进行传输。第80页/共234页4.12FSK调制原理第81页/共234页实现方法S2f
46、sk(t)载波发生器1载波发生器22选1s(t)f1f2第82页/共234页调制器f02选1f1Sin(w0t)Sin(w1t)DACClock(66MHz)100.825MHz1.1MHz移位寄存器9696Tclk/8=12Tf096Tclk/6=16Tf1clk=6.6MHz基带信号第83页/共234页n解调原理(非相干解调法,由鉴相器实现)第84页/共234页解调器DD11&clrclrQQfifrADC10:cap=cap+101:cap=cap-1Clock(66MHz)700.942MHz抽样判决第85页/共234页moduleTOP(clock,/输入时钟66MHZreset,/
47、异步复位信号高电平有效d_out,d0,Dout,data,cap,qi,qr);inputclock;inputreset;output7:0d_out,data;outputd0,qi,qr;outputDout;output5:0cap;reg7:0data;reg3:0cnt0;assignclk=cnt03;/6.6MHZalways(posedgeclock)if(cnt0=9)cnt0=0;elsecnt0=cnt0+1b1;第86页/共234页always(posedgeclk)if(reset)data=8b1010_1100;wirebusy;modulationfsk_m
48、o(.reset(reset),.clk(clk),.data(data),.busy(busy),.d_out(d_out),.d0(d0);demodulationfsk_de(.reset(reset),.clock(clock),.AD_data(d_out),.Dout(Dout),.cap(cap),.qi(qi),.qr(qr);endmodule第87页/共234页modulemodulation(reset,clk,data,busy,d_out,d0);inputreset,clk;input7:0data;output7:0d_out;/inputofdacoutputb
49、usy,d0;reg7:0d_out;reg7:0data_buf;reg3:0stat0,stat1;reg11:0cnt;regbusy;regd0;always(posedgeclk)d0=data_buf0;always(posedgeclk)if(reset=1)cnt=0;elsecase(cnt)95:begindata_buf1;cnt=cnt+1b1;busy=0;end191:begindata_buf1;cnt=cnt+1b1;end287:begindata_buf1;cnt=cnt+1b1;end383:begindata_buf1;cnt=cnt+1b1;end47
50、9:begindata_buf1;cnt=cnt+1b1;end575:begindata_buf1;cnt=cnt+1b1;end672:begindata_buf1;cnt=cnt+1b1;busy=1;end768:begindata_buf=data;cnt=0;enddefault:cnt=cnt+1b1;endcase第88页/共234页always(posedgeclk)if(data_buf0=0)case(stat0)0:begind_out=128;stat0=stat0+1b1;end1:begind_out=128+71;stat0=stat0+1b1;end2:beg