P & R 10
作为一个后端设计者,所需要掌握的技能其实就是熟练的利用工具,为自己服务。 需要的知识是什么?说的简单点,就是如何把设计的PPA搞上去。 说的复杂点,那就得从PPA需要注意的每个点去一一剖析。这个就太需要篇幅了。我也不想展开去说。
我们就先拿floorplan来做个例子简单说一下。floorplan是整个设计的起点,好比建房子的地基一样,好的地基才会造出牢固的房子。 不好的地基,估计没建几层就跨了。 经常会听到小伙伴在place的时候cell放不下去,timing很差,很多时候都和floorplan有关系。因为做floorplan的时候,影响PPA的因素很多。
power 怎么打:也看到有公众号相关的技术贴,分析怎么打 Power才能省route的资源,才能有比较好的IR drop,这都是和设计最后的PPA息息相关。当然也需要做power 分析才能决定最终的power 方案。 一般大的设计会有专人负责整个chip的power方案。(注:打power请参考《无边光景一时新,power-plan如何定》)
mem如何摆放,pin如何摆放:这些也是Floorplan要考虑的东西。Mem的位置决定了模块的摆放位置。所以设计者需要熟悉设计中的数据走向,根据走向来合理摆放。同时,你还要考虑congestion,要让一行mem或者一列mem有那种流线的感觉,不能太突兀。个人经验,堆出那种凹凸不平的mem要么就是浪费面积,要么就是congestion比较差。以前arm的A9 据说摆了100多版的Floorplan才给出了最后的reference FP 给客户。 所以mem的摆放是个技术活,也是个体力活。 如何衡量一个floorplan的好坏,还是要看PPA. 所以需要迭代的过程会比较多。 当然,熟练工会通过迭代的结果来分析工具的行为,然后再对FP做调整,这样往往会事半功倍。
FP形状和大小:如果是bottom-up的设计,那这个形状和大小可以有block的owner先定,往往会比较容易做。 但是如果是top-down的设计,做top的一般都是比较牛的人。他要给下面每个block做好划分,同时还要考虑每个block的pin的摆放。 在这方面,innovus 的功能是很强大的。 谁用谁知道。
module guide/blockage的添加:这个也是根据place的结果来看的,实际上现在innovus 的Giga place相当强大,真正的timing driven,以前那种要加成百上千的guide的时代已经一去不复返了,现在基本上先什么都不加,都可以给你一个比较好的结果了。
当然,对于一个设计来说,没有最好的FP,只有更好的FP。 不管是白猫黑猫,能达到最后的PPA要求就是一个好的FP。 有时候一个完美的结果往往出现在你挪动了几个mem的位置,加了几个guide而突然出现的。那个时候的成就感是无以言表的。
其实往往FP定好了,那你的design基本上已经成功了一大半了。 如前所述,定FP的时候,是需要迭代的,是需要看PPA的,基本上跑一个place_opt就能知道这个FP的好坏。所以FP和place关系最为密切。怎么去debug Place的结果? 看PPA。 方法有哪些? 看PPA。 能不能讲的详细点? 好吧,其实就是看timing好不好,congestion好不好。 Timing 不好,是因为module没放好? 加guide吧。 是因为congestion的问题导致不好? 那就解congestion吧。。 这个没有葵花宝典,只有多用心做几次就有经验了。
到CTS阶段的时候, 又是一个可以展开的话题。 因为cts其实就是一个小的pr flow,从place到route到opt都有。。 实际上现在工具都已经很智能很强大了,需要用户干涉的很少。比如innovus可以直接通过SDC来生成做CTS的spec。 对用户来说,啥都不要考虑。工具自己做,同时还帮你修timing。 那CTS最关注的是什么? 越到advance node,越关心latency,power。Skew反而不是最重要的指标。 所以要把树做短,树功耗做小,同时它的skew也不能太差,这个更多的是EDA需要解决的问题。 因为现在设计越来越复杂,以前的分步做树放到现在很适用了。
后面的route和drc对设计者来说,只需要知道drc在lef的定义,知道怎么修就好了。但是实际上,大面积的drc一般可能就有两个原因:
design的问题:FP不合理? Place不合理?congestion太差?
工具的bug。
P & R 10的更多相关文章
- HDU 2031 进制转换(10进制转R进制)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2031 进制转换 Time Limit: 2000/1000 MS (Java/Others) M ...
- 二模 (10) day2
第一题: 题目大意:求出区间 [L,R]里约数最多的数. L,R<=10^9 解题过程: 1.一开始我就往恶心的数据去想了,比如 L=R=一个超级大的质数.. 那么 用搜索质因子的方法 是 ...
- R之批处理
在linux下如何编写脚本调用R语言写的程序呢? R语言进行批处理有2种方式: R CMD BATCH --options scriptfile outputfile Rscript --option ...
- 10.30 afternoon
P76竞赛时间: ????年??月??日??:??-??:?? 题目名称 他 她 它 名称 he she it 输入 he.in she.in it.in 输出 he.out she.out it.o ...
- HDU_2031——十进制转换成R进制
Problem Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=1 ...
- 使用r.js来打包模块化的javascript文件
前面的话 r.js(下载)是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器 ...
- (10) 如何MySQL读压力大的问题
如何进行读写分离 由开发人员根据所执行的SQL类型连接不同的服务器 由数据库中间层实现读写分离 读写分离时,需要注意,对于实时性要求比较高的数据,不适合在从库上查询(因为主从复制存在一定延迟(毫秒级) ...
- oracle笔记--查询10条之后记录的数据
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 由于之前一直在用mysql 对于oracle 的一些语法不太了解,自己有一次去面试让写一个oracle ...
- \r\n 回车换行浅析
\r \ 10 x0a return \n \ x0d newline Unix系统里,每行结尾只有“<换行>”,即“\n”: Windows系统里面,每行结尾是“<回车>&l ...
随机推荐
- JFinal获取多个model
个人博客 地址:http://www.wenhaofan.com/article/20180930112646 由于jfinal框架自身没有实现获取多个同一类型的Model的方法,导致获取ModelL ...
- Vue.js 源码目录设计(二)
Vue.js 的源码都在 src 目录下,其目录结构如下. src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台的支持 ├── se ...
- SpringMVC-简单参数绑定
SpringMVC-简单参数绑定 众所周知,springmvc是用来处理页面的一些请求,然后将数据再通过视图返回给用户的,前面的几篇博文中使用的都是静态数据,为了能快速入门springmvc,在 ...
- MySQL主键设计盘点
目录 主键定义 主键设计和应用原则 主键生成策略 自增ID UUID 自建的id生成器 Twitter的snowflake算法 @ 最近在项目中用了UUID的方式生成主键,一开始只是想把这种UUID的 ...
- jsp中连接数据库及实现增删改查
导入jdbc工具包 <%@page import="asp.engine.util.PageHelper"%><%@ page import="asp. ...
- 数据从mmsql导入mysql
SQL SERVER数据导入MYSQL 工具: navicat for mysql 百度搜一个安装就可以,前提是你已经安装了mysql 1,创建目标数据库 点击创建好的目标数据库website点的表一 ...
- 【填坑】python3 manage.py migrate:?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
问题: WARNINGS:?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default' H ...
- SuperSocket与SuperSocket.ClientEngine实现Protobuf协议
参考资料说明 SuperSocket文档 http://docs.supersocket.net/ Protobuf语言参考 https://developers.google.com/protoco ...
- Python—网络通信编程之tcp非阻塞通信(socketserver)
服务端代码 import socketserver # 定义一个类 class MyServer(socketserver.BaseRequestHandler): # 如果handle方法出现报错, ...
- NEON的vsub方法溢出
关于NEON的vsub方法的溢出,结果如下: vsub会产生溢出,根据数据bit表示规律,可知溢出结果和理论正确结果形成互补,比如249-(-7)=256 使用类vreinterpretq_s16_u ...