奇分频和偶分频
前言
在数字电路中,时钟占据着重要的作用,在FPGA的开发中,都是以时钟为基本单位来计算时间的,一般在我们使用的FPGA开发板中,只有一个晶振用来产生时钟。因此,在开发板设计好之后,只能有一个频率的时钟,但是我们在实际开发的过程过,使用的时钟远远不止一个,这个时候就需要我们产生新的时钟。通常称为分频和倍频,产生分频有两种方式:使用PLL核和verilog代码自己实现;而倍频我们只能通过PLL核来实现;分频总体上可以分为偶分频、奇分频和小数分频三种,在本文中将为大家介绍如何通过verilog自己实现占空比为50%的奇偶分频。
偶分频
首先以一个四分频为例来向大家讲解。
在开始之前,为了便于理解,首先在这里提供一个图(手绘的,不太标准,但是意思能表达出来):
假设原来的时钟为clk
,四分频之后的时钟为clk_4
,则四分频就是把原来的四个时钟周期变成现在的一个时钟周期。我们假设一个计数器为div_cnt
,初始值为0,每来一个clk
的上升沿,就给div_cnt
加1,则当div_cnt = 3
时,正好来了4个clk
(因为div_cnt
的值是从0开始加的,所以从0到3计数值为4),正好构成了一个clk_4
,然后让div_cnt
又从0开始计数,产生下一个clk_4
。
因为我们要产生一个占空比为50%的四分频,所以现在考虑什么时候是clk_4
的上升沿,什么时候是下降沿。我们任然从div_cnt
这个计数器来考虑,因为div_cnt
的值为0、1、2、3
,当为3时正好是clk_4
的一个时钟周期。又因为占空比为50%,所以clk_4
的高电平和低电平各占一半,对应到div_cnt
上,可以设定为clk_4
的低电平部分对应的是div_cnt
的0和1
,clk_4
的高电平对应的是div_cnt
的2和3
。
四分频的div_cnt
的变化是从0到3,分频之后的时钟clk_4
由低电平变为高电平是在div_cnt
为1的时刻,我们用上面同样的方式分析,可以知道,当为六分频时,div_cnt
的变换是从0到5,分频之后的时钟由低电平变为高电平是在div_cnt
为3的时刻。
当我们要产生任意偶分频时,我们假设分频系数为DIV_CLK_FACTOR
,也就是我们要几分频,计数器仍然为di