全数字锁相环的verilog源代码,仿真已通过moduledpll(reset,clk,signal_in,signal_out,syn);parameterpara_K=4;parameterpara_N=16;inputreset;inputclk;inputsignal_in;outputsignal_out;outputsyn;regsignal_out;regdpout;regdelclk;regaddclk;regadd_del_clkout;reg[7:0]up_down_cnt;reg[2:0]cnt8;reg[8:0]cnt_N;regsyn;regdpout_delay;reg[8:0]cnt_dpout_high;reg[8:0]cnt_dpout_low;/******phasedetector*****/always@(signal_inorsignal_out)begindpout=signal_in^signal_out;end/******synchronizationestablishdetector*****/always@(posedgeclkornegedgereset)beginif(!reset)dpout_delay='b0;elsedpout_delay=dpout;endalways@(posedgeclkornegedgereset)beginif(!reset)begincnt_dpout_high='b0;cnt_dpout_low='b0;endelseif(dpout)if(dpout_delay==0)cnt_dpout_high='b0;elseif(cnt_dpout_high==8'b11111111)cnt_dpout_high='b0;elsecnt_dpout_high=cnt_dpout_high+1;elseif(!dpout)if(dpout_delay==1)cnt_dpout_low='b0;elseif(cnt_dpout_low==8'b11111111)cnt_dpout_low='b0;elsecnt_dpout_low=cnt_dpout_low+1;endalways@(posedgeclkornegedgereset)beginif(!reset)syn='b0;elseif((dpout&&!dpout_delay)||(!dpout&&dpout_delay))if(cnt_dpout_high[8:0]-cnt_dpout_low[8:0]=4||cnt_dpout_low[8:0]-cnt_dpout_high[8:0]=4)syn='b1;elsesyn='b0;end/****updowncouterwithmod=K****/always@(posedgeclkornegedgereset)beginif(!reset)begindelclk='b0;addclk='b0;up_down_cnt='b00000000;endelsebeginif(!dpout)begindelclk='b0;if(up_down_cnt==para_K-1)beginup_down_cnt='b00000000;addclk='b0;endelsebeginup_down_cnt=up_down_cnt+1;addclk='b0;endendelsebeginaddclk='b0;if(up_down_cnt=='b0)beginup_down_cnt=para_K-1;delclk='b0;endelseif(up_down_cnt==1)begindelclk='b1;up_down_cnt=up_down_cnt-1;endelseup_down_cnt=up_down_cnt-1;endendend/******addanddeleteclk*****/always@(posedgeclkornegedgereset)beginif(!reset)begincnt8='b000;endelsebeginif(cnt8=='b111)begincnt8='b000;endelseif(addclk&&!syn)begincnt8=cnt8+2;endelseif(delclk&&!syn)cnt8=cnt8;elsecnt8=cnt8+1;endendalways@(cnt8orreset)beginif(!reset)add_del_clkout='b0;elseadd_del_clkout=cnt8[2];end/******counterwithmod=N******/always@(posedgeadd_del_clkoutornegedgereset)beginif(!reset)begincnt_N='b0000;signal_out='b0;endelsebeginif(cnt_N==para_N-1)begincnt_N='b0000;signal_out='b0;endelseif(cnt_N==(para_N-1)/2)beginsignal_out='b1;cnt_N=cnt_N+1;endelsecnt_N=cnt_N+1;endendendmoduleDPLL由鉴相器模K加减计数器脉冲加减电路同步建立侦察电路模N分频器构成.整个系统的中心频率(即signal_in和signal_out的码速率的2倍)为clk/8/N.模K加减计数器的K值决定DPLL的精度和同步建立时间,K越大,则同步建立时间长,同步精度高.反之则短,低.