Design Compiler:时钟树在综合时的特性

相关阅读

Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482


有一类信号由于其自身高扇出的特性,需要使用树形结构来满足其DRC/时序约束的要求,比如时钟(复位、扫描使能等),本文就将讨论时钟树在综合时的特性。

由于综合工具不进行时钟树综合(Clock Tree Synthesis, CTS),在使用物理实现工具进行时钟树综合前,设计中所有的时钟都是理想时钟,其时钟偏移、时钟抖动、时钟延迟、时钟转换时间由set_clock_uncertainty、set_clock_latency、set_clock_transition命令直接设置,与触发器时钟引脚直接相连的时钟路径上的DRC约束不会被检查,下面展示了一个简单的例子。

图1 简单的例子(综合前)

复制代码
dc_shell> set_max_capacitance 0.0000001 [get_ports clk]
dc_shell> create_clock -period 10 [get_ports clk] // 必须定义时钟,否则无法识别时钟路径
dc_shell> compile
dc_shell> report_net [get_nets clk]
 
****************************************
Report : net
Design : dff
Version: W-2024.09-SP2
Date   : Thu Nov  6 16:46:58 2025
****************************************


Operating Conditions: fast   Library: fast
Wire Load Model Mode: top


Attributes:
   dr - drc disabled

Net                 Fanout     Fanin      Load   Resistance    Pins   Attributes
--------------------------------------------------------------------------------
clk                     16         1      0.03         0.00      17   dr
--------------------------------------------------------------------------------
Total 1 nets            16         1      0.03         0.00      17
Maximum                 16         1      0.03         0.00      17
Average              16.00      1.00      0.03         0.00   17.00
dc_shell> report_constraint -max_capacitance

****************************************
Report : constraint
        -max_capacitance
Design : dff
Version: W-2024.09-SP2
Date   : Thu Nov  6 16:44:19 2025
****************************************



    Constraint                                       Cost
    -----------------------------------------------------
    max_capacitance                                  0.00 (MET)

图2 简单的例子(综合后)

从上面的例子中可以看出,即使线网clk不满足DRC约束的要求,综合工具在综合时也并没有插入缓冲器来进行修复,代价函数中也并没有包含DRC违例。

但是在某些情况下,综合工具还是会在时钟路径上插入缓冲器,对于那些与触发器时钟引脚不直接相连的时钟路径就是如此,如图3所示。

图3 时钟路径上的DRC修复

在这种情况下,推荐使用set_auto_disable_drc_nets -on_clock_network true命令进行设置,这样整个时钟路径都会被禁止DRC约束检查,如图4所示。

图4 禁止整个时钟路径上的DRC约束检查

除了set_auto_disable_drc_nets命令之外,还有两个命令可以用来禁止缓冲器插入,但它们或多或少存在一些问题,下面将分别讨论。

set_dont_touch_network

有关set_dont_touch_network命令的详细介绍,可见下面这篇博客。

SDC命令详解:使用set_dont_touch_network命令进行约束https://blog.csdn.net/weixin_45791458/article/details/154078168?spm=1001.2014.3001.5501 set_dont_touch_network命令可以将当前设计中的一组端口、引脚或时钟标记为dont_touch网络源(设置端口、引脚或时钟对象的dont_touch_network属性为true),且dont_touch属性会沿着组合逻辑进行传播,这会阻止对整个时钟路径进行逻辑的添加、删除或尺寸调整,从而禁止缓冲器插入。

但是该命令无法禁止整个时钟路径上的DRC约束检查,因此综合工具会报告出现DRC违例。

该命令还有一些副作用,它可能会影响一些数据路径(在时钟作为数据使用的情况下)的优化,详细介绍可见下面这篇博客。

静态时序分析:时钟标记(作为数据使用的时钟)及其分析方式https://chenzhang.blog.csdn.net/article/details/146268285

set_ideal_network

有关set_ideal_network命令的详细介绍,可见下面这篇博客。

SDC命令详解:使用set_ideal_network命令进行约束https://blog.csdn.net/weixin_45791458/article/details/146082417?spm=1001.2014.3001.5501 set_ideal_network命令可以将当前设计中的一组端口或引脚标记为理想网络源(设置端口或引脚对象的ideal_network_source属性为true),且在一定情况下,理想属性会沿着组合逻辑进行传播,所有理想网络中的单元和线网都会被设置dont_touch属性,这会阻止对整个时钟路径进行逻辑的添加、删除或尺寸调整,从而禁止缓冲器插入,同时理想网络也会被禁止DRC约束检查。

与set_dont_touch_network命令类似,该命令的副作用也是可能会影响一些数据路径(在时钟作为数据使用的情况下)的优化。

下面针对这个副作用给出一个简单的例子。

图5 针对副作用的简单例子(综合前)

从上面的例子中可以看出,设计的时钟端口不仅连接到了触发器时钟引脚,还连接到了触发器的数据引脚,因此时钟作为数据使用了。

下面展示了使用set_dont_touch_network命令进行约束的结果,由于数据路径上的扇出过大,综合工具报告出现了DRC违例。

复制代码
dc_shell> set_max_fanout 2 [current_design]
dc_shell> create_clock -period 10 [get_ports clk] // 必须定义时钟,否则无法识别时钟路径
dc_shell> set_dont_touch_network [get_ports clk]
dc_shell> compile
dc_shell> report_constraint -max_fanout
 
****************************************
Report : constraint
        -max_fanout
Design : simple_register
Version: W-2024.09-SP2
Date   : Thu Nov  6 18:53:14 2025
****************************************



    Constraint                                       Cost
    -----------------------------------------------------
    max_fanout                                       1.00 (VIOLATED)

图6 使用set_dont_touch_network命令约束的综合结果

下面展示了使用set_ideal_network命令进行约束的结果。

复制代码
dc_shell> set_max_fanout 2 [current_design]
dc_shell> create_clock -period 10 [get_ports clk] // 必须定义时钟,否则无法识别时钟路径
dc_shell> set_ideal_network [get_ports clk]
dc_shell> set_ideal_network [get_ports d]  // 为了传播理想属性
dc_shell> compile
dc_shell> report_constraint -max_fanout
 
****************************************
Report : constraint
        -max_fanout
Design : simple_register
Version: W-2024.09-SP2
Date   : Thu Nov  6 19:15:12 2025
****************************************



    Constraint                                       Cost
    -----------------------------------------------------
    max_fanout                                       0.00 (MET)

图7 使用set_ideal_network命令约束的综合结果

下面展示了使用set_auto_disable_drc_nets命令进行约束的结果。

复制代码
dc_shell> set_max_fanout 2 [current_design]
dc_shell> create_clock -period 10 [get_ports clk] // 必须定义时钟,否则无法识别时钟路径
dc_shell> set_auto_disable_drc_nets -on_clock_network true
dc_shell> compile
dc_shell> report_constraint -max_fanout

图8 使用set_auto_disable_drc_nets命令约束的综合结果

相关推荐
日晨难再6 天前
SDC命令详解:使用set_dont_touch_network命令进行约束
数字ic·sdc命令
日晨难再3 个月前
Design Compiler:Milkyway库的创建与使用
硬件工程·数字ic
日晨难再3 个月前
Power Compiler:漏电功耗、内部功耗、切换功耗及其计算方式(NLPM)
硬件工程·数字ic
日晨难再4 个月前
Genus:设计信息结构以及导航方式(路径种类)
硬件工程·数字ic
日晨难再5 个月前
VC Spyglass:Lint官方Hands-on Training(二)
硬件工程·数字ic
日晨难再5 个月前
SDC命令详解:使用uniquify命令进行唯一化
数字ic·sdc命令
日晨难再5 个月前
SDC命令详解:使用set_min_capacitance命令进行约束
数字ic·sdc命令
日晨难再6 个月前
Spyglass:在batch/shell模式下运行目标的顶层是什么?
硬件工程·数字ic
日晨难再7 个月前
Formality:Bug记录
硬件工程·数字ic