0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大家需要什么样的clocktree呢?芯片的动脉CLOCK TREE介绍

冬至子 来源:处芯积律 作者:李博伦 2023-07-21 15:42 次阅读

我觉得称时钟树为芯片的大动脉一点也不夸张,因为所有flipflop 翻转都要受到它的控制。而时钟树的设计到实现是一个很复杂的过程,从流程上说,它牵扯到使用的工具,流程,flow等。从人的角度讲,它需要设计,综合,dft ,pr, sta 工程师的通力合作。从知识上讲它需要一定的芯片架构设计知识,一定的综合,STA 知识,一定的dft知识,包括一定的pr 长clock tree的知识。我这里结合我的个人有限知识,结合实践经历以及理解对这些问题做多方面的阐述,难免有缺漏,也是为了抛砖引玉,欢迎同仁讨论。集思广益。

本文所涉及的工具综合DC, 时序分析PT, 物理实现工具innovus.

大家需要什么样的clocktree呢?

设计 :我要更少的PLL, (更多的PLL 带来配值的麻烦,能用各种分频产生的频率。尽量用分频电路产生,能不多加PLL就不要多加。)我要没有毛刺,PLL jitter抖动更小(设计上没有毛刺需要电路结构上的改变 如glitch free mux , PLL jitter需要电路上更给力的模拟单元。)。我要更低的功耗 (设计通过powerpro 添加更多的ICG 上去,ICG的效率提上去。尽量不要有组合逻辑clock gating检查。)

DFT: 我要配值更少的PLL (尽量相同频率的逻辑用一个PLL 去拉通,更多的PLL 需要更多的tdr 配值增加面积还带来不确定性)。我要更少的occ (相同频率的fanout 尽量垫一个occ, 更少的occ ,更少的面积,处理起来也更简便)

SYN&PR : 我要更精准的SDC ( 更精准的SDC 去除更多的假path, 在PR SI 分析上也能过滤掉不该分析的部分,还能指导clocktree的生长 )。我要更好的useful skew (需要flow,分析,try run和调整,来达到不平的clock tree 与setup hold 之间微妙的平衡)。我要更长的common path ,更短的clock tree (长的common path 更短的clocktree, 可能需要设计clock tree结构调整, sdc 的调整,ccopt spec 调整, place 调整等等)。

我要PLL 的REF CLOCK 走更短的距离 (PLL ref clock 需要高的时钟质量。提前有好的规划,不要插多余的cell到ref clock 路径上,pr floorplan 的迭代 控制PLL 与ref clock 的距离, 综合过程不要给这种net上加东西。)。我要更小的SI (pr clock tree 布线上更好的布线层规划,良好的shielding )。我要tree更好的平衡 (该balance的地方balance,不该balance的地方不要相互拖拽,需要良好的ccopt_spec, sdc ,以及setting配合。)

等等,还有很多,所有的需求都需要相互trade off 来达到一个平衡。

我以图片举例来挑其中一些问题针对的谈谈。

能不要多点长tree平衡,尽量不要多点长tree,除非迫不得已。如图从物理实现角度说 绿色是一个block ,A 和B 两个clock 从port进来需要相互balance。这种结构block的PR工程师好不容易把A 和B 调的tree平衡。但是到了顶层,顶层pr工程师还需要保证红色的到A &B两个hier pin的tree路线是平衡的。对时序收敛是不友好的。

image.png

设计牵扯到从block穿clock出来到顶层的结构那么红色的这路去顶层的clock路径不要带多余的逻辑,如果有多余的逻辑分配到A 那部分去, 因为绿色的地方dft要加occ, 而occ一般是不级联的。

image.png

设计中驱动两个hinst如果是同频的能用一个occ (红色) 就尽量不要用两个(绿色)。造成面积浪费不说,且如果A和B再有timing talk 会导致非 common path 变长。

image.png

分频模块在功能模式下的分频系数频率与dft 模式下的分频系数尽量一致。当功能模式时候toggle fun_reset 就能让div模块配置到需要的系数上。当dft模式下toggle dft cgu reset 也能让div模块配置到相同的系数上。否则需要dft通过tdr或者其它连线来配值自己想要的参数,增加多余逻辑。不过具体情况具体分析。没有通解。

image.png

STA 工程师尽量通过良好的使用 set_clock_group -physically_exclusive -logically_exclusive -asyncronus / set_clock_exclusivity 等命令去过滤掉C 位置不应该A B共存导致的SI 分析。

image.png

多种mode sdc 能merge的尽量merge ,不能merge再具体问题具体分析。多个mode sdc会产生更多需要分析的constraint mode 产生更多scenario 耗费更多时间。举个例子类似我遇到的这种结构的clock 就是相对不那么好做的 A B C三个mux会从ip上去选clock。而且A B C之间相互还需要balance, 那么就是2 *2 *2 = 8 种可能性。关键是这8种可能性在真实情况下可能只有5种是真实会产生的。

你如果只通过create_clock create_generated_clock set_clock_group set_false_path 方式来做,那么就会产生过约,因为会额外约束多余那3种可能性,如果我通过给mux sel set_case_analysis 来case的话那么就会产生更多的sdc mode, 更多的view.事实上当时这种类似mode有好几十种情况。

image.png

合理的使用set_clock_sense set_sense.应用场景有时会有个A clock 高频clock和B clock 低频clock 经过mux去驱动后面的A INST 与B INST, 真实情况是可能B clock 只会打到A INST 模块进行搬运数据, 比如芯片boot阶段。它不会去B INST 那么一定要用set_sense 去把B clock在B INST 前面停掉,这有利于timing分析也有利于PR 进行长clock tree。默认情况下innovus create ccopt spec 会转换 set_sense /set_clock_sense 为 set_ccopt_property -sink_type igore [get_pin xxx] 这样对于B clock 来说B INST 里面的sink点就不会被balance 。去掉不该balance的 sink点自然tree就会更好。

image.png

合理利用useful skew ECF/ccd 真实的设计中clock是不可能长的完全平的。那么可以通过useful skew 来达到data clock setup&hold 微妙的平衡。

通过分析DC 的timing报告人为通过set_clock_latency -clock xxx [get_pins xxxx]去调整clock tree 长度,让DC按照不平的clock tree 长度进行优化。进入INNOVUS的时候 INNOVUS create_ccopt_spec 会转换set_clock_latency 命令为

set_ccopt_property -insertion_delay xxx [get_pins xxxx] 来调整clock tree长度,达到更好的平衡。

或者在DC 中开启ccd , 通过write_scripts 写出工具根据组合逻辑和你的设置推出来的tree长度脚本set_clock_latency -offset , 通过脚本转换set_clock_latency -offset 为标准set_clock_latency -clock xxx [get_pins xxx] SDC ,进入INNOVUS 优化。

或者INNOVUS 删除set_clock_latency 开启Cadence 自己的useful skew ECF 来自动进行不平clock tree优化。

至于结果,不好说,不同设计反映不一,推的过多会导致hold难修。当然Synopsys会推荐DC 可以开hold corner 然后来估计hold的影响,让推的不要太凶。

针对这种结构一个M clock驱动两坨逻辑红色和上面黑色。

通常做法是整一个M 整一个GCLK G1 GCLK G2 然后设置clock_group 来解决。

不要尝试直接在G2 位置create一个master clk, 然后设置clock_group

这种会导致G2 前面的source latency 丢失,导致无法分析前面路径的延时SI 等影响,也不能用来signoff

image.png

但是这种类型的SDC 用来INNOVUS ccopt 来长clock tree是极好的。尤其是当你不怎么熟悉innovus的ccopt spec ,但是你又很熟悉sdc和clock结构的时候。

innovus默认create的spec就不会balance 红色和蓝色因为你的G2 地方的create的是一个master_clock

当然别忘了update_constraint update回来,更别忘了手动call update_io_latency/set_propagate_clock 来propagated clock 否则你长完tree你的clock还是ideal的。

最后强调一点,默认innovus create ccopt spec 是不识别sdc里面的 clock_group , false_path 的,它只根据你的clock 物理连接结构走。 当然有setting可以让create ccopt spec去识别 clock_group 和false_path ,但是只是大家都不这么做而已。具体原因可能是工具不完善吧,也有可能是这样创建的spec 文件太大,或者太多的这种ccopt的设置会导致不期望的结果之类的。

着重注意IP 位置的clock ,有的情况是一个ip是liberty ,internal pin会打数据 D 出来同时这个internalpin又会打clock出来 IP 外面会有flipflop来接数据,这种path由于launch clock 无法调整。导致timing不好收敛。

image.png

或者是这种IP 作为liberty internal pin会打clock出来给flipflop launch 然后再用这个internalpin到IP 边界上去check。这种由于capture clock 没法控制同样不好收敛。

image.png

针对这种情况及时syn pr, 联系vendor 与设计, 确认路径的正确。设计能retime flipflop 多次打拍就提前做。方便timing收敛。

PR 尽量和dft以及sdc owner多沟通。了解dft test_clock sdc里面是怎么下的。通常情况test_clock 会通过不同的occ去trigger 几乎所有的flipflop 。一般情况下dft 穿chain是分clock domain 穿的。也就是各个occ是相互不check的。当你的pr sdc为了简便下的比较粗的情况比如一个create 一个test_clock 完事,没有在各个occ上做test_clock的分开处理。那么建议在ccopt spec里面把test_clock skew group 设置成none不要让它去balance。否则它会退拽整个设计的tree。

image.png

设计时钟树时候尽量不要让block 的clock 穿两个port到顶层再去trigger 两个flipflop相互拍数据。这样会导致clock branch point 在block内部,导致cppr过小timing不好收敛。

image.png

这对这个问题其实还有变形,原理其实都是控制clock tree 的branch point 来控制cppr来优化timing

如图A block 产生clock 到B block 拍数据给C block 左边连接是不是branch point 在A block内部这样cppr 就小。

如果改成右边的结构 branch point 就在B block cppr 就会变大。当然要注意这时候可能capture path就会过长也许对hold不利。所以要做trade off。本质点在于移动clock branck point.

image.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171190
  • 分频器
    +关注

    关注

    43

    文章

    433

    浏览量

    49313
  • SDC
    SDC
    +关注

    关注

    0

    文章

    47

    浏览量

    15302
  • DFT算法
    +关注

    关注

    0

    文章

    27

    浏览量

    7504
  • PLL电路
    +关注

    关注

    0

    文章

    91

    浏览量

    6281
收藏 人收藏

    评论

    相关推荐

    访问Google Drive至少需要什么微处理器

    想做一个温度湿度传感器,可以将数据通过wifi上传到Google Drive之类的云端,然后通过智能手机下载,查看实时温度湿度。按我的理解,需要TCP/IP, HTTPS协议。至少需要什么样的处理器,才能够比较流畅的运行这个应用
    发表于 06-01 05:59

    什么样芯片才能真正的保护程序

    现在市场上芯片种类太多,有很多都可以被破解?什么样芯片才能真正的保护程序
    发表于 12-18 09:56

    AD16需要什么样的电脑配置?

    AD16需要什么样的电脑配置,我的电脑AD10使用很流畅,新装的AD16却很卡。
    发表于 10-09 11:21

    请问CUBEmx需要什么样的电脑配置才能运行流畅

    ,CPU是i5-4570,内存8G依然还是反应很慢。编译一遍也得将近1分钟。虽然比笔记本好不少但还是不行。问问大家需要什么样的CPU才能运行比较流畅
    发表于 08-17 06:33

    半导体制冷块的驱动电路需要什么样的变压器能够实现功能

    各位大神,小弟目前有一个项目,需要单片机控制半导体制冷块控制降温,受成本所限不能使用开关电源,想请问各位大神如何设计驱动电路,目的是讲交流220V电源变为12V直流输出,用以控制半导体制冷块工作,半导体型号TEC12710,需要什么样的变压器能够实现功能,请各位大神不吝赐
    发表于 09-03 15:38

    编程93AA46AE需要什么样的模块

    我知道我需要一个PM3来编程93AA46AE,但我需要什么样的模块或其他工具? 以上来自于百度翻译 以下为原文 I understand that I need a PM3 to program the 93AA46AE, but what module do I ne
    发表于 09-12 14:42

    请问中国需要什么样的FPGA?

    欧美主流市场需要大尺寸、复杂而且昂贵的FPGA,那中国市场需要什么样的FPGA
    发表于 08-02 08:06

    请问开发6936和69213需要什么样的开发工具包?

    CYRF 6936和69213是两种老芯片,我想知道,它们需要什么样的开发套件。谢谢您!
    发表于 08-09 09:03

    请问一下需要什么样的整流桥驱动这个电机?

    `问下大家需要什么样的整流桥驱动这个电机,连一个整流桥就可以了吗`
    发表于 08-12 14:37

    请问用迷你USB连接到电脑需要什么样的模拟器?

    嗨,我有一个蓝牙调制解调器(RN4020)与PICTHOST女儿加。没有Explorer 16我怎么试一试?我试着用迷你USB连接到电脑,但我不知道我需要什么样的模拟器,有人能帮上忙吗?
    发表于 10-12 11:14

    什么是Clock Tree

    同步博客地址:从STM32开始的RoboMaster生活:进阶篇 V [Clock Tree]项目&教程仓库:-STM32-RoboMaster-1.0 什么是Clock Tree?1
    发表于 08-11 08:41

    嵌入式行业需要什么样的技术人才?

    点击上方“大鱼机器人”,选择“置顶/星标公众号”福利干货,第一时间送达!嵌入式行业需要什么样的技术人才?仔细观察各种招聘的岗位要求吧,无非是两方面。(1)通用要求比如什么学历,多少年工作...
    发表于 11-08 06:29

    嵌入式这个行业到底需要什么样的技术人才

    话说嵌入式这个行业到底需要什么样的技术人才?仔细观察各种招聘的岗位要求吧,无非是1、通用要求:比如什么学历,多少年工作经验,有创新精神,抗压能力强,吃苦耐劳,善于沟通,态度认真等等等等…...
    发表于 11-08 08:14

    计算16路FFT要什么样性能的单片机?

    计算16路FFT要什么样性能的单片机
    发表于 10-23 06:58

    智能汽车CAN FD总线需要什么样的降噪对策?

    智能汽车CAN FD总线需要什么样的降噪对策?
    的头像 发表于 11-30 09:37 289次阅读
    智能汽车CAN FD总线<b class='flag-5'>需要什么样</b>的降噪对策?