silvaco

Silvaco – a quick start

Note: This post is sort of quick tutorial to start building TFT device in the Silvaco software without going much in detailed physics behind.

Silvaco is device simulation software which is used to obtain device characteristics like IV, CV, CF, etc for the simulated devices which could be diode, MOSFET, TFT, organic devices and a lot of other devices which are listed in the manual. The software comes with set of examples which can be used to build your device based on it. Basically it solves all set of complex equation (Poisson’s equation, etc) for the device which you build and gives you back the required characteristics.

Here I am going to build a simple organic TFT and guide you over the statements. At the end of this session one should be able to understand the basic workflow of writing code and build their own structure whenever required.

  1. This command gives that how many servers you’d be using for solving the Silvaco file.
    • go atlas simflags=”-P 1″
  2. Now one can set variables to some value so that it can be reused again. So following command instantiates following variables. All dimensions are in micrometer.
    • set Channel_L = 20
      set ContactLength_SD = 5
      set Semiconductor_t = 0.05
      set Dielectric_t = 0.35
  3. Before defining the structure of your device one should be aware of the dimensions of the device and where the boundaries occurs. This commands helps to define meshing points where the simulator will solve for the physics based equation.
    • mesh     width=220x.mesh loc=0.0 spacing=0.1
      x.mesh loc=$ContactLength_SD – $ContactLength_SD/2 spacing=0.1
      x.mesh loc=$ContactLength_SD spacing=0.1
      x.mesh loc=$ContactLength_SD+$Channel_L/2 spacing=0.1
      x.mesh loc=$Channel_L + $ContactLength_SD spacing=0.1
      x.mesh loc=$Channel_L + $ContactLength_SD + $ContactLength_SD/2 spacing=0.1
      x.mesh loc=$Channel_L + $ContactLength_SD + $ContactLength_SD spacing=0.1
      y.mesh loc=0.000 spacing=0.1
      y.mesh loc=$Semiconductor_t/2 spacing=0.01
      y.mesh loc=$Semiconductor_t spacing=0.01
      y.mesh loc=$Dielectric_t-0.2 spacing=0.1
      y.mesh loc=$Dielectric_t spacing=1
  4. This part defines the material present at different rectangular regions that you’d define. The material properties are taken as default. It can be specifically changed later as you’ll see.
    • region num=1 x.min=0.0 x.max=$Channel_L + $ContactLength_SD + $ContactLength_SD y.min=0.0 y.max=$Semiconductor_t material=pentacene
      region num=2 x.min=0.0 x.max=$Channel_L+ $ContactLength_SD + $ContactLength_SD y.min=$Semiconductor_t y.max=$Dielectric_t material=oxide
  5. This defines the electrode location through which you would probe/apply any external quantities (i.e voltage). In our TFT case we have source, gate and drain.
    • elect num=1 x.min=0.0 x.max=$Channel_L + $ContactLength_SD + $ContactLength_SD y.min=$Dielectric_t y.max=$Dielectric_t name=gate
      elect num=2 x.min=0.0 x.max=$ContactLength_SD y.min=0.0 y.max=0.0 name=source
      elect num=3 x.min=$Channel_L+$ContactLength_SD x.max=$Channel_L + $ContactLength_SD + $ContactLength_SD y.min=0.0 y.max=0.0 name=drain
  6. For sake of simplicity you can save the structure file here via save command.
    Now we have defined the structure of the device, so we will further go inside to explicitly define the every fine details (you might call it simulation parameters) of the device.
    There are large number of material parameters through which you would like to make it resemble to a real fabricated device but most of the time one would change only few of parameters to do so and keep others as default. There are a lot of other commands/variables which needs to be added individually like Defects, Mobility, etc. The physical property specification is the crucial part of the simulation. In the current example I have used few of the material parameters which you would also find realistic.

    • save outf=OTFT_Diel300nm_L20u.str    master
      material region=1 material=pentacene permittivity=3 nc300=1e22 nv300=1e22 affinity=3.3 eg300=1.8
      material region=2 material=oxide permittivity=7.4
      mobility region=1 material=pentacene mun=1e-6 mup=0.5
      defects region=1 numd=180 ntd=1.1e20 wtd=0.115 cont
      contact name=source workf=5.1
      contact name=drain workf=5.1
      contact name=gate workf=4.1
  7. After defining all these, one needs to activate models as per requirement to include the effect of particular model while solving the equations. I mean to convey that let’s say you have defined poole frenkel variable in the material statement above but it won’t cause any effect until you specify PFMOB keyword in the MODELS. Few of the physics models are activated by default like constant mobility model, Boltzmann Distribution, etc. So one should think it as if one wants to have his device realistic then try to specify the material parameters as real as possible and activate its corresponding model so that the effect could be seen in the simulation. I have used fermidirac distribution for solving the equations, but one can include more model as per need.
    • models fermidirac
      Till now there has been specification of the device.
  8. Method statement specifies the process by which it solves these complex heavy equation corresponding to the models that you have activated above and it is solved by numerical methods. I have chosen newton method to solve and maximum iteration steps of 100.
    • method newton maxtraps=100
  9. First we would solve at all 0 volt bias to get the initial solution which is done by ‘init’ statement and save this structure file.
    • solve init
      save outf=Ox300nm_Gworkf4.1eV_Id-Vgs_L20u_Equilb.str
  10. Now one can solve at different bias voltage and save structure file at that particular bias. You can sweep only one particular voltage at a time (which is also practically done). So reload that structure file (at particular bias point) and a particular node is swept as shown below (point 11).
    • solve vdrain=-1 outf=Ox300nm_L20u_Gworkf4.1eV_Vsd01
  11. Before each sweep statement you would to like to measure current and voltage through each electrode. so surround the solve statement with log statement as shown.
    • load infile=Ox300nm_L20u_Gworkf4.1eV_Vsd01
      log outf=Ox300nm_Gworkf4.1eV_Id-Vgs_L20u_Vsd01.log
      solve vgate=0 vstep=-0.1 vfinal=-40 name=gate
      save outf=Ox300nm_Gworkf4.1eV_Id-Vgs_L20u_Vsd01.str
      log off
      The above example shows that the gate voltage is driven from 0 to -40 volts with source at 0 volts and drain at -1 volts. so it’s basically Id-Vg sweep at constant drain voltage of -1 volts
  12. Finally you can use tonyplot statement to plot any of the saved plot/structure as shown below.
    • tonyplot Ox300nm_Gworkf4.1eV_Id-Vgs_L20u_Vsd01.logOx300nm_Gworkf4.1eV_Id-Vgs_L20u_Vsd01
  13. Finally quit statement.
    • quit

Hope this helps. Contact back for more.