verilog实现简单分频器的方案

电子说

1.3w人已加入

描述

偶数分频原理

偶数分频最为简单,很容易用模为N的计数器实现50%占空比的时钟信号,即每次计数满N(计到N-1)时输出时钟信号翻转。

以4分频为例,波形图如下:

Verilog语言

奇数分频原理

方法一

使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为 X/(2N+1))。

得到占空比为50%的奇数分频器的基本思想是:将得到的上升沿触发计数的奇数分频输出信号CLK1,和得到的下降沿触发计数的相同(时钟翻转值相同)奇数分频输出信号CLK2,CLK1和CLK2占空比不是50%而是低电平2周期,高电平1周期。

最后将CLK1和CLK2相或之后输出,就可以得到占空比为50%的奇数分频器。时序图如下,红线就是我们要的50%占空比三分频结果:

Verilog语言

方法二

和方法一唯一的区别是,CLK1和CLK2相反,高电平变低电平,低电平变高电平,最终输出的分频时钟是CLK1&CLK2。所以注意区别。波形图如下:

Verilog语言

整数数分频原理

总结1和2,设整数位N,当N为偶数时,cnt>1)。这是一个编程的技巧。

代码的一些具体技巧我将它放在了代码注释里面,希望大家好好看看。

设计思路

很多人在问我,拿到一个设计的时候如何去找思路。相信这也是很初学者的疑惑。一般推荐按照以下步骤来设计,一步步解决。

1.分解功能模块——分解到每个模块你都是能够想得到办法解决的为止,前期不要练习复杂的模块,推荐练习的有今天的各种分频,以后还可以尝试分数分频,UART,localbus,SPI,IIC这些是我推荐给大家练习的,由易到难。

2.每个分解的最小功能模块画出时序图,就像今天文章里分频的时序图一样,主要是帮你了解到每个时钟周期是怎么工作的,原理上是怎么实现的,时序图一出来,整个思路都清晰了。

3.组合功能模块,保证模块之间的时序是满足要求的,自底向上往上堆,每堆一个模块仿真一下,堆到顶层通过顶层仿真就算初步完成了功能的要求

设计整数分频

上面说了方法这里我们来试验下

1.分解模块功能,也就是画出总体框图

Verilog语言

2.画时序图,每个分频模块的时序图前面已经画过了,奇偶选择没有时序图,就是一个选择开关,奇数分频系数选择奇数分频模块输出,偶数分频系数选择偶数分频输出。

3.拼凑——奇偶分频各写一个alwyas,最后加上奇偶选择,如果不熟悉可以分成两个单独的.v文件写,最后封装到顶层。

设计在以上步骤以及完成了,现在我们来看看仿真结果:

Verilog语言

7分频

Verilog语言

6分频

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分