基于FPGA数字锁相环源程序代码(已验证运行,超值).doc

上传人:b****1 文档编号:148888 上传时间:2022-10-04 格式:DOC 页数:10 大小:24KB
下载 相关 举报
基于FPGA数字锁相环源程序代码(已验证运行,超值).doc_第1页
第1页 / 共10页
基于FPGA数字锁相环源程序代码(已验证运行,超值).doc_第2页
第2页 / 共10页
基于FPGA数字锁相环源程序代码(已验证运行,超值).doc_第3页
第3页 / 共10页
基于FPGA数字锁相环源程序代码(已验证运行,超值).doc_第4页
第4页 / 共10页
基于FPGA数字锁相环源程序代码(已验证运行,超值).doc_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于FPGA数字锁相环源程序代码(已验证运行,超值).doc

《基于FPGA数字锁相环源程序代码(已验证运行,超值).doc》由会员分享,可在线阅读,更多相关《基于FPGA数字锁相环源程序代码(已验证运行,超值).doc(10页珍藏版)》请在冰豆网上搜索。

基于FPGA数字锁相环源程序代码(已验证运行,超值).doc

基于FPGA数字锁相环源程序代码(已验证运行,超值)

------------------------------------------------------------------------------------------------

基于FPGA数字锁相环源程序代码(已验证运行,超值)

基于FPGA数字锁相环源程序代码(已验证运行,超值)moduledpll_top(fin,fout,clk,reset,Kmode);

inputfin,clk;//clk时钟100ns(10MHZ)inputreset;//reset高电平复位,enable高电平有效input[2:

0]Kmode;//滤波计数器的计数模值设定outputfout;//fout是锁频锁

相输出

regfout;

reg[8:

0]Ktop;

reg[8:

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)

begin

case(Kmode)

3'b001:

Ktop<=7;

3'b010:

Ktop<=15;

3'b011:

Ktop<=31;

3'b100:

Ktop<=63;

3'b101:

Ktop<=127;

3'b110:

Ktop<=255;

3'b111:

Ktop<=511;

default:

Ktop<=15;

endcase

end

//根据鉴相器输出的加减控制信号dnup进行可逆计数器的加减运算

always@(posedgeclkorposedgereset)begin

if(reset)

——————————————————————————————————————

------------------------------------------------------------------------------------------------

Count<=0;

elseif(!

dnup)

begin

if(Count==Ktop)Count<=0;

else

Count<=Count+1;end

else

begin

if(Count==0)Count<=Ktop;

else

Count<=Count-1;end

end

//输出进位脉冲carry和借位脉冲borrowassign

inc=!

dnup&(Count==Ktop);assigndec=dnup&(Count==0);

//4.脉冲增减模块

always@(posedgeclk)

begin

if(!

inc)

begin

inc_new<=1;

inc_pulse<=0;end

elseif(inc_pulse)

——————————————————————————————————————

------------------------------------------------------------------------------------------------

begin

inc_new<=0;inc_pulse<=0;

end

elseif(inc&&inc_new)begin

inc_pulse<=1;inc_new<=0;

end

else

begin

inc_pulse<=0;

inc_new<=0;

end

end

always@(posedgeclk)

begin

if(!

dec)

begin

dec_new<=1;

dec_pulse<=0;

end

elseif(dec_pulse)

begin

dec_new<=0;

——————————————————————————————————————

------------------------------------------------------------------------------------------------

dec_pulse<=0;

end

elseif(dec&&dec_new)

begin

dec_pulse<=1;

dec_new<=0;

end

else

begin

dec_pulse<=0;

dec_new<=0;

end

end

always@(posedgeclk)

begin

if(reset)

beginTff<=0;delayed<=1;advanced<=1;endelse

begin

if(inc_pulse)

beginadvanced<=1;Tff<=!

Tff;endelse

if(dec_pulse)

begindelayed<=1;Tff<=!

Tff;endelseif(Tff==0)

——————————————————————————————————————

------------------------------------------------------------------------------------------------

begin

if(!

advanced)

Tff<=!

Tff;

elseif(advanced)

beginTff<=Tff;advanced<=0;end

end

else

begin

if(!

delayed)

Tff<=!

Tff;

elseif(delayed)

beginTff<=Tff;delayed<=0;end

end

end

end

always@(clkorTff)

begin

if(Tff)

IDout=0;

else

begin

if(clk)

——————————————————————————————————————

------------------------------------------------------------------------------------------------

IDout=0;

else

IDout=1;

end

end

//5.N分频参数控制模块

always@(posedgefin)//fin上升沿到的时候,产生各种标志以便后面控制begin

if(reset)

begin

cnt_en=0;

load=1;

end

else

begin

cnt_en=~cnt_en;

load=~cnt_en;

end

end

assigncnt_clr=~(~fin&load);

always@(posedgeclkornegedgecnt_clr)

begin

——————————————————————————————————————

------------------------------------------------------------------------------------------------

if(!

cnt_clr)

cnt=0;

elseif(cnt_en)

begin

if(cnt==65536)

cnt=0;

else

cnt=cnt+1;

end

end

always@(posedgeload)

begin

count_N=cnt/2;//这里取fin周期的一半end

//6.N分频器模块

integercount;

always@(posedgeIDout)

if(reset)

begin

fout=0;

count=0;

end

else

——————————————————————————————————————

------------------------------------------------------------------------------------------------

begin

if(count>=(count_N/2)-1)

beginfout<=~fout;count<=0;endelse

count<=count+1;

end

endmodule

——————————————————————————————————————

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1