1、为什么会有inferred clock
我们在cdc运行之前会通过netlist clock定义顶层的clock ports,之后cdc会基于我们定义的clock ports分析clock tree。
但是由于设计的复杂性,例如有black boxes的clock,cdc工具会将它们split为一个单独的clock tree,如果在clock tree上面有组合逻辑,例如MUX会使分析更加复杂。因此cdc工具分析后会认为除了user 定义的clock之外,clock tree还有其他的clock,这些工具推出来的clcok 就称为 inferred clock。
2、如何处理inferred clock
由于工具会将inferred clock定义为单独的clock group,而一般情况下这是我们不期望的,这些clock一般和我们定义的clock是一个group的,或者是它们自己是一个group的,如果cclock 定义不准确,会导致工具进行一些不必要的crosing 分析。总之在进行cdc分析之前,我们必须将inferred clock 清掉,确保我们的cdc分析准确。
常见的可能导致inferred clock的情况如下表
Class |
description |
fix |
primary |
来自于top port |
重新通过netlist clock为它分配clock group |
black box |
输出于black box |
如果有必要,重新通过netlist clock为它分配clock group |
gated MUX |
来自于clock MUX output。 |
cdc工具会假设mux输出的两个clock都异步于source clock。针对这种情况,我们有三种选择(1) 通过netlist clock为它分配clock group (2)使用netlist constant on the MUX select,使inferred clock依然于driver clock一个group (3)Use modal analysis |
gated combo |
clock通过组合逻辑驱动,这个组合逻辑可能是多个时钟驱动的;或者驱动组合逻辑时钟没有identified |
cdc工具会认为这个时钟和所有其他的时钟是异步的,我们有三种选择(1) 通过netlist clock为它分配clock group (2)使用netlist constant,使inferred clock依然于driver clock一个group (3)Use modal analysis |
undriven |
时钟没有driven |
添加时钟的driven 信号,或者将时钟设置为异步的,再或者netlist clock为它分配clock group。如何选择都基于设计具体分析 |