Sie sind auf Seite 1von 17

#----------------------------------------------------------------------

# This template is for FinFET generation and mechanical stress


simulation.
# If you have questions about the input file,
# please, send e-mail to munkangc@synopsys.com.
# Generated by Munkang Choi at Jun. 10th, 2013.
# This is tested using sprocess version H-2013.03.
#----------------------------------------------------------------------

math coord.ucs
AdvancedCalibration
AdvancedCalibrationMechanics
SiGe_and_Stress_Effect 1 1 1 0

# Set mechanical parameters


source mechParams.fps

pdbSet Mechanics EtchDepoRelax 0


pdbSet Grid MGoals Keep3DBrep 0

pdbSet Math flow 3D ILS.tolrel 1e-11


pdbSet Math flow 3D ILS.refine.sts 1

# Set math section - ParDiso for mechanics and multi-thread simulation


#-math flow dim=3 pardiso numThreads=4
math numThreads=4
# Start with mgoal mode
sde off
#-----------------------------------------------------
# Structure parameters, [um]
set Wt @Wtop@ ;# Fin top width
set Wb @Wbottom@ ;# Fin bottom width
set W @<0.5*(Wtop+Wbottom)>@ ;# Fin average width
set H @H@ ;# Fin height
set bHepi 0.014 ;# SD Epi Shape
set mHepi 0.006 ;# SD Epi Shape
set tHepi 0.016 ;# SD Epi Shape
set bLepi 0.005 ;# SD Epi Shape
set mLepi 0.015 ;# SD Epi Shape
set tLepi 0.008 ;# SD Epi Shape
set L @L@ ;# Channel length
set Tox 0.0023 ;# Total physical thickness of gate
insulator
set Tiox 0.0006 ;# Gate interlayer oxide thickness
set Thfo2 0.0017 ;# Gate high-k thickness
set Lsp0 0.008 ;# Nitride spacer foot from gate to
epi S/D
set Lsp1 0.0160 ;# Nitride spacer foot from gate to
contact
set Ppitch 0.090 ;# Poly pitch
set Tgate 0.032 ;# Poly height
set Tsti 0.100 ;# STI trench depth
set Tsub 1.0 ;# Substrate depth
set Tcesl 0.020 ;# Nitride on top of gate
set Tild 0.100 ;# ILD on top of Nitride
set Tnisi 0.005 ;# NiSi thickness
set Fpitch 0.048 ;# Fin pitch
set Lm0b 0.018 ;# Contact length
set Lm0t 0.030 ;# Contact length
set Dcgt 0.032 ;# Contact diameter top
set Dcgb 0.018 ;# Contact diameter on top of gate
set Dcm0t 0.032 ;# Contact diameter top
set Dcm0b 0.021 ;# Contact diameter on top of M0
set PY 0.050 ;# Gate extension

set Fangle 55.0 ;# SD facet angle

# Doping parameters, [/cm3]


set Nch @Nch@ ;# channel doping
set Nsd 2.0e20 ;# SD doping
set Nstop @Nstop@ ;# channel stop doping
#if "@Type@" == "nMOS"
set Esd 0.006
set Dch "Boron"
set Dsd "Phosphorus"
set Dstop "Indium"
# Stress/strain input - SD SiC Mole Fraction
set CMoleFraction 0.02
set iSMG -1.0 ;# nMOS metal gate stress [GPa]
#else
set Esd 0.0075
set Dch "Phosphorus"
set Dsd "Boron"
set Dstop "Arsenic"
# Stress/strain input - SD SiGe Mole Fraction
set GeMoleFraction 0.50
set iSMG 1.0 ;# pMOS metal gate stress [GPa]
#endif
set iSsti 1.0 ;# STI stress [GPa]
set iScont 1.0 ;# Contact/M0 stress [GPa]

#-----------------------------------------------------
# Derived dimensions
set AX0 0.0
set AX1 [expr (0.5*$Ppitch)]

set Xmin $AX0


set Xmax $AX1
set Ymin 0.0
#-set Ymax [expr (0.5*$Fpitch+$PY+0.010)]
set Ymax [expr (0.5*$Fpitch)]

set PX0 [expr (-0.5*$L)]


set PX1 [expr (0.5*$L)]
set PY0 [expr (-0.5*$Fpitch-$PY)]
set PY1 [expr (0.5*$Fpitch+$PY)]

set SP0X0 [expr ($PX0-$Lsp0)]


set SP0X1 [expr ($PX1+$Lsp0)]
set SP0Y0 [expr ($PY0-$Lsp0)]
set SP0Y1 [expr ($PY1+$Lsp0)]
set SP1X0 [expr ($PX0-$Lsp1)]
set SP1X1 [expr ($PX1+$Lsp1)]
set SP1Y0 [expr ($PY0-$Lsp1)]
set SP1Y1 [expr ($PY1+$Lsp1)]
set Moft 0.014
set M0X0 [expr (0.5*$Ppitch-0.5*$Lm0t)]
set M0X1 [expr (0.5*$Ppitch+0.5*$Lm0t)]
set M0Y0 [expr (-0.5*$Fpitch-$Moft)]
set M0Y1 [expr (0.5*$Fpitch+$Moft)]
set M0X0b [expr (0.5*$Ppitch-0.5*$Lm0b)]
set M0X1b [expr (0.5*$Ppitch+0.5*$Lm0b)]
set M0Y0b [expr (-0.5*$Fpitch-$Moft+0.5*($Lm0t-$Lm0b))]
set M0Y1b [expr (0.5*$Fpitch+$Moft-0.5*($Lm0t-$Lm0b))]

set Hgate [expr (-1.0*($Tgate+$Tox))]


set Hcesl [expr ($Hgate-$Tcesl)]
set Hild [expr ($Hcesl-$Tild)]

#if @<Wbottom == Wtop>@


set Afin 90.0
set Afin0 90.0
#else
set Afin [expr (180.0/3.14159265*atan($H/(0.5*($Wb-$Wt))))]
set Afin0 [expr (180.0/3.14159265*atan($H/(0.5*($Wb-$Wt))))]
#endif
set Am0 [expr (180.0/3.14159265*atan(($Tcesl+$Tgate+$Tox-
$tHepi)/(0.5*($Lm0t-$Lm0b))))]
set Acg [expr (180.0/3.14159265*atan(($Tild+$Tcesl)/(0.5*($Dcgt-
$Dcgb))))]
set Acm0 [expr (180.0/3.14159265*atan($Tild/(0.5*($Dcm0t-$Dcm0b))))]

#-----------------------------------------------------

#-----------------------------------------------------

#---------------------------------------------------------------------#
# SIMULATION CONTROLL
set debug 1
set DoStrain 1
set DoDiff 1
set DoRound 1
set Type @Type@

#---------------------------------------------------------------------#
# USER-DEFINED PROCEDURES

source user_proc.fps

proc WriteBND {} {
global count

if { $count < 10} {


struct bndfile=n@node@_0${count}
} else {
struct bndfile=n@node@_${count}
}
set count [expr $count+1]
}
set count 1
#
#---------------------------------------------------------------------#

SetTDRList {Stress StressEL Dopants} !Solutions

line y loc=$Ymin tag=back


line y loc=$Ymax tag=front

line z loc=$Xmin tag=left


line z loc=$Xmax tag=right

line x loc=-0.15
line x loc=0 tag=top
line x loc=$H
line x loc=$Tsub tag=bottom

region Silicon xlo=top xhi=bottom ylo=back yhi=front zlo=left zhi=right


substrate

#if "@sOri@" == "100" && "@cDir@" == "100"


init field=Boron concentration=1e15 wafer.orient = { 0 0 1 } flat.orient
= { 1 0 0 }
#elif "@sOri@" == "100" && "@cDir@" == "110"
init field=Boron concentration=1e15 wafer.orient = { 0 0 1 } flat.orient
= { 1 1 0 }
#elif "@sOri@" == "110" && "@cDir@" == "100"
init field=Boron concentration=1e15 wafer.orient = { 1 1 0 } flat.orient
= { 0 0 1 }
#elif "@sOri@" == "110" && "@cDir@" == "110"
init field=Boron concentration=1e15 wafer.orient = { 1 -1 0 }
flat.orient = { 1 1 0 }
#endif

# refinement at interfaces
mgoals min.normal.size=0.005 max.box.angle=165 normal.growth.ratio=2
accuracy=1e-6
refinebox interface.materials= {Silicon Polysilicon Oxide Nitride
Oxynitride}

#####----- Mesh refinement -----#####


##DFISE -Z Y X
refinebox name=All \
min= "-2.0 $Ymin $Xmin" \
max= " 1.0 $Ymax $Xmax" \
xrefine= 0.5 yrefine= $W/2.0 zrefine= $L/2.0

set tYmin [expr (-2.0*$W)]


set tYmax [expr (2.0*$W)]
##DFISE -Z Y X
refinebox name=gSTI \
min= "-0.05 $tYmin $Xmin" \
max= " 0.10 $tYmax $Xmax" \
xrefine= 0.01 yrefine= $W/5.0 zrefine= $L/4.0

pdbSet InfoDefault 1
#------------------------------------------------------------------------
--------------
#------------------------------------------------------------------------
--------------

#----- FIN define -----


set tAY0 [expr (-0.5*$Wt)]
set tAY1 [expr (0.5*$Wt)]
mask name=FIN left=$tAY0 right=$tAY1 back=$AX0 front=$AX1 negative

photo mask=FIN thickness=0.001


etch material=Silicon type=trapezoidal angle=$Afin thickness=1*$Tsti
strip Photoresist
if { $debug } { WriteBND }

if { $DoRound } {
#########################################################################
#############
#####----- Fin Corner Round Etch
-----#####
#####----- Polyhedron is used to accurately control the fin Corner
Rounding -----#####
#####----- Dummy polyhedron is overlapped with Si fin and removed.
-----#####
#####----- Rounded fin is left.
-----#####
set PI 3.14159265
set cR 0.0025 ;# Fin corner radius

##-- Rounding is approximated by 4 edges. --##


##-- Points for etch polyhedron --##
set alpha [expr (90.0-0.5*$Afin)]
set rX $cR
set rY [expr (0.5*$Wt-$cR/tan($PI/180.0*$alpha))]
set nP 5
set dA [expr ($Afin/($nP-1))]
set tx0 [expr ($Xmin-1.0)]
set tx1 [expr ($Xmax+1.0)]
set theta [expr (0*$dA)]
set xv [expr ($rX - $cR*cos($PI/180.0*$theta))]
set yv [expr ($rY + $cR*sin($PI/180.0*$theta))]
eval point name=pf0 coord= \{$xv $yv $tx0\}
eval point name=pb0 coord= \{$xv $yv $tx1\}
set theta [expr (1*$dA)]
set xv [expr ($rX - $cR*cos($PI/180.0*$theta))]
set yv [expr ($rY + $cR*sin($PI/180.0*$theta))]
eval point name=pf1 coord= \{$xv $yv $tx0\}
eval point name=pb1 coord= \{$xv $yv $tx1\}
set theta [expr (2*$dA)]
set xv [expr ($rX - $cR*cos($PI/180.0*$theta))]
set yv [expr ($rY + $cR*sin($PI/180.0*$theta))]
eval point name=pf2 coord= \{$xv $yv $tx0\}
eval point name=pb2 coord= \{$xv $yv $tx1\}
set theta [expr (3*$dA)]
set xv [expr ($rX - $cR*cos($PI/180.0*$theta))]
set yv [expr ($rY + $cR*sin($PI/180.0*$theta))]
eval point name=pf3 coord= \{$xv $yv $tx0\}
eval point name=pb3 coord= \{$xv $yv $tx1\}
set theta [expr (4*$dA)]
set xv [expr ($rX - $cR*cos($PI/180.0*$theta))]
set yv [expr ($rY + $cR*sin($PI/180.0*$theta))]
eval point name=pf4 coord= \{$xv $yv $tx0\}
eval point name=pb4 coord= \{$xv $yv $tx1\}
eval point name=pf00 coord= \{ -1.0*$Tox 0.0 $tx0 \}
eval point name=pf11 coord= \{ $H 0.5*$Wb+$Tox $tx0 \}
eval point name=pf01 coord= \{ -1.0*$Tox 0.5*$Wb+$Tox $tx0 \}
eval point name=pb00 coord= \{ -1.0*$Tox 0.0 $tx1 \}
eval point name=pb11 coord= \{ $H 0.5*$Wb+$Tox $tx1 \}
eval point name=pb01 coord= \{ -1.0*$Tox 0.5*$Wb+$Tox $tx1 \}
point list

##-- Polygons for etch polyhedron --##


set tnP [expr ($nP-1)]
for {set i 0} {$i < $tnP} {incr i 1} {
set j [expr ($i+1)]
set p0Name "pf$i"
set p1Name "pf$j"
set p2Name "pb$j"
set p3Name "pb$i"
set pLName "pL$i"
eval polygon name=$pLName points = \{ $p0Name $p1Name $p2Name $p3Name
\}
}
set p0Name "pf$tnP"
set p1Name "pf11"
set p2Name "pb11"
set p3Name "pb$tnP"
set pLName "pL$tnP"
eval polygon name=$pLName points = \{ $p0Name $p1Name $p2Name $p3Name \}
set tnP [expr ($nP-0)]
set p0Name "pf11"
set p1Name "pf01"
set p2Name "pb01"
set p3Name "pb11"
set pLName "pL$tnP"
eval polygon name=$pLName points = \{ $p0Name $p1Name $p2Name $p3Name \}
set tnP [expr ($nP+1)]
set p0Name "pf01"
set p1Name "pf00"
set p2Name "pb00"
set p3Name "pb01"
set pLName "pL$tnP"
eval polygon name=$pLName points = \{ $p0Name $p1Name $p2Name $p3Name \}
set tnP [expr ($nP+2)]
set p0Name "pf00"
set p1Name "pf0"
set p2Name "pb0"
set p3Name "pb00"
set pLName "pL$tnP"
eval polygon name=$pLName points = \{ $p0Name $p1Name $p2Name $p3Name \}
set tnP [expr ($nP+3)]
set pLName "pL$tnP"
eval polygon name=$pLName points = \{ pf0 pf1 pf2 pf3 pf4 pf11 pf01 pf00
\}
set tnP [expr ($nP+4)]
set pLName "pL$tnP"
eval polygon name=$pLName points = \{ pb0 pb1 pb2 pb3 pb4 pb11 pb01 pb00
\}

##-- Etch polyhedron --##


polyhedron name= crEtch polygons = { pL0 pL1 pL2 pL3 pL4 pL5 pL6 pL7 pL8
pL9 } info=2
polyhedron list
insert polyhedron=crEtch replace.materials= { Silicon SiFin SiStop } \
new.material=Oxynitride new.region=etchedDummy
PolyHedronClear
if { $debug } { WriteBND }

strip Oxynitride
if { $debug } { WriteBND }
#########################################################################
#############
}

##-- Define the channel stop region and the channel region for the
convenience -##
polyhedron name=sstop brick = { $Hgate $Ymin $Xmin $Tsti $Ymax
$Xmax } info=2
polyhedron list
insert polyhedron=sstop replace.materials= { Silicon }
new.material=SiStop new.region=ChStop
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

polyhedron name=sfin brick = { $Hgate $Ymin $Xmin $H $Ymax $Xmax }


info=2
polyhedron list
insert polyhedron=sfin replace.materials= { Silicon SiStop }
new.material=SiFin new.region=ChFin
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

#####----- Mesh refinement -----#####


set tYmin [expr (-2.0*$W)]
set tYmax [expr (2.0*$W)]
##DFISE -Z Y X
refinebox name=WellIIP0 \
min= " $H-0.005 $tYmin $Xmin" \
max= " $H+0.006 $tYmax $Xmax" \
xrefine= 0.005 yrefine= $W/5.0 zrefine= $L/5.0

##DFISE -Z Y X
refinebox name=WellIIP1 \
min= " $H-0.001 $tYmin $Xmin" \
max= " $H+0.004 $tYmax $Xmax" \
xrefine= 0.0005 yrefine= $W/5.0 zrefine= $L/5.0

set tYmin [expr (-1.5*$W)]


set tYmax [expr (1.5*$W)]
##DFISE -Z Y X
refinebox name=STI \
min= " 0.0 $tYmin $Xmin" \
max= " $H+0.000 $tYmax $AX1" \
xrefine= 0.1*$W yrefine= 0.1*$W zrefine= 0.1*$W

pdbSet InfoDefault 1

#----- STI fill -----


if { $DoStrain } {

#----- STI stressor -----


#--- Calculate intrinsic stress ---------------------------------
set iS [expr ($iSsti * 1.0e9 * ( 1.0 - 0.16 ) / ( 1.0 - 2.0 * 0.16 ))]
doping name=SxxSTI field=StressELXX depths= { 0 100 } values= { $iS $iS }
doping name=SyySTI field=StressELYY depths= { 0 100 } values= { $iS $iS }
doping name=SzzSTI field=StressELZZ depths= { 0 100 } values= { $iS $iS }

deposit Oxide type=fill coord=$H region.name=TRECH \


doping= { SxxSTI SyySTI SzzSTI }

diffuse temp=600 time=1.0e-6<s> stress.relax


struct tdr=n@node@_sti !gas !interfaces !bnd alt.maternames

} else {

deposit Oxide type=fill coord=$H

}
if { $debug } { WriteBND }

#----- Gate oxide -----


etch Oxide type=isotropic thickness=1*$Tox+0.0005
mgoals analytic.thickness=5e-4
deposit GATEox type=isotropic thickness=1*$Tiox
deposit HfO2 type=isotropic thickness=1*$Thfo2
if { $debug } { WriteBND }

#- Remove thin layers in the non-active region (STI) for the mesh and the
convergence
polyhedron name=sti brick= { $H $Ymin-0.001 $Xmin-0.001 $H+$Tox+0.001
$Ymax+0.001 $Xmax+0.001 }
polyhedron list
insert polyhedron=sti replace.materials= { HfO2 GATEox Gas } \
new.material=Oxide new.region=TRENCH
PolyHedronClear
if { $debug } { WriteBND }

#----- Poly gate -----


polyhedron name=gp brick = { $Hgate $PY0 $PX0 $H+0.0005 $PY1 $PX1 }
info=2
polyhedron list
insert polyhedron=gp replace.materials= { Gas } new.material=PolySilicon
new.region=GatePoly
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

#----- spacer0 -----


polyhedron name=gp brick = { $Hgate $SP0Y0 $SP0X0 $H+0.0005 $SP0Y1
$SP0X1 } info=2
polyhedron list
insert polyhedron=gp replace.materials= { Gas } new.material=LowK
new.region=Spacer0
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

#####----- Mesh refinement -----#####


set tAY0 [expr (-0.5*$Wb-0.010)]
set tAY1 [expr (0.5*$Wb+0.010)]
##DFISE -Z Y X
refinebox name=Active \
min= "-0.012 $tAY0 $AX0" \
max= " $H+0.010 $tAY1 $AX1" \
xrefine= 0.002 yrefine= 0.002 zrefine= 0.002

set tAY0 [expr (-0.5*$Wb-0.002)]


set tAY1 [expr (0.5*$Wb+0.002)]
set tspx0 [expr (-0.5*$L-$Lsp1-0.005)]
set tspx1 [expr (0.5*$L+$Lsp1+0.005)]
##DFISE -Z Y X
refinebox name=Channel \
min= "-0.004 $tAY0 $tspx0" \
max= " $H+0.005 $tAY1 $tspx1" \
xrefine= 0.001 yrefine= 0.001 zrefine= 0.001

set tAY0 [expr (-0.5*$Wb-0.002)]


set tAY1 [expr (0.5*$Wb+0.002)]
set tpx0 [expr (-0.5*$L-0.002)]
set tpx1 [expr (0.5*$L+0.002)]
##DFISE -Z Y X
refinebox name=cChannel \
min= "-0.002 $tAY0 $tpx0" \
max= " $H $tAY1 $tpx1" \
xrefine= 0.001 yrefine= 0.001 zrefine= 0.0005

#----- Generate S/D SiGe epi shape using polyhedron command -----
set tx0 [expr (0.5*$L+$Lsp0-0.0000)]
set tx1 [expr ($Ppitch-0.5*$L-$Lsp0+0.0000)]

#- Etch out the silicon source/drain region


#if "@Type@" == "pMOS"
polyhedron name=dummy brick= { $Hild $Ymin-0.001 $tx0 $H+0.0001
$Ymax+0.001 $tx1 }
polyhedron list
insert polyhedron=dummy replace.materials= { HfO2 GATEox SiFin } \
new.material=Oxynitride new.region=SDetchDummy
PolyHedronClear

strip Oxynitride

set tx0 [expr (0.5*$L+$Lsp0-$Esd)]


set tx1 [expr ($Ppitch-0.5*$L-$Lsp0+$Esd)]
polyhedron name=dummy brick= { $Hild $Ymin-0.001 $tx0 $H+0.0001
$Ymax+0.001 $tx1 }
polyhedron list
insert polyhedron=dummy replace.materials= { SiFin } \
new.material=Oxynitride new.region=SDetchDummy
PolyHedronClear

strip Oxynitride

#else

polyhedron name=dummy brick= { $Hild $Ymin-0.001 $tx0 $H+0.0001


$Ymax+0.001 $tx1 }
polyhedron list
insert polyhedron=dummy replace.materials= { HfO2 GATEox } \
new.material=Oxynitride new.region=SDetchDummy
PolyHedronClear

strip Oxynitride

#endif
if { $debug } { WriteBND }

#- SiGe or SiC source/drain generation


set th [expr ($H+0.0001)]

#if "@Type@" == "pMOS"


set ty0 [expr (-0.5*$Wb)]
set ty1 [expr (0.5*$Wb)]
#else
set ty0 [expr (-0.5*$Wb-1.1*$Tox)]
set ty1 [expr (0.5*$Wb+1.1*$Tox)]
#endif

#if "@Type@" == "pMOS"

#- Fill SiGe epi under Gate Stack.


set tx0 [expr (0.5*$L+$Lsp0-$Esd)]
set tx1 [expr (0.5*$L+$Lsp0-0.0001)]
set ty0 [expr (-0.5*$Wb-0.0001)]
set ty1 [expr (0.5*$Wb+0.0001)]
set tz0 [expr (-1.0*$Tox)]
polyhedron name=sigeUG brick= { $tz0 $ty0 $tx0 $th $ty1 $tx1 }
polyhedron list
insert polyhedron=sigeUG replace.materials= { Gas } \
new.material=SiGeSD new.region=SDepi
PolyHedronClear
#- Call the SiGe epi polyhedron generation procedure
set tx0 [expr (0.5*$L+$Lsp0-0.0002)]
set tx1 [expr ($Ppitch-0.5*$L-$Lsp0+0.0002)]

EpitaxySD sd $tx0 $tx1 $ty0 $ty1 $th $bHepi $mHepi $tHepi $bLepi $mLepi
$tLepi $Fangle
polyhedron list
insert polyhedron=sd replace.materials= { Gas } \
new.material=SiGeSD new.region=SDepi
PolyHedronClear

#else

#- SiC source/drain generation


set tx0 [expr (0.5*$L+$Lsp0-$Esd)]
set tx1 [expr ($Ppitch-0.5*$L-$Lsp0+0.0000)]

polyhedron name=sd brick= { $Hild $ty0 $tx0 $H+0.0001 $ty1 $tx1 }


polyhedron list
insert polyhedron=sd replace.materials= { SiFin } \
new.material=SiSD new.region=SDepi
PolyHedronClear

#endif
if { $debug } { WriteBND }

if { $DoStrain } {
###----------------------------------------------------------------------
--------------
#----- S/D stressor -----
#--- Assign intrinsic stress to S/D SiGe epi ----------------------------
-----
#if "@Type@" == "nMOS"
#--- Calculate intrinsic stress from C Mole fraction --------------------
-------------
#--- C11=165.7GPa C12=63.9GPa C44=79.6GPa for Silicon - 2% C negiligible
set iS [expr (1.0 * ( 165.7 + 2 * 63.9 ) * 1e10 * 0.449 *
$CMoleFraction )]
stressdata SiSD sxxi=$iS syyi=$iS szzi=$iS
#else
set Nge [expr ($GeMoleFraction*5.0e22)]
sel SiGeSD z=$Nge name=Germanium store
#endif
diffuse temp=600 time=1.0e-6<s> stress.relax
struct tdr=n@node@_SDepi !gas !interfaces !bnd alt.maternames

#----- spacer1 -----


polyhedron name=gp brick = { $Hgate $SP1Y0 $SP1X0 $H+0.0005 $SP1Y1
$SP1X1 } info=2
polyhedron list
insert polyhedron=gp replace.materials= { Gas } new.material=LowK
new.region=Spacer1
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

#----- ILD fill -----


set tHgate [expr ($Hgate+0.0000)]
deposit LowK type=fill coord=$tHgate region.name=ILDg
if { $debug } { WriteBND }

#----- Poly Gate Removal -----


strip PolySilicon
if { $debug } { WriteBND }

if { $DoStrain } {
#--- Stress Rebalance after gate removal --------------------------------
-
diffuse temp=600 time=1.0e-6<s> stress.relax
struct tdr=n@node@_GateRemoval !gas !interfaces !bnd alt.maternames
}

###----------------------------------------------------------------------
--------------
#----- Assign doping profile -----
if { $DoDiff } {
sel SiFin z=$Nch name=$Dch store

sel SiStop z=$Nstop name=$Dstop store

#if "@Type@" == "nMOS"


sel SiSD z=$Nsd name=$Dsd store
#else
sel SiGeSD z=$Nsd name=$Dsd store
#endif

diffuse temp=1000 time=100.0e-3<s> stress.relax


struct tdr=n@node@_Doping !gas !interfaces !bnd alt.maternames
}

###----------------------------------------------------------------------
--------------
#----- Metal Gate Deposition -----
if { $DoStrain } {

#--- Calculate intrinsic stress ---------------------------------


set iS [expr ($iSMG * 1.0e9 * ( 1.0 - 0.296 ) / ( 1.0 - 2.0 * 0.296
))]
doping name=SxxMG field=StressELXX depths= { 0 100 } values= { $iS $iS }
doping name=SyyMG field=StressELYY depths= { 0 100 } values= { $iS $iS }
doping name=SzzMG field=StressELZZ depths= { 0 100 } values= { $iS $iS }

set tHgate [expr ($Hgate+0.0010)]


deposit material=Tungsten type=fill coord= $tHgate region.name=GateMetal
\
doping= { SxxMG SyyMG SzzMG }
diffuse temp=600 time=1.0e-6<s> stress.relax
struct tdr=n@node@_MG !gas !interfaces !bnd alt.maternames

} else {

deposit material=Tungsten type=fill coord= $tHgate region.name=GateMetal

}
if { $debug } { WriteBND }

#----- CESL depo -----


deposit Nitride type=fill coord=$Hcesl region.name=ILDm0
if { $debug } { WriteBND }

set tHcesl [expr ($Hcesl-0.0001)]


set tH [expr ($H+0.0001)]
#----- M0 fill -----
set tTPs [list [list $tHcesl $M0Y0 $M0X0] [list $tHcesl $M0Y0 $M0X1]
[list $tHcesl $M0Y1 $M0X1] [list $tHcesl $M0Y1 $M0X0]]
set tBPs [list [list $tH $M0Y0b $M0X0b] [list $tH $M0Y0b $M0X1b] [list
$tH $M0Y1b $M0X1b] [list $tH $M0Y1b $M0X0b]]
HexaHedron m0 $tTPs $tBPs
polyhedron list
insert polyhedron=m0 replace.materials= { Nitride LowK Gas } \
new.material=Tungsten new.region=M0
PolyHedronClear
if { $debug } { WriteBND }

if { $DoStrain } {

#----- Via Metal Deposition -----


#--- Calculate intrinsic stress ---------------------------------
set iS [expr ($iScont * 1.0e10 * ( 1.0 - 0.296 ) / ( 1.0 - 2.0 * 0.296
))]
stressdata region= M0 sxxi=$iS syyi=$iS szzi=$iS

diffuse temp=600 time=1.0e-6<s> stress.relax


struct tdr=n@node@_VIA !gas !interfaces !bnd alt.maternames

}
if { $debug } { WriteBND }

#----- ILD -----


deposit LowK type=fill coord=$Hild region.name=ILDv
if { $debug } { WriteBND }

#----- Cone VIA -----


#----- VIA to metal gate and fill tungsten into VIA -----
set tX0 $AX0
#-set tY0 [expr ($PY1 - 0.4*$PY)]
set tY0 0.0
set POINTSg [GetCirclePoints $tX0 $tY0 $Dcgt]
eval polygon name=VIAg points= \{$POINTSg\}

mask name=VIAtoG polygons= {VIAg} !negative


photo mask=VIAtoG thickness=0.001
if { $debug } { WriteBND }
etch material=LowK type=trapezoidal angle=$Acg thickness=2*$Tild
etch material=Nitride type=trapezoidal angle=$Acg
thickness=2*$Tcesl
strip Photoresist

polygon list
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

deposit Tungsten type=fill coord=$Hild+0.0001


if { $debug } { WriteBND }

#----- VIA to source/drain and fill tungsten into VIA -----


set tX0 [expr (0.5*$Ppitch)]
set tY0 0.0
set POINTSm0 [GetCirclePoints $tX0 $tY0 $Dcm0t]
eval polygon name=VIAm0 points= \{$POINTSm0\}

mask name=VIAtoM0 polygons= {VIAm0} !negative


photo mask=VIAtoM0 thickness=0.001
if { $debug } { WriteBND }
etch material=LowK type=trapezoidal angle=$Acm0
thickness=2*$Tild
strip Photoresist

polygon list
point clear
polygon clear
polyhedron clear
if { $debug } { WriteBND }

deposit Tungsten type=fill coord=$Hild+0.0001


if { $debug } { WriteBND }

diffuse temp=600 time=1.0e-6<s> stress.relax

#----- Save TDR file -----


struct tdr=n@node@_profile_q !gas !interfaces !bnd !alt.maternames

#----- Reflect the structure to the channel direction -----


#----- Both source and drain are in the structure -----
transform reflect back
if { $debug } { WriteBND }

#----- Save TDR file -----


struct tdr=n@node@_profile !gas !interfaces !bnd !alt.maternames

#-#----- Reflect the structure to the fin width direction -----


#-#----- Whole fin (not the half fin) is there -----
#-transform reflect left
#-if { $debug } { WriteBND }

#----- Contact for sdevice simulation -----


contact bottom name=substrate Silicon
contact point replace region=GateMetal name=gate
contact point replace region=M0.1 name=source
contact point replace region=M0.2 name=drain
if { $debug } { WriteBND }

#--Change refinement strategy and remesh-------------------------------


##---------------Remeshing for device simulation--------##
# clear the process simulation mesh
refinebox clear
refinebox !keep.lines
refinebox clear.interface.mats
line clear

pdbSet Grid MGoals Keep3DBrep 0

# reset default settings for adaptive meshing


pdbSet Grid AdaptiveField Refine.Abs.Error 1e37
pdbSet Grid AdaptiveField Refine.Rel.Error 1e10
pdbSet Grid AdaptiveField Refine.Target.Length 100.0
# Doping based refinement
pdbSet Grid Adaptive 1

# Set high quality delaunay meshes


pdbSet Grid sMesh 1
pdbSet Grid SnMesh DelaunayType boxmethod
pdbSet Grid SnMesh CoplanarityAngle 179
pdbSet Grid SnMesh MaxPoints 500000
pdbSet Grid SnMesh MaxNeighborRatio 1e6

# Set the interface spacing


mgoals min.normal.size=0.01 normal.growth.ratio=8.0 max.box.angle=179
accuracy=1e-6
# Which interfaces are to have interface meshes
#refinebox interface.materials = {Silicon}
refinebox interface.materials= {Silicon SiFin GATEox Oxide HfO2}

#####----- Mesh refinement -----#####


set Ymax [expr (0.5*$Fpitch+$PY+0.010)]
set Ymin [expr (-1.0*$Ymax)]
set Xmax $AX1
set Xmin [expr (-1.0*$Xmax)]

##DFISE -Z Y X
refinebox name=eAll \
min= "-2.0 $Ymin $Xmin" \
max= " 1.0 $Ymax $Xmax" \
xrefine= 0.5 yrefine= 2.0*$W zrefine= 0.5*$L

set tYmin [expr (-1.0*$Wb)]


set tYmax [expr (1.0*$Wb)]
##DFISE -Z Y X
refinebox name=eSTI \
min= "-0.05 $tYmin $Xmin" \
max= " 0.12 $tYmax $Xmax" \
xrefine= 0.01 yrefine= 0.01 zrefine= 0.01

set tAY0 [expr (-0.5*$Wb-0.005)]


set tAY1 [expr (0.5*$Wb+0.005)]
##DFISE -Z Y X
refinebox name=eActive \
#- min= "-0.012 $tAY0 $SP1X0-0.005" \
#- max= " $H+0.010 $tAY1 $SP1X1+0.005" \
min= "-0.012 $tAY0 $Xmin" \
max= " $H+0.010 $tAY1 $Xmax" \
xrefine= 0.005 yrefine= 0.005 zrefine= 0.005

set tAY0 [expr (-0.5*$Wb-0.002)]


set tAY1 [expr (0.5*$Wb+0.002)]
##DFISE -Z Y X
refinebox name=e0Active \
min= "-0.004 $tAY0 $SP1X0-0.000" \
max= " $H+0.004 $tAY1 $SP1X1+0.000" \
xrefine= 0.002 yrefine= 0.002 zrefine= 0.002

set tAY0 [expr (-0.5*$Wb-0.001)]


set tAY1 [expr (0.5*$Wb+0.001)]
##DFISE -Z Y X
refinebox name=eChannel \
min= "-0.001 $tAY0 $SP0X0-0.000" \
max= " $H+0.001 $tAY1 $SP0X1+0.000" \
xrefine= 0.001 yrefine= 0.001 zrefine= 0.002

set tAY0 [expr (-0.5*$Wb-0.000)]


set tAY1 [expr (0.5*$Wb+0.000)]
##DFISE -Z Y X
refinebox name=eRChannel \
min= "-0.000 $tAY0 $PX1-0.000" \
max= " $H+0.000 $tAY1 $SP0X1+0.000" \
xrefine= 0.001 yrefine= 0.001 zrefine= 0.001
refinebox name=eLChannel \
min= "-0.000 $tAY0 $SP0X0-0.000" \
max= " $H+0.000 $tAY1 $PX0+0.000" \
xrefine= 0.001 yrefine= 0.001 zrefine= 0.001

pdbSet InfoDefault 1

refinebox remesh info=2

#----- Save TDR file -----


struct tdr=n@node@_e !gas interfaces !bnd alt.maternames

exit

Das könnte Ihnen auch gefallen