Written by Harlan Hile, UC Berkeley, 1999
SIMPL-er follows the idea of Berkeley's bigger versions of SIMPL (SIMulations of Profiles from the Layout). SIMPL-er takes in a IC fabrication process flow, including masks, and generates a cross-section of the chip. The main difference between other versions of SIMPL and SIMPL-er is that SIMPL-er is meant as a teaching tool, not for analysis, and it is written in Java 1.1.2 instead of C. Since SIMPL-er is not needed for analysis, it's calculations are much more simplistic, its possible process flows are less complex, and it is less accurate. This also means it should be faster, and since it is written in Java, it can be run on a variety of machines.
When you first start SIMPL-er, you can select one of the built in process flow examples or decide to create your own custom process flow. Simply choose your option from the choice gadget and hit the 'Start' button. If you are running the application you may also load a file previously saved by selecting 'Load file' from the File Menu. If the size isn't right for you you can change the size by going to a different page by following one the links with the applet, or choosing a new size from the Options menu in the application. | |
SIMPL-er's user interface should be mostly self-explanatory. The process flow is entered in the Steps panel (the upper left corner) with the choice gadgets. Choose the function you want, and the appropriate parameter selectors will appear. Pick the parameters you want. When you're ready to move on to the next step, press the 'Add Step' button. | If you have chosen a 'pattern' step that requires a mask, you will be allowed to draw a mask in the mask area (the upper right corner). Clicking in the field will produce a dot, and dragging allows you to draw a rectangle. If you need to erase, select 'erase' in the Steps panel and draw as before in the mask area. A key to the left of the mask indicates what step number corresponds with what color and pattern, what material you are etching, and whether the mask is clear or dark field. Click along the mask area's border (the dark grey lines with tick marks) to choose where to take the cross-section. Your choice is indicated by a small purple triangle, and will show the complete cutline when calculating the crossection. |
When you're ready to see the cross-section, click the 'Calculate
Cross-Section' button and the cross-section will be displayed in the lower
window. If you want to edit your steps, you can go back and forth simply
by using the slidebar in the Step's panel. You can add and delete steps
at any point in your process using the "Add Step" and "Delete Step"
buttons.
You can change the cross-section cutline in the mask area by clicking on
the border to move the purple triangular marker, and then hit the
'Calculate Cross-Section' button again to see the new view. |
Shortcomings, Bugs, and Contact Information
Shortcomings
SIMPL-er is by no means an accurate
cross-section calculator. It is designed to be simple and fast as a
learning tool. Some of the main shortcomings in the calculations are
these:
The edges are not accurate (about 1/2 micrometer of the edge)
because the algorithms require traversing the array that makes up the
polygon and looking and previous and next points, which means that the
edges of the array cannot be fit into that algorithm, so those points must
be fudged.
Multiple layer etching is also a problem. If you etch
through two layers, the line of the polygon on top must be brought down to
the lowest point after etching. This is done with a recursive algorithm,
but it means that every time another layer is etched, less of the next is
exposed to be etched. This would not happen in reality since the layers
really arent seperate, but I couldnt find an easy solution to the
problem.
Ion implantation is also very simplistic. When implanting,
the new concentration is just taken by looking at the point in the middle
of the well and adding that to the implanting concentration. This means
that if you do an implant on the edge of a well, it will not work
properly. But this should happen rarely.
Also, each implantation step
is only affected by the annealing of that step. In reality, each time the
silicon is heated to anneal one area, the other previously implanted areas
will spread out as well. Another side affect of combining implanting and
annealing into one step is that photoresist cannot realistically be used
as a mask in this set up. If the anneal step were attempted with
photoresist on the board, the photoresist would burn off. So I have
implicitly included a "Strip Photoresist" step in the implant and anneal
so that this problem does not actually occur.
The only place
where this is used is in the CMOS process, and its not too likely to
come up often. Just remember that in order for this to work properly, the
photoresist should be stripped after the implanting but before the
annealing.
Again with implanting, how many ions get through to the
substrate really depends on how fast they are shot in (how many volts are
use to accelerate them) and what else they have to pass through. I decided
these details were unnecessary for this simplified version, so ions can
just pass through a constant thickness of oxide (about 80nm) and into the
substrate.
Bugs
The applet won't even start in your browser? It
probably doesn't support Java 1.1. Netscape 4.0 (in Communicator) says it
supports Java 1.1.2, but don't believe it. Netscape 4.5 says
it supports
Java 1.1.5, and it seems to run the applet just fine. If you don't have
Netscape 4.5 and don't want to download it, just get Sun's applet viewer
or the JRE and run SIMPL-er as an application.
Having problems printing the cross-section by using
the print functions of your browser? Yeah, me too.
I have been told Internet Explorer can be set up to actually print the
image generated by the applet. In order for it to work you must do
Internet Options->Custom (for expert users) ->Settings-> enable printing
for unsigned applets (in Java permissions->custom). Netscape may or may
not work. Or
you can get around
this problem by doing a screen capture. In Windows, hit alt-printscreen,
and an image of the currently selected window will be put on the
clipboard. Go to your favorite paint program, and paste from the
clipboard into a new file. there you can alter what you like, and then
print. On Macs, hit shift-apple-3, and the currently selected window will
be stored in a file called Picture1 (or something similar) on your hard
drive. Open with your favorite paint program and print it from there. I
currently have no good ideas on how to make printing from the browser
easier. Or you can just download the application, which has built in
printing functions, and will save you ink/toner because it prints on
white backgrounds (not black).
Internet Explorer's java may handle slidebars differently than Sun's JDK
and Netscape's implementation of java. I have tried to include error
checking to prevent this causing problems (crashes), but if it does, please let me
know.
SIMPLer 1.0 SPF files are not compatible with SIMPLer 1.1 SPF files. I
didn't change the datastructures, but I had to add some new functions, so
Java no longer thinks the classes are compatible. Oh well.
Patterning does not always work, since it searches for a specific color to
fill the pattern with. Specifically, it will not work if your desktop has
too few colors to allow SIMPLer the colors it wants. It also doesnt
appear to work on the Mac SDK. If anyone knows of a more robust way to do
this patterning, I would be happy to hear it!
Contact Information
This is my first attempt at anything in Java, so I expect my code isn't terribly clean. My classes
know too much about each other and things like that. Maybe you're wondering why it's small on your
screen? I subscribe
to the '640x480 or bust' policy so that the most people can use it. Since this is rather small on most
screens, I went back and made some of the graphics dependent on the size of screen. I could not get
the grid bag layout manager to work, so I decided on three sizes that would fit my components well. The
applet looks to see what size it is allowed (specified in the applet tag) and picks which of the three
sizes it can fit in.
Version 0.0.5- Hello World!
Version 0.1- Got the steps input/control panel functioning and storing steps
Version 0.2- Got the mask canvas functioning
Version 0.2.5- Added a front page
Version 0.3- Got the cross-section calculation functioning
Version 0.3.5- Added built in examples
Version 0.4- Refined cross-section calculations
Version 0.5- Added patterns to mask area--now can see through to lower layers
Version 0.5.5- Caught some more multiple layer etching bugs
Version 0.6- Made the applet accept multiple sizes (for 640x480, 800x600, and 1000x760 screens)
Version 0.6.5- Reprogrammed examples (necessary since patterns added to mask data structure)
Version 0.7- Got XOR draw/erase to work with rectangle drawing preview, now faster with fewer redraws
Version 0.7.5- Caught some implanting calculation bugs
Version 0.8- Added patterns to the cross-section window
Version 0.8.5- Added a class to make it function as an application or an applet
Version 0.9- Added menus and extra options (load, save, cross-section pattern control) to the application
Version 0.9.5- Added optional use of photoresist to steps, and fixed a few bugs in load and save.
Version 1.0- Added more examples, and packaged in a JAR
Version 1.05- Added a slidebar instead of "next step" and "previous step"
buttons. Added simple printing of masks and cross-section. Added Strip
Photoresist into Implant and Anneal step to avoid the burning of
photoresist during anneals.
Version 1.1- Fixed slidebar bugs, added a list of the process steps
into the printout.
Planned Improvements:
If you find other bugs or have comments, e-mail
hhile@cory.eecs.berkeley.edu with your report. If possible, save the process flow file that
generated the error and send it to me as well. I'll probably be busy, but I will try to work
on the program if necessary. I will at least post bug reports on this page.
I decided having a mask data-structure
assigned to each step was easier than a linked-list, which would allow only as many masks as necessary.
The masks are bitsets of about 2K, and since most computers today have many many megs of memory, I
figured that a few K aren't too important.
In trying to reduce the flicker of redrawing in the mask
input panel, I tried to erase and redraw only the sections that change. I tried to use a XOR paint
mode to draw and erase the rectange drawing preview, which I eventually got to work properly.
The canvas is double-buffered as well, so the flicker
isn't bad, but there is some slow-down.
I have also decided that trying to make the masks lay on top of each other with transparency was not
worth the hassle. If you want to know what is underneath a mask, it's as easy as peeling off the layers
by hitting the 'previous step' button. I also added patterns to the masks, and everything but 'solid'
has holes in it, so you can see through to lower layers (as long as you pick the right patterns).
In order to make calculations, I have given each layer a polygon with a point every quarter micrometer
(3 pixels in the small version) in the horizontal direction. This takes up a lot more space than
necessary, but it is much easier to alter existing points than to add new ones to the polygons.
Also, in order to do implanting,
ions are assumed to pass through thin layers. This really depends on how fast the ions are shot at the
surface (how many volts are used to accelerate them), but since SIMPL-er doesn't worry about that and
calculations are simple,
there is just a constant that sets the thickness that ions can get through (about 80nm).
If anyone wants to look at my code, the source files are available here.
Return to table of contents