写在前面
计组组合逻辑的一点小小的思考与整理
关于clock参与逻辑运算的问题,黑书英文版第二版(《Degital design and computer architecture》(2nd Edition) )中 P116 已有对此问题的阐释,摘录如下:
Generally, performing logic on the clock is a BAD IDEA. Clock gating delays the clock and can cause timing errors, as we will see in Section 3.5.3, so do it only if you are sure you know what you are doing.
这种时钟偏移 timing error
简言之是时钟不同时到达各个寄存器。时钟偏移也显著地增加了建立时间
\[t_{setup}\] 和保持时间 \[t_{hold}\]
及时序总开销,减少了组合逻辑的有效工作时间,增加了通过组合逻辑所需要的最小延迟。(证明可参见黑书中文版
P87 或黑书英文版
P148)从而,部分器件在一定条件下会不满足时钟约束。太多的时钟偏移还会导致严重的保持时间错误,有时还需要将触发器设置为特别慢来防止相关问题。这会使得时序分析的最坏情况变糟,影响电路的适用性。
那么怎么叫you are sure you know what you are doing?
我个人认为比如在普通的D触发器的实现中,需要用反相时钟组,确实没有其他好的办法时才会使时钟参与逻辑运算。实现带使能的D触发器时确实有两种方法,但是有时钟不参与逻辑运算的方法,就没必要采用另一种。甚至高老板的PPT里没有提到这一种内部电路。
更优质的解答:我也没法保证
所以能有严谨的方法,就不必冒险而产生可能的冒险()
省流:clock参与运算会使电路变差,尽量避免时钟参与逻辑运算。
最后,希望大家能从讨论区中相互借鉴,相互帮助,共同学习~