T = ( Ma+(M+1)b )/ a+b,这里我们发现组成小数分频使用了a个M分频和b个M+1分频的整数分频电路。 五、半整数分频 5.1 占空比50%半整数分频 对于使用小数分频法得到的,以3.5分频为例,需要使用一个四分频和一个三分频,七个周期内,输出两个1,但是信号时序难以得到保障,时钟信号的质量得不到保证。 那有没有新的方法可以优化半整数分频呢? 可以这样实现半整数分频: (1)在源时钟上升沿分别产生由 4 个和 3 个源时钟周期组成的 2 个分频时钟。 半整数分频:半整数分频是小数分频的特殊情况,之所以会拎出来单独讲,是因为根据小数分频的双模前置法做出来的波形时序较差。如果需要得50%的半整数分频怎么办? 首先做出两个上升沿和下降沿二分频信号,通过在半整数两边寻找相邻的的奇数和偶数(决定信号电平周期数),然后做逻辑运算即可以得到占空比50%的半整数分频。
奇数分频 奇数分频比偶数分频复杂一些,当不要求分频的占空比时,对输入时钟clk上升沿计数,可以设置两个计数的翻转点,一个是(N-1)/2,一个是(N-1),计数到(N-1)时输出时钟翻转且将计数器清零 <= 3'b0; else count_p<= count_p + 1'b1; end //上升沿分频 always @ ( posedge <= 3'b0; else count_n<= count_n + 1'b1; end //下降沿分频 always @ ( negedge 3. 小数分频 N+0.5分频,如N=3时进行3.5分频。 先将clk时钟周期的一半记作clk_half,即一个高电平或一个低电平时间。 /******************************************** 计数器实现 3.5 分频,N=3,2N=6 ******************************
通常我们说对原时钟进行N分频,即分频后的时钟的一个周期是原时钟周期的N倍。N可以为偶数、奇数、半整数、分数(小数)。 图3奇数分频 下面给出N为正整数的分频器设计,主要原理是N[0]=1为奇数分频,0为偶数分频。 clk_c : clk_a; endmodule 3 半整数分频 说明:占空比非50% 网上广为流传的一种分频结果是,半分频多出来那半个周期为高电平,其余为低电平。 参考[3] 4分数(小数)分频 此部分主要参考[1][2]. 说明:占空比非50% 比如8.7分频。 分数分频器的原理可以用下图来概括。 ? 图5分数分频的原理 用整数部分zn(=8)作为一个分频系数,zn加1(=9)作为另外一个分频系数组成一个小数分频器。
奇数分频 奇数分频比偶数分频复杂一些,当不要求分频的占空比时,对输入时钟clk上升沿计数,可以设置两个计数的翻转点,一个是(N-1)/2,一个是(N-1),计数到(N-1)时输出时钟翻转且将计数器清零 <= 3'b0; else count_p<= count_p + 1'b1; end //上升沿分频 always @ ( posedge <= 3'b0; else count_n<= count_n + 1'b1; end //下降沿分频 always @ ( negedge 小数分频 N+0.5分频,如N=3时进行3.5分频。 先将clk时钟周期的一半记作clk_half,即一个高电平或一个低电平时间。 /******************************************** 计数器实现 3.5 分频,N=3,2N=6 ******************************
非整数分频模块有两种实现方法,分别为分频比交错法和累加器分频法。下面分别进行介绍。 1.分频比交错法 分频比交错法,顾名思义就是在一定时间间隔T内,由不同的分频比电路交叉着对输入信号进行分频,从而在T时间内达到小数分频的目的。 =3'b000; else cnt2<=cnt2+3'b001; end elseif(cnt1<4'b0101) begin cnt1<=cnt1+4'b0001; clk_out_t<=1'b0 b101) cnt2<=3'b000; else cnt2<=cnt2+3'b001; end elseif(cnt1<4'b0100) begin cnt1<=cnt1+4'b0001; clk_out_t rst_n) begin fs_ctl<=1'b0; end else begin case(cnt2) 3'b000,3'b011:fs_ctl<=1'b1; default:fs_ctl<=1'b0
代码核心如下: 偶数分频 偶数分频器的实现简单,用计数器在上升沿或者下降沿计数,当计数器的值等于分频系数的一半或等于分频系数时,信号翻转。 奇数分频 奇数分频器跟偶数分频器一样,当计数器的值等于分频系数(加1或者减1)的一半或等于分频系数时,时钟信号翻转。 分数分频 分数分频也叫小数分频器,比如8.7分频。 分数分频器的原理可以用下图来概括。 用整数部分zn(=8)作为一个分频系数,zn加1(=9)作为另外一个分频系数组成一个小数分频器。 小数分频是达不到50%的占空比的。
MMCM中有3个可编程的分频因子D、M和O。通过动态配置端口,可以在配置和正常的操作期间对其进行编程。 可以在配置时,对每个分频器进行编程,分频因子为1~128中的任意整数。 MMCM有3个输入抖动过滤器选项:低带宽、高带宽和优化模式;其中: (1)低带宽模式有最好的抖动衰减。 (3)优化模式允许Vivado工具找到最好的设置。 MMCM也有一个小数计数器,它位于反馈路径(充当乘法器)或者输出路径。小数计数器允许非整数的1/8增量。因此,增加频率合成能力8倍。 7系列FPGA中,时钟区域的宽度(水平方向)为芯片宽度的一半,而UltraScale不再有这种限制。 BUFGCE_DIV具有分频功能,对于简单的分频,相比于MMCM/PLL,BUFGCE_DIV在功耗上更具优势,而且如果分频时钟和源时钟有跨时钟域路径,那么相应的Clock Skew会更小。
数据累加输出 VL8 非整数倍数据位宽转换24to128 VL9 非整数倍数据位宽转换8to12 VL10 整数倍数据位宽转换8to16 VL11 非重叠的序列检测 VL12 重叠序列检测 VL13 时钟分频 (偶数) VL14 自动贩售机1 VL15 自动贩售机2 VL16 占空比50%的奇数分频 VL17 任意小数分频(8.7分频) VL18 无占空比要求的奇数分频 VL19 根据状态转移写状态机-三段式 <= 1'b0; end endcase end end endmodule VL16 占空比50%的奇数分频 7 分频,50% 占空比。 clk_n <= ~clk_n; end end end assign clk_out7 = clk_p | clk_n; endmodule VL17 任意小数分频(8.7分频) `timescale 下方给出的代码能够通过测试,5分频,占空比40%,简单易理解。
AD9528产生最高频率为1.25 GHz的六路输出(输出0至输出3、输出12和输出13),以及最大频率高达1 GHz的八路输出。 分频器的占空比校正设置为提供标称50%的占空比,即使进行奇数分频也是如此。请注意,在更改分频值后必须发出同步输出命令,以确保在通道输出处产生预期的分频比的时钟。 数字粗延迟 AD9528芯片支持通过已 VCXO分频器输出频率的半周期为增量,实现0到63个步进(6位)的可编程相位偏移。 模拟精密延迟 每个通道均配备一个4位精密模拟延迟模块,其延迟步长显著小于 VCXO分频器输出频率的半周期。 虽然分频器运行时无法调整数字粗相位偏移量,但无需关闭PLL1和PLL2即可实现所有输出信号间的相对相位调节。
其中主要是 M、 D、 O 三个参数影响了输出的频率,关系式如下图公式 3-2 所示。 ? 所以综合来看,就是如何修改这三个参数,就可以达到动态调整时钟频率的目的。 所以配置 D 的值为 1 ,表示分频为 1 。 ? 调整参数 M 在手册中查找 CLKOUT0 输出参数 M 的寄存器地址为0x200,默认值为0x01010A00,其中 Bit[15:8]表示的就是参数 M 整数部分值。 小数部分为 Bit[25:16] 表示参数 M 的小数部分。 ? 所以配置 M 的值为 A ,相当于分频 10 倍。小数部分为 Bit[17:8] 表示参数 O 的小数部分。 ?
如果采样率需要20kHz,可以选择1MHz、2MHz、4MHz等标准频率晶振,并通过分频器或定时器设定相应的整数分频系数。选择合适的频率可以简化硬件设计,并保证采样的精度。 在这种情况下,可以选择12MHz或更高频率的晶振,通过分频实现所需的采样率。例如,12MHz晶振可以轻松分频为48kHz或96kHz,满足音频处理的需求。 特殊频率的选择技巧如果应用中需要的采样率或时钟频率不是晶振频率的整数倍,例如需要将12.288MHz晶振分频为20kHz,会得到一个非整数的分频系数。 在这种情况下,可以考虑使用小数分频、PLL(相位锁环)或高端FPGA/MCU等复杂方案。虽然这些方案会增加系统的设计难度和硬件成本,但可以实现更灵活的频率调整和更高的精度。
设计概述 在FPGA设计中,分频器一直都担任着很重要的角色,我相信很多人都已经想到了利用计算器来计算想要使用的时钟频率,但问题是仅仅利用计数器来分频,只可以实现偶数分频,而如果我需要三分频,五分频,七分频等等奇数类分频 在这里,让我介绍一个可以实现任意整数分频的方法,这个办法也是同样利用了计数器来计算,跟偶数分频不一样的地方是任意整数分频利用了两个计数器来实现。 ? rst_n,clk0); input clk; input rst_n; output reg clk0; parameter HW = 7 ; parameter LW = 3 rst_n) begin state <= 1'b0; count <= 3'b0; clk0 <= 1'b0; end 图中我们通过数上升沿的个数可以看到输出clk0的输出为高7,低3,符合我们的设计。
设计概述 在FPGA设计中,分频器一直都担任着很重要的角色,我相信很多人都已经想到了利用计算器来计算想要使用的时钟频率,但问题是仅仅利用计数器来分频,只可以实现偶数分频,而如果我需要三分频,五分频,七分频等等奇数类分频 在这里,让我介绍一个可以实现任意整数分频的方法,这个办法也是同样利用了计数器来计算,跟偶数分频不一样的地方是任意整数分频利用了两个计数器来实现。 rst_n,clk0); input clk; input rst_n; output reg clk0; parameter HW = 7 ; parameter LW = 3 rst_n) begin state <= 1'b0; count <= 3'b0; clk0 <= 1'b0; end .rst_n(rst_n), .clk0(clk0) ); endmodule 仿真图: 图中我们通过数上升沿的个数可以看到输出clk0的输出为高7,低3,
3、50Mhz分频为10Mhz 1)、首先我们要进行5分频 5分频:分频后的周期为之前的5个周期电平。 2)、如果周期电平确定为5个,那么我们就需要2.5个周期就改变一次电平状态,才能满足5分频。 3)、实现:在FPGA中,我们没有小数,也就没法实现2.5个周期时,进行电平翻转 4、我们可以将50Mhz分2次计数 1)、上升沿计数:计数周期为5,当计数为2时,翻转电平,当计数为5时,翻转电平 2) 、下降沿计数:计数周期为5,当计数为2时,翻转电平,当计数为5时,翻转电平 3)、将2次得出的电平结果,相或就得出了想要的5分频时钟(10MHz),如下图。 4)、从图中还可以看出,A、B分频时 高电平周期为 2个,低电平为3个,即高电平比低电平少1个。 rst_n = 1; #50000000; $stop; end endmodule 7、仿真结果 结果正确 8、同理,我们可以3分频
预分频器的值由寄存器TIMx_PSC设定,是一个16位正整数值。 独立看门狗超出时间 溢出时间计算 Tout = ( ( 4 * 2^prer )rlr)/40(M3) Tout公式是最终的式子,要弄清楚式子中的各成员的含义,就要从根源开始推倒和理解。 根据手册中该寄存器的配置关系是:000对应4分频,001对应8分频,010对应16分频…由此得出预分频因子与prer的值关系是:预分频因子=4*2prer=2(prer+2)。 更新 独立看门狗操作步骤 1.取消寄存器写保护 IWDG_WriteAccessCmd(); 2.设置独立看门狗的预分频系数,确定时钟 IWDG_SetPrescaler(); 3.设置看门狗重装载值 ,确定溢出时间 IWDG_SetReload(); 3.设置看门狗重装载值,确定溢出时间 IWDG_SetReload(); 4.使能看门狗 IWDG_Enable(); 5.应用程序喂狗 IWDG_ReloadCounter
3. 时钟源输出 STM32支持MCO引脚输出时钟信号,供外部器件使用,同时可通过示波器来测量内部的各项时钟。 时钟分频和倍频 STM32的分频和倍频功能非常强大,可将时钟源通过分频与倍频技术,使各APB总线时钟频率配置为指定值,供各外设使用。 标准外设库配置时钟 STM32F0、 F1、 F2、 F3、 F4、 L1系列都有标准外设库,如果外部高速时钟频率和官方一致,就可以直接使用标准外设库中的代码。 ? 问题二:外设总线APB时钟不同的问题 看到很多人遇到过这样的问题:TIM定时快(或慢)一半。 这个问题的原因:STM32的APB时钟存在“x2”的问题。 ? 也就是说:如果APB分频值等于1,则x1;APB分频值不等于1,则x2。用一张动画来说明: ? 因此,移植代码的时候,一定要注意时钟源(频率),否则就会快(或慢)一倍的问题。
7系列FPGA中,时钟区域的宽度(水平方向)为芯片宽度的一半,而UltraScale不再有这种限制。 如下图所示的UltraScale时钟区域(图片来源,ug949,figure3-37),共有6x6即36个,如果是7系列FPGA,则是2x6即12个。 ? BUFGCE_DIV具有分频功能,对于简单的分频,相比于MMCM/PLL,BUFGCE_DIV在功耗上更具优势,而且如果分频时钟和源时钟有跨时钟域路径,那么相应的Clock Skew会更小。 MMCM生成时钟为600MHz,实例化两个BUFGCE_DIV,其分频因子分别为1和2,从而可分别生成一个600MHz时钟和一个300MHz时钟,而且,这两个生成时钟也是同相的。 ? 该时钟缓冲器也具有分频功能,也可以驱动FPGA内部其他逻辑资源。
QPLL输出为同一Quad内的每个transceiver的TX和RX时钟分频器块提供信号,该块控制PMA和PCS块使用的串行和并行时钟的生成。 反馈分频器N决定了VCO的乘法比率。QPLL的输出频率是VCO频率的一半。锁定指示块比较参考时钟和VCO反馈时钟的频率,以确定是否已经实现了频率锁定。 QPLL VCO在两个不同的频段内工作。 其中,N,M以及D表示QPLL分频器的属性,如下表: QPLL的分频属性 下面是几个通用协议的QPLL分频器属性设置值,可以自行验证: - END -
AD9528产生最高频率为1.25 GHz的六路输出(输出0至输出3、输出12和输出13),以及最大频率高达1 GHz的八路输出。 两路参考输入和VCXO路径上的数字时钟分频器分频数均为10比特,1--1023之间的任意整数分频。 VCO到鉴相器路径上有两个分频计数器(M1,N2)。M1可配置为 3,4,5 。N2为8比特计数器,支持1-256的任意整数分频。 K的值介于0到65535之间,总分频系数为2×K,是在K分频器寄存器中编程值的两倍。 (2)配置参数以及通道参数的初始化 (3)各个需要配置的输出通道的参数配置。包括输出使能,输出模式,信号源,通道分频数的配置。 (4)PLL1,PLL2,SYSREF配置。
异或 ^ 的几个作用 一、交换两个整数的值而不必用第三个参数 a = 9; b = 11; a=a^b; 1001^1011=0010 b=b^a; 1011^0010=1001 a=a 奇数分频电路: 奇数分频电路常用的是错位“异或”法的原理。 如进行三分频,通过待分频时钟的上升沿触发计数器进行模三技术,当计数器计数到邻近值进行两次翻转。比如计数器在计数到1时,输出时钟进行翻转,计数到2时再进行翻转,即在邻近的1和2时刻进行两次翻转。 这样实现的三分频占空比为1/3或2/3.如果要实现占空比为50%的三分频时钟,可通过待分频的时钟上升沿触发计数器和下降沿触发计数器进行三分频,然后将上升沿和下降沿产生的三分频时钟进行相或预算,即可得到占空比为 50%的三分频时钟。