热度 11
2016-1-27 21:38
1728 次阅读|
0 个评论
时钟同步问题讲完了,下面就开始讲讲 soc 中另一种常见的情况,有时为了考虑到功耗,性能的问题,某个模块可能在某一种情况下工作在一个频率,另一种情况下工作在另一种频率,这个时候就需要进行 mux 的切换,有的人就会说了,哪简单啊,加个 mux 啊,可事实真的如此吗? 如上图,大家会很自然而想到的一种时钟切换电路,可是,你仔细分析,你会发现该电路会出现如下的问题,毛刺!这个毛刺无论对于 clk0 还是 clk1 都不是好事,它不属于任何一个时钟域,它的脉宽根本无法确定,你切换的点会影响毛刺的宽度。 那么该如何消除毛刺,进而消除后面可能带来的问题呢,见下图,加入反馈电路。 反馈是为了确保时钟真正被关闭了,例如, select 从 0 切换到 1 ,也就是选择 clk1, 但是这时要确保 clk0 被完全关闭了,所以通过 clk0 时钟域的 DFF 反馈回来的 1 (如果能反馈 1 说明 0 已经进入到 clk0 时钟域的 DFF 中了)与 clk1 时钟域的 select 进行相与。 另外,为了解决跨时钟域的问题( select 毕竟是不同于 clk0 , clk1 时钟域的),通常还会加入 1-2 级的 DFF 。 另外,这几个电路使用时需要注意一点的是两个 clk 都必须要震荡起来后才可以进行 select ,否则进行切换可能导致 select 不能被正确的传送到最后一级的与门上,这样消除毛刺的功能可能就无效。