Blockage是PR工具中的一个重要概念,我今天就简单说一下它是什么,以及它的分类、作用,再说一下类似blockage的一些概念。
Blockage意为阻塞物,在这里就是指防止工具触碰的区域。总的来说blockage可以分为两类:placement blockage和routing blockage。Placement blockage的区域禁止tool摆放cell进来,routing blockage的区域禁止绕线。需要注意routing blockage是要分层的,包括via层也可以上routing blockage。而placement blockage是和cell摆放相关,就不会分层。Placement blockage可以简写为pblk,routing blockage可以简写为rblk。
对于pblk来说,按照禁止tool摆放程度的不同,还有多种分类,一般常用的有三种:hard,soft and partial。Hard pblk区域是tool不论在任何阶段都不能放cell进来,最终出来的database一定是没有任何cell在hard pblk里的,除非user手动加。Soft pblk指的是tool摆cell的时候不能摆进来,但是之后的legalization和optimization就可以放进来了。Partial pblk就是tool可以摆进来一定数量的cell,其面积不能超过partial pblk所规定的百分比。对于rblk分类好像就没这么多了,也可能是我没接触过。
Blockage的概念很简单,但确实能帮我们方便地指导tool的工作。比如在很多时候,我们不希望在某些区域出现std cell,我们就会上一些hard pblk。最常见的区域有macro的周围,macro与macro之间的narrow channel,以及macro与core边界围起来的区域,总之,一切可能发生congestion或者IR不好的区域都可以盖pblk。一般我们在用macro的时候都会拿到user guide之类的文档,文档里就会标明建议要加的pblk、rblk。对rblk,最常见的应用也是盖住macro本身的绕线层(或者说出pin层以下的所有层),以防工具在这些区域绕线,然后merge GDS之后产生DRC。
还有一种很像placement blockage的概念,叫做halo,或者keep out margin。它不是加在floorplan上的,而是加在特定instance上的。比如我给一个macro加了一个宽度1um的halo,它的作用其实也等效于加宽度1um的pblk。但是halo是加载instance上的,意思是如果我们移动了instance,其halo也会跟着一起移动,永远保证它周围1um范围不会有cell。而pblk不一样,instance动的话和pblk没关系。Halo能帮我们方便地处理某些情况,比如我们不希望某一类cell靠在一起,就可以给这类cell左右两边加halo。
另外还有一种,在读取cell或者macro的lef的时候会出现OBS,它是obstruct的简写,其作用就类似于routing blockage。如果这个macro的出pin层就希望直接连via上去,不希望pin层有任何走线,这个macro在设计的时候可能就会把pin之外的所有区域盖上OBS,这样tool在绕线的时候就不会绕到OBS里,所以tool就一定会先打一个via在pin上,再连出来。如果绕线时发生了DRC,经常要检查一下是不是OBS在捣乱。
这是我的第32篇文章。微信公众号:伟酱的芯片后端之路