In this tutorial we will show an example of 2D simulation of a Si n-MOSFET device.
We will calculate :
In order to execute correctly the example you should have the following files in the working directory:
mosfet.tib : input file for TiberCAD
mosfet.msh : mesh file produced by GMSH from the script mosfet.geo
For a detailed tutorial of the geometrical modelling with GMSH, see Getting started 2
Here is the geometry of the Mosfet device as it is meshed by GMSH.
Let's give now a look to the input file; for further details you can refer to the program reference manual.
$Device
{
Region substrate
{
material = Si
doping = 1e18 doping_type = acceptor
}
Region contact
{
material = Si
doping = 5e19 doping_type = donor
}
Region oxide
{
material = SiO2
}
}
First we define the device structure: it is composed by three TiberCAD Regions: substrate and contact, both made of Silicon, and oxide (SiO2).
The substrate region (which include channel) is doped p-type 1018 cm-3; contact region is composed by the two regions around source and drain, both heavily doped n-type 5x1019 cm-3 ; finally, oxide is the gate dielectric.
Now, we define the TiberCAD simulation models which will be used in this example.
We are going to calculate Poisson and Drift-diffusion (model driftdiffusion) for all the device
(physical_regions = all in options).
A field dependent model for mobility is applied.
$Models
{
model driftdiffusion
{
options
{
simulation_name = driftdiffusion
physical_regions = all
}
physical_model recombination
{
model = srh
}
physical_model electron_mobility
{
model = field_dependent
low_field_model = doping_dependent
}
BC_Regions
{
BC_Region gate
{
type = schottky
barrier_height = 3.0
voltage = @Vg[0.0]
}
BC_Region source
{
type = ohmic
voltage = 0.0
}
BC_Region drain
{
type = ohmic
voltage = @Vd[0.5]
}
} Physical Line in GMSH)). This is made simply with BC_Region gatebarrier_height). @Vg[0.0]. This means that the gate voltage will be given the value of the variable Vg, specified in one of the sweep block (see after). [0.0] means that the default voltage value is 0.0 V.voltage = 0.0), drain voltage is expressed, as for the gate, by the value of the sweep variable Vd ( voltage = @Vd[0.5]).
# Definition of Model-dependent Solver parameters
$Solver
{
driftdiffusion
{
nonlinear_solver = tiber
coupling = electrons
ksp_type = bcgsl
nonlin_max_it = 10
nonlin_step_tol = 1e-3
ls_max_step = 2
}
Sweep
{
sweep_drain
{
simulation = driftdiffusion
variable = Vd
start = 0.0
stop = 2.0
steps = 20
#plot_data = true
}
sweep_gate
{
variable = Vg
start = -0.1
stop = 1.0 #0.5
steps = 11 # 6
simulation = sweep_drain
plot_data = true
}
}
Now, the parameters for the solver are defined, for the driftdiffusion model.
coupling = electrons specifies that only one type of carrier is considered. ksp_type = bcgsl defines the solver type, nonlinear_solver = tiber specifies the non-linear solver.
We include the optional Sweep block, whose syntax is the following:
Sweep
{
sweep_name1
{
.....................
}
sweep_name2
{
.............................
}
}
Her we define two nested sweeps: the external sweep (sweep_gate) calculates the drain current for a series of gate voltages, from -0.1 to 0.5 V; for each calculation, a sweep on drain voltages is performed (simulation = sweep_drain), defined by sweep_drain. In sweep_drain, driftdiffusion is calculated (simulation = driftdiffusion) for a series of drain voltages from 0 to 2 V.
In the Physics section usually some physical parameters are defined.
In this case we just state that we want to use the unstrained model for driftdiffusion (since no strain calculation is intended) and that we use Fermi-Dirac statistic
$Physics
{
driftdiffusion
{
statistics = FD
}
}dimension = 2) simulation to be performed, specified by solve = sweep_gate: this means that we are going to perform a calculation of Poisson and drift-diffusion output_format = vtk)
$Simulation
{
searchpath = ../../materials
meshfile = mosfet.msh
dimension = 2
temperature = 300
solve = sweep_gate
resultpath = output_IV_char
#output_format = gmv
output_format = vtk
plot = (Ec, Ev, QFermi_e, eDensity, eCurrent, NetRecombination, EField, ElPotential, ContactCurrents)
}
After the execution, the output directory contain the simulation results, as defined in
output_format and plot.
TiberCAD supports 3 packages for 2D and 3D data visualization and post-processing:
Free:
1) GMV, http://www-xdiv.lanl.gov/XCM/gmv/GMVHome.html
output_format = gmv
2) Paraview, http://www.paraview.org/New/index.html
output_format = vtk
Commercial:
3) Tecplot-ise, http://www.amtec.com/
output_format = ise
Let's see how to use Paraview to plot TiberCAD 2D results:
FIrst, open the .vtk file from your directory:
The name of the loaded files will be shown in the Pipeline browser.
To visualize the content of the file, you should click on the Apply button in the Properties tab in Object Inspector
To select the output variable , go to Display and choose from the menu "Color by", e.g. electron _density. Also, in Display section Scale and legend bar can be setted.
Thus, in driftdiffusion_materials.vtk we have the information about the material regions of the device: here, 1 indicates the substrate Region , 2 the contacts region and 3 the SiO2 gate dielectric.
In driftdiffusion_nodal.vtk and all the other files for each bias step, we have the output for the nodal quantities which have been calculated, e.g. conduction and valence bands, (quasi)fermi levels, electron and hole density and mobility.
For example, this is the electron density for a drain voltage = 2V and a gate bias Vg = 1V.
You can see the large increase of electron density in the channel, which is pinched off close to drain contact due to the high drain voltage.
In sweep_2_driftdiffusion_Vg_0.000_Vd.dat and all the other files for each Vg bias step (sweep_2_driftdiffusion_Vg_step_Vd.dat) we have the IV drain characteristics for each Vg bias.
To do so, the two sweeps have to be defined in this way:
Sweep {
sweep_drain
{
simulation = driftdiffusion
variable = Vd
start = 0.0
stop = 1.0
steps = 5
}
sweep_gate
{
variable = Vg
start = -1.0
stop = 0.5
steps = 150
simulation = driftdiffusion
}
}
the first sweep (sweep_drain) calculates the drain current (simulation = driftdiffusion) for a series of drain voltages, from 0 to 1 V, while Vg is kept at its initial value Vg=0; at the end of this calculation we have polarized the mosfet at a drain voltage of 1 V. Then a sweep on gate voltages is performed, defined by sweep_gate. In sweep_gate , driftdiffusion is calculated (simulation = driftdiffusion) for a series of gate voltages from -1 to 0.5 V, by keeping the drain voltage at Vd = 1 V.
At the end, the Id/Vg transfer characteristic for Vd=1 V is obtained.
This time, in Simulation section, we define the 2D simulation to be performed by writing solve=(sweep_drain,sweep_gate): this means that we are going to perform a calculation of Poisson and drift-diffusion
with two sweeps in series, first a sweep on drain and than a sweep on gate voltage, to calculate Id/Vg transfer characteristic.
$Simulation
{
meshfile = mosfet.msh
dimension = 2
temperature = 300
solve = (sweep_drain, sweep_gate)
resultpath = output_transf_char
output_format = vtk
plot = (Ec, Ev, QFermi_e, QFermi_h, eDensity, hDensity, eCurrent, hCurrent, NetRecombination, EField, ElPotential, ContactCurrents)
}The rest of the input file remains unchanged.
Now we can run TiberCAD another time....
tibercad mosfet.tib
Here is the Id/Vg transfer characteristic for a drain voltage Vd = 1 V .
As before, in driftdiffusion_elemental.vtk and driftdiffusion_nodal.vtk, we have the output for respectively the nodal and the elemental quantities which have been calculated.
The subthreshold S parameter, given by
in this case results to be ~80 mV/dec.
| Attachment | Size |
|---|---|
| mosfet.msh | 309.63 KB |
| mosfet.geo | 1.67 KB |
| mosfet.tib | 2.28 KB |
| mosfet_transchar.tib | 2.14 KB |