vhdl写半整数分频器的困惑
项目中遇到pll资源不够,要做出2.5分频器,在网上找了一些资料,基本步骤为先用输入时钟做出占空比为50%的5分频,把这个时钟与输入时钟异或得到计数脉冲。
首先,分别用输入时钟上升沿和下降沿触发,做出占空比为40%的5分频(如图1中的clk1和clk2),再将这两个时钟取或门,便得到占空比为50%的5分频p_clk。
然后,将p_clk与输入时钟取异或逻辑,得到l_clk。
最后根据l_clk的上升沿计数(如图1),0时取低电平,1和2时取高电平,的到占空比为20%的2.5分频。
图1
图1是我用功能仿真得到的波形图,从最终输出来看,确实是实现了2.5分频,并且占空比可调,但是如图中所示,cnt_3是在l_clk的上升沿计数,可是由2返回到0时并没有出现上升沿,让人很郁闷。我把代码看了好多遍,也找不出端倪来。回宿舍的路上想是不是由于异或门电路clk_in也就是输入时钟在作怪,可是第二天把输入时钟反向后,让它的下降沿对准2到0的转换处,可也能够实现2.5分频。
后来就想看看代码的timing仿真,一看结果就出来了,延时,都是延时惹的祸!
图1中,clk_in和p_clk去异或,在2的部分,两者同为低,到0是两者同为高(或者相反),取异或后l_clk一直为低电平。再看图2中,由于延时(约为3/4个周期)的关系,使得p_clk不能与输入时钟同时变化,在2到0转换时产生了上升沿。
问题解决了,可真是佩服设计者,怎么想到利用延时来做文章!
用户1603884 2011-6-18 14:48