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

在经历了前面的placects和一些优化以后,工具进入到了route阶段,这也是apr里边的重要的auto-route步骤。

工具在这里很聪明,使用了化繁为简的策咯来实现绕线。生活中也有一个类似的问题,大家可以思考一下,如何把一个杂乱无章的毛线球快速的理顺?

通常的做法是,先解决主要问题,然后再是次要问题,最终是逐步修正细节。ICC的绕线很好的体现了这个化繁为简的策咯。

由于数据库的复杂程度不同,工具要想解决非常复杂的场景,那么就一定要将各种场景进行归一化,这种归一化的过程就是简化问题。为此,ICC工具构建了下面的一些名词和步骤来完成绕线:

· Glink

· gCell

· GRCs

· Overflow

· Global-route

· Track/layer

· Track-assignment

· Detail-route

· Verify route

喝口咖啡,一个个的来梳理下:

  • GlinkGlobal link

这是一个标准的曼哈顿距离模型:通过Glink任何连线都只有水平和竖直两种方向,这也是给后期做routingcongestion核算的一个重要参考信息。数据库里所有的连接关系都会以Glink的形式存在。作为真实route的起点信息。如下图所示:


  • gCell: grid Cell ,

这个是工具在数据库里创建的虚拟格点cell,这是一个非常高效的处理。每一个die的形状大小都不一样,为了更好的进行绕线,工具基于工艺的信息,把die分割成无数个gCell的小边框。通常这个gCell的大小,是一个基于工艺site_row的数值的一个正方形。由于绕线都是基于绕线layer的,所以在每一个绕线层,die就被分割成了无数个小正方形,整个数据库包含的gCell的总数量计算公式是:

gCell_rount = layer_count * die_area/ (site_row_width * site_row_width)

如图所示

在上边的示例图里,如果考虑到有nlayer,那么数据库里就会有

gCells_count=  n * 254

而后,工具在每一个gCell的边界上核算穿过每个gCell边界上的Glink连接的需求,从而计算真实的routingcongestion

  • GRCsGlobal Routing Cells

这个就是将gCells分割回每层的一个信息,由于实际的绕线是通盘考虑的,gCells会更加的真实,就是支持绕线跳层,而GRCs是基于每层的计算,这个更适用于评估当前层次的routingcongestion

  • Overflow:


工具会对每一层的GRCs进行评估,所有穿过这个虚拟cell边界的需求和供给之间的差,公式如下

Overflow  = requirement – demand

工具会对可以看到,这个值可正:需求大于供给;可零:需求等于共计;可负:需求小于供给。对于后两种,绕线资源都是足够的,不是问题。如果为正值,这个就是真正意义上的congestion了。如下图:overflow3的一个示例:

这里有24个水平方向的穿线(glink)需求,但是实际上只能提供21个资源,在所有的水平绕线稍层上(m2/m4/m6/m8),所以这里的overflow就是3

由于GRCsoverflow的评估是基于单个绕线层的,就水平方向而言,如果通过打开不同的layer,在同样数据库里overflow的结果是会发生变化的。视图里的overflow是所有打开版层overflow的总和,所以,开的层越多,数值大overflow的数量就越多,例如下图,注意看一下overflow3在打开不同版层时的细微变化:

  • Global-route

这个是工具在绕线初始阶段,所使用的一个主命令,它的目的就是化繁为简,在经历过这个命令后,数据库里就会保存到GlinkgCellGRCsoverflow的信息,并且在globalrouting 的结束,都会输出如下图的信息:

这是一个信息量很大的report,一起来梳理一下它的具体含义。

首先,工具将绕线的资源分为了两个方向,在一些工艺里边,允许板层的prefer-routingnone-prefer-routing并存,但是有些工艺不允许这么做,简单起见,假设当下的工艺是不允许none-prefer-routing的,那么,所有的绕线资源就是,这个层做对应的绕线方向的所有track数量的总和。

这个report里边,Both direction的数量,就是水平和竖直数量的总和,比如overflow的数值

Overflow:  4697  (Both) = 4606 (H)  + 91  (V)

Max,这个好理解,就是两个方向里边最大的GRCs overflow 的值。

GRCs   : 这里边有两个GRCs的地方。如下图:

第一个GRCs GRCs = 21),是指所有overflow2Max)的GRCs的数量。

第二个GRCs GRCs =  5681),是指所有overflowGRCs的数量综合,(0< overflow <=Max,在这个例子里,Max2,所以细节就是,overflow 2GRCs21个,overflow1GRCs5660个,

在上图的最后一列有一个百分比,0.06%,这是说,在这个方向(版层)下,所有带来overflowGRCs占所有当前方向(版层)整个GRCs的百分比,所以可以反推出来,当前方向(版层)的GRCs大概就是

9468333=5681 / 0.06%

这个数值对理解设计的数据有一定的帮助。

再看一下下图GRCsreport图例

对于两个方向的GRCs总和的计算公式如下:

5822  (Both) = 5681 (H) + 141 (V)

  • Track/layer

Track是一个在floorplan里边出现的概念,是指当前绕线层的绕线可以使用的“轨道”信息。layer就是常说的绕线版层。由于工艺制作的区别,在某些工艺下,在不同的layer,所有track都是一样的,在近些年来的更为高级的工艺下,track开始在不同的layer出现了区别,layer越低,track之间的pitch就越小,layer越高则反之。

这个track就是前边核算overflow的供给。

基于上述理论,在规定的长度内(site_row),每一层的供给是可以不同的,如下如所示:在单位长度内M2M4track供给数量的区别很明显


  • track assignment

有了global routing的信息,track assignment就简单了,穿过这个GRCsglink连接被实现到了每层的对应的track上,但是,要注意一点,工具为了简化这一步骤,只是做了简单的track  assignment,所以,实现的速度很快,但是会有很多net shape都是overlap的结果,类似下图的结果

在这个有3overflow的区域,这里有一个占用同一个track的两个net shape,这就是典型的short的绕线。

到这里为止,可以感觉到overflow对真实绕线的影响了吧。固然,一般的设计都不可能保证GRCs overflow是零(如果是零,理论上,在trackassignment之后,就不会有任何的short出现了,那样的数据库就真厉害了!),但是工具之所以这样做,只是为了简化track的步骤,后面还有大招,来修复细节问题。这就是下面要说到的。Detailroute

  • Detail-route

能看到这里的同学都是好同学J

讲了半天,这里的detail route其实才是大家通常最先接触到的真实的router,在老一点的icc版本里边,就是就route_detail,由于新的工艺的要求,icc推出了一个route_zrt_detail的命令,来满足更复杂的工艺需求,原先的绕线就称为了classicrouter。现今,进入了icc2的时代,这个命令,又变成了route_detail,但本质上其实就是route_zrt_detail的演化版本。历史捋清楚了,下面就来看一下,这个命令的厉害。

书接上文,在track assignment结束后,由于工具的策咯不同,虽然所有的netshape都被创建了,但是由于GRCsoverflow的影响和绕线细节等问题,会出现大量的DRC问题。例如下例:

可以看到,这里会有非常多的DRCshort,基于前面的理论,这个现象其实也没有超出预期太多

所以,icc这个时候就会调用detail route来对这些DRC进行精修。这个就是detailroute要干的事情。

本质上来讲,如果绕线资源不够,short是不能被修复的,因为就单个GRC  cell而言,供给是一定的,需求也是死的,这两个是的差异是天生的,不能被克服的。

有趣的是,工具在将一切分割后的节点(track assignment),它又可以经寂静分隔开的GRCs进行二次、三次等重排。言下之意就是,在当前GRCcell出现问题的地方,可以去周边的GRC寻找出路,这其实就是典型的面积换short:迂回(detour),如下图的short演进过程:

这个从ICC的命令log可以清楚地看到这个动作的影响,如下例

可以明显的看到,数据库的总线长在不断的增加,但是对应的short实在不断地减少,如下图:

Detail  route之后再来看一下那两根short的绕线,如下图:

工具通过跳层。和迂回有效地解决了short

这个GRCs的重组和的策咯看似简单,但是非常高效,通过借道和迂回可以有效地解决short。当然,天下没有免费的午餐,任何的detour都会增加timing的问题,这个时候,就需要postroute的优化,和PTtiming ECO了。但整体上来说,这个代价是值得的,通常都可以保证physicaltiming同步收敛。

由于工具对GRCs的重组是有一定范围的,加上timing driven的需求,并非所有的short都可以被解决,尤其是在某些local short 数量很多的区域,工具是无能为力的。例如,如果要在一个非常密集的区域里,需要解决很多short,就要迂回绕线非常多的net,可以想象,要完全躲开这个高密度区域,才能解决这些short,这对于timing是很不利的。简而言之:没有解不掉的short,只有修不干净的timing

除过对于short的修复,Detail route黑可以修复各种各样类型的DRC问题。简单的一个类型列表如下

  • Verify_route


detail route完成后,用户就可以使用verifyroute来检查绕线质量了,通过观察这个结果,来整体评估数据库的绕线质量,主要的关注点,还是那句老话:控制short。当然,别的类型也有注意,尤其是数量巨大的时候,有时候,由于某些配置的不合理,会导致在某些层的绕线质量显著增加,甚至会出现open,这个时候就要去好好的debug了。

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