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的更多相关文章

  1. [原]CentOS7安装Rancher2.1并部署kubernetes (二)---部署kubernetes

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  2. 利用python进行数据分析2_数据采集与操作

    txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...

  3. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  4. 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?

    0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...

  5. 应用r.js来优化你的前端

    r.js是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器的文件请求.要使用 ...

  6. 使用R画地图数据

    用R画地图数据 首先,从这里下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf.bou2_4p.shp和bou2_4p.shx),将这三个文件解压到同一个目录下. ...

  7. c#使用Split分割换行符 \r\n

    c# 使用Split分割 换行符,方法如下(其余方法有空再添加):   string str = "aa" + "\r\n" + "bb"; ...

  8. JAVA调用R

    JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的 ...

  9. Windows Form调用R进行绘图并显示

    R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上. 1 前提准备 安装R软件,需要安装32位的R软件,6 ...

  10. react-native Simulator com+r不能刷新模拟器

    这个问题是我按了com + shift + K 调出Simulatior 的时候出现的, 然后虚拟机就刷新不了了, 怎么按com+r都不好使. 在Simulatior的菜单栏选择Hardware -- ...

随机推荐

  1. angular2 给下拉框动态赋值

    html页中 其中aab是从后台获取的动态数据

  2. 关于setTimeout的妙用

    定义 在指定的延迟时间之后调用一个函数或执行一个代码片段 这个是setTimeout最主要的功能,但也是很坑的地方,首先javascript其实是运行在单线程的环境下,意味者定时器会在未来的某个时间支 ...

  3. 从客户端中检测到有潜在危险的request.QueryString

    1. 修改 web.config文件 1.1 <pages validateRequest="false"></pages> (如果存在这个节点 直接加属性 ...

  4. 纯css实现移动端横向滑动列表(可应用于ionic3移动app开发)

    前几天在公司做开发的时候碰到一个列表横向滑动的功能,当时用了iscroll做,结果导致手指触到列表的范围内竖向滑动屏幕滑动不了的问题. 这个问题不知道iscroll本身能不能解决,当时选择了换一种方式 ...

  5. 使用pip install mysqlclient命令安装mysqlclient失败?(基于Python)

    我们使用Django.flask等来操作MySQL,实际上底层还是通过Python来操作的.因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序.在Python3中,驱动程序有多种 ...

  6. K3修改字段名

    在K3的BOS中,自定义字段之后我们往往会修改字段名,便于记忆和理解,但是修改字段名之后,只是数据库中的字段名被修改了,BOS中的字段标识并没有被修改,可以通过以下语句将标识和字段名改成一致. sel ...

  7. C# ODP.Net oracle数据库操作 支持不安装客户端

    下载: http://download.oracle.com/otn/other/ole-oo4o/ODTwithODAC1110720.zip?AuthParam=1414811820_e61f2f ...

  8. C++-static作用(转)

    C++中static的作用 C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用 ...

  9. linux网卡

    手动启动 ifup eth0 查询网卡配置信息 vim /etc/udev/rules.d/70-persistent-net.rules 备注:可以修改网卡名称和MAC地址

  10. Linux - Deepin Linux,intel无线网卡下载慢、不能跑满宽带的解决方案

    解决方案 将 /etc/modprobe.d/iwlwifi.conf中的11n_disable=1删掉,重启. 参考 https://bbs.deepin.org/forum.php?mod=vie ...