时钟分频电路之Innovus自动产生的_clock_gen skew group盘点

我们在查看时钟树综合的log时会发现工具会自动生成一些skew group,这些skew group的名字都是以_clock_gen开头的。

skew_group _clock_gen_CLK_CORE_PLL_clk_reg_1/func: insertion delay [min=0.020, max=0.064, avg=0.038, sd=0.022], skew [0.045 vs 0.050], 100% {0.020, 0.064} (wid=0.002 ws=0.001) (gid=0.062 gs=0.044)

SoC芯片中Clock Gen和Reset Gen的时钟树综合

出现这种情况往往多见于下面这种电路设计中,即多见于时钟分频电路处。

时钟产生电路的时钟树综合

由于工具看到FF1/Q到div_reg/SI有timing check,所以自动把分频器相关配置寄存器和div_reg归到一个新的skew group中。

这样做其实也是有弊端的,如果FF2和FF1之间需要做timing check,同样是会有setup和hold time violation。因为两者的clock tree latency不一样(clock 不平)。

解决的方法是设计中的分频寄存器不要串在scan chain中。

有的时候我们只希望工具严格按照我们的sdc中的时钟定义来生成对应的skew group,并不希望自动来生成。那么我们就需要通过下面的命令来实现。

set_ccopt_property extract_clock_generator_skew_groups false

需要注意的是这个ccopt property一定要在生成clock spec前设置,否则无效。

在咱们社区复杂时钟clock gen设计的时钟树综合CTS训练营项目中,由于default extract_clock_generator_skew_groups是开启的,所以工具会额外生成一系列_clock_gen开头的skew group,并且把分频寄存器和它的fanout归到同一个clock skew group做balance。

这样很显然是不符合我们的预期的。
在这里插入图片描述
为了给大家提供一个时钟树综合的练习,小编给大家提供一个innovus小实验。有需要的同学可以留言,我免费分享给大家。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

### 设置 `ccopt_merge_clock_gates` 属性为 `false` 的方法 在 Innovus 中,可以通过命令行使用 `set_ccopt_property` 来配置特定的设计优化选项。如果需要将 `ccopt_merge_clock_gates` 属性设置为 `false`,可以执行如下 Tcl 命令: ```tcl set_ccopt_property ccopt_merge_clock_gates false ``` 此命令的作用是禁用时钟门控单元的合并操作[^1]。具体来说,在设计优化阶段,Innovus 可能会尝试通过逻辑重构来减少冗余的时钟门控结构。当该属性被设为 `true` 时,工具允许此类优化;而将其设为 `false` 则完全禁止这种行为。 #### 关于 `ccopt_merge_clock_gates` 的作用 `ccopt_merge_clock_gates` 是一种控制时序优化策略的关键参数。它决定了 Innovus 是否会在综合或物理实现过程中自动识别并合并功能相同的多个时钟门控单元。启用这一特性通常有助于降低功耗和面积开销,但在某些情况下可能会引入不必要的复杂度或者违反设计约束。因此,对于那些对时钟树敏感的设计而言,可能需要显式地关闭这项功能以保持原有架构不变。 另外需要注意的是,除了上述提到的单一属性调整外,还有其他几个关联项也会影响最终效果,比如 `cts_merge_clock_gates`, `merge_clock_gates`, 和 `clone_clock_gates`. 如果希望全面抑制任何与时钟门控有关的变化,则建议同步修改这些相关联的开关状态: ```tcl set_ccopt_property cts_merge_clock_gates false set_ccopt_property merge_clock_gates false set_ccopt_property clone_clock_gates false ``` 以上脚本片段展示了如何利用 Tcl 脚本来批量设定一系列类似的选项至期望的状态值 (即 'false') ,从而确保整个流程遵循预期的行为模式而不发生意外改动。 ### 示例代码 以下是完整的示例代码用于展示如何一次性禁用所有与 clock gates 合并相关的选项: ```tcl # Disable all merging of clock gating logic during optimization. set_ccopt_property ccopt_merge_clock_gates false set_ccopt_property cts_merge_clock_gates false set_ccopt_property merge_clock_gates false set_ccopt_property clone_clock_gates false ``` 这段代码能够有效防止 Innovus时钟门控电路做出任何形式上的更改,适用于需要严格保护原始时钟拓扑的情形下运行。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值