资讯详情

时钟树综合(CTS)

目录

  • 引言
  • CTS基础
    • 什么是时钟树综合?
      • 时钟源
      • CTS
      • OCV(on-chip variation)
    • 时钟树的综合目标
      • 1. clock latency 尽量短
      • 2. clock skew 尽量小
    • 时钟树结构
  • 综合前准备时钟树
    • 约束文件的标准设计(SDC)
    • CTS 前的要求
    • 确认时钟树的工作条件
  • 时钟树质量分析
  • 参考

引言

时钟是数字设计中非常重要的一部分。时钟信号通常是整个芯片中最大的通过最长距离和最高速度运行的信号。今天天的芯片设计中,30%甚至更多的动态功耗都消耗在时钟网络上。保证后端时钟质量的步骤是,这是后端物理设计的关键步骤之一。

CTS基础

什么是时钟树综合?

时钟源

如何获取芯片中的时钟,以及如何向各种功能模块供应,通常有以下方法:

  1. 时钟信号直接输入外部 这种情况比较少见。SOC系统中不同功能模块的工作频率不同,直接将时钟信号从外部拉入芯片是不可行的。对于一些特别简单的ASIC芯片解决方案可能有机会使用芯片。

  2. 外部晶振 内部时钟发生器 该方案是从外部晶振引入的 IO,产生24个内部时钟发生器MHz时钟信号,然后提供各种功能模块。

  3. 外部晶振 内部时钟发生器 内部PLL产生高频时钟 内部分频器获得各种频率的时钟 这种时钟获取方式是目前 SOC 芯片设计实现中常用的时钟生成方案。该方案的总体思路是从晶体振动和时钟发生器中生成24MHz信号,再经过 PLL 产生倍频时钟(高频时钟),最后通过分频电路产生各种频点时钟供应各种功能模块。

CTS

时钟网络布线长,电阻和电容大。时钟树的综合概念是沿着 ASIC 自动插入设计的时钟路径,平衡所有时钟的输入。时钟树是指从某个 clock 的 点长到各个 点或叶节点()的 clock buffer/inverter tree。试图使用工具 clock 所属的所有 sinks 长度相同。在这里插入图片描述

OCV(on-chip variation)

过去,不同批次观察到电路延迟的不均匀性。 ASIC 随着制造工艺的进步,晶圆对晶圆(wafer-to-wafer)和芯片对芯片(die-to-die)差异也变得明显。在目前的深亚微米工艺中,单个芯片也可以看到延迟的不均匀性,即 OCV 。 如果时钟树算法选择在时钟源附近分支时钟路径而不是靠近叶单元,则时钟偏移很可能发生(skew)。 这意味着 CTS 在插入缓冲区时,算法必须能够尽可能多地使用公共路径()。在这种情况下,每个时钟路径的延迟差将是局部的,而通过公共路径的延迟不会因芯片的变化而导致时钟偏移。

时钟树的综合目标

1. clock latency 尽量短

延迟时钟信号()又称插入延迟(),它包括两部分:时钟源插入延迟和时钟网络插入延迟。时钟源插入延迟来自系统(时钟源或芯片)到当前芯片(或模块)时钟根节点。时钟网络插入延迟是时钟树的延迟。 Clock tree 越长,意味着 clock tree 等级越长,等级越长。tree 上的 power 就越大。同时,受 OCV 效应影响,timing 就越难 meet 。

2. clock skew 尽量小

(时钟偏移)表示两个 sink clock latency 差值分为 Global skew 和 Local skew 两大类。Global skew 是泛指 design 任意两个寄存器 latency 最大差值。Local skew 是指 design 两个相关寄存器 latency 最大差值。更注重数字后端设计 local skew。因为 local skew 会直接影响时序 setup 和 hold。对于 Positive skew 来说,Tskew 大于0,setup slack 变大,但是 hold slack 变小了。而对于 Negative skew,Tskew 小于0,setup slack 变小,hold slack 变大了。 大多数 CTS 首先创建算法 virtual cluster 来识别 leaf registers 或 sink points 。virtual cluster 它是通过识别彼此非常接近的 leaf cell 实现位置。如果 leaf cell 远离任何簇,它们都会被移动到最近的簇。用户定义每个簇的叶单元数。簇及其位置一旦确定,就会插入 buffer 每簇时钟传播延迟相等,每簇时钟偏移最小化。需要注意的是,簇越小,时钟偏移越小,但需要更多的时钟缓冲级,这有增加整个时钟传播延迟的趋势。

时钟树结构

根据芯片中的分布特性,时钟树可分为多种结构,主要有两种类型:树状(Tree)和网格(mesh)。具体有 H-tree、X-tree、balanced tree,Clock mesh、Clock Grid等种类。

综合前准备时钟树

在 CTS 在此之前,了解设计的时钟结构和平衡要求是非常重要的,以确定适当的例外情况并建造最佳时钟树。拿到一个 design,需要花点时间理清楚 clock 结构,各种 mode 如何切换。知道哪些clock 需要同步,什么是异步。一般来说,中等规模以上 SOC 芯片时钟树综合需要编制时钟树约束文件。如果能拆分时钟结构,清楚地告诉工具时钟结构,那么它仍然可以非常漂亮。所以画时钟结构图和写时钟约束文件都是数字IC后端工程师必备的工作技能。

约束文件的标准设计(SDC)

时钟信号本身的定义首先是时钟树约束文件,它们直接来自标准设计约束文件。SDC 该文件主要由时钟定义、输入延迟和输出延迟三部分组成。在顶层设计中,还需要限制输入端口的驱动和输出端口的负载。多时钟负载 SOC 设计还需要根据设计的具体情况设置多周期检查路径、冗余伪路径和最大和最小延迟时间。

CTS 前的要求

  • 设置 DRC 参数 设置 max_transition max_capacitance max_fanout 等待参数 clock 的 max transition 根据设置 clock 设置频率。 clock,需要额外设置严格点。
  • 指定 clock inverter list clock inverter cell list 选择往往比较讲究。 CTS 常用于综合 clock inverter 做时钟树,防止 cell 的 rise delay 和 fall delay 不平衡导致duty cycle 出问题。一般情况下 fab 都会给出建议。往往是驱动中等的几类cell。以 TSMC28 为例,官方建议 clock inverter 应该选用三款 cell,分别是 CKND8,CKD12,CKD16 的 cell 。 大驱动的 clock inverter(比如 CKND20,CKD24)容易出现 EM 问题。 而小驱动的 clock inverter(比如 CKND2),受 PVT 影响比较大,容易出现较大的工艺偏差。 用来 build clock tree 的 clock inverter 必须使用 LVT 或者 SVT,而且必须保证 clock tree 上只有一种 VT 。HVT cell 禁止使用在 clock tree 上,因为工艺偏差较大,导致 signoff 的 timing 和实测严重不符,甚至导致功能错误。
  • 设置 don’t_use cell list
  • 设置 floating pin 和 inter-clock balance 很多时候为了将某些 reg 做短(可能是 timing 考虑,可能是 clock latency 的要求),需要设置 floating pin。有的 hierarchical design,需要告诉工具子模块中 clock latency 的长度,也要设置 floating pin 。 当两个时钟并不是同步的,但是他们的某些 register 会进行 talk 。默认情况下,CTS build CLOCK1 和 CLOCK2 时,会各自 build clock tree,不会做 inter-clock balance 。因此,需要设置 inter-clock balance 选项: set_inter_clock_delay_options -balance_group "Clk1 Clk2" -balance_group_name group2
  • 设置 NDR rule 为了防止 clock 上的 SI 和 EM,我们需要对时钟信号线进行 non-default rule 的设置。通常设置两倍宽度,两倍间距(当然也有更大,根据实际情况进行更改)。 define_routing_rule CTS_NDR_RULE -widths { M2 0.15 M3 0.15 M4 0.15 M5 0.15 M6 0.15 } -spacings { M2 0.15 M3 0.15 M4 0.15 M5 0.15 M6 0.15 } 由于标准单元出 pin 大部分是 M1/M2,如果设置 ndr rule,会导致很多 DRC。因此,可以将最 leaf 端采用默认的线宽和线间距来走线。 set_clock_tree_options -routing_rule_ rule -use_default_routing_for_sinks 1 为了使得 clock tree 质量更好,往往将高层用来作为时钟信号的走线。 set_clock_tree_options -layer_list {M7 M8} 除了对 clock net 设置 NDR 外,还需要对某些对时钟质量要求比较高的 clock,进行 shielding。
  • Apply IO Latency set_latency_adjustment_options -from_clock clk -to_clock virtual_clk (如果 IO port 是用 virtual clock 来 constraint 的,通过此命令来进行 IO Latency 的 apply) update_clock_latency

时钟树工作条件确认

  • 时钟定义正确 Clock source 应该是通过 create_clock 或者 create_generated_clock 来声明的。Generated clock 定义的点必须能 trace 到 source 上。 在数字IC设计中,芯片中各个模块的工作频率可能都不太一样。因此有了时钟产生电路(clock generation)。通常通过 create_generated_clock 来定义分频和倍频后的时钟,说明 generated clock 与source clock 的相位(边沿)关系。同时根据 source clock 找到 master clock 以及 source clock 和master clock 的关系, 最终会确定 generated clock 和 master clock 的相位(边沿)关系。
  • 标准单元已经正常摆放好 使用 check_legality –verbose 来检查所有标准单元是否 legal 。如果对一个存在 illegal 的模块进行时钟树综合,其 QoR 会比较差,而且会加倍整个 runtime。
  • Congestion 适度 如果一个模块 placement 做完之后 congestion map 特别差,存在特别大的 overflow,那么基于这样的database 继续做时钟树综合意义不是很大。一方面是 QoR 会比较差,另外一方面是 CTS 后 congestion 会更差,模块本身一定是绕不通的。
  • Timing 可接受 Placement 后时序要差不多符合设计要求。如果 placement 后 wns 是500ps左右,那继续 tune cts 也是没太大意义。因为本身 placement 没做好,即标准单元的摆放位置并不是很合理。此时应该返回 place 阶段,进一步 fine tune timing。
  • DRV(Max transition Max capacitance)可接受
  • Power & Ground net 已经 prerouted
  • 高扇出的 net,比如 scan 使能端,已经解过 fanout(时钟树综合后存在特别大的 max transition 问题)
  • Floorplan 是否对时钟树友好 比如细长条 memory 之间的 channel,未进行特殊处理。这种情况,如果 reg 被摆放进去,很有可能导致比较大的 clock skew 或者拖长 clock tree。
  • Placement 后逻辑分布合理

时钟树质量分析

可以从 log 中看到每个 clock 长 tree 的情况,比如 clock latency,clock skew,某个 clock domain 中最长的 clock path 和最短的 clock path。时钟树结果主要关注 clock skew,clock latency 。查看工具做出来的 skew 和 latency 是否符合设计要求,是否是最优的。如果不是,要根据实际情况进行调整和优化。

参考

微信公众号:吾爱IC社区 陈春章等,《数字集成电路物理设计》 Andrew B.kahng, etc 《VLSI Physical Design: From Graph Partitioning to Timing Closure》 Khosrow Golshan 《The Art of Timing Closure》

标签: m1x3018ic集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台