社区导航

 
查看: 13373|回复: 31

Verilog 实现任意占空比、任意分频的方法

[复制链接]

17

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2012-4-21 22:52:09 | 显示全部楼层 |阅读模式

分频程序虽然简单,但我觉得由简入难是学习的一个必然阶段,慢慢的我们自然会成长起来。所以如果有时间的话,大家都可以将自己的这种“小程序”贴到论坛上来。如果你的程序好,其他人也可以学习;如果你的程序有问题,大家可以一起帮你找问题,共同进步。还有,我觉得在 发贴的时候,最好能将原理说一下。一来大家看你的贴能学到东西;二来也方便解答你的问题,不然还得解答者自己去找资料搞懂原理,然后再回答你,回答你问题 的人自然也就不多了。

verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求这样的话,对于程序有一定的要求,现在我在前人经验的基础上做一个简单的总结,实现对一个频率的任意占空比的任意分频。

比如:我们FPGA系统时钟是50M Hz,而我们要产生的频率是880Hz,那么,我们需要对系统时钟进行分频。我们很容易想到用计数的方式来分频:

50000000/880 = 56818

这个数字不是2的整幂次方,那么怎么办呢?我们可以设定一个参数,让它到56818的时候重新计数不就完了吗?呵呵,程序如下:

module div(clk, clk_div);

input clk;

output clk_div;

reg [15:0] counter;

always @(posedge clk)

if(counter==56817) counter <= 0;

else counter <= counter+1;

assign clk_div = counter[15];

endmodule

在我们日常的设计中很多情形下会用到需要分频的情形,好多人的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计,上面的程序就是一个体现。

下面我们来算一下它的占空比:我们清楚地知道,这个输出波形在counter032767的时候为低,在3276856817的时候为高,占空比为40%多一些,如果我们需要占空比为50%,那么怎么办呢?

我们再设定一个参数,使它为56817的一半,使达到它的时候波形翻转,那不就完了吗?呵呵,再看看:

module div(clk, clk_div);

input clk;

output clk_div;

reg [14:0] counter;

always @(posedge clk)

if(counter==28408) counter <= 0;

else counter <= counter+1;

reg clk_div;

always @(posedge clk)

  if(counter==28408) clk_div <= ~clk_div;

endmodule

占空比是不是神奇地变成50%了呢?呵呵。

继续让我们来看如何实现任意占空比,比如还是由50 M 分频产生880 Hz,而分频得到的信号的占空比为30%

56818×30%=17045

module div(clk,reset,clk_div,counter);

input clk,reset;

output clk_div;

output [15:0] counter;

reg [15:0] counter;

reg clk_div;

always @(posedge clk)

if(!reset) counter <= 0;

else if(counter==56817) counter <= 0;

else counter <= counter+1;

always @(posedge clk)

if(!reset) clk_div <= 0;

else if(counter<17045) clk_div <= 1;

else clk_div <= 0;

endmodule


此帖出自FPGA/CPLD论坛

点评

挺好的  详情 回复 发表于 2012-11-5 17:33


回复

使用道具 举报

751

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2012-4-21 23:03:52 | 显示全部楼层
楼主辛苦 很好的一个范例 谢谢!

[ 本帖最后由 tx_xy 于 2012-4-21 23:05 编辑 ]
学习的乐趣在于分享。


回复

使用道具 举报

969

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-4-23 21:03:13 | 显示全部楼层
很不错啊


回复

使用道具 举报

214

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2012-4-23 22:51:57 | 显示全部楼层
奇数分频呢,比如3分频。

点评

3分频计数到2 变1,计数到3变0就可以了!只是占空比不能50%  详情 回复 发表于 2012-11-6 09:00


回复

使用道具 举报

18

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-5-6 13:48:56 | 显示全部楼层
很好谢谢


回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-5-7 19:18:52 | 显示全部楼层
学习呀


回复

使用道具 举报

8

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-6-21 10:47:38 | 显示全部楼层
不错不错


回复

使用道具 举报

8886

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2012-6-27 19:36:08 | 显示全部楼层

支持!

一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!


回复

使用道具 举报

7

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-9-6 21:46:32 | 显示全部楼层

浅显易懂 好程序

浅显易懂  好程序   顶顶顶!


回复

使用道具 举报

91

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-9-7 19:06:37 | 显示全部楼层
2.5分屏可以不


回复

使用道具 举报

466

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-9-9 08:53:24 | 显示全部楼层
学习了,论坛需要楼主这样子的人,顶起


回复

使用道具 举报

8886

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2012-9-17 21:52:51 | 显示全部楼层
楼主简单几句话把问题整得很清楚。
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!


回复

使用道具 举报

29

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-10-9 16:45:57 | 显示全部楼层

学习学习,貌似不错的资源

学习学习,貌似不错的资源


回复

使用道具 举报

16

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-10-10 16:58:57 | 显示全部楼层
为什么是计数器等于n,而不是时钟原频率比上分频比呢,求教啊,这一步始终看不懂啊


回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-10-18 09:59:46 | 显示全部楼层
浅显易懂  很好


回复

使用道具 举报

31

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-11-4 17:42:26 | 显示全部楼层
学习


回复

使用道具 举报

2

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2012-11-5 17:33:34 | 显示全部楼层

回复 楼主 笑溜溜 的帖子

挺好的


回复

使用道具 举报

292

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2012-11-6 09:00:13 | 显示全部楼层

回复 4楼 老阮 的帖子

3分频计数到2 变1,计数到3变0就可以了!只是占空比不能50%

点评

assign=clk_a|clk_b,在下降沿和上升延N-1/2处输出时钟翻转.最后求或运算  详情 回复 发表于 2012-11-10 17:10
一个人,一本书,一杯茶,一帘梦。


回复

使用道具 举报

30

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-9 14:35:30 | 显示全部楼层
正好找分频的例子,谢谢


回复

使用道具 举报

25

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-11-10 17:07:17 | 显示全部楼层

奇数分频和小数分频你没有介绍。

奇数分频和小数分频你没有介绍。我知道,有点小复杂。有谁想知道的留言给我QQ602788756


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-10 09:36 , Processed in 0.529038 second(s), 16 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表