基于FPGA数字锁相环源程序代码(已验证运行,超值)Word下载.doc
《基于FPGA数字锁相环源程序代码(已验证运行,超值)Word下载.doc》由会员分享,可在线阅读,更多相关《基于FPGA数字锁相环源程序代码(已验证运行,超值)Word下载.doc(10页珍藏版)》请在冰豆网上搜索。
0]Count;
wireinc,dec;
regdnup;
reginc_new,dec_new,inc_pulse,dec_pulse;
regdelayed,advanced,Tff;
regIDout;
reg[14:
0]count_N;
reg[15:
0]cnt;
regcnt_en;
regload;
wirecnt_clr;
//2.异或门鉴相器模块
——————————————————————————————————————
always@(finorfout)
begin
dnup=fin^fout;
end
//3.K模计数器模块
always@(Kmode)
case(Kmode)
3&
#39;
b001:
Ktop&
lt;
=7;
b010:
=15;
b011:
=31;
b100:
=63;
b101:
=127;
b110:
=255;
b111:
=511;
default:
endcase
//根据鉴相器输出的加减控制信号dnup进行可逆计数器的加减运算
always@(posedgeclkorposedgereset)begin
if(reset)
Count&
=0;
elseif(!
dnup)
if(Count==Ktop)Count&
else
=Count+1;
end
if(Count==0)Count&
=Ktop;
=Count-1;
//输出进位脉冲carry和借位脉冲borrowassign
inc=!
dnup&
amp;
(Count==Ktop);
assigndec=dnup&
(Count==0);
//4.脉冲增减模块
always@(posedgeclk)
if(!
inc)
inc_new&
=1;
inc_pulse&
elseif(inc_pulse)
inc_pulse&
elseif(inc&
&
inc_new)begin
inc_new&
dec)
dec_new&
dec_pulse&
elseif(dec_pulse)
elseif(dec&
dec_new)
always@(posedgeclk)
if(reset)
beginTff&
delayed&
advanced&
endelse
if(inc_pulse)
beginadvanced&
Tff&
=!
Tff;
if(dec_pulse)
begindelayed&
Tff&
endelseif(Tff==0)
advanced)
elseif(advanced)
=Tff;
advanced&
if(!
delayed)
elseif(delayed)
delayed&
always@(clkorTff)
if(Tff)
IDout=0;
if(clk)
IDout=1;
//5.N分频参数控制模块
always@(posedgefin)//fin上升沿到的时候,产生各种标志以便后面控制begin
cnt_en=0;
load=1;
cnt_en=~cnt_en;
load=~cnt_en;
assigncnt_clr=~(~fin&
load);
always@(posedgeclkornegedgecnt_clr)
cnt_clr)
cnt=0;
elseif(cnt_en)
if(cnt==65536)
cnt=cnt+1;
always@(posedgeload)
count_N=cnt/2;
//这里取fin周期的一半end
//6.N分频器模块
integercount;
always@(posedgeIDout)
fout=0;
count=0;
if(count&
gt;
=(count_N/2)-1)
beginfout&
=~fout;
count&
endelse
=count+1;
endmodule