作为一个后端设计者,所需要掌握的技能其实就是熟练的利用工具,为自己服务。 需要的知识是什么?说的简单点,就是如何把设计的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的更多相关文章

  1. HDU 2031 进制转换(10进制转R进制)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2031 进制转换 Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. 二模 (10) day2

    第一题: 题目大意:求出区间 [L,R]里约数最多的数.   L,R<=10^9 解题过程: 1.一开始我就往恶心的数据去想了,比如 L=R=一个超级大的质数.. 那么 用搜索质因子的方法  是 ...

  3. R之批处理

    在linux下如何编写脚本调用R语言写的程序呢? R语言进行批处理有2种方式: R CMD BATCH --options scriptfile outputfile Rscript --option ...

  4. 10.30 afternoon

    P76竞赛时间: ????年??月??日??:??-??:?? 题目名称 他 她 它 名称 he she it 输入 he.in she.in it.in 输出 he.out she.out it.o ...

  5. HDU_2031——十进制转换成R进制

    Problem Description 输入一个十进制数N,将它转换成R进制数输出.   Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=1 ...

  6. 使用r.js来打包模块化的javascript文件

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

  7. (10) 如何MySQL读压力大的问题

    如何进行读写分离 由开发人员根据所执行的SQL类型连接不同的服务器 由数据库中间层实现读写分离 读写分离时,需要注意,对于实时性要求比较高的数据,不适合在从库上查询(因为主从复制存在一定延迟(毫秒级) ...

  8. oracle笔记--查询10条之后记录的数据

    本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 由于之前一直在用mysql 对于oracle 的一些语法不太了解,自己有一次去面试让写一个oracle ...

  9. \r\n 回车换行浅析

    \r \ 10 x0a return \n \ x0d newline Unix系统里,每行结尾只有“<换行>”,即“\n”: Windows系统里面,每行结尾是“<回车>&l ...

随机推荐

  1. nodejs使用promise实现sleep

    个人博客 地址:http://www.wenhaofan.com/article/20181120180225 let sleep = function (delay) { return new Pr ...

  2. C语言 malloc函数

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                                 ...

  3. C语言strcmp()函数:比较两个字符串

    strcmp() 函数用于对两个字符串进行比较(区分大小写). 头文件:string.h 语法/原型: int strcmp(const char* stri1,const char* str2); ...

  4. this 的值到底是什么?一次说清楚

    this 的值到底是什么?一次说清楚 方应杭 ​ 杭州饥人谷教育科技有限公司 CTO 1,071 人赞同了该文章 你可能遇到过这样的 JS 面试题: var obj = { foo: function ...

  5. 题解【AcWing274】移动服务

    题面 非常好的优化 \(\text{DP}\) 状态表示的题目. 首先可以设 \(dp_{i,x,y,z}\) 表示已经做完了前 \(i\) 个请求,现在的 \(3\) 名服务员分别在 \(x\) . ...

  6. 托管代码中调用c++本地代码

    c++本地动态连接库代码 #pragma once #include "stdafx.h" #ifdef PERSON_EXPORTS #define PERSON_API __d ...

  7. CAN总线冲突裁决

    当总线上的几个器件同时发送数据的时候,CAN总线必须决定哪个器件可以发送,而其他的器件必须等待.冲突裁决是CAN协议最重要的一个特性. 以下图为例.总线上有器件A,B,C,D.A,B,C同时发出SOF ...

  8. C++-POJ3274-Gold Balanced Lineup[hash]

    不是很懂? 胡乱hash #include <set> #include <map> #include <cmath> #include <queue> ...

  9. AcWing 282. 石子合并

    #include <iostream> #include <algorithm> using namespace std; ; int n; int s[N];//前缀和 in ...

  10. 2.springboot------微服务

    什么是微服务? 微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合:可以通过http的方式进行互通.要说微服务架构,先得说说过去我们的单体应用架构. 单体应用架 ...