数字IC前后端设计中Setup违反的修复方法

本文转自:自己的微信公众号《集成电路设计及EDA教程》

数字IC设计中Setup的分析与优化贯穿前后端设计中,最好在开始后端设计之前就获得一个没有Setup违反的网表,下面按照从前到后的流程逐一讲解每个阶段如果出现Setup违反该如何解决。下面用到的命令,主要针对的是Synopsys公司的综合工具DC以及布局布线工具ICC。还有需要注意的是,Setup的修复和之后要讲解的Hold的修复有很大的不同,Setup的违反随着布局到布线阶段的推进,它是越来越恶化的,不像Hold,线延迟会有益于Hold的修复的,因此存在少量的违反是没有问题的。因此,在开始下一阶段的Setup修复之前,最好将本阶段的Setup违反都清掉。如果是需要用CCD来修复的Setup违反,那么在CTS之前,这些违反可以不用考虑。 1、逻辑综合阶段就有Setup违反:1.1 在DC中用重定时(Retiming)或者Pipeline修复;例如:

在本例中,在采用寄存器Retiming之前,有四级组合逻辑,并且在关键路径的endpoint处只有一个寄存器。采用Retiming技术后,已被四个寄存器取代的那一个寄存器已经被反向移动了两级组合逻辑,且关键路径现在包含两级/部分。每级/部分的关键路径延迟小于初始单级设计中的关键路径延迟。如在本例中,通过Retiming来减少延迟通常会导致设计中寄存器数量的增加,但通常这种增加很小。

1.2 在DC中通过group ungroup的方法来对critical的模块进行优化;将那些critical的模块group到一起,然后ungroup,让DC对其进行充分的优化,不会因为在不同的group内而优化受到限制。另外,如果License支持的话,可以用Compile_ultra,它会自动做auto-ungrouping的操作,如下图所示:

FF1和FF2之间的好多级组合逻辑经过compile_ultra编译优化之后,可以打破hier的限制,在时序方面可以优化的更好。

1.3看违反是否很少,并向前向后查看路径的时序,判断在后端中用CCD是否有可能修复;如果该路径的前后时序非常宽裕,那么在后端中用CCD来修复也是可以的。 1.4 用DCT进行增量编译由于DC进行综合时一般用Wire Load Model分析时序,所以不是很准确,并且分析时也没有标准单元或者Macro的具体物理位置,所以分析优化过程不是很贴近物理实际。为了解决这个问题,可以用DCT来解决(结合MCMM)。具体步骤为:ICC导出Floorplan的DEF给DCT,然后用Compile_ultra进行再次综合。详细流程如下:

1.5 修改电路结构/算法

如果上述方法都不行,那么需要查找设计中的Setup违反是什么样的情况,是很多路径都有一些小的违反还是说这些违反都集中在一个模块上,且违反很大。如果是前者则可以通过DCT再次编译来解决,如果是后者,需要分析在后端中用CCD是否有可能解决,如果不行的话,便只能通过修改电路结构或者更改电路的算法来进行修复了,在系统级或者算法级来解决这种问题也是最有效、程度最好的方法了,不过可能会比较耗时。我曾遇到过这种情况,某个DSP模块的时序非常差,基本上通过软件修复是不可能的,后来换了种算法,在精度、面积、时序上都有了很大的提升,设计的Setup违反也不存在了。 2、布局之后CTS之前有Setup违反:2.1 用DCT进行增量编译首先用零互连延迟模式报告一下,看设计中是否有setup的违反,如果没有的话,那么应该是线延迟太大使得严重偏离了之前的理想情况,这个可以用DCT来进行再次综合。在DCT中将所有的scenario都读入进去,并读入ICC导出的DEF文件,然后进行增量编译;

2.2 在ICC中将timing critical的单元靠近放置如果是规模太大使得线延迟太大导致的,在后端设计中也可以将一些critical的单元靠近放置,如果在同一个模块内部,可以创建plan_group;此外还可以对某些具体的net设置netweight来使得这些critical path上的单元靠近放置。 3、CTS之后有违反:看做完CTS之后的Skew+jitter+margin和之前设置的setup uncertainty是否相差较大,如果是这样,说明uncertainty值设置的有问题,无法较贴切的模拟做完CTS之后的时序效果。需要调整之前的setup uncertainty值,然后去看setup是否能够meet。 如果有少量的path由于datapath延迟过长导致setup timing很难meet,可以在CTS过程中采用CCD用useful skew来向前向后借timing,命令为:>clock_opt -concurrent_clock_and_data 当然,也可以有针对性的手动进行操作,在前后级有margin的情况下(大前提),可以对launchpath进行early,或者对capturepath进行late。下面举个例子。 如下图所示,时钟周期为10 ns,图中标明了各时钟路径的延迟。可以看到有一条路径的slack为-1ns,说明这条路径违规。可以看到与这条路径相关的skew是T3 - T2= -1ns。

在用UsefulSkew之前,设计中存在Setup的违反下面我们利用useful skew向前面一个slack比较充裕的路径(slack=2 ns)借点time,来修正现在这条路径,即对T2所在的launch path进行early操作:

在采用Useful Skew之后,设计中不存在Setup的违反

4、布线完成后有少量违反:4.1 可以用ICC中的CCD来修复,>set_concurrent_clock_and_data_strategy>route_opt -concurrent_clock_and_data 4.2 在先进工艺节点下,连线延迟占了很大的比重,这主要是由于net和via上的电阻太大导致的,我们可以控制在route的时候来优化这些高阻抗网络,具体方法:在用route_opt绕线之前,我们可以在set_optimization_strategy命令后边将-high_resistance选项设置为true来启用该功能。当使能高阻抗优化时,时序驱动的布线引擎在插入过孔时会考虑导线电阻,以减小导线电阻,同时保持可布线性。 

5、chipfinish阶段有少量违反:可以用ICC中的CCD来修,>focal_opt -concurrent_clock_and_data-setup_endpoints all 6、布局布线中的任何一个阶段其实在ICC中布局布线的任何一个阶段都是可以用PT进行ECO来修复Setup违反。

网易云课堂

课程

《Calibredrv教程-提高流程自动化》

原文地址:https://www.cnblogs.com/ASIC-Horizon/p/12299821.html

时间: 2024-10-04 03:56:59

数字IC前后端设计中Setup违反的修复方法的相关文章

nodejs--JWT 在前后端分离中的应用与实践

nodejs--JWT 在前后端分离中的应用与实践 http://www.cnblogs.com/lidongyue/p/5269695.html

django的crsf机制防御详解及在前后端分离中post数据到django-vue

django的crsf机制防御详解及在前后端分离中post数据到django 更新于: 2018-07-28 |  分类于 django CSRF(Cross Site Request Forgery) 跨站点伪造请求 某个用户已经登陆了你的网站,另外有一个恶意的网站有一个指向你网站的链接,那么当用户点击这个链接时,就会请求你的网站,但是你的网站以为是用户发来的请求,这时恶意网站就得逞了. django的应对措施 用户在post请求时,发送给用户一个token,然后在django内部实现了一个校

运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\views\user\index.html while compiling ejs. 语法错误:失去右括号)在参数列表后面,在.....\views\user\index.html(在这个路径中的index.html)中当编译ejs时. 分析:这个时候应该是模板引擎ejs出现问题,但是ejs已经是一个写好

(数字IC)低功耗设计入门(二)——功耗的分析

前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关于PT的功耗分析可以查阅其他资料,这里不涉及使用PT的进行功耗分析. (1)功耗分析与流程概述 上一个小节中讲解了功耗的构成,并且结合工艺库进行简要地介绍了功耗的计算.但是实际上,我们根本不可能人工地计算实际的大规模集成电路的功耗,我们往往借助EDA工具帮我们分析电路的功耗.这里我们就介绍一下EDA

关于大型网站技术演进的思考(十五)--网站静态化处理—前后端分离—中(7)

上篇里我讲到了一种前后端分离方案,这套方案放到服务端开发人员面前比放在web前端开发人员面前或许得到的掌声会更多,我想很多资深前端工程师看到这样的技术方案可能会有种说不出来的矛盾心情,当我的工作逐渐走向越来越专业化的前端开发后,我就时常被这套前后端分离方案所困惑,最近我终于明白了这个困惑的本源在哪里了,那就是这套前后端分离方案其实是服务端驱动的前后端分离方案,它的实现手段又是从服务端的MVC架构体系演化而来,因此该方案最大的问题就是它并没有从根本上改变web前端从属于服务端的被动局面.那么问题来

(数字IC)低功耗设计入门(一)

低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次性发完,我整理之后再发上去.当然,这里的低功耗设计基本上是入门阶段,也就是大部分从理论角度进行阐述,你也可以说是从书本上说的,但是呢,我可以先给大家剧透一下:不仅仅是从理论上说,我还结合EDA工具进行说明如何进行低功耗设计.废话不多说,下面就来看看这个专题的主要内容: ·低功耗设计的目的 ·功耗的构

前后端开发过程中API接口管理有哪些痛点?附几种解决方案

一.API管理的痛点 API接口在设计时往往需要编写大量的文档,而且编写完成之后还会经常改动,文档编写维护工作量大. 接口文档编写好后,实际的代码可能会与文档有出入,这个时候文档是不准确的,文档与代码保持修改同步也是一个很大的工作量.随着接口版本的迭代,接口文档需要同步更新.有些时候接口会成为对接双方的开发进度瓶颈,因为接口调用会有依赖,类似app的项目,前端会需要调用后端接口,接口功能不实现会影响前端开发进度.接口开发完以后,做接口测试不方便,特别是接口数量多,参数复杂的情况,测试工作量大.接

前后端分离中,Gulp实现头尾等公共页面的复用

前言 通常我们所做的一些页面,我们可以从设计图里面看出有一些地方是相同的.例如:头部,底部,侧边栏等等.如果前后端分离时,制作静态页面的同学,对于这些重复的部分只能够通过复制粘贴到新的页面来,如果页面的数量上去了而中途公共的部分出现要修的地方.不过有上10个页面都用到了这个公共的html代码.那修改起来不是很麻烦吗? 一些其他方法比如ifram,import都不够优雅,并且源代码中的不显示的,也就不利于SEO 头部: 尾部: 对于后端的同学而言,他们可以通过模版来进行拆分.这样做可以提高html

(数字IC)低功耗设计入门(六)——门级电路低功耗设计优化

三.门级电路低功耗设计优化 (1)门级电路的功耗优化综述 门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化以满足功耗的约束,同时设计保持其性能,即满足设计规则和时序的要求.功耗优化前的设计是已经映射到工艺库的电路,如下图所示: 门级电路的功耗优化包括了设计总功耗,动态功耗以及漏电功耗的优化.对设计做优化时,优化的优先次序如下: 由此我们可以找到, 优化时,所产生的电路首先要满足设计规则的要求,然后满足延