转自http://www.cnblogs.com/crazybingo/archive/2011/07/26/2117162.html

一、为啥要说任意分频

也许FPGA中的第一个实验应该是分频实验,而不是流水灯,或者LCD1602的"Hello World"显示,因为分频的思想在FPGA中极为重要。当初安排流水灯,只是为了能让大家看到效果,来激发您的兴趣(MCU的学习也是如此)。

在大部分的教科书中,都会提到如何分频,包括奇数分频,偶数分频,小数分频等。有些教科书中也会讲到任意分频(半分频,任意分数分频)原理,用的是相位与的电路,并不能办到50%的占空比,也不是很灵活。

但没有一本教科书会讲到精准,浅显易懂的高精度任意分频原理(至少Bingo没看到过),同时也没有一种设计能用同一个电路实现任意频率的控制。Bingo对于当年做的任意波形发生器时候的相位累加器原理,从中受到启发,总结出高精度任意频率合成的重要思维,在此贡献给大家,希望对大家有用。

二、任意分频原理以及性能

1. DDS相位累加器

(1)DDS合成流程

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

DDS是重要的频率合成方法,在波形发生器中有极其重要的应用。DDS主要由以下几部分组成:

a) 相位累加器

b) RAM数据读取

c) D/A转换器

d) 低通滤波器

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

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

(2)相位累加器原理

相位累加原理流程如上所示:

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

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

(MHz)

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

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

 (1)

 (2)

根据相位累加原理,以及RAM缓存读取数据,每一次的循环,RAM数据间隔K读取一次。

当K=1的时候,公式能输出最小频率,根据公式(1):

所以,最小波形频率步进为0.011655Hz。

当fo=1Hz的时候,根据公式(2)

所以,每Hz的增减,K的步进为85.90。

当K=N/2的时候,公式能输出最大频率(因为每个CLK跳变一次),此时,根据公式(1),得到

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

2. 任意频率分频原理

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

我们规定,对Cnt进行对半50%拆分,具体如下:

(1)当的时候,,即低电平;

(2)当的时候,fo=1,即高电平。

同上:

在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

本代码由Bingo从DDS相位累加器中,相应移植总结出来的任意频率分频原理,本模块应用在多个对频率精准度要求比较高的工程中(如UART中,要得到115200Hz的bps,用这种任意分频的原理来得到精准的方法,一定程度上能够提高数据传输的准确率)。

在DDS中的相位累加器的任意分频原理,在一般工程中同样可以应用。在某些应用场合,还是值得考虑的。本应用纯属Bingo个人主观应用,如有异议,请联系本人。

转载于:https://www.cnblogs.com/adxiaowei/p/4060840.html

为所欲为——教你什么才是真正的任意分频相关推荐

  1. office 论文 页码_八个步骤教你用Word写论文从任意页添加页码

    原标题:八个步骤教你用Word写论文从任意页添加页码 大家不论是在完成平时论文作业还是在完成学术严谨的毕业论文的时候,刚开始着手写作的时候可能会忽略页码的问题,但是当文章字数越来越多页码原来越多的时候 ...

  2. 产教融合育人才——华云数据与安徽建筑大学开展人才实训室合作洽谈会

    ​ 为进一步推进人工智能实训室的开展,加快信创人才培养,为中国声谷创新发展提供人才驱动.2021年12月23日,在安徽省经信厅软件服务业处处长余要火的带领下,华云数据有限公司安徽智能办公事业部总监汪月 ...

  3. 教您用CSS的鼠标手势实现任意标签鼠标划过变成小手

    就是:cursor:pointer,调用方法:style="cursor:pointer "

  4. python百度贴吧怎么爬取最早的帖子_【Python爬虫教学】百度篇·手把手教你抓取百度贴吧任意贴吧指定范围页数内的源代码...

    开门见山. 懒癌一犯,能拖一天是一天. 好了,亲爱的小伙伴们,我又回来了!今天带来的是抓取输入的任意贴吧,抓取指定范围页数内的源代码. 工具: 依旧是 PyCharm 和 Google 浏览器,pyt ...

  5. 教你在每段视频的任意位置添加LOGO图片

    有不少朋友都想给自己亲手制作的视频加上自己的专属图片,让视频更具个性化,但是到底该怎么给视频加LOGO呢?下面请随小编一起来试试. 需要哪些工具? 视频剪辑高手 多段视频素材 怎么快速剪辑 在视频剪辑 ...

  6. 基于FPGA的UART接口协议设计

    一.PC终端概述 PC终端,Personal Computer 智能终端,通俗的讲,就是利用电脑GUI界面控制我们的外部硬件电路. 因此设计到了PC与外部硬件电路的通信接口.对于台式电脑.个人笔记本, ...

  7. 计算机硬件加速怎么开,显卡硬件加速,小编教你电脑怎么开启显卡硬件加速

    小编之前是不知道怎么开启显卡硬件加速的,后来是朋友教我,才知道原来开启显卡硬件加速并不难操作.所以今天小编也将者开启的方法分享给小伙伴们.让你们也知道怎么开启硬件加速. 显卡硬件加速有什么作用呢?其实 ...

  8. 教资计算机科学与技术教资,教资笔试查成绩啦!广师大未来教师们又前进一步...

    原标题:教资笔试查成绩啦!广师大未来教师们又前进一步 这里是 今日起考生登录 ntce.neea.edu.cn "中小学教师资格考试网" 即可查询笔试成绩啦 惊不惊喜 意不意外 查 ...

  9. 不懂中医的才攻击中医

    现代科学尚无力解释的中医,不是中医落后,而是中医的思想观念和理论体系超出现代医学认识论范畴.即中医虽然包含现代系统论思想,但超越现代系统论.<易经>和中医的博大精深思想非现代系统科学所能包 ...

最新文章

  1. CSS 之 控制图片与文字对齐
  2. Linux getcwd()的实现【转】
  3. Android 获取经纬度,地理位置,省市区
  4. 13 python初学(函数)
  5. 1.3编程基础之算术表达式与顺序执行 12 计算球的体积
  6. php mencache扩展,【memcache缓存专题(3)】PHP-memcache扩展的安装以及使用
  7. Struts2相关面试题
  8. 敏捷开发系列学习总结(5)——这几招搞定团队协同Coding
  9. SSH框架的简化(struts2、spring4、hibernate5)
  10. selenium——鼠标事件
  11. 安装java没有jdk_安装Java 环境 JDK 最完整配置方法
  12. (论文阅读)图像超分辨率的回顾与展望
  13. java循环制作万年历,JAVA-万年历代码--循环语句
  14. 惠普m154a硒鼓芯片清零_打印机硒鼓芯片清零 请问一下硒鼓芯片清零是什么意思...
  15. 二、量子通信与量子加密
  16. 混凝土静力受压弹性模量试验计算公式_C50混凝土静力受压弹性模量试验报告
  17. 火狐浏览器打印网页不全_win7系统打印网页显示不全的解决方法
  18. 推荐一款待办事项和日程管理的微信小程序——腾讯待办
  19. box-sizing
  20. iOS开发中屏幕旋转(二)

热门文章

  1. tomcat 日志分割脚本
  2. 【web安全】Xss Exploits and Defense翻译4
  3. 【转】GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
  4. javascript实现缩略图
  5. 比特币现金支持者为BCH引入了各种新概念
  6. 比特币布道者Roger Ver是如何被污蔑成骗子的
  7. vue修饰符 .lazy .number .trim
  8. Python3学习笔记01-环境安装和运行环境
  9. DataTable的Compute方法和Expression语法
  10. 2.7-egrep及bash中的变量