zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    [R] read.table的check.names参数防止读入数据时列名前自动加上"X."
    【宏基因组】MEGAN4,MEGAN5和MEGAN6的Linux安装和使用
    洛谷—— P1077 摆花
    洛谷—— P2733 家的范围 Home on the Range
    BZOJ——T 1801: [Ahoi2009]chess 中国象棋
    洛谷—— P1379 八数码难题
    BZOJ——T 1800: [Ahoi2009]fly 飞行棋
    几种outofmemory
    几种常见web攻击手段及其防御方式
    JVM参数
  • 原文地址:https://www.cnblogs.com/lelin/p/11407235.html
Copyright © 2011-2022 走看看