阎浮提 · 2020年12月11日

后端设计中的特殊cell大盘点

后端设计中有几种常见的特殊cell类型,它们基本上都是physical only cell,但是各自的特点却又不同,而且不同的工具设置和插入他们的方式也不尽相同。‍

Well Tap Cells

我们在学习CMOS电路的时候都知道闩锁效应(latch-up),这种效应可以在短时间内烧毁CMOS器件。

为了阻止这种现象的发生,后端设计通常会在std cell存在的区域加入well tap cell。一般来说工艺规则会要求在well tap cell的密度不低于某一特定数值,而后端的做法一般都是按照固定的间距插入多列tap cells。

image1.jpg

插入tap的方式可以分别在ICC2或者Innovus中使用如下命令:

icc2\_shell> create\_tap\_cells -lib\_cell $tapcell\_ref -pattern stagger -distance $distance -skip\_fixed\_cellsinnovus> addWellTap -cell $tapcell\_ref -cellInterval $distance -checkerBoard -incremental $cells\_list -prefix WELLTAP

Boundary Cells (EndCap)

Boundary cell又称end cap cell,在绝大多数工艺中都要求在所有std cell 的边界都需要插入它们

Boundary cell一方面可以保持阱和注入层的连续性,同时也可以在刻蚀和离子注入的时候对row边缘的std cell起到一定的保护作用。

image2.jpg
在ICC2和Innovus中可以分别采用以下命令插入boundary cell:

icc2_shell> set_boundary_cell_rules -left_boundary_cell $endcap_left \
                                    -right_boundary_cell $endcap_right \
                                    -top_boundary_cell $endcap_top \
                                    -bottom_boundary_cell $endcap_bottom
icc2_shell> compile_boundary_cells
 
innovus> setEndCapMode -topEdge $endcap_top
innovus> setEndCapMode -bottomEdge $endcap_bottom
innovus> setEndCapMode -rightTopEdge $endcap_right_top
innovus> setEndCapMode -rightBottomEdge $endcap_right_bottom
innovus> setEndCapMode -rightTopCorner $endcap_top_corner
innovus> setEndCapMode -rightBottomCorner $endcap_bottom_corner
innovus> setEndCapMode -rightEdge $endcap_right
innovus> addEndCap -prefix EndCap

Tie Cells

在芯片设计中通常会有不少信号需要给定固定的输入如固定高电位或者固定低电位,同时很多无明确输入的open信号也最好固定在某个点位,这时就需要连接到tie cell。

tie cell分为tie high和tie low两种,前者将信号固定在高电位,后者将信号固定在低电位。

image3.jpg

在后端工具中只要通过命令设定tie cell的种类工具就可以在各个阶段的优化命令中自动插入tie cell,同时还可以控制tie cell的fanout:

icc2\_shell> set\_lib\_cell\_purpose -include optimization \[get\_object\_name \[get\_lib\_cells \*/$tie\_ref \]\]
innovus> setTieHiLoMode -cell $tie\_ref

Antenna Cells

天线效应是集成电路制造过程中经常发生的现象,原因在于连接在栅极的金属会不断收集电荷,在某个临界节点将会放电到栅极引起晶体管损坏。

解决的办法之一就是插入antenna cell来增大栅极的面积,也就是提高承受放电电流的能力。

在后端设计中,通常在绕线阶段让工具在发现有antenna violation的时候自动插入antenna cell。

icc2\_shell> set\_app\_options -name route.detail.antenna -value true
icc2\_shell> set\_app\_options -name route.detail.diode\_libcell\_names -value $antenna\_ref
innovus> setNanoRouteMode -routeAntennaCellName $antenna\_ref
innovus> setNanoRouteMode -routeInsertAntennaDiode true  

Filler Cells

Filler cells主要是用来填补std cell之间的空隙以保证阱的连续性,同时也可以对周围的std cell有一定的保护作用。

在集成电路制造过程中,无论是注入还是刻蚀,贴近空旷的区域的一边都倾向于受到更多的刻蚀或者注入,这样无疑会增大cell的variation,进而对时序的准确性产生负面影响。

image4.jpg

icc2\_shell> create\_stdcell\_filler -lib\_cell $fillers\_ref -continue\_on\_error
innovus> setFillerMode -core $filler\_ref -corePrefix FILLER
innovus> addFiller

DECAP Cells

要理解DECAP的作用就要先了解数字芯片中的Dynamic IR-Drop现象。

在高频电路的时钟或者数据信号大规模同时翻转时,巨大的充放电电流可能会导致电源电压的下降,从而显著影响某些区域的std cell的供电,进而影响cell的速度。

要解决这个问题,最常见的方法之一就是增加电源的电容值,而这主要是通过加入DECAP cell来完成。

在电源电压正常的时候,DECAP可以充电来存储能量,当电源电压较低的时候就可以放电来起到一定的缓冲作用。

image5.jpg

icc2\_shell> create\_stdcell\_filler -lib\_cell $decap\_ref -continue\_on\_error
innovus> setFillerMode -core $decap\_ref -corePrefix FILLER\_DECAP
innovus> addFiller

GA-Filler/ECO DECAP Cells

ECO DECAP是一种特殊的DECAP cell,平时可以作为DECAP来提供电容,当需要ECO的时候可以通过简单的改变它上面的金属层连接来转换成具有逻辑功能的std cell,在postmask ECO阶段尤其重要。

GA-Filler全称为gate array filler,它和ECO DECAP类似,也可以通过类似的手段转换成逻辑单元。二者在后端工具的插入方式都和filler cell以及一般的DECAP cell相同。

icc2\_shell> create\_stdcell\_filler -lib\_cell $eco\_decap\_ref -continue\_on\_error
innovus> setFillerMode -core $eco\_decap\_ref -corePrefix FILLER\_DECAP\_ECO
innovus> addFiller

Spare Cell

上面我们讲了两种可以用于ECO的cell类型,还有另外一种就是spare cell。尽管GA filler和ECO DECAP可以实现绝大部分cell的功能。

但是有的时候仍然希望在设计中预留更多的冗余cell来提高芯片流片后的改版能力,从而进一步降低风险,而spare cell正是基于这样的目的而存在的。

在后端设计的早期,可以在整个设计中均匀地撒上一定数量的常用std cell如:BUF/NOR/NAD/DFF等,这些cell可以才需要的时候直接拿来做ECO,尤其是某些特殊类型的cell最好用spare cell的形式提前放在设计中。

但是插入spare cell也有一些负面影响,主要原因在于它们会占用std cell的放置区域,可能会引起整体的优化结果质量下降。

一般来说工具都有专门的命令来插入spare cell:

icc2\_shell> add\_spare\_cells -num\_cells $num\_cells -cell\_name $prefix -repetitive\_window $window
\### num\_cells = {DFFNSRX2T1T10 1 INVX4T1T10 2 NOR2X2T1T10 2}
innovus> addSpareInstance -file spare\_cells.txt -tie 0 -clock $clock\_name
\### spare\_cells.txt
DFFNSRX2T1T10   1
INVX4T1T10      2
NOR2X2T1T10     2

MIMCAP Cells

最后介绍一下MIMCAP,其中MIM指的是Metal-Insulator-Metal,这是一种特殊类型的用来提供电容的cell,区别于DECAP的主要特点是电容量较大,大小也比一般的std cell要大很多,而且使用的金属层一般比较高,可以重叠放在绝大部分类型的cell上而不产生DRC。

image6.jpg

在工具中可以通过直接create cell的方法来插入MIMCAP:

icc2\_shell> create\_cell $mimcap\_name $mimcap\_ref
innovus> addInst -cell $mimcap\_ref -physical -inst $mimcap\_name 

以上就是后端设计中常见的特殊cell类型,它们的作用和用法你都get到了吗?

来源:https://mp.weixin.qq.com/s/BS...

推荐阅读


如果大家有任何后端技术与职业发展方面的问题,抑或关于数字后端感兴趣的技术话题想要了解和探讨,欢迎关注我的知乎专栏: 数字IC后端设计工程师修炼之路
同时欢迎关注微信公众号:数字后端芯讲堂,一起探讨技术,共同提升!
本极术专栏也会同步更新芯片设计后端的技术干货,也请关注数字IC后端设计工程师修炼之路
推荐阅读
关注数
3848
内容数
46
本专栏致力于将数字芯片后端设计的技术,经验和技巧介绍给想入门或提高的你。一方面从基础知识方面的讲解使初学者少走弯路,另一方面用实际工作中的经验技巧方便从业者提高和交流。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息