4个上升沿触发寄存器,4个下降沿触发寄存器,4个2输入与门,1个4输入或门,4个4输入与门,一个编码器
1.编码器将sel信号编码成sel0,sel1,sel2,sel3四个信号
2.上升沿寄存器0,与下降沿寄存器0进行级联(相同时钟驱动clk),下降沿时钟生成两个信号——q0,q0n
3.将q0与clk进行&逻辑,生成clk_gate输出
4.复制2和3步骤3次,分别实现clk2,clk4,clk8的门控功能,并且生成q1n,q2n,q3n和clk2_gate,clk4_gate,clk8_gate.
5.其中上升沿寄存器0的D端连接sel0&q1n&q2n&q3n,依次类推,上升沿寄存器1的D端连接sel1&q0n&q2n&q3n。。。。。。
6.将生成的clk_gate,clk2_gate,clk4_gate,clk8_gate使用四输入的或门进行“|”逻辑
7.完成
但是版主说的是分频时钟,所以可以选择取消上升沿寄存器直接使用1级下降沿寄存器,但是通常我会选择级联使用。
后端处理:
1.综合的时候需要使用create_generated_clock进行时钟的指定,并且使用-add加载到最终生成的线上
2.但是这样还会出现时钟门控处的时序问题,我的做法是使用Macromodule将寄存器的时钟树长缓
3.不过不知道能不能使用IO/D pin balance这种方法实现,还没有试过。最后仿真,没问题就OK 了。
版主有答案么? |