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
    +关注

    关注

    1664

    文章

    22502

    浏览量

    639060
  • 分频器
    +关注

    关注

    43

    文章

    537

    浏览量

    53738

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    高频分频器/PLL 合成器 ADF4007:技术剖析与应用指南

    高频分频器/PLL 合成器 ADF4007:技术剖析与应用指南 在电子工程领域,高频分频器和 PLL 合成器是构建高性能通信系统的关键组件。今天,我们将深入探讨 Analog Devices 公司
    的头像 发表于 04-20 10:55 122次阅读

    SN74LS292和SN74LS294可编程分频器与数字定时的技术解析

    SN74LS292和SN74LS294可编程分频器与数字定时的技术解析 在电子设计领域,可编程分频器和数字定时是非常重要的组件,它们能够为电路设计带来极大的灵活性和精确性。今天,我
    的头像 发表于 03-11 17:25 762次阅读

    CDC5801A:低抖动时钟倍频分频器的卓越之选

    倍频分频器,具备可编程延迟和相位对齐功能,能满足多种应用场景的需求。 文件下载: cdc5801a.pdf 1. 关键特性概览 1.1 倍频与分频功能 CDC5801A支持多种倍频和分频
    的头像 发表于 02-10 11:10 273次阅读

    LMX1214:高性能低噪声时钟缓冲及分频器的技术剖析

    LMX1214:高性能低噪声时钟缓冲及分频器的技术剖析 在电子设计领域,时钟信号的处理至关重要,它直接影响着整个系统的性能和稳定性。今天,我们就来深入探讨一款高性能的时钟缓冲及分频器
    的头像 发表于 02-06 15:40 221次阅读

    LMX1214:高性能低噪声时钟缓冲与分频器的深度解析

    LMX1214:高性能低噪声时钟缓冲与分频器的深度解析 在电子设计领域,时钟信号的处理至关重要,它直接影响着系统的性能和稳定性。TI推出的LMX1214低噪声、高频时钟缓冲分频器,凭借其出色
    的头像 发表于 01-26 10:50 395次阅读

    ‌CDCLVD1213 1:4低附加抖动LVDS缓冲分频器 技术文档摘要

    CDCLVD1213时钟缓冲将输入时钟分配给4对差LVDS 时钟输出具有低附加抖动,用于时钟分配。输入可以是LVDS, LVPECL,或 CML。 该CDCLVD1213包含一个用于一个输出 (QD) 的高性能
    的头像 发表于 09-16 13:53 923次阅读
    ‌CDCLVD1213 1:<b class='flag-5'>4</b>低附加抖动LVDS缓冲<b class='flag-5'>器</b>带<b class='flag-5'>分频器</b> 技术文档摘要

    LMX1204低噪声高频JESD缓冲/倍频/分频器技术解析

    Texas Instruments LMX1204EVM评估模块 (EVM) 设计用于评估LMX1204的性能,LMX1204是一款四路输出、超低附加抖动射频 (RF) 缓冲分频器和乘法器。该
    的头像 发表于 09-10 14:04 1171次阅读
    LMX1204低噪声高频JESD缓冲<b class='flag-5'>器</b>/倍频<b class='flag-5'>器</b>/<b class='flag-5'>分频器</b>技术解析

    德州仪器LMX1214射频缓冲分频器技术解析

    Texas Instruments LMX1214射频缓冲分频器具有高输出频率、超低噪声基底和极低偏斜时钟分布。该设备有四个高频输出时钟和一个低频辅助时钟输出。Texas Instruments LMX1214支持高频时钟的缓冲和
    的头像 发表于 09-06 09:37 1066次阅读
    德州仪器LMX1214射频缓冲<b class='flag-5'>器</b>与<b class='flag-5'>分频器</b>技术解析

    HMC739LP4/739LP4E具有半频输出和16分频的MMIC VCO,23.8-26.8GHz技术手册

    HMC739是一款GaAs InGaP异质结双极性晶体管(HBT) MMIC VCO。 该器件集成谐振、负电阻器件、变容二极管和16分频分频器。 由于振荡采用单芯片结构,因此VC
    的头像 发表于 04-30 14:10 961次阅读
    HMC739LP<b class='flag-5'>4</b>/739LP<b class='flag-5'>4</b>E具有半频输出和16<b class='flag-5'>分频</b>的MMIC VCO,23.8-26.8GHz技术手册

    HMC738LP4/738LP4E具有半频输出和16分频的MMIC VCO,20.9-23.9GHz技术手册

    HMC738是一款GaAs InGaP异质结双极性晶体管(HBT) MMIC VCO。 该器件集成谐振、负电阻器件、变容二极管和16分频分频器。 由于振荡采用单芯片结构,因此VC
    的头像 发表于 04-30 13:58 1158次阅读
    HMC738LP<b class='flag-5'>4</b>/738LP<b class='flag-5'>4</b>E具有半频输出和16<b class='flag-5'>分频</b>的MMIC VCO,20.9-23.9GHz技术手册

    HMC735LP5/735LP5E具有4分频功能的VCO,10.5-12.2GHz技术手册

    HMC735是一款GaAs InGaP异质结双极性晶体管(HBT) MMIC VCO。 该器件集成谐振、负电阻器件、变容二极管,并具有4分频频率输出。 由于振荡的单芯片结构,VCO
    的头像 发表于 04-30 13:49 1187次阅读
    HMC735LP5/735LP5E具有<b class='flag-5'>4</b><b class='flag-5'>分频</b>功能的VCO,10.5-12.2GHz技术手册

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

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

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

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

    ADF4154小数N分频频率合成器技术手册

    ,能够实现可编程小数N分频。INT、FRAC和MOD寄存可构成一个总N分频器(N = (INT + (FRAC/MOD)))。此外,4位参考分频器
    的头像 发表于 04-27 09:36 1366次阅读
    ADF4154小数N<b class='flag-5'>分频</b>频率合成器技术手册

    ADF4153A小数N分频频率合成器技术手册

    ,能够实现可编程模数小数N分频。INT、FRAC和MOD寄存可构成一个总N分频器(N = (INT + (FRAC/MOD)))。此外,4
    的头像 发表于 04-25 14:58 1235次阅读
    ADF4153A小数N<b class='flag-5'>分频</b>频率合成器技术手册