FPGA经典模块(1)——分频器
在数字逻辑电路设计中,分频器是一种基本电路,通过分频可以得到需要的时钟频率。常见的分频器有二进制分频器、偶数次分频器、奇数次分频器、占空比可调的分频器和小数分频器。分频的方法很多最常见的就是利用加法器对时钟信号进行分频,当然也可以利用一些专用的电路结构来实现。
偶数次分频器是比较简单的,最简单的是2分频的即使不用加法器也可以搞定,在每个时钟上升沿来的时候把电平翻转一次就OK。其他的偶数次分频电路在中间加一个加法器模块用于计数,当记的数达到你预设置的值时计数器清零,在分频时钟输出的模块中当达到预设置的值的一半时输出时钟翻转,这样就可以达到任意偶数次分频的目的。
奇数次分频器稍微有点难度,主要是它的输出时钟跳变即发生在上升沿又发生在下降沿,我最开始的想法是分别对上升沿和下降沿进行计数(cnt_pos和cnt_neg)然后在把cnt_pos和cnt_neg送给一个组合电路,经过运算后再输出分频时钟,结构是没有设计出来这个组合电路。后来参考 真00无双 的。奇数次分频器难度就在于输出时钟既发生在时钟上升沿又发生在时钟下降沿,我现在想做的就是把1分成0.5和0.5,用刚才的计数值cnt_pos和cnt_neg分别再产生中间时钟信号clk_p和clk_n并且这两个时钟的占空比不是50%,而是25%和75%,由于这两个中间时钟并不同步而且是相差原时钟的半个周期,这样对这两个时钟相或作为输出就正好可以还原成50%的方波而且是奇数次分频的。这种想法比较巧。
有了偶数次分频器和奇数次分频器的基础,其实写一个占空比可调的分频器也就不是太困难了。假设你的系统输入时钟是100MHz也就是10ns,如果你用的是偶数次分频器来做占空比可调的分频器那么,你能调的最小分度也就是10ns了,如果你用奇数次分频器的话那么最下分度也就是5ns而已(对不对还要想想),但是毕竟只能是半周期的整数倍。我想要它分辨率再小呢?也就是小数分频器,那怎么解决了?
看了 真00无双 的博客,觉得差的太多,至少态度上就差了很多。这就铸就了我和他的差距越来越大。