Verilog 分频器设计(奇偶分频)

一、偶数分频

Verilog 分频器设计(奇偶分频)_第1张图片

Verilog 分频器设计(奇偶分频)_第2张图片

Verilog 分频器设计(奇偶分频)_第3张图片

以上是实现2、4、10分频的Verilog实现代码及仿真结果时序图,分析一下:

对于2这样的简单分频实现,直接在输入时钟的每个上升沿取反即可,时序图中可见clk_div2就是在clk时钟的每个上升沿取一次反,如此两个时钟周期取反一次,得到的新时钟自然是原时钟的2分频;

4分频可以在2分频的基础上再作一次2分频,即可得到原时钟的4分钟,注意代码中实现4分频时是在2分频时钟的时钟上升沿进行取反;

类似10分频这样分频系数过大的情况,就需要对分频系数N循环计数进行分频,在计数周期达到分频系数中间数值N/2时进行时钟翻转,可保证分频后的时钟占空比为50%,可见代码中定义了一个计数器cnt,它的作用就是在每个时钟上升沿计数一次,每当计数到N/2-1时清零,同时时钟翻转一次,如此就相当于原时钟每隔5个周期状态翻转一次,得到的新时钟周期即原时钟周期的十倍,即实现了10分频。

二、奇数分频

奇数分频若不要求占空比,可以按照如上所述方式实现任意整数分频,若要实现50%占空比分频,则可以利用源时钟双边沿特性、采用“与操作”或“或操作”实现

或操作调整占空比:时序图如下

1、利用源时钟上升沿分频出高电平为1个周期、低电平为2个周期的3分频时钟;

2、利用源时钟下降沿分频出高电平为1个周期、低电平为2个周期的3分频时钟;

3、两个3分频时钟应该在计数器相同数值、不同边沿下产生,相位差半个时钟周期,两者相或即可得到占空比50%的3分频时钟

Verilog 分频器设计(奇偶分频)_第4张图片

下面给出一段实现50%占空比、9分频的代码示例及时序图

Verilog 分频器设计(奇偶分频)_第5张图片

Verilog 分频器设计(奇偶分频)_第6张图片

Verilog 分频器设计(奇偶分频)_第7张图片

代码中可以看到,依旧是首先提供一个计数器,计数到分频系数N-1,清零、重复下一计数过程;

DIV_CLK>>1是移位操作,二进制数9移位得到二进制数4,当计数器计数到3时,时钟赋0;当计数器到8时,时钟赋1,即实现在计数器值在4~8时给时钟低电平、0~3时给时钟高电平(当然,计数器每个值对应一个时钟周期),如此即实现利用源时钟上升沿得到一个4个周期高电平、5个周期低电平的9分频时钟;

类似的操作实现利用源时钟下降沿得到一个4个周期高电平、5个周期低电平的9分频时钟,注意在产生这两个9分频时钟的过程中,它们是在计数器相同数值、不同边沿下产生的,相位相差半个周期而已,最后对这两个9分频时钟相或即可得到占空比50%的9分频时钟。

与操作调整占空比:时序图如下

1、利用源时钟上升沿分频出高电平为2个周期、低电平为1个周期的3分频时钟;

2、利用源时钟下降沿分频出高电平为2个周期、低电平为1个周期的3分频时钟;

3、两个3分频时钟应该在计数器相同数值、不同边沿下产生,相位差半个时钟周期,两者相与即可得到占空比50%的3分频时钟

Verilog 分频器设计(奇偶分频)_第8张图片

类似地给出一段实现50%占空比、9分频的代码示例及时序图

Verilog 分频器设计(奇偶分频)_第9张图片

Verilog 分频器设计(奇偶分频)_第10张图片

Verilog 分频器设计(奇偶分频)_第11张图片

你可能感兴趣的:(fpga开发)