上次介绍完了placement的各个内容,那接下来,轮到介绍place_opt的另一个大步骤了——Optmize(优化)。 同样地,它也是一个超级命令,内容也是很复杂。我们先来看一下它的一些概述性介绍吧。
首先,设计的不同阶段需要不同的Optmize,我们先来看一个最简单的PR流程图:
我们看到,每个opt前面分别跟着不同的名词,place_opt,clock_opt,route_opt,分别代表着设计不同阶段的对应优化。我们为什么需要Optmize?Placement之后直接做CTS不可以嘛,CTS之后为什么不能直接绕线?其实,这些做法不是不行,但仅仅是能跑完整个流程而已,结果肯定是差强人意的。
所谓“闻道有先后,术业有专攻”,我们工具的各个功能也有它们各自的主职业务,比如说Placement并不会太“关心”timing, Routing也不是timing driven。那我们拿着一个timing很烂的data base去做CTS会有什么后果呢?通常是CTS做得更烂。因此,我们在运行每一个超级命令时,需要一个相对而言比较干净良好的data base。这时候,Optmize就应运而生,它就是专门负责帮Place, CTS, Route擦屁股的“保姆”。
那这个“保姆”会做些什么事情呢?前面有提到过我们希望有一个timing较好的data base。没错!修timing是它的拿手绝活,另外他还会修DRV,修Power。如下图所示:
附校招笔试题一道:
保姆有她自己的理想和奋斗目标,就是我们经常说的“PPA”。
再附带一道笔试题:
为了达到PPA的要求,这个保姆眼观六路,耳听八方,施展各种绝技:以下这些都是她经常会做的事情:
Add buffer/invertor:添加buffer或者invertor, 后者必须成对出现
Resize:增大或者减小buffer的尺寸
Move:挪动std cell的位置
Pin Swap: 调整有等价关系的term的连接关系。如下左图所示,在该与门电路中,假设Pin C和Pin D具有等价关系。经过A的path更critical,而且D pin的delay较小,所以我们希望可以调整两个pin的连接关系,如下右图所示。
Restruct:优化一些电路结构。如下面的电路转换成三输入AOI电路
Layer Assignment:把一些critcal的path用高层走线,这样timing会较好
Split/Merge:这是一种比较新的降低功耗的方法,它可以将原来的single bit flip flop根据一些规则等价替换成为Multi Bits Flip Flop(MBFF) 。一般常用的是两个bit的MBFF。如下图所示:
MBFF有什么好处呢?
它不仅降低寄存器CK pin上的动态功耗,也能有效降低时钟树上的BUF个数,从而带来时钟树上功耗的节省。而且,如果它是一个scan flip-flop,那么dual bit register就会少一个SI和SE端口。端口的减少,可以有效降低route congestion的发生几率。
当然,她也不是随便乱用这些技能,每种技能消耗的魔法值都不一样,一般Restruct与Pin swap相对而言代价较大,optimize较少使用它们。总体来说,会尽量先用消耗较小的技能。
我们的老板(PR工具)给了保姆最大限度发挥的自由,当然底线不能触碰,就是不能违反formal规则。一旦违反,年终奖可就没了。。。
对于设计的不同阶段,我们需要保姆做不同的事情。我们这次要讲得是PreCTS的Optmize。它是介于Place和CTS之间的一个步骤。主要目的就是给CTS一个timing相对干净,DRV较少的data base,这样CTS才能生长一个较好的Tree,发挥它自身最大的功能。
详细内容,且听下回介绍——Optmize(二)
Q2:为什么没有preCTS hold?
各大IC公司招聘各类IC工程师
简历请戳邮箱:taozhang3260@163.com