修复setup violation的方法总结
修复setup violation的方法总结
- 一、 优化网表
- 1. DCG综合
- 2. pipeline和retiming
- 二、place 阶段调整floorplan
- 三、通过group path设置优化timing
- 四、减小data path的delay
- 1. 更换不同的Vt/channel length
- 2. 插入BUF
- 3. Size up cell
- 4. Layer assignment
- 五、增加capture clock path delay
- 六、减小launch clock path delay
- 七、修setup的注意事项
- 八、批量ecoChange cell的模板
- 1. change 指定cell
- 2. change Vt/channel length (from port)
简单来说,setup检查是为了检查数据传输不能太慢,否则,在capture edge就不能正确的锁存数据。修复setup的方法分为以下几种。
一、 优化网表
1. DCG综合
DCG是DC的SPG MODE。其中包含了虚拟布局布线技术,使得在RTL综合期间预测布线拥堵。从而自动优化网表以达到减少cong.的情况。
参考文件:https://max.book118.com/html/2018/1014/8076024016001127.shtm
2. pipeline和retiming
当logic depth太长且design的周期不是很长时,timing即使优化的很好达不到约束条件。
这时候需要对网表的逻辑进行优化,一般分为pipeline和retiming两种方法,原理图如下:
二、place 阶段调整floorplan
floorplan时要注意的几个点:
·有一些macro需要靠近port需要提前注意。
·有相互关联的macro要摆在一起。
·macro出pin的地方预留走线空间。
·有特殊要求需要放的比较近的一些cell,可以添加region限制module的place 空间。
…
三、通过group path设置优化timing
·细分group path,
·更具需要设置不同group的权重。
·设置目标slack,使工具能更强的优化对应的timing。
createBasicPathGroups -reset
createBasicPathGroups -expandedset sram_cells [filter_collection [all_registers -macros] "is_memory_cell == true"]
set reg [all_registers -cells]group_path -name reg2sram -from $reg -to $sram_cells
group_path -name ram2reg -from $sram_cells -to $regsetPathGroupOptions reg2reg -effortLevel high -weight 5 -slackAdjustment 0
setPathGroupOptions reg2cgate -effortLevel high -weight 5 -slackAdjustment 0
setPathGroupOptions reg2sram -effortLevel high -weight 3 -slackAdjustment 0
setPathGroupOptions ram2reg -effortLevel high -weight 3 -slackAdjustment 0setPathGroupOptions in2reg -effortLevel low -weight 1 -slackAdjustment 0 -targetSlack 10
setPathGroupOptions reg2out -effortLevel low -weight 1 -slackAdjustment 0 -targetSlack 10
setPathGroupOptions in2out -effortLevel low -weight 1 -slackAdjustment 0 -targetSlack 10reportPathGroupOptions
四、减小data path的delay
1. 更换不同的Vt/channel length
通常是指选用Vt更小或者channel length。 一般的,同一种cell会分为HVT, RVT, LVT等,同种Vt又会分为多种channel length,如C20, C24, C28,C32。
Vt:
阈值电压越低,因为饱和电流变小,所以速度性能越高;但是因为漏电流会变大,因此功耗会变差。
*速度大小按快到慢依次排列:SLVT>LVT>RVT>HVT。
*功耗大小:SLVT>LVT>RVT>HVT。
*即HVT的cell其阈值电压最大其掺杂浓度越高,其泄露功耗最小;
channel length:
*数值越高,速度越慢。
ecoChangeCell -inst xxx -cell xxx
2. 插入BUF
由于Setup violation绝大部分原因是由于drv造成的。比如cell的delay其实是根据它的input transition,以及output load查表计算得来。
因此,我们解决了cap和slew的问题,timing其实自然也得到了解决。比如net连接得太长导致驱动变弱,可以插入buf打断net,来提高驱动;fanout太大,也可以通过插入buf来减少fanout数目。
ecoAddRepeater
ecoDeleteRepeater
3. Size up cell
如果某个cell的驱动能力太弱,比较容易产生比较大的delay,因此我们可以通过size up这个cell来提高驱动能力,比如X1的BUF换成X4, X8的等。
但是我们在size up cell前也需要注意该cell的输入/输出transition的变化情况,因为驱动能力强的cell,它本身的load会比较大,可能会造成前一级cell驱动不了它的情况,所以实际的data path情况会比较复杂,不一定换大驱动的cell,delay就会变小。
一般情况下,如果我们看到某个cell的output transition比input transition大很多,那说明这个cell的驱动不够,我们可以尝试size up一下。
ecoChangeCell -upsize/-downsize
ecoChangeCell -inst xxx -cell xxx -loc {xLoc yLoc}
4. Layer assignment
高层金属有电阻小,延迟低的特点。所以可以通过更换布线层次来实现setup的修复。
如:删除wire后,设置绕线属性,让它绕在高层。
五、增加capture clock path delay
也可以叫做通过useful skew来修复。clock path位置如下图所示:
在capture clock path上追加delay cell使得capture clock path和launch clock path delay的到达时间一样,而达到约束条件,这样的方法叫做useful skew。
但是,由于这样会动到clock path,所以我们插cell前还是需要很谨慎的。首先我们得确保从capture clock出发的下一级path是不是有setup slack margin,同时,检查一下到当前该级register的input pin上的有没有hold margin。
innovus中提供了一些option来使用usefulSkew:
setOptMode -usefulSkew true \-usefulSkewCCOpt standard \-usefulSkewPreCTS true \-usefulSkewPostRoute true setUsefulSkewMode -delayPreCTS true \-macroOnly false \-noBoundary true \-maxAllowedDelay 0.5 -minAllowedDelay 0
六、减小launch clock path delay
这也是动clock path来修复setup violation的一种方法,需要减小launch clock path delay。 这类方法一般用的比较少。理论上我们可以减小clock path的级数来实现,但实际操作起来还是要分析清楚clock的结构。
七、修setup的注意事项
1)检查timing path的hold margin。 需要注意的是,一般setup的violation在SS corner下,而hold则出现在FF的corner下面,两者之间有3倍左右的timing variation。所以,检查margin时需要考虑不同的corner影响。如果设计频率过高的话,可能会出现setup和hold相互打架的情况,这时可以考虑提高net delay占的比重,修出margin。
2)尽量动靠近endpoint的cell。因为越往path后面的cell,影响的path数目越少。但有时还是需要考虑path分叉情况再决定修复的方法。
3)修完所有path后,需要在PR工具中对动过的cell重新摆放以及route。
checkPlace (-noHalo)
ecoRoute
八、批量ecoChange cell的模板
1. change 指定cell
setEcoMode -reset
set gpsPrivate::dpgEcoMemoryFix 4
setEcoMode -batchMode true -updateTiming false -refinePlace false -fix_hinst_guide true
set cmd_option "-bufOrient"
catch { redirect cmd_line "ecoChangeCell -help" -variable }
catch { if {[string first "-bufOrient" $cmd_line] == -1} {set cmd_option "-orient"} }catch { set version_line [getVersion] }
catch { set version_flag [string compare [string range $version_line 0 4] 16.21] }setEcoMode -honorDontUse false -honorDontTouch false -honorFixedStatus falseecoChangeCell -inst xxx -cell BUF_xxx
....
setEcoMode -batchMode false
2. change Vt/channel length (from port)
set all_fanouts [all_fanout -from **xxx**]
puts $all_fanouts
foreach_in_collection all_fanout $all_fanouts {if {[get_property [get_cells -of_objects $all_fanout] is_buffer] == "true"} {set org_name [get_property [get_cells -of_objects $all_fanout] ref_lib_cell_name]set inst [get_property [get_cells -of_objects $all_fanout] escaped_name]if {[string match *50 $org_name]} {regsub -all {50} $org_name "40" target_cell_nameecoChangeCell -inst $inst -cell $target_cell_nameputs "**xxx** :buffer $org_name $target_cell_name $inst"}}if {[get_property [get_cells -of_objects $all_fanout] is_inverter] == "true"} {set org_name [get_property [get_cells -of_objects $all_fanout] ref_lib_cell_name]set inst [get_property [get_cells -of_objects $all_fanout] escaped_name]if {[string match *50 $org_name]} {regsub -all {50} $org_name "40" target_cell_nameecoChangeCell -inst $inst -cell $target_cell_nameputs "**xxx** :inverter $org_name $target_cell_name $inst"}}
}
修复setup violation的方法总结相关推荐
- Less is more——如何修复setup violation?
对于setup violation,大家一定都非常熟悉,网上也有很多相关的资料.今天我们来介绍下对于项目后期ECO阶段,我们如何来修复setup violation. 首先我们来回顾一下setup的定 ...
- 数字芯片设计实现中修复setup违例的方法汇总
数字芯片设计实现中修复setup违例的方法汇总 setup 的分析与优化贯穿数字芯片设计的整个过程,也是每位数字 IC 设计工程师必须掌握的基本技能之一.最好在开始后端实现之前就获得一个没有 Setu ...
- 时间做减法,人生做加法——如何修复hold violation?
上一期介绍了setup violation的修复,这次我们来讲讲hold violation. 相比setup来说,hold的修复要简单得多.同样地,我们先来回顾下hold time的定义. hold ...
- 秒杀数字后端实现中clock gating使能端setup violation问题
秒杀数字后端实现中clock gating使能端setup violation问题 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 点击标题下「蓝色微信名」 ...
- Angular单元测试框架karma-jasmine里类似ABAP unit框架的setup和class_setup方法
类似ABAP unit框架的setup和class_setup方法: 使用TestBed的工厂方法创建Component: 最后使用工厂方法新建Component实例: 创建好的Component实例 ...
- 位置不可用无法访问 chkdsk无法修复的文件恢复方法
这是分区逻辑损坏后最常见的表现.位置不可用无法访问 chkdsk无法修复的文件恢复方法有些用人到这种情况后首先会尝试使用Windows系统自带的硬盘修复工具chk命令进行修复,不过,这样操作并不能解决 ...
- jpg图片损坏怎么修复?可以试试这个方法
生活中,相信不少小伙伴在使用电脑或手机时,难免会遇到这样的问题,就是保存的图片损坏了,看不到图像了.在出现图像损坏后,我们经常问自己的第一个问题是,有什么办法可以修复它们,之前小编也是遇到这样的问题, ...
- win10修复计算机没反应,win10修复引导【解决方法】
喜欢使用电脑的小伙伴们一般都会遇到win7系统win10修复引导的问题,突然遇到win7系统win10修复引导的问题就不知道该怎么办了,其实win7系统win10修复引导的解决方法非常简单,按照 1: ...
- 怎样恢复安装计算机,计算机安装双系统后如何修复系统引导 修复系统引导的方法...
知友提出问题:电脑双系统怎么用,我装的是win8和win7.win8安装在C盘上,可以正常使用,我把win7安装在一个新分区的盘符上G盘,为什么开机没有win7系统选择项启动,只有一个win8和GHO ...
最新文章
- 最全Python算法实现资源汇总!
- Python、Lua和Ruby比较——脚本语言大P.K.
- easyui表单网格列错位_《HTML5从入门到精通》——第3章 HTML表格与表单
- Servlet入门篇(GenericServlet 类 - HttpServlet 类 -ServletConfig 接口 - HttpServletRequest 接口……)
- MongoDB管理与监控
- 《Ray Tracing in One Weekend》——Chapter 3: Rays, a simple camera, and background
- SQLSERVER数据库所有者SID问题
- [PTA C语言]冒泡法排序
- vs2019键盘钩子_注册全局鼠标钩子后用鼠标点击窗口上最大化、最小化、关闭窗口界面卡死...
- selenium 在pycharm中安装selenium
- STM32F401CCU6移植华为LiteOS
- 中国多接收器电感耦合等离子体质谱仪市场行业产销需求与投资预测分析报告2022-2028年
- 计算机内存有何组成,电脑4个4g内存条组成16g内存和16g内存有什么不同?
- 计算机专业学生该如何提高自己?提升自己的专业技能?
- jzojs 100047. 【NOIP2017提高A组模拟7.14】基因变异
- DELL安装不了mysql_dell电脑win10怎么安装mysql
- 找单身狗版本2(有两个单身狗)
- 白月光与朱砂痣用计算机怎么弹奏,天谕白月光与朱砂痣钢琴谱 乐谱代码怎么使用...
- 实时全局光照RSM-Reflective Shadow Maps(RSM)
- Java包与Import导入
热门文章
- 拜师————python基础入门——守破离学习法,海龟绘图,画出奥运五环图,day3
- 曾经宣称万亿市场的智能机器人,究竟怎么了
- 新浪云php与微信,新浪SAE php能够获取微信的头像,但是在本地运行代码获取不到?...
- WeChatPlugin Mac版安装
- Linux知识点求职应聘必备
- STM32F103中文参考手册PDF
- [架构之路-181]-《软考-系统分析师》-19- 系统可靠性分析与设计 - 2-容错性: 软件容错技术
- 物联网通信协议(接入协议)
- (co-,contra-,in-)variance in Scala, what is [+-A]
- Linux ZRAM的简单介绍