P&R 6
Floorplan:
要做好floorplan需要掌握哪些知识跟技能?
通常,遇到floorplan问题,大致的debug步骤跟方法有哪些?
如何衡量floorplan的QA?
Floorplan基本上是后端硅农最花时间的部分,一般是在解决三个问题:
IP、MEM、I/Opin、PAD/BUMP规划:琐碎重复且龟毛,可能就是在讲一个后端工程师在摆floorplan,经常的经历就是试过9527个FP后最后才发现第一个结果最佳。一般跟前端要一份data flow再去搞FP是明智选择,当然同时有前端详解各个不同模块的之间的联系和时序约束那是更棒。IP/IO的文档内一般会有一些place&route的建议,比如PLL周边的是否需要place halo/Litho,端口接线层次要求、方式(是否直连不可交叉),不可与哪些device临近摆放。
各种physical cell的放置:WELLTAP、ENDCAP、DECAP、PowerSwitch这些玩意儿在前端的世界里不代表什么,而跑到后端的世界里属于稍有闪失便会DRCfail 甚至打回重来的窘迫境地。熟读FAB提供的DRC file必要至极,各种基于DRC、DFM、甚至是后期PV tool run time的考量都会收录其中。
Power plan:想要chip跑的快,供电不足怎么行,FP里占比重较大的一部分就是Power plan,怎么创建一个合理且强壮的power network,上能绕线欢畅不阻塞,下可静态动态不降压,一般成熟case会有一个沿用的Power plan结构,而新开case也不担心,可以拿DRC file里各互联层的max density为上限参考,多跑几版给Power analysis tool去确认。通常都会建议FP完成后去做一些P&R工具内部的verify,检查Physical cell之间有否place violation,检查power 有否缺via有否short,更稳妥的可以做个快速placement然后填满fill去跑 DRC&PA。DRC关注baselayer的问题,看有无Latch up问题或者边界cell冲突,PA可以大致看下power network有否特别薄弱的地方,看到一些犄角旮旯的遗漏问题。
就像clock skew和clock latency是检查cts QA的标准一样,floorplan QA的标准应该是placement结果,打开place data一看便知,关键路径所在模块是否被别的模块在place阶段冲的七零八落溃不成军?共享mbist的memory是否鹊桥相望天水一方?好好的两个REG有无翻越Macro去talking?
Placement:
要做好placement需要掌握哪些知识跟技能?
通常,遇到placement问题,大致的debug步骤跟方法有哪些?
如何衡量placement的QA?
Placement有三板斧,叫推开、聚拢、强锁死。
推开:常见做法是padding,可以是为了double height或者多pin的复杂组合逻辑甚至是整个routing congestion过多的module预先占routing resource,也可以是PA hot spot点大面积聚集时分散power mesh的压力。
聚拢:基本就是搞小团体,用instance group把希望在一起的inst, module, macro 撮合在一起。虽然P&R工具现在对path的分析优化能力越发强劲,但合理的group至少对runtime是福音。
强锁死:有时候有些inst在一万次place后发现无论怎样工具都没法给予非常合适的位置,就会需要用到一些强制锁定的小花招,比如pipeline打拍的DFF、DFT插入的某些mux、为了tree balance预先加入的anchor buffer都可以是强锁死的对象。
Placement遭遇的问题一般是timing导向或者congestion导向的,一个涉及timing可否meet,一个影响最后routing会不会有short或drc。一般都会根据timing report去调整inst group、region甚至重做整个FP或者调整sdc通过适度过约束来收敛timing;根据congestion map去预防之后可能存在的绕线问题,overflow是一个重要参考参数,而且现在的P&R工具基本都会引入合理的估算来模拟例如clock net因为应用了什么样的NDR而占据更多绕线资源的情况,使得place阶段的情况更接近最后的routing的情况。
CTS:
要做好CTS需要掌握哪些知识跟技能?
通常,遇到CTS问题,大致的debug步骤跟方法有哪些?
如何衡量CTS的QA?
CTS全称时钟树综合,是数字物理设计实现中最为关键的一步,一个好的时钟树可以有效保证绕线前后时序一致性。做好时钟树综合需要的知识技能没有特别的,STA是基础,然后同时对设计工艺有所熟悉,比如clock cell 类型,绕线层次等。
CTS的问题通常主要有skew不满足(平衡型时钟树设计),树长过长等。以innovus为例,我们可以首先拿一个place db做一个快速的时钟树,set_ccopt_mode -cts_opt_type cluster ; ccopt_design-cts. 做完一个这样的时钟树,工具只修复了slew,并没有考虑时钟树平衡,这个阶段我们可以分析最长的时钟路径出现在哪,结合图形界面分析是否是placement不合理。同时我们也可以做一个快速的时钟树平衡,set_ccopt_mode -cts_opt_type trial; ccopt_design -cts.这是工具最理想状态做时钟树,通常这个阶段工具没法满足skew要求,到后期也不会满足,结合LOG信息我们可以快速定位是哪些sink不能做平。
通常评判时钟树质量主要是两方面,第一是反应时钟树功耗方面的,比如时钟树cell数量以及面积,时钟树线长。另外就是时序上的指标,比如时钟树insertiondelay, slew time, skew等。通常两个方面是互相关联的。
时钟树综合目前有两种设计理念,一是传统的平衡时钟树,另一种是cadence主打的时钟树并行时序优化。第一种旨在减小时钟树到不同sink点的差异,满足时序与否主要取决于数据路径。第二种建立在一个大致平衡的时钟树网络基础上,动态调整时钟树到不同sink的长短,结合数据路径的优化最大程度推高频率。通常,第二种设计方法用于高性能设计中比如CPU。
Route:
要做好Route需要掌握哪些知识跟技能?
通常,遇到Route问题,大致的debug步骤跟方法有哪些?
如何衡量Route的QA?
在先进工艺,绕线的工作越来越主要依赖于EDA工具的进步以及对先进工艺各种设计规则的支持。当然这并不代表PR工程师没有事情可以做了。绕线的好坏通常在flooplan阶段就决定了,我们要对设计的规格要非常熟悉比如金属层次,powermesh结构,macro 摆放等。
绕线问题最直观的体现就是DRC,我们可以结合Innovus route DB来分析。首先看DRC是零散分布还是集中出现在某些区域,通常这个和floorplan 有关,比如macro摆放,IO pin分布,细小沟道等。再结合金属层次具体分析,比如大量的DRC出现在出pin层M1,我们就要看看是否powermesh存在不合理,M1的spacing 和track 的offset选择是否合理考虑到了instance的pin access 。
首先是DRC clean,其次是是否有效合理利用金属层,在关键路径上是否出现大量的detour,是否合理规避SI的出现。
Innovus最大的优势是并行运算能够快速修DRC,而且能够保障可复现性。Innovus在先进工艺尤其16nm以下,对double pattern 的设计规则有更加成熟和有效的支持。
另外现在innovus基于时序的绕线也越来越强大,更加合理安排绕线资源,让时序收敛。
DRC:
要做好DRC需要掌握哪些知识跟技能?
通常,遇到DRC问题,大致的debug步骤跟方法有哪些?
对于数字P&R来说一般会遇到的DRC问题集中在两部分,一部分是在P&R工具内部的可检查出的DRC,或是因为某些std cell的本身因为cell layout的关系造成的某些cell内部的obs会跟特定方向走线有violation,或是特定某几个cell之间abut一起会有drc。另一部分是只能在PV工具出现在P&R工具内无法发现的问题,原因是各种各样,可能是PV工具的run set与PR工具的tech file并不一致,可能是GDS和LEF在互转中出现精度问题,甚至可能就是tool bug。前者现在某些FAB大厂常会提供一份针对cell的约束来防止以上问题,但也不排除遗漏需要自己去做一些补充约束。后者需要仔细定位问题发生的节点,是tech还是gds,然后及时跟FAB或EDA厂商沟通更新出问题的部分。初入行时听过一句话叫做没有修不掉的DRC,没有压不了的chip size,对于TO时间至上的后端来说,某些问题甚至要用一部分手动干预 (routing blockage )的方式解决,但因为工艺的变迁,10nm、7nm节点的DRC rule数量相较以前几乎是指数级别的增加,千万不要尝试用完全手动的方式去修正一个绕线密集区的space, enclosure, EOL问题,否则修一个DRC下一轮冒一百个的结果分分钟教你做人。
P&R 6的更多相关文章
- [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes
################## Rancher v2.1.7 + Kubernetes 1.13.4 ################ ##################### ...
- 利用python进行数据分析2_数据采集与操作
txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...
- Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页
{#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- 应用r.js来优化你的前端
r.js是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器的文件请求.要使用 ...
- 使用R画地图数据
用R画地图数据 首先,从这里下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf.bou2_4p.shp和bou2_4p.shx),将这三个文件解压到同一个目录下. ...
- c#使用Split分割换行符 \r\n
c# 使用Split分割 换行符,方法如下(其余方法有空再添加): string str = "aa" + "\r\n" + "bb"; ...
- JAVA调用R
JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的 ...
- Windows Form调用R进行绘图并显示
R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上. 1 前提准备 安装R软件,需要安装32位的R软件,6 ...
- react-native Simulator com+r不能刷新模拟器
这个问题是我按了com + shift + K 调出Simulatior 的时候出现的, 然后虚拟机就刷新不了了, 怎么按com+r都不好使. 在Simulatior的菜单栏选择Hardware -- ...
随机推荐
- leetcode top-100-liked-questions刷题总结
一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...
- Mesh R-CNN 论文翻译(实验部分)
本文为 Mesh R-CNN 论文翻译(原理部分)的后续.Mesh R-CNN 原论文. 4 实验 我们在ShapeNet上对网格预测分支进行基准测试,并与最先进的方法相比较.然后,我们在野生的有 ...
- Map.getOrDefault被坑小记与optional
错误使用样例 map.getOrDefault("account","").toString(); 在运行几小时后,发现报错空指针:查看源码如下: defaul ...
- eclipse怎么debug项目
1.打断点,服务器debug启动 2.debug:打断点,加项目.f5:进入方法 f6:下一行代码 f8:执行到下一个断点处
- C# asp.net 配置文件连接sql 数据库
先引用 using System.Configuration;//配置文件using System.Data.SqlClient; 我这里使用的是SqlServer 2008 sa 用户 密码也为s ...
- Web 开发人员推荐的通用独立 UI 组件
现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...
- Jmeter-几种脚本录制方式
一.使用代理服务器进行录制 1.创建线程组 2.创建http代理服务器 分组解释 不对样本分组:所有请求全部罗列 在组件添加分隔:加入一个虚拟的以分割线命名的动作 每个组放入一个新的控制器:执行时按控 ...
- NotePad++中如何改变光标样式(转换横着和竖着)?
在键盘上找 Insert ,按这个Insert就可以把横向闪烁光标( _ )修改成竖向闪烁光标样式( | )
- JavaScript 引擎基础:Shapes 和 Inline Caches
JavaScript 引擎基础:Shapes 和 Inline Caches hijiangtao 中国科学院大学 计算机应用技术硕士 260 人赞同了该文章 前言:本文也可以被称做 “JavaS ...
- CodeForces -1216B.Shooting
水题 #include <cstdio> #include <algorithm> using namespace std; ; struct node{ int s, f; ...