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

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

3天内不再提示

基于相位累加器的任意分频原理解析

454398 来源:FPGA开源工作室 作者:FPGA开源工作室 2020-11-29 10:19 次阅读

在大部分的教科书中,都会提到如何分频,包括奇数分频,偶数分频,小数分频等。

1、DDS相位累加器

(1)DDS合成流程

首先讲述DSS(直接频率合成法)的原理。

DDS是重要的频率合成方法,在波形发生器中有极其重要的应用。DDS主要由以下几部分组成:
a) 相位累加器
b) RAM数据读取
c) D/A转换器
d) 低通滤波器

直接频率合成法的流程图,有固定模块,输入频率控制器,输出固定频率的波形。如下图:


此电路最主要模块是相位累加器,通过相位累加器循环计数,循环读取RAM的数据,从而得到固定频率的波形数据。

(2)相位累加器原理

相位累加原理流程如下:


输入频率控制字,根据算法,来实现相位的变化,分析如下所示:

假定FPGA基准频率为50MHz,即基准频率:


假定计数器为32位计数器,即:


K为频率控制字,则相位输出的频率为:


即:


根据相位累加原理,以及RAM缓存读取数据,每一次0~(N-1)的循环, RAM数据间隔K读取一次。当K=1的时候,公式能输出最小频率,即:


最小波形频率步进为0.011655Hz。当fo=1Hz的时候:


所以,频率每变化1Hz,K的步进为85.90。当K=N/2的时候,公式能输出最大频率(因为每个CLK跳变一次),此时:


因此,根据频率控制字K的变化,能输出及固定频率的波形。

2、任意频率分频原理

在FPGA中某些应用场合,对频率要求比较高的情况下,用相位累加器原理来生成固定频率的方法,未尝不可。


我们规定,对Cnt进行对半50%拆分,具体如下:当cnt < N/2时,f0 = 0,也就是低电平;而当cnt > N/2时,f0 = 2,也就是低电平。

同理:





在FPGA中应用,Verilog代码如下所示:

/***************************************************
* Module Name : clk_generator
* Engineer : Crazy Bingo
* Target Device : EP2C8Q208C8
* Tool versions : Quartus II 9.1SP1
* Create Date : 2011-6-25
* Revision : v1.0
* Description :  
**************************************************/
/*************************************************
fc = 50MHz 50*10^6
fo = fc*K/(2^32)
K = fo*(2^32)/fc
= fo*(2^32)/(50*10^6)
**************************************************/
module clk_generator
#
(
parameter FREQ_WORD = 32'd8590 //1KHz
)
(
input clk, //50MHz
input rst_n, //clock reset
output reg clk_out
);
//************************************************/
reg [31:0] max_value;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
max_value <= 1'b0;
else
max_value <= max_value + FREQ_WORD;
end
//****************************************************/
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
clk_out <= 1'b0;
else
begin
if(max_value < 32'h7FFF_FFFF)
clk_out <= 1'b0;
else
clk_out <= 1'b1;
end
end
endmodule
/*******************************************************/

本模块可应用在多个对频率精准度要求比较高的工程中(如UART中,需要115200Hz的bps,用这种任意分频的原理来得到精准的方法,一定程度上能够提高数据传输的准确率)。

DDS中的相位累加器的任意分频原理,在一般工程中同样可以应用。在某些应用场合,还是值得考虑的。
编辑:hfy


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

    关注

    1602

    文章

    21320

    浏览量

    593158
  • 低通滤波器
    +关注

    关注

    13

    文章

    448

    浏览量

    46917
  • 分频
    +关注

    关注

    0

    文章

    237

    浏览量

    24731
  • 波形发生器
    +关注

    关注

    3

    文章

    284

    浏览量

    31186
  • 相位累加器
    +关注

    关注

    0

    文章

    10

    浏览量

    9143
收藏 人收藏

    评论

    相关推荐

    深圳市九天睿芯科技有限公司获得一项锁相环专利

    具体来说,此款锁相环含有:振荡器,用于生成振荡信号;分频器,接收振荡信号并产生分频信号;相位误差抵消模块,解析分频信号和参考时钟信号间的
    的头像 发表于 04-07 10:14 235次阅读
    深圳市九天睿芯科技有限公司获得一项锁相环专利

    EPWM_EnableAcc是控制自动产生10个累加器然后自动关闭PWM输出吗?

    EPWM_EnableAcc(EPWM1, 0, 10, EPWM_IFA_ZERO_POINT); 这个是控制自动产生10个累加器然后自动关闭PWM输出吗? void
    发表于 01-15 07:31

    怎样利用ADuC7060的累加器和计数来计算平均值?如何配置?

    请问怎样利用ADuC7060的累加器和计数来计算平均值?如何配置?当ADC0RCR = ADC0RCV时会产生中断,那请问这是什么中断类型?在哪里配置? 请问“和ADC0RCR配合使用,可屏蔽主通道ADC中断,从而产生较低的中断速率”怎么
    发表于 01-15 06:18

    如何实现分频时钟的切换

    其实这个分频时钟切换很简单,根本不需要额外的切换电路。一个共用的计数器,加一点控制逻辑,就可以了,而且可以实现2到16任意整数分频率之间的无缝切换。
    的头像 发表于 12-14 15:28 312次阅读
    如何实现<b class='flag-5'>分频</b>时钟的切换

    AD7606相位延迟怎么理解?是输出比输入相位提前9us还是滞后9us?

    如图:AD7606内置一个模拟滤波,幅频特性已经明白了,但是这个相位延迟怎么理解?是输出比输入相位提前9us还是滞后9us? 现在有个项目,AD7606前级有个双刀单掷模拟开关,我
    发表于 12-08 08:10

    使用AD9914进行相位纠正功能的疑惑求解答

    最近使用AD9914进行相位纠正功能实现。存在一些疑惑: 对于预设的16位相位偏移字(POW)在送入AD9914执行后,对于输出的波形,请问是会出现 相位截断类型的波形(我在示波器上没能捕捉到)(图1),还是产生类似频率增长(
    发表于 12-05 08:26

    tonr是什么意思

    可以使用“时间累加器”指令来累加由参数 PT 设定的时间段内的时间值。
    的头像 发表于 07-13 14:21 1465次阅读
    tonr是什么意思

    如何理解电容、电感产生的相位

    对于正弦信号,流过一个元器件的电流和其两端的电压,它们的相位不一定是相同的。这种相位差是如何产生的呢?这种知识非常重要,因为不仅放大器、自激振荡器的反馈信号要考虑相位,而且在构造一个电路时也需要充分了解、利用或避免这种
    的头像 发表于 07-06 09:31 676次阅读
    如何<b class='flag-5'>理解</b>电容、电感产生的<b class='flag-5'>相位</b>差

    SIMATIC S7-1500 PLC循环右移指令(ROR)

    TIA博途软件位移指令能将将累加器的内容逐位向左或者向右移动。
    的头像 发表于 06-26 09:28 2408次阅读
    SIMATIC S7-1500 PLC循环右移指令(ROR)

    SIMATIC S7-1500 PLC右移指令(SHR)简述

    TIA博途软件位移指令能将将累加器的内容逐位向左或者向右移动。移动的位数由N决定,向左移N位相当于累加器的内容乘以2N,向右移相当于累加器的内容处理2N。移位指令在逻辑控制中使用也很方便。
    的头像 发表于 06-25 10:54 2396次阅读
    SIMATIC S7-1500 PLC右移指令(SHR)简述

    SIMATIC S7-1500 PLC左移指令(SHL)及样

    TIA博途软件位移指令能将将累加器的内容逐位向左或者向右移动。
    的头像 发表于 06-25 10:38 1072次阅读
    SIMATIC S7-1500 PLC左移指令(SHL)及样

    SIMATIC S7-1500 PLC左移指令(SHL)简述

    TIA博途软件位移指令能将将累加器的内容逐位向左或者向右移动。移动的位数由N决定,向左移N位相当于累加器的内容乘以2N,向右移相当于累加器的内容处理2N。移位指令在逻辑控制中使用也很方便。
    的头像 发表于 06-19 09:24 2717次阅读
    SIMATIC S7-1500 PLC左移指令(SHL)简述

    分频器之小数分频设计

    对于要求相位以及占空比严格的小数分频,建议采用模拟电路实现。而使用数字电路实现只能保证尽量均匀,在长时间内进行分频
    的头像 发表于 06-05 17:20 1072次阅读
    <b class='flag-5'>分频</b>器之小数<b class='flag-5'>分频</b>设计

    任意偶数的分频器设计

    所谓“分频”,就是把输入信号的频率变成成倍数地低于输入频率的输出信号。
    的头像 发表于 06-05 16:54 777次阅读
    <b class='flag-5'>任意</b>偶数的<b class='flag-5'>分频</b>器设计

    数字设计笔试Verilog手撕代码—累加器

    实现累加器的加法器例化的个数。按照原文大佬的设计方法,因为数据连续且加法器的延迟周期是2,使用使用一个实现累加,会有一半的数据丢失。
    的头像 发表于 06-02 16:35 1790次阅读
    数字设计笔试Verilog手撕代码—<b class='flag-5'>累加器</b>