“擦屁股”也是个技术活——Optmize(一)

640?wx_fmt=gif

上次介绍完了placement的各个内容,那接下来,轮到介绍place_opt的另一个大步骤了——Optmize(优化)。 同样地,它也是一个超级命令,内容也是很复杂。我们先来看一下它的一些概述性介绍吧。

首先,设计的不同阶段需要不同的Optmize,我们先来看一个最简单的PR流程图:

640?wx_fmt=jpeg

我们看到,每个opt前面分别跟着不同的名词,place_optclock_optroute_opt,分别代表着设计不同阶段的对应优化。我们为什么需要Optmize?Placement之后直接做CTS不可以嘛,CTS之后为什么不能直接绕线?其实,这些做法不是不行,但仅仅是能跑完整个流程而已,结果肯定是差强人意的。

所谓“闻道有先后,术业有专攻”,我们工具的各个功能也有它们各自的主职业务,比如说Placement并不会太“关心”timing, Routing也不是timing driven。那我们拿着一个timing很烂的data base去做CTS会有什么后果呢?通常是CTS做得更烂。因此,我们在运行每一个超级命令时,需要一个相对而言比较干净良好的data base。这时候,Optmize就应运而生,它就是专门负责帮Place, CTS, Route擦屁股的“保姆”

640?wx_fmt=jpeg

那这个“保姆”会做些什么事情呢?前面有提到过我们希望有一个timing较好的data base。没错!修timing是它的拿手绝活,另外他还会修DRV,修Power。如下图所示:

640?wx_fmt=jpeg

附校招笔试题一道:

Q1: 什么是DRV?
A1: DRV,全称Design Rule Violation(设计规则违例),包括max_transition,max_capacitance,max_fanout,max_length.

保姆有她自己的理想和奋斗目标,就是我们经常说的“PPA”。

再附带一道笔试题:

Q2: 什么是PPA?
A2: 衡量芯片三大指标:Power,Performance,Area

为了达到PPA的要求,这个保姆眼观六路,耳听八方,施展各种绝技:以下这些都是她经常会做的事情:

640?wx_fmt=jpeg

Add buffer/invertor:添加buffer或者invertor, 后者必须成对出现

640?wx_fmt=jpeg

Resize:增大或者减小buffer的尺寸

640?wx_fmt=jpeg

Move:挪动std cell的位置

640?wx_fmt=jpeg

Pin Swap: 调整有等价关系的term的连接关系。如下左图所示,在该与门电路中,假设Pin C和Pin D具有等价关系。经过A的path更critical,而且D pin的delay较小,所以我们希望可以调整两个pin的连接关系,如下右图所示。

640?wx_fmt=jpeg

Restruct优化一些电路结构。如下面的电路转换成三输入AOI电路

640?wx_fmt=jpeg

Layer Assignment:把一些critcal的path用高层走线,这样timing会较好

640?wx_fmt=jpeg

Split/Merge:这是一种比较新的降低功耗的方法,它可以将原来的single bit flip flop根据一些规则等价替换成为Multi Bits Flip Flop(MBFF) 。一般常用的是两个bit的MBFF。如下图所示:

640?wx_fmt=jpeg

MBFF有什么好处呢?

它不仅降低寄存器CK pin上的动态功耗,也能有效降低时钟树上的BUF个数,从而带来时钟树上功耗的节省。而且,如果它是一个scan flip-flop,那么dual bit register就会少一个SI和SE端口。端口的减少,可以有效降低route congestion的发生几率。

640?wx_fmt=jpeg

当然,她也不是随便乱用这些技能,每种技能消耗的魔法值都不一样,一般Restruct与Pin swap相对而言代价较大,optimize较少使用它们。总体来说,会尽量先用消耗较小的技能。

我们的老板(PR工具)给了保姆最大限度发挥的自由,当然底线不能触碰,就是不能违反formal规则。一旦违反,年终奖可就没了。。。

对于设计的不同阶段,我们需要保姆做不同的事情。我们这次要讲得是PreCTS的Optmize。它是介于Place和CTS之间的一个步骤。主要目的就是给CTS一个timing相对干净,DRV较少的data base,这样CTS才能生长一个较好的Tree,发挥它自身最大的功能。

详细内容,且听下回介绍——Optmize(二)


Q&A
Q1:为什么加buffer或者invertor可以减小timing?
Q2:为什么没有preCTS hold?

640?wx_fmt=jpeg

公司招聘

各大IC公司招聘各类IC工程师

简历请戳邮箱:taozhang3260@163.com

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值