当前位置: 首页 > news >正文

数字IC后端培训教程之数字后端项目典型项目案例解析

数字IC后端低功耗设计实现案例分享(3个power domain,2个voltage domain)

Q1: 电路如下图,clk是一个很慢的时钟test_clk(属于DFT的),DFF1与and 形成一个clock gating check。跑pr 发现,时钟树综合CTS阶段(Clock Tree Syntheis)会给and的B pin 和DFF1的CK pin插如很多cdb cell 用来balance ,我实在想不出来有什么好balance的,因为时钟很慢,setup 是没有问题的。

在这里插入图片描述
测试1:and 的B pin 设置ignore。结果:and 不插cdb,时钟latency做短了,但是DFF1的CK 换上插很多cdb。这可以满足我目前的需求了。

测试2:DFF1的CK pin 设置ignore,我怀疑是DFF1的latency 比较长,于是被迫造成and 被拉长。

结果:DFF1的CK pin确实不插cdb了,但是and 的B 还是插了很多cdb,完全想不明白与谁balance。

问题:innovus 长clock tree 时候,把and 不当做sink 点,不会balance的啊?sink 点应该是DFF和icg啊,为什么这里and的B 插入那么多cdb做balance啊?

从你的两种测试结果上看,这个clk一定还有第三路clock分支,如我画出来的。其实都是被这路clock path balance的。

1)AND与门B pin设置ignore pin,仅仅是与门的B到Y这段timing arc断了,但是A pin还是会穿过与门再到后面寄存器的。

2)DFF1这颗寄存器的输出端如果没有定义任何时钟,默认情况工具做tree会自动生成clock_gen这样的skew group。如果不想自己生成这样的skew group,可以设置如下变量为false。

这个变量设置成false后,clk长时钟树只能长到DFF1的CLK pin。但这样处理后,and输出到后面寄存器CLK的这段tree就漏做了!

set_ccopt_property extract_clock_generator_skew_groups false

在这里插入图片描述
所以建议先把时钟结构画完整,否则是不太有利于后续的时钟树质量分析。

在这里插入图片描述
在这里插入图片描述
复杂时钟设计时钟树综合(clock tree synthesis)常见20个典型案例

Q2: 请教一个问题,工具提示我找不到legal location 给这两个spare cell,但是select出来的结果又显示这里位置非常合理 row 正确、没有放反、没有overlap。请问还可能是什么原因呢?

在这里插入图片描述
在这里插入图片描述
报这个警告仅仅告诉你corase placement后这颗cell在做refinePlace摆放到row时发现在以当前这个点为中心点,半径为128row高度的范围内都没找到合适的位置,即corase placement和refinePlace之间的一致性不太好。但工具仍然会在超出128row高度距离外给这颗cell找到一个位置摆放它的,摆放好后这颗cell肯定也是legal的,不会有overlap啥的。

数字IC后端实现时钟树综合系列教程 | Clock Tree,Clock Skew Group之间的区别和联系
在这里插入图片描述
在这里插入图片描述
另外建议在PR Flow和Timing ECO阶段把spare cell fixed住,不要随意参与refinePlace过程。

在这里插入图片描述

Q3:星主,请问一下,我跑完pr之后,reg2out的最长路径上插了将近20个buf和inv,这条路径逻辑只有四层,pr后密度60%,没有拥塞问题,路径长度1500左右,并且没有绕线,这种情况要如何去优化减少reg2out跑pr插入过多的单元?谢谢。

reg2out这个group path的effort设置成low,并且把output delay调整到比较合适的值,使得setup violation不要太大。

你这个路径上插了20个buffer,我猜测不是工具为了修max transition加入的,因为1500um的距离最多也就是插个几颗就够了。所以这里大部分buffer可能是hold buffer。

你看看这些buffer的名字是否带有PHC的关键词? 这条接口相关的timing path一定要找设计确认是否属于同步接口?只有同步接口才需要优化时序。

由于Innovus默认会开启useful skew flow,所以对于接口相关的路径切记不要开启useful skew,否则很容易有大量的hold violation。

在这里插入图片描述

Q4:我的模块与交接的一个模块,有高速接口检查,现在是发现我送给那个模块的时钟树做长了,请问这些路径我怎么单拎出来做短呢?

根据这些告诉接口去抓对应的寄存器,然后做tree的时候设置一个正值insertion delay。当然对于频率要求高的,我们还得把这些寄存器摆放到这个接口io port附近。

咱们训练营项目分享的这个案例跟你的情况类似。我们解决的方法就是把controller摆放至靠近phy,并且把模块内部controller这部分的clock tree尽量做短。

在这里插入图片描述
Q5: 老师,我在挪cell的时候不小心把IP的位置动了,然后发现IP的宽度和之前不一样了,这里会是什么原因呢?

这是一个非常典型的EDA工具bug,容易出现在Innovus 2018,2019版本中。

小编在7年前就遇到过这个bug,当时花了很多时间来debug解决掉的。

做过咱们社区IC后端训练营项目的同学都知道,我们在将PrimeTime DMSA返回来的timing eco脚本读入innovus前,会开启batchMode,这个模式可以批量处理脚本命令(ecoAddRepeater和ecoChangeCell)。

如果不开启这个batchMode,EDA工具每执行一条命令就需要做一次refinePlace,做一次RC抽取,报告一次时序!

setEcoMode -batchMode true -updateTiming false -refinePlace false

而且我们直播课也强调过这个batchMode模式仅局限于执行插buffer,换cell驱动的场景,其他情况必须把这个batchMode关闭即设置成false,否则就容易出现这个同学遇到的问题。

下图所示为做Timing ECO之前的子模块和顶层的部分示意图。此时子模块/IP的大小还是正常的,边上也包围着2um左右的placement halo,halo边上也加好了endcap cell(Boundary cell)。

在这里插入图片描述
但是当这位同学做完Timing ECO后发现子模块/IP已经和现有的标准单元,endcap cell overlap了!第一次遇到这种情况肯定就不淡定了,不知道的还真以为自己挪过这个子模块/IP了。

而且牛逼的地方是当你想把这个子模块/IP调整恢复到原来位置的时候,发现回不去了,怎么调整都无法回到过去了。原因是EDA工具已经把这个子模块/IP的lef改了!

因此,batchMode开启要慎重。执行ecoAddRepeater和ecoChangeCell后必须执行下面的命令。

setEcoMode -reset

在这里插入图片描述

Q6:请教星主和各位前辈,现在我有一个多power domain的设计。TOP下有模块A,A的子模块为B,B的子模块为C,C中包含一些memory。对于这种设计来说,在floorplan的时候,PD之间有没有比较建议的规划方式?

Case1: Power Domain形状尽量规则

通常情况power domain的形状(子模块单独harden模块)要尽量规则,特别是timing和routing都不太好做的设计。下图左侧存在大量拐角及窄channel都是一个不好floorplan的表现。右侧所示的模块切分相对更好,但这种L型的形状在模块直角转弯处也非常容易有timing和routing问题。

top floorplan 模块partition原则
Case2: 避免Macro或Blockage放置在Power Domain中间区域

这个就是我们一直提倡的摆放Macro的方法或原则——Macro尽量摆放在模块或Power Domain的边界处。所以在做模块或Power Domain切分时需要考虑好内部Macro的情况,特别是那种宽度或高度个别大的Macro。

low power design block partition原则及方法
Case3: 避免thin channel的PD

在这里插入图片描述
Case4: Power Domain边界处尽量不要摆放Default PD的Memory

当PD1接口信号要往左下角出来和Default PD进行交互时,PD1边界处的Macro会挡住标准单元的摆放和阻挡接口信号线的routing。

在这里插入图片描述
而且我们知道PD1接口出来的信号还需要插isolation cell,如果这类isolation cell被摆放至图中的黄色区域,肯定会有max transition violation。不巧的是这类信号对应的net还必须设置dont touch。

【思考题】下图所示一个低功耗设计实现案例。我们在PR实现时应该如何避免这类timing path在PD1中插buffer? 如何避免工具把这类相关net的routing跨在PD1上?

在这里插入图片描述

http://www.xdnf.cn/news/1132669.html

相关文章:

  • 端侧推理软件栈
  • 智慧农业新图景:物联网如何精准守护作物生长​
  • FCN语义分割笔记(1)
  • XSS-labs 1-8关
  • 系统性学习C语言-第十八讲-C语言内存函数
  • 从零开始的云计算生活——番外4,使用 Keepalived 实现 MySQL 高可用
  • xss-lab1-8关
  • AWS ML Specialist 考试备考指南
  • Liunx练习项目6-创建dns服务器
  • 图机器学习(10)——监督学习中的图神经网络
  • AI Agent开发学习系列 - langchain之LCEL(1):LangChain LCEL链式编排与RAG增强实践
  • 新手向:自动化图片格式转换工具
  • orfeotoolbox ResetMargin
  • 硬件设计学习DAY3——电源Buck电路深度解析:CCM/DCM/BCM模式与电感设计
  • Linux运维新手的修炼手扎之第21天
  • 【论文阅读】A Survey on Knowledge-Oriented Retrieval-Augmented Generation(4)
  • Kotlin比较接口
  • Kotlin获取集合中的元素操作
  • 力扣-146.LRU缓存机制
  • Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率
  • MybatisPlus-11.IService的批量新增
  • 高性能架构模式——高性能缓存架构
  • alpineLinux修改包管理为国内源
  • 【Linux】基本指令详解(二) 输入\输出重定向、一切皆文件、认识管道、man、cp、mv、echo、cat
  • LVS集群搭建
  • OpenCV稠密光流估计的一个类cv::optflow::DenseRLOFOpticalFlow
  • [AI-video] 字幕服务 | 视频素材服务 | 视频生成服务
  • 智能电网时代:双向WiFi电表在海外家庭能源中的战略价值
  • C++---emplace_back与push_back
  • 网络爬虫的相关知识和操作