#***************************************************************************! # ! # This is an input file for nextnano++ to calculate the capacitance ! # of an N-Ch MOS structure. ! # It is an extension to the 1D MOS example, and it is compatible with the ! # corresponding N-Ch MOSFET tutorial. ! # ! # Author: Daryoush Nosraty Alamdary, nextnano GmbH (2020) ! # (c) nextnano GmbH ! # ! # Documentation: https://www.nextnano.com/nextnanoplus ! # Support: support@nextnano.com ! #***************************************************************************! #---------------------------------------------------------------------------! # 5 nm SiO2 # N_poly = 5 * 10^20 / cm^3 # N_d = 1 * 10^16 / cm^3 #---------------------------------------------------------------------------! # # ==> A) for Metal-gate and Schottky Barrier, choose $FERMI_CONTACT = 0 <== # ==> B) for Semiconductor-gate and Fermi contact, choose $FERMI_CONTACT = 1 <== # #---------------------------------------------------------------------------! #---------------------------------------------------------------------------! # If Schroedinger equation (quantum mechanics) should be solved, choose $QM = 1. #---------------------------------------------------------------------------! #$QM = 0 # 0 (classical calculation) or 1 (quantum mechanical calculation) (ListOfValues:0,1) $QM = 1 # 0 (classical calculation) or 1 (quantum mechanical calculation) (ListOfValues:0,1) #---------------------------------------------------------------------------! $BOUNDARY_CONDITION = dirichlet # boundary condition (dirichlet vs. neumann) (ListOfValues:dirichlet,neumann) #$BOUNDARY_CONDITION = neumann # boundary condition (dirichlet vs. neumann) (ListOfValues:dirichlet,neumann) $FULLY_IONIZED = 0 # 0 = use partial ionization of dopants, 1 = fully ionized (ListOfValues:0,1) #$FULLY_IONIZED = 1 # 0 = use partial ionization of dopants, 1 = fully ionized (ListOfValues:0,1) #$CLASSICAL_BOUNDARY = 0 # use classical density at boundary of quantum region (instead of quantum density)(ListOfValues:0,1) $CLASSICAL_BOUNDARY = 1 # use classical density at boundary of quantum region (instead of quantum density)(ListOfValues:0,1) # We choose a Schottky contact to keep things simple. $FERMI_CONTACT = 0 # 0 (Fermi contact) or 1 (Schottky contact) $SCHOTTKY_BARRIER = 3.95 # Schottky barrier height (DisplayUnit:V)(ListOfValues:3.44,3.95) $CARRIER_STATISTICS = fermi_dirac # carrier statistics (Fermi-Dirac (default) vs. Maxwell-Boltzmann) (ListOfValues:fermi_dirac,maxwell_boltzmann) # We use a coarse coarse resolution to save disk space in 2D simulation. $ENERGY_RESOLUTION_DOS = 0.001 # Integration resolution for n(E) (DisplayUnit:eV) $ENERGY_RESOLUTION_DENSITY = 0.001 # 1D # Integration resolution for n(x,E) or n(x,y,E) (DisplayUnit:eV) #$ENERGY_RESOLUTION_DENSITY = 0.05 # 2D # Integration resolution for n(x,E) or n(x,y,E) (DisplayUnit:eV) #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $COARSESPACING_INTERIOR_Y = 0.25 # 25 # grid spacing along y direction, in tutorial figures 5 was used (DisplayUnit:nm)(DoNotShowInUserInterface) $COARSESPACING_Y = 0.25 # 5 # grid spacing along y direction (DisplayUnit:nm) $FINESPACING_Y = 0.25 # 1 # grid spacing along y direction (DisplayUnit:nm) $HYPERFINESPACING_Y = 0.25 # grid spacing along y direction (DisplayUnit:nm) #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #--------------------------------------------------------------------------------- $BIAS_SWEEP = 1 # 1 (for bias sweep), 0 (for fixed bias) #$BIAS_SWEEP = 0 # 1 (for bias sweep), 0 (for fixed bias) # bias sweep $BIAS_min = -3.0 # Bias sweep: sweeping the gate voltage from $BIAS_min (DisplayUnit:V) $BIAS_max = 3.0 # Bias sweep: sweeping the gate voltage to $BIAS_max (DisplayUnit:V) $BIAS_STEPS = 60 # Bias steps for sweep (60 was used in the tutorial) #$BIAS_STEPS = 20 # Bias steps for sweep (to make 2D calculation faster) # fixed bias $BIAS = 2.0 # Bias: applied bias (DisplayUnit:V) #--------------------------------------------------------------------------------- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # User Input Dimensions: $d_Oxide = 5.0 # Oxide thickness (DisplayUnit:nm) (RangeOfValues:From=1 ,To=5 ,Step=1) (ListOfValues:1.0,5.0) (HighLightInUserInterface) $L_Gate_Cont = 100 # Length of the Side-Oxide Regions (DisplayUnit:nm) $d_Sub_Cont = 3 # The Thickness of the contact plates at the substrate's bottom (DisplayUnit:nm) $d_Gate_Cont = 5 # The Thickness of the contact plates at the gate (DisplayUnit:nm) $L_Oxide_Ch = 120 # Length of the Channel / Top-gate Contact (DisplayUnit:nm) $H_Substrate = 200 # Length of the Channel / Top-gate Contact (DisplayUnit:nm)(ListOfValues:200,300) $Subst_DopingConc = 1e16 # Substrate p-doping concentration (DisplayUnit:cm^-3)(ListOfValues:1e16,1e17)(HighLightInUserInterface) #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Derived quantities based on input dimensions $H_Bulk = $H_Substrate + $d_Oxide + $d_Sub_Cont + $d_Gate_Cont # The height of the bulk (DisplayUnit:nm)(DoNotShowInUserInterface) $y_min = -$H_Substrate - $d_Sub_Cont # minimum coordinate of simulation region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) $y_max = $d_Oxide + $d_Gate_Cont # maximum coordinate of simulation region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) $y_middle = $y_min + ($y_max - $y_min ) / 2 # middle coordinate of device along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) #---------------------------------------------------------------------------------------------------------------------------------- # Definition of quantum region # ==> It should be large enough to cover the whole region where quantum confinement changes the classical density. # The "ideal" size of the quantum region depends on the gate voltage and is thus different for electrons and holes, obviously. # ==> Ideally, the results should be independent of the Dirichlet or Neumann boundary conditions (which is not always possible). # ==> Care has to be taken at the boundary between classical and quantum region. Ideally, the density should be continous. # Here, the flag $CLASSICAL_BOUNDARY is helpful sometimes. #---------------------------------------------------------------------------------------------------------------------------------- # A) as used in the figures in the tutorial #$QuantumRegion_min_y = -2*$d_Oxide # minimum coordinate of quantum region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) #$QuantumRegion_max_y = 0 # maximum coordinate of quantum region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) # B) improvement that allows the wavefunctions to penetratate into the oxide region #$QuantumRegion_min_y = -10.0 # minimum coordinate of quantum region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) $QuantumRegion_min_y = -18.0 # minimum coordinate of quantum region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) $QuantumRegion_max_y = 1.5 # maximum coordinate of quantum region along y direction (DisplayUnit:nm)(DoNotShowInUserInterface) $Temperature = 300 # temperature (DisplayUnit:K) global{ simulate1D{} crystal_zb{ x_hkl = [1, 0, 0] y_hkl = [0, 1, 0] } substrate{ name = "Si" } temperature = $Temperature } grid{ xgrid{ line{ pos = $y_min spacing = $FINESPACING_Y } line{ pos = -$H_Substrate + $d_Sub_Cont spacing = $FINESPACING_Y } line{ pos = -$H_Substrate + 2*$d_Sub_Cont spacing = $COARSESPACING_Y} line{ pos = $y_middle spacing = $COARSESPACING_INTERIOR_Y} line{ pos = - 4*$d_Oxide spacing = $COARSESPACING_Y} line{ pos = - 2*$d_Oxide spacing = $FINESPACING_Y } line{ pos = - $d_Oxide spacing = $HYPERFINESPACING_Y} line{ pos = $d_Oxide spacing = $HYPERFINESPACING_Y} line{ pos = $y_max spacing = $FINESPACING_Y } } } structure{ output_region_index{ boxes = no } output_material_index{ boxes = no } output_impurities{ boxes = no } output_user_index{ boxes = no } $USER_INDEX = 1 region{ # Simulation Box: Air user_index=$USER_INDEX line{ x = [-($H_Substrate + $d_Sub_Cont) , ($d_Oxide + $d_Gate_Cont)] } binary{ name = "Air" } } region{ # Si bulk p-doped Substrate $USER_INDEX = $USER_INDEX + 1 user_index=$USER_INDEX line{ x = # [-$H_Substrate, 0] # was used in the figure of the tutorial [-$H_Substrate, $QuantumRegion_max_y] # improvement that considers the density due to wavefunction penetration into the oxide region } binary{ name = "Si" } #---------------------------------------------------------------------------------------------------- # For the capacitance-voltage curve, we need the change of the charge density vs. applied gate bias. # Therefore, we have to define a region where we integrate the charge density. #---------------------------------------------------------------------------------------------------- integrate{ electron_density{} hole_density{} label = "Si_Substrate" } } region{ # SiO2 Oxide Region $USER_INDEX = $USER_INDEX + 1 user_index=$USER_INDEX line{ x = [0, $d_Oxide] } binary{ name = "SiO2" } } region{ # n-poly-Si (Gate-Contact material) $USER_INDEX = $USER_INDEX + 1 user_index=$USER_INDEX line{ x = [$d_Oxide, $d_Oxide + $d_Gate_Cont] } contact { name = Gate_Contact } binary{ !IF($FERMI_CONTACT) name = "Si" # n-poly-Si !ELSE name = "SiO2" # must be defined as SiO2 because it is next to a SiO2 layer (limitation of nextnano++) !ENDIF } } region{ # Back-Gate contact $USER_INDEX = $USER_INDEX + 1 user_index=$USER_INDEX line{ x = [-($H_Substrate + $d_Sub_Cont), -$H_Substrate] } contact { name = Back_Contact } binary{ name = "Si" } doping{ constant{ name = "p-doping" conc = $Subst_DopingConc # same doping as p-type substrate } } } # !IF($FERMI_CONTACT) # region{ # n-Doping of the Gate-Contact (Very Important for a Fermi contact at the Gate!!!!) # line{ # x = # [$d_Oxide, $d_Oxide + $d_Gate_Cont] # } # doping{ # constant{ # name = "n-doping" # conc = 1.0e20 # } # } # } # !ENDIF region{ # doping of the p-type Substrate line{ x = [-$H_Substrate, 0] } doping{ constant{ name = "p-doping" conc = $Subst_DopingConc } } } } impurities{ # !IF($FERMI_CONTACT) # donor{ # n-type # name = "n-doping" # !IF($FULLY_IONIZED) # energy = -1000 # !ELSE # # energy = 0.054 # n-As-in-Si # energy = 0.045 # n-P-in-Si # !ENDIF # degeneracy = 2 # } # !ENDIF acceptor{ # p-type name = "p-doping" !IF($FULLY_IONIZED) energy = -1000 !ELSE energy = 0.045 # p-B-in-Si !ENDIF degeneracy = 4 } } contacts{ !IF($FERMI_CONTACT) fermi{ !ELSE schottky{ barrier = $SCHOTTKY_BARRIER !ENDIF name = Gate_Contact !IF($BIAS_SWEEP) bias = [$BIAS_min, $BIAS_max] steps = $BIAS_STEPS !ELSE bias = $BIAS !ENDIF } ohmic{ name = Back_Contact bias = 0.0 } } classical{ carrier_statistics = $CARRIER_STATISTICS # Gamma{} # L{} Delta{} HH{} LH{} # SO{} output_bandedges{ averaged = no } # output_bandedges{ averaged = yes } # better for 2D to save disk space output_ionized_dopant_densities{} output_carrier_densities{} output_intrinsic_density{} output_energy_resolved_densities{} energy_distribution{ # Calculation of carrier densities as a function of energy min = -1.2 # Integrate from max = 0.6 # Integrate to energy_resolution = $ENERGY_RESOLUTION_DOS # Integration resolution only_quantum_regions = yes } energy_resolved_density{ min = -1.2 # Integrate from max = 0.6 # Integrate to energy_resolution = $ENERGY_RESOLUTION_DENSITY # Integration resolution only_quantum_regions = yes } } poisson{ output_potential{} output_electric_field{} } currents{ recombination_model{ SRH = no Auger = no radiative = no } output_fermi_levels{} # output_currents{} # output_velocities{} } quantum { region{ name = "quantum_region" x = [$QuantumRegion_min_y, $QuantumRegion_max_y] boundary{ x = $BOUNDARY_CONDITION #if $CLASSICAL_BOUNDARY classical_boundary_x = yes } Delta{ num_ev = 250 } HH{ num_ev = 250 } LH{ num_ev = 250 } output_wavefunctions{ max_num = 9999 amplitudes = no probabilities = yes } } } run{ poisson{} # #if $QM quantum_poisson{ output_log = yes residual = 1e3 iterations = 250 } # (solve Schroedinger-Poisson self-consistently) #if $QM quantum_poisson{ output_log = yes } # (solve Schroedinger-Poisson self-consistently) }