推断出来的时钟门控,我不想要
比起写书,写专栏要轻松很多,不用考虑遣词造句,格式字体,让我们用白话来轻松讨论吧。
除了我们手动插入的时钟门控外,工具会自动推断出一些时钟门控,但其中有一部分,它其实不是时钟门控,而是时钟。
工具推断时钟门控的方法如下,如果A点是已声明的时钟,那么B点输入信号就会被推断为时钟门控,C点就是门控后的时钟。

但实际情况并不是这样的,我的设计中,也有A和B都是时钟的,两个都不是门控。
还有一种是时钟从pad输出,这个时候你再推断出时钟门控,再去检查时钟门控就没啥意义了,比如下图,假设A是一个想要输出的时钟,B,C,D是另外3个想要输出的信号,经过MUX 四选一输出到pad外面。由于A是时钟,B,C,D会被当成时钟门控,pad_output会被当成时钟树的一根树枝,pad_out_en又会被当成时钟门控。

被推断成时钟门控后,工具就会对时钟门控做时序检查,就是setup检查和hold检查。以下是一个hold检查的例子,检查点设定为该时钟的下降沿,门控须在时钟检查点后再保持一段时间,如果不是这样,就是违例。

违例了就会在min检查时报错:

但在pad的例子中,B,C,D,pad_out_en信号都不是门控,不想做门控检查,不想报错,咋办?
用set_disable_clock_gating_check命令,它只能屏蔽那些推断出的门控,没法屏蔽手动插入的门控,不过我们要的就是这个。
举个例子,这是屏蔽了对A2上门控的检查。
set_disable_clock_gating_check u_pad_mux/U3/A2
上面举的例子是hold检查,setup检查很多会被工具自动屏蔽掉,如下:
