SIMPL-er help file

Written by Harlan Hile, UC Berkeley, 1999

Table of Contents
Run the SIMPL-er applet

About SIMPL-er

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.

Return to table of contents

How to Use SIMPL-er

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.
If you are running the application, you can save your process flow file once you are satisfied with it. You can also turn on patterning in the cross-section display by selecting it in the Options menu. You can get a printout of the project by choosing "Print" from the file menu.

Return to table of contents

Shortcomings, Bugs, and Contact Information

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.

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
If you find other bugs or have comments, e-mail 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.

Return to table of contents

Programming Comments

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.
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

Return to table of contents


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:

  1. Make the applet and application adapt smartly to resizing (instead of forcing prespecified sizes)
  2. I'm open to suggestions!
Return to table of contents

Run the SIMPL-er applet