|
以2,3,5,8分频为例来介绍原理:
最大计数长度为3的计数器即从0计数到2,需要的bit位数是log2Ceil(3)=2,最高位为bit(1)
00 01 10 11 对于bit(1)来说,二个周期为0,原本是二个周期为1,但计数器值判断时用cnt === (3-1).U则cnt := 0.U,输出始终是out := cnt(1),
这样前二个时钟为0最后一个时钟为0(cnt不会计数产生11这样的值),也就是说输出时钟周期之内原时钟有三个周期,这种奇分频只在
最后一个时钟为1,占空比不是50%
最大计数长度为5的计器即计数从0到4,需要的bit位数是log2Ceil(5)=3,最高位为bit(2)
000~011 100~111 同样,计数器值判断用cnt ===(5-1).U则cnt:=0.U,输出也是out:=cnt(2),则前四个周期输出为0,最后一个周期100时为1(其它101,
110,111等cnt值不会产生)
最大计数长度为8的计数器即从0计数到7,需要的bit位数是log2Ceil(8)=3,最高位为bit(2)
000~011 100~111 对于bit(2)来说,前四个时钟周期0,后四个周期为1,但计数器值判断时用cnt === (8-1).U则cnt := 0.U,输出始终是out:=cnt(2),
这样前四个时钟000~011输出为0,后四个时钟100~111输出为1,占空比为50%的输出
最大计数长度为2,log2Ceil(2)=1,最高位为bit(0)
0 1 判断计数器值时cnt === 1.U则cnt:=0.U 输出也是out:=cnt(0),这样前一个时钟输出为0,后一个时钟输出为1,最终是一个输出时钟周期
之内原时钟有二个周期,即2分频,且占空比为50%
上面不管是偶分频还是奇分频,总的原则就是通过分频值算出所需要的bit位数,计数器的最高bit位的值当作输出值,关键是计数器的值复位判断,必须、
要cnt === (所需要的分频值 - 1)时cnt:=0.U,这样处理之后,如果是偶分频则是占空比为50%的分频,如果是奇分频则只最后一个时钟输出为1.
|
|