画standard cell的注意点
发布时间:2008/6/5 0:00:00 访问次数:3469
最近修改了standcell library, 由于开始画时有一些疏忽,因此从virtuoso
转入apo时总有一些问题,经过与同事的探讨,发现有些方面是值得注意的。
1. 出pin 的位置在1/2pitch + n*pitch , (n=0, 1,2,3…) .
整個standcell 的長度除以pitch = 整數。
2. 爲了讓cell 與其它的cell 在butting 時遵守design rule ,
如thinox, mt1, ….距boundary 也要遵守1/2 * design rule .
建議pplus 真好在boundary 上, 爲了butting 方便。
一般的檢驗方法是把所有的cell放到一个cell中檢驗。
3. pplus的左右边缘最好与bondary 重叠在一起, 会减少很多drc error.
4. 在這次修改pitch 值後修改standcell 時發現,根據new pithch 與old pitch 的關係,
有時只能縮小一點點,應此不需要每段shape 都要縮到mininum design rule.
5. 在做lvs時, 有時device size don’t match,
因爲可能把一個mos 分成幾段,e.g 12.15=6.075*2, 由於精確到小數點後2 位,
會認爲時6.08*2=12.16, 所以device size don’t match,
這時對比一下old layout and new layout .
6. 在座lvs時,一定要注意text label match.
否則apr 會出問題。device and size all should match.
7. 寫一個skill program , 把各層都merge 起來。
如果有via and mt2 , 則去掉。(merge.il skill 见附录 )
8. 一定注意不要忘了画standcell boundary, 否則apr 會錯。
10. 在画standcell 時注意拐角最好園的。well contact 要打上。
12.power, ground的宽度为一定要所有的standcell都一样,
否则, 在做 apr 时会出错。
13.每一个cell 都为flatten, 并将pattern都merge在一起,
因为在apo 中, 有extract pin ,metal blockage,
如果用instance 的形式,extract 出来的图形有问题。
merge.il
procedure(merge()
inport = infile("cell.list")
when( inport
; while(gets(nextline inport)
; println(nextline)
while(fscanf(inport "%s" word)
println(word)
; cv=geopen(?window higetcurrentwindow() ?lib "stanccell_noflatten" ?cell word
; ?view "layout" ?mode "a")
currentwindow=geopen(?lib "stanccell_noflatten" ?cell word
?view "layout" ?mode "a")
cv=currentwindow~>cellview
; cv=dbopencellviewbytype("stanccell_noflatten" word "layout" "" "a")
instlist=cv~>instances
foreach(id instlist
if(id~>mosaic != nil
then
leflatteninst(id~>mosaic 20 t nil)
else
leflatteninst(id 20 t nil)
);endif
);endforeach
dbsave(cv)
geselectallfig( )
lehimerge( )
gedeselectallfig( )
dbsave(cv)
dbclose(cv)
) end while
close(inport)
); endwhen
);merge procedure.
最近修改了standcell library, 由于开始画时有一些疏忽,因此从virtuoso
转入apo时总有一些问题,经过与同事的探讨,发现有些方面是值得注意的。
1. 出pin 的位置在1/2pitch + n*pitch , (n=0, 1,2,3…) .
整個standcell 的長度除以pitch = 整數。
2. 爲了讓cell 與其它的cell 在butting 時遵守design rule ,
如thinox, mt1, ….距boundary 也要遵守1/2 * design rule .
建議pplus 真好在boundary 上, 爲了butting 方便。
一般的檢驗方法是把所有的cell放到一个cell中檢驗。
3. pplus的左右边缘最好与bondary 重叠在一起, 会减少很多drc error.
4. 在這次修改pitch 值後修改standcell 時發現,根據new pithch 與old pitch 的關係,
有時只能縮小一點點,應此不需要每段shape 都要縮到mininum design rule.
5. 在做lvs時, 有時device size don’t match,
因爲可能把一個mos 分成幾段,e.g 12.15=6.075*2, 由於精確到小數點後2 位,
會認爲時6.08*2=12.16, 所以device size don’t match,
這時對比一下old layout and new layout .
6. 在座lvs時,一定要注意text label match.
否則apr 會出問題。device and size all should match.
7. 寫一個skill program , 把各層都merge 起來。
如果有via and mt2 , 則去掉。(merge.il skill 见附录 )
8. 一定注意不要忘了画standcell boundary, 否則apr 會錯。
10. 在画standcell 時注意拐角最好園的。well contact 要打上。
12.power, ground的宽度为一定要所有的standcell都一样,
否则, 在做 apr 时会出错。
13.每一个cell 都为flatten, 并将pattern都merge在一起,
因为在apo 中, 有extract pin ,metal blockage,
如果用instance 的形式,extract 出来的图形有问题。
merge.il
procedure(merge()
inport = infile("cell.list")
when( inport
; while(gets(nextline inport)
; println(nextline)
while(fscanf(inport "%s" word)
println(word)
; cv=geopen(?window higetcurrentwindow() ?lib "stanccell_noflatten" ?cell word
; ?view "layout" ?mode "a")
currentwindow=geopen(?lib "stanccell_noflatten" ?cell word
?view "layout" ?mode "a")
cv=currentwindow~>cellview
; cv=dbopencellviewbytype("stanccell_noflatten" word "layout" "" "a")
instlist=cv~>instances
foreach(id instlist
if(id~>mosaic != nil
then
leflatteninst(id~>mosaic 20 t nil)
else
leflatteninst(id 20 t nil)
);endif
);endforeach
dbsave(cv)
geselectallfig( )
lehimerge( )
gedeselectallfig( )
dbsave(cv)
dbclose(cv)
) end while
close(inport)
); endwhen
);merge procedure.
上一篇:绘制版图