当前位置:首页 > > 艾思后端实现


版图工具向来都是各家EDA大厂的必争之地,毕竟一个要卖3M US$啊!小艾从开始使用的Apollo, Astro, blastfusion、 talus 直到现的icc/icc2工具。整个业界的版图工具数量呈现一个收敛的状态,就像EDA公司一样,像高度聚合方向发展。事实证明,以前那种百花齐放的日子已经不复反了,只有真正的资本大鳄才可以在金山银水里屹立不倒。毕竟开发layout工具真心费钱啊!


经过不断地演进,现在在IC的芯片版图市场就剩下了两家独大的局面:Synopsys 的 icc/icc2和Cadence 的Innovus,不论使用哪种工具,大致的版图实现流程都是相似的,因为知识,都是增量式发展的。从流程讲,一般都无外乎以下几大步骤



具体对应每个步骤的工作目标,见下表



基于前边讲过的内容(错过的同学可以回顾一下),后端的工作的数据量是非常庞大的,动辄就是一百多万的器件数量,和几百万的连线关系,工具这时候就会帮助用户来完成这些复杂的工作,但是,这些都是基于用户的指导和干预的。所以我们每一步做好使用脚本来做调测和回放。


APR的全称就是 Auto Place andRoute (自动布局布线),我们基于工具提供的命令接口、选项、配置来操作,这些都是工具细节,更重要的是我们要知道我们的每一步骤的目地,要保证结果,我们就必须保证每一步骤的结果是收敛的,这点很重要,很多同学问小艾,问什么我的layout结果的timing不好,short太多,不好修,怎么重绕,怎么ECO都不能short问题。用蝴蝶效应来比喻版图工具是最恰当不过了,任何一点改变和变化都可能引起大的变化。作为一个后端工程师,一定要多自己的数据库有认识:你的版图的特点是什么?你的瓶颈是什么?怎么方向的调整是可以导致你的数据收敛?等等这些。始终铭记:只有你自己,才是最了解你的模块的。


如果你跟着小艾,一步步来,后端的工作其实也是容易的,只要我们每次都能保证数据朝着我们期望的方向发展和收敛,你一定会事半功倍的。


俗话说的好,好习惯能养人。OK ,跟着小艾一起,来开启一段职业的工程师旅途吧!


今天就来讲讲第一步:数据的导入和初始化



这个步骤可能是所有步骤里边最快的,可能也是最容易被忽视的。从小艾的经验来看,这一步骤其实是要好好注意的,常言说得好,万事开头难啊!


1: 对于输入量的检查:

做过综合的人一般都知道,综合的结果一般都不是非常真实的,但不真实并不代表虚假,首先,我们需要严格检查输入数据库的QoR,以下几个检查点是需要layout工程师仔细注意的:


A:      timing 的QoR: 在所有的综合数据库里边,所有的clock都是ideal的,无论综合器是不是带floorplan信息,都要关注综合器的setup timing结果,因为setup timing 是跟频率相关的,能不能跑到某个频率,都可以在综合这边看到一些端倪。加之clock是ideal的,综合数据库里边数据通路(datapath)上的时延就决定了这个数据库的timing的结果。至于interface timing 问题,可以先在这里的检查里忽略掉,具体后面或说到。


B:     综的check_timing check 的报告。这个报告里边包含了所有综合器对design的timing相关的检查结果。这里需要说的是unconstrained_endpoints的结果要看好一下,这里列出来的店都是没有被时钟约束的点,这会导致工具在整个优化过程中忽略这个点的优化,所有的这类问题都要在这里解决或者确认,如果遗留到后边都是很危险的。所有的timing loop也要和前端的同学确认一下,看看需不需要改code来打断loop。


C:     等效性检查(EC),开始layout工作的时候,一定要拿到这个结果,如果EC的run time 比较久,我们可以并行做,但是一定要拿到结果来决定下部不怎么走,给予一个错误的网表是不能往下做的。


D:      面积信息:综合器的报告会有面积信息,后端工程师需要关注的有:

D1:        macro/memory 的数量和面积的信息,如果是第一版layout,这个信息心里有个数就好了,floorplan的时候会真正的使用他们。如果是第n版,一定要留意下,每一版本的变化,任何变化应该都要和前端或者综合的同学确认一下,因为,这些边的变化都会影响到已有的macro placement,算是版图的大变化了,必须要提前声明和确认


D2:    std-cell的面积和类型,

如果面积变化很大,设计又没怎么变,要小心看一下,可能综合的QoR在某些方面有意外。面积变化大,也意味着layout的压力变大,这里也需要好好和前端人确认。

如果buffer/inverter变化很多,最好看一下timingpath,是不是DCT输入的floorplan的不是layouter期望的


E            UPF,现在的设计都是支持UPF流程的,如果你有UPF作为输入量,那你一定要有对应的voltage来设定你的library,在输入结束时,一定要看一下你的check_mv的报告,每一个error都要看一下,这里边的问题一般都会导致place无法继续等和星结果,这点有时候很让人头疼。为了后边的QoR,所以小艾建议,这里一点更要检查一下UPF的质量


F       时序约束的读入(sdc):一般来讲,layout需要读入SDC格式的时序约束文件来约束timing,但有时候会有很多error和warning,小艾建议大家把这个过程导出为report,单独过一下,任何文件格式、版本问题可能会导致整个的数据库无法被正确使用,尽管综合的check_timing 结果是正常的,但是layou由于读入原因,无法复现synthesis的结果是很遗憾的


在确认了数据的质量后,我们要开始设定一些初始环境来支持这套导入他们了:


A:     库(library)的准备:library 一般分为两个,

timing library:              可以和综合保持一致,除非layout需要额外的corner,scenarios

physical library:              每一个实体的cell必须要有physicallibrary,一个cell都没有形状,你怎么用啊!就是这样滴!

不过在icc2工具里边,已经将上边两个大神合二为一了,这下子我们就更容易了。

B:     技术文件(technology file ): 这个文件定义了你所用的工艺里边的相关物理信息:版层、VIA定义,绕线方向、unit tile等等,你的模块库创建的时候一定要用到这个文件,否则你会和别人做出来的不一样。虽然这种情况不常发生,但小艾在工作中,还真的碰到过一次,导致整个数据库无法在顶层集成使用,最后模块只好重新做layout,带来额外的很多工作。


C:        其他:cenarios,mcmm,derating等设定应该基于项目,这些都不用干预,留心不要漏掉就好了,因为某些scenarios是一定要在layout里打开的,否则你的STA就会差很多。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭