FPGA三分频,五分频,奇数分频

我们在做FPGA设计时,有时会用到时钟频率奇数分频的频率,例如笔者FPGA的晶振为50M,当我们需要10M的时钟时,一种方式可以使用DCM或PLL获取,系统会内部分频到10M,但其实VERILOG内部也完全能实现,所以我们还是来了解一下。

有这样一个欢乐的时钟了,我们要得到以下的分频效果:

奇数分频的难点就在于,三分频要求1.5倍的时钟时间翻转一次,这样整体的周期时间是原来的3倍,即三分频。五分频亦类似。而恰恰verilog不允许你在两个always模块里对同一reg赋值。

那怎么得到三分频的时钟呢?请看下图

如果生成这样一个占空比2/3,周期三倍于时钟的信号(2行)。同时产生一个超前或落后于它半个Clock周期时间的信号(3行),对两信号做与运算

,得到的结果就恰好是三分频的时钟(4行);而Verilog中恰好不允许你在两个always模块里对同一reg赋值,但允许你在Clock的Posedge和Negedge分别对两个不相关的信号赋值。

[cpp] view plain copy

print?

  1. assign clkout=state1[1]&state2[1];
  2. [email protected](posedge clk)
  3. begin
  4. case(state1)
  5. begin
  6. 2‘b01:state<=2‘b10;
  7. 2‘b10:state<=2‘b11;
  8. 2‘b11:state<=2‘b01;
  9. endcase
  10. end
  11. [email protected](negedge clk)
  12. begin
  13. case(state2)
  14. 2‘b01:state<=2‘b10;
  15. 2‘b10:state<=2‘b11;
  16. 2‘b11:state<=2‘b01;
  17. endcase
  18. end

同样的,五分频

[cpp] view plain copy

print?

  1. assign clkout=state1[1]&state2[1];
  2. [email protected](posedge clk)
  3. begin
  4. case(state1)
  5. begin
  6. 3‘b010:state<=3‘b011;
  7. 3‘b011:state<=3‘b100;
  8. 3‘b100:state<=3‘b101;
  9. 3‘b101:state<=3‘b110;
  10. 3‘b110:state<=3‘b111;
  11. 3‘b111:state<=3‘b010;
  12. endcase
  13. end
  14. [email protected](negedge clk)
  15. begin
  16. case(state2)
  17. 3‘b010:state<=3‘b011;
  18. 3‘b011:state<=3‘b100;
  19. 3‘b100:state<=3‘b101;
  20. 3‘b101:state<=3‘b110;
  21. 3‘b110:state<=3‘b111;
  22. 3‘b111:state<=3‘b010;
  23. endcase
  24. end

什么原理呢?其实这样想挺好理解的:

三分频,每1.5个时钟周期就要翻转一次,因此我们通过时钟上升沿构造低电平占1个时钟周期,高电平占2个时钟周期的信号,再通过时钟的下降沿产生相同的信号,这相当与把原信号右移了半个时钟周期,相与后高电平被削掉了半个周期,低电平添了半个周期,就产生了1.5个时钟周期翻转一次的效果。

五分频类似。

由此猜测11分频可以由上升沿构造低电平占5个时钟周期,高电平占6个时钟周期的信号产生,我们来验证一下

验证是的啦

转载自:http://blog.csdn.net/lt66ds/article/details/10035187

时间: 2024-10-09 04:02:52

FPGA三分频,五分频,奇数分频的相关文章

奇数分频

奇数分频思路:(结合图示进行理解) 第一步:在时钟的上升沿和下降沿分别产生一个计数器.cnt_up 在时钟上升沿计数,cnt_down 在时钟下降沿计数(例:如果是 N 分频,就从0计数到 N-1) 第二步:根据这两个计数器产生两个控制信号 clk_up , clk_down. 注意:clk_up 和 clk_down 的高低电平的比例是有规律的. 如果是N分频,比例为 N/2 : N/2+1 或者  N/2+1 : N/2 如果是3分频,那么比例就是 1:2 或者 2:1. 如果是5分频,比例

[转]太岁三煞五黄

在风水理论里有三大煞,一是太岁,二是三煞,三是五黄正关煞. 1.太岁风水理论认为,当太岁飞到大门时,当年容易招惹是非.官灾.在太岁流年所到方位挂上一个八卦,可解决问题.公元年份 农历 太岁流年所到方位2009 己丑牛年 东北位2010 庚寅虎年 东北位2011 辛卯兔年 正东位2012 壬辰龙年 东南位2013 癸巳蛇年 东南位2014 甲午马年 正南位2015 乙未羊年 西南位2016 丙申猴年 西南位2017 丁酉鸡年 正西位2018 戊戌狗年 西北位2019 己亥猪年 西北位2020 庚子

中国,第三十五个生日.周以纯

1 群山对江河说 江河对森林说 森林对土地和太阳说 土地和太阳对人说 十亿中华儿女对世界说—— 中国!中国 沿着历史长河的古道 走进第三十五个 金灿灿的十月 大地和天空 欢声和金风,旗的红云 神圣的五颗金星 镶嵌在中国的 平川.高原.大漠…… 从未有过的蓬勃—— 风,撒着欢儿奔跑 雨,适着时令洒落 心,在一个节拍上跳荡 爱,在一棵大树上结果 2 呵!中国 在过第三十五个生日 心地,再不窄小狭隘 却是宇宙般寥阔 胸怀,再无骤雨恶风 却是蓝天般澄澈 眼界,再不短浅局限 却是穿越一切微观宏观世界 该摈

Welcome to Swift (苹果官方Swift文档初译与注解三十五)---248~253页(第五章-- 函数 完)

Function Types as Return Types (函数类型作为返回值类型) 一个函数的类型可以作为另一个函数的返回值类型.可以在一个函数的返回值箭头后面写上一个完整的函数类型. 例如: 下面的例子定义了两个简单的函数,分别为stepForward 和 stepBackward.其中stepForward函数返回值比它的输入值多1,stepBackward函数返回值比它输入值少1.这两个函数的 类型都是(Int) -> Int: func stepForward(input: Int

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—将bloomfilter(布隆过滤器)集成到scrapy-redis中

第三百五十八节,Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤器)集成到scrapy-redis中,判断URL是否重复 布隆过滤器(Bloom Filter)详解 基本概念 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定.链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢.不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构.它可以通过一

第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

第三百五十六节,Python分布式爬虫打造搜索引擎Scrapy精讲-scrapy分布式爬虫要点 1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

NeHe OpenGL教程 第三十五课:播放AVI

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十五课:播放AVI 在OpenGL中播放AVI: 在OpenGL中如何播放AVI呢?利用Windows的API把每一帧作为纹理绑定到OpenGL中,虽然很慢,但它的效果不错.你可以试试. 首先我得说我非常喜欢这一章节.Jonat

Java进阶(三十五)java int与integer的区别

Java进阶(三十五)java int与integer的区别 前言 int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象. 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是前者而integer 是后者(也就是一个类):因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null. 2.初始化时: int i =1; Integer i= new In