0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

最为常见的分频器分4种分析

FPGA之家 ? 来源:博客园 ? 作者:super_star123 ? 2021-06-13 17:11 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

分频器是用的最广的一种FPGA电路了,我最初使用的是crazybingo的一个任意分频器,可以实现高精度任意分频的一个通用模块,他的思想在于首先指定计数器的位宽比如32位,那么这个计数器的最大值就是2^32=4294967296,

假设系统时钟为50MHz,那么假如要想实现输出频率为fout,那么可以使用的频率控制字为:

K满足关系:

ad35649a-c5fc-11eb-9e57-12bb97331649.png,那么设计计数器在每个时钟上升沿累加的值为K,当计数值为2^31时,clkout=1;否则clkout=0.最终即可以实现任意频率的输出,精度的计算方法为当K=1时,可以得到clkout=0.0116415321826934814453125Hz,也即是说可以输出的最小频率为0.011Hz

此外我们最为常见的分频器分为以下4种分析:

1.偶数分频

最简单,要想得到分频系数为N的频率输出,设定一个计数器,这个计数器从零开始加1,当加到N/2-1时计数器清零,或者clkout翻转,以此循环,即可实现偶数倍分频。

2.奇数分频(分占空比不确定以及占空比50%)

方法一:分频系数为N,占总比不确定:以三(N)分频为例,上升沿触发计数,计数器计数到1(N-1)/2时输出时钟翻转,计数到2(N-1)时再次翻转。代码为产生1/11占空比为十一分频时钟:在计数值为9和10时均反转时钟,是产生抽样脉冲的有效方法:

always @(posedge clk or posedge rst) begin

if(rst)begin //复位

cnt《=0;

clk_div11《=0;

end

elseif(cnt==9) begin

clk_div11《=~clk_div11; //时钟翻转

cnt《=cnt+1; //继续计数

end

elseif(cnt==10) begin

clk_div11《=~clk_div11; //时钟翻转

cnt《=0; //计数清零

end

else

cnt《=cnt+1;

end

占空比50% ,则可以在上面的基础上,加上一个下降沿触发计数,然后将上升沿和下降沿产生的时钟进行相或运算,即可得到奇数分频输出。

reg clk1;

reg[1:0]cnt1;

always@(posedge clk or posedge rst) begin

if(rst)begin //复位

cnt1《=0;

clk1《=0;

end

elseif(cnt1==1) begin

clk1《=~clk1; //时钟翻转

cnt1《=cnt1+1; //继续计数

end

elseif(cnt1==2) begin

clk1《=~clk1; //时钟翻转

cnt1《=0; //计数清零

end

else

cnt1《=cnt1+1;

end

reg clk2;

reg[1:0]cnt2;

always@(negedge clk or posedge rst) begin

if(rst)begin //复位

cnt2《=0;

clk2《=0;

end

elseif(cnt2==1) begin

clk2《=~clk2; //时钟翻转

cnt2《=cnt2+1; //继续计数

end

elseif(cnt2==2) begin

clk2《=~clk2; //时钟翻转

cnt2《=0; //计数清零

end

else

cnt2《=cnt2+1;

end

assign clk_div3=clk1 | clk2; //或运算

方法二:对进行奇数倍n分频时钟,先进行n/2分频,然后在二分频得到(这部分先讲半整数分频)

亲测有效代码:

module ModuloN_Cntr(input clk,rst,output clk_out);

reg [1:0]cnt1;

reg [1:0]cnt2;

reg temp1,temp2;

always@(posedge clk or negedge rst)

begin

if(~rst)

begin

cnt1《=0;

temp1《=0;

end

else

begin

if(cnt1==2)

begin

temp1《=1;

cnt1《=0;

end

else

begin

cnt1《=cnt1+1;

temp1《=0;

end

end

end

always@(negedge clk or negedge rst)

begin

if(~rst)

begin

cnt2《=0;

temp2《=0;

end

else

begin

if(cnt2==2)

begin

temp2《=1;

cnt2《=0;

end

else

begin

cnt2《=cnt2+1;

temp2《=0;

end

end

end

assign clk_out=temp1|temp2;

endmodule

仿真波形:

3.半整数分频

半整数指的是N+0.5分频器设计:先进行模N+1计数,计数到N时输出时钟赋值为1,然后当计数到0时,输出时钟赋值为0,因此保持计数值为N的时间为半个时钟周期即为设计的关键,从中可以发现,计数器是在时钟的上升沿计数,那么我们可以让时钟在计数值为N时,将计数触发时钟翻转,时钟的下降沿变为上升沿,因此计数值为0,所以每产生一个N+0.5分频时钟周期,触发时钟都要翻转一次,以2.5分频为例程序如下:

//异或运算

assignclk_in=clk^clk_div2;

//模3计数器

reg clk_out;

reg [1:0]cnt;

always@(posedge clk_in or posedge rst) begin

if(rst)begin //复位

cnt《=0;

clk_out《=0;

end

elseif(cnt==1) begin

clk_out《=~clk_out; //时钟翻转

cnt《=cnt+1; //继续计数

end

elseif(cnt==2) begin

clk_out《=~clk_out; //时钟翻转

cnt《=0; //计数清零

end

else

cnt《=cnt+1;

end

//2分频

reg clk_div2;

always@(posedge clk_out or posedge rst) begin

if(rst) clk_div2《=0; //复位

else clk_div2=~clk_div2;

end

那么5.5分频呢:

代码:通用的这里N=5;

module ModuloN_Cntr(clk,clk_div,temp1,temp2);//N+0.5

input clk;

output clk_div;

reg[31:0]cnt1=0;

reg[31:0]cnt2=0;

output reg temp1,temp2;

initial begin temp1=0;temp2=1;end //首先进行初始化,temp1=0;temp2=1

parameter N=5; //设定分频系数为N+0.5

always @(posedge clk) //temp1上升沿跳变

begin

if(cnt1==2*N) //2*N

begin cnt1[31:0]《=32‘d0;end

else begin cnt1[31:0]《=cnt1[31:0]+32’d1;end

if(cnt1==32‘d0) begin temp1《=1;end //高电平时间为N+1;

if(cnt1==N+1) begin temp1《=0;end //低电平时间为N;

end

always@(negedge clk) //temp2下降沿跳变

begin

if(cnt2==2*N) //2*N

begin cnt2[31:0]《=32’d0;end

else begin cnt2[31:0]《=cnt2[31:0]+32‘d1;end

if(cnt2==32’d0) begin temp2《=0;end //低电平时间为N;

if(cnt2==N) begin temp2《=1;end //高电平时间为N+1;

end

assign clk_div=temp1&&temp2; //逻辑与

endmodule

//如果要进行N+0.5分频

//思路:总的来说要进行N+1+N=2N+1次分频

//在时钟的上升沿和下降沿都进行跳变

//上升沿进行占空比为N+1比N的时钟temp1;

//下降沿进行占空比为N比N+1的时钟temp2;

//最后div=temp1&&temp2 即可得到所需要的半整数分频

仿真波形:

4.任意小数分频

小数分频器的实现方法有很多中,但其基本原理都一样的,即在若干个分频周期中采取某种方法使某几个周期多计或少计一个数,从而在整个计数周期的总体平均意义上获得一个小数分频比。一般而言,这种分频由于分频输出的时钟脉冲抖动很大,故在设计中的使用已经非常少。但是,这也是可以实现的。以8.7倍分频为例,本文仅仅给出双模前置小数分频原理的verilog代码及其仿真图(如图6),具体原理可以参考刘亚海的《基于FPGA的小数分频器的实现》以及毛为勇的《基于FPGA的任意小数分频器的设计》。

//8分频

reg clk_div8;

reg[2:0]cnt_div8;

always@(posedge clk or posedge rst) begin

if(rst)begin //复位

clk_div8《=0;

cnt_div8《=0;

end

elseif(cnt_div8==3‘d7) begin

clk_div8《=1; //置1

cnt_div8《=0;

end

elseif(cnt_div8==3’d0) begin

clk_div8《=0; //置0

cnt_div8《=cnt_div8+1;

end

else

cnt_div8《=cnt_div8+1;

end

//9分频

reg clk_div9;

reg[3:0]cnt_div9;

always@(posedge clk or posedge rst) begin

if(rst)begin //复位

clk_div9《=0;

cnt_div9《=0;

end

elseif(cnt_div9==3‘d8) begin

clk_div9《=1; //置1

cnt_div9《=0;

end

elseif(cnt_div9==3’d0) begin

clk_div9《=0; //置0

cnt_div9《=cnt_div9+1;

end

else

cnt_div9《=cnt_div9+1;

end

//控制信号

parameterDiv8Num=3;

reg ctrl;

reg[3:0]AddValue;

always@(posedge clk or posedge rst) begin

if(rst)begin //复位

ctrl《=0;

AddValue《=10-7;

end

elseif(AddValue《10) begin

ctrl《=0;

AddValue《=AddValue+Div8Num;

end

else begin

ctrl《=1;

AddValue《=AddValue-10;

end

end

//选择输出

reg clk_out;

always @(ctrlor posedge clk or posedge rst) begin

if(rst) clk_out《=0; //复位

elseif(ctrl) clk_out《=clk_div8;

elseclk_out《=clk_div9;

end

4、总结分频器是FPGA的基础,而且在FPGA逻辑电路设计的时候是经常使用的,希望大家对以上的整数倍分频和半整数倍分频能熟练掌握

原文标题:关于分频器的FPGA实现整理思路

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22072

    浏览量

    619836
  • 分频器
    +关注

    关注

    43

    文章

    493

    浏览量

    51303

原文标题:关于分频器的FPGA实现整理思路

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADF4007高频分频器/PLL频率合成器技术手册

    ADF4007是一款高频分频器/PLL频率合成器,可用于各种通信应用。RF端工作频率可达7.5 GHz,PFD端工作频率可达120 MHz。它由低噪声数字鉴频鉴相(PFD)、精密电荷泵和分频器
    的头像 发表于 04-27 15:23 ?323次阅读
    ADF4007高频<b class='flag-5'>分频器</b>/PLL频率合成器技术手册

    ADF4110/ADF4111/ADF4112/ADF4113单通道、整数N分频、550 MHz PLL,内置可编程预分频器和电荷泵技术手册

    ADF4110系列频率合成器在无线接收机和发射机的上变频和下变频部分中,可用来实现本振。上述器件由低噪声数字鉴频鉴相(PFD)、精密电荷泵、可编程基准分频器、可编程A和B计数以及双模预分频
    的头像 发表于 04-27 10:43 ?365次阅读
    ADF4110/ADF4111/ADF4112/ADF4113单通道、整数N<b class='flag-5'>分频</b>、550 MHz PLL,内置可编程预<b class='flag-5'>分频器</b>和电荷泵技术手册

    HMC705LP4/HMC705LP4E 6.5GHz可编程分频器SMT技术手册

    HMC705LP4(E)是一款低噪声GaAs HBT可编程分频器,采用4x4 mm无引脚表贴封装。 该分频器可以通过编程设置为以N = 1到N = 17之间的任意数字进行
    的头像 发表于 04-18 14:14 ?357次阅读
    HMC705LP<b class='flag-5'>4</b>/HMC705LP<b class='flag-5'>4</b>E 6.5GHz可编程<b class='flag-5'>分频器</b>SMT技术手册

    HMC447LC3使用InGaP HBT技术,4分频,采用SMT封装技术手册

    HMC447LC3是一款低噪声4分频再生分频器,采用InGaP GaAs HBT技术。 这款宽带分频器的工作输入频率为10到26 GHz,可接受极宽范围的输入功率水平。 HMC447L
    的头像 发表于 04-18 09:25 ?324次阅读
    HMC447LC3使用InGaP HBT技术,<b class='flag-5'>4</b><b class='flag-5'>分频</b>,采用SMT封装技术手册

    HMC365G8 InGaP HBT 4分频SMT封装,DC-13GHz技术手册

    HMC365G8是一款低噪声4分频静态分频器,使用InGaP GaAs HBT技术,采用8引脚密封型表贴玻璃/金属封装。 此器件在DC(使用方波输入)至13 GHz的输入频率下工作,使用+5V DC
    的头像 发表于 04-17 10:59 ?356次阅读
    HMC365G8 InGaP HBT <b class='flag-5'>4</b><b class='flag-5'>分频</b>SMT封装,DC-13GHz技术手册

    HMC365 InGaP HBT 4分频芯片,DC-13GHz技术手册

    HMC365是低噪声的4分频静态分频器,使用InGaP GaAs HBT技术,拥有1.30 x 0.69 mm的小巧尺寸。此器件在DC(使用方波输入)至13 GHz的输入频率下工作,使用+5V DC
    的头像 发表于 04-17 10:53 ?389次阅读
    HMC365 InGaP HBT <b class='flag-5'>4</b><b class='flag-5'>分频</b>芯片,DC-13GHz技术手册

    ADF5001 4GHz 至18GHz 4分频分频器技术手册

    ADF5001预分频器是一款低噪声、低功耗、固定RF分频器模块 ,可用来将高达18GHz的频率分频至适合输入到[ADF4156]或 [ADF4106]等PLL IC的较低频率。ADF5001提供
    的头像 发表于 04-16 15:50 ?384次阅读
    ADF5001 <b class='flag-5'>4</b>GHz 至18GHz <b class='flag-5'>4</b><b class='flag-5'>分频</b>预<b class='flag-5'>分频器</b>技术手册

    ADF5002 4GHz至18GHz 8分频分频器技术手册

    ADF5002预分频器是一款低噪声、低功耗、固定RF分频器模块,可用来将高达18GHz的频率分频至适合输入到 [ADF4156]或[ADF4106]等PLL IC的较低频率。ADF5002提供8
    的头像 发表于 04-16 15:46 ?465次阅读
    ADF5002 <b class='flag-5'>4</b>GHz至18GHz 8<b class='flag-5'>分频</b>预<b class='flag-5'>分频器</b>技术手册

    ADF5000 4GHz 至18GHz 2分频分频器技术手册

    ADF5000预分频器是一款低噪声、低功耗、固定RF分频器模块,可用来将高达18 GHz的频率分频至适合输入到[ADF4156]等PLL IC的较低频率。ADF5000提供2分频功能,
    的头像 发表于 04-16 15:16 ?407次阅读
    ADF5000 <b class='flag-5'>4</b>GHz 至18GHz 2<b class='flag-5'>分频</b>预<b class='flag-5'>分频器</b>技术手册

    HMC959LC3提供复位功能和可编程输出电压的26GHz 4分频器件,采用SMT封装技术手册

    HMC959LC3是一款带复位功能的4分频器件,设计支持高达26 GHz的时钟频率。 正常工作时,在复位引脚未置位的情况下,输出在时钟正沿上从之前的状态开始切换。 这样便可实现4分频
    的头像 发表于 04-16 14:16 ?341次阅读
    HMC959LC3提供复位功能和可编程输出电压的26GHz <b class='flag-5'>4</b><b class='flag-5'>分频器</b>件,采用SMT封装技术手册

    HMC-C006 InGaP HBT 4分频模块,0.5-18GHz技术手册

    HMC-C006是一款低噪声4分频静态分频器,使用InGaP GaAs HBT技术,封装在微型密封模块中,带有可更换的SMA连接。 该器件在0.5至18 GHz的输入频率范围内工作,
    的头像 发表于 04-03 10:03 ?422次阅读
    HMC-C006 InGaP HBT <b class='flag-5'>4</b><b class='flag-5'>分频</b>模块,0.5-18GHz技术手册

    分频器的定义和作用

    分频器是一电子电路或装置,其核心功能是将输入信号分离成多个具有不同频率范围的输出信号。这些输出信号的带宽均小于原始输入信号的带宽,使得每个频段的信号都能针对性地进行处理或应用。分频器广泛应用于通信、测量、音频处理等领域,是电子
    的头像 发表于 10-09 15:12 ?6802次阅读

    UPB586B分频器规格书

    电子发烧友网站提供《UPB586B分频器规格书.pdf》资料免费下载
    发表于 09-30 14:34 ?0次下载

    DC/DC转换中电阻反馈分频器的设计考虑

    电子发烧友网站提供《DC/DC转换中电阻反馈分频器的设计考虑.pdf》资料免费下载
    发表于 08-26 14:52 ?0次下载
    DC/DC转换<b class='flag-5'>器</b>中电阻反馈<b class='flag-5'>分频器</b>的设计考虑

    LMK01000高性能时钟缓冲分频器和分配器数据表

    电子发烧友网站提供《LMK01000高性能时钟缓冲分频器和分配器数据表.pdf》资料免费下载
    发表于 08-21 09:53 ?0次下载
    LMK01000高性能时钟缓冲<b class='flag-5'>器</b>、<b class='flag-5'>分频器</b>和分配器数据表