Archive for the ‘ Projects ’ Category

Making a silicon chip logo

utopium_bonding_diagramHistorically, when manufacturing silicon designs, it used to be a bit of engineering fun to add a little non logo or a cute little image to the design. There are some fantastic examples of this available at Silicon Zoo. Nowadays, it is actually an essential part of the process as a large visible logo makes it easy to spot the different designs on multi project wafers, and is a requirement by the people who do the wire bonding to make sure the chip is correctly oriented. The in-line image is what we send to the people connecting the silicon to the chip package using rather small wires. In the diagram there is the Utopium chip package with a, to-scale, die plot of the silicon with the logo clearly visible and all the wire connections we need. This serves two uses, firstly it shows the orientation of the chip, and secondly it makes sure we don’t have any crossing wires.

This time we48pinDIL are using a reather simple 48 pin DIL package which a rather retro package with relatively few pins, but it makes life easier when making the test board.

Making the Logo

origial_catSo, onto making a chip logo. You first need two pieces of information, the minimum top level metal size (in my case the level 8 metal layer for the UMC 130nm process has a minimum width of 1.5um) and the size of the logo (for this example I will make one 0.75mm x 0.6mm). Using those numbers you can determine the size of your canvas (“750um x 600um” / 1.5um is roughly 500 x 400 pixles).

Next, create an image in Gimp (or equivalent) of your required size. Use black on white. Here is our example cat. This now needs to be saved as a .pnm file. When the “Data formatting” dialog pops up, select Ascii. Keep the gimp window open as we will need it later.

Now we need to run pnm2cif on the file. This was written by Andrew Bardsley and is released under the “Whatever you like” licence (GPLv2+ or BSD). Download it to the same directory as the image, and run:

> ./pnm2cif.pl <pnm-image-filename> <cell-name> <scalar> <layer-name>

The pnm file is the image, the cell-name will be the name of the new cell, the scalar is the size of the feature size, and the layer-name is the name of the metal layer used. In our case these are:

> ./pnm2cif.pl cat_logo.pnm cat_logo 1500 ME8

The scalar of 1500 is because the minimum feature size in nanometres, and ME8 is the name of the top level metal layer.

imported_catHopefully this has now produced  a .cif file which can be imported into your layout editor. We will use Cadence Virtuoso for this. From ICFB select File -> Import -> CIF, enter the filename and set the Scale UU/DBU to 0.001 micron (the 1nm we used as a base unit) and select the library which it should be imported into. The two warnings are normal. Open up the newly imported cell and make sure it is the correct size.

Because the design is made of metal slices which are not connected we need to merge them all into one. Select all (Ctrl+A) and merge (Shift+M). Now that all the metal slices are merged, the logo is ready to go? Well, no, the design first has to pass the DRC rules.

Passing DRC

drc_failAt this stage the design is covered with “Design Rule Check” faults. The most common ones are two pixels meeting at corners, like shown in the in-line image. This essentially creates an infinitely thin wire (the fabrication folk don’t like making these). So, back to gimp, to manually fix these up with a pen. If you tried to use a dithered image, at this point you will be admitting defeat and moving to a simpler design.

copy_pixelsThe next thing to fix is the maximum wire thickness. This is 30um which is 20 pixels. In order to break up the design and make sure there are no blocks thicker than 20 pixels, we first select a strip of pixels with one white pixel and 20 black. Copy this to the clipboard. Select the bucket fill tool, select pattern fill (pattern from clipboard should be selected as default) and click any large blocks. Selecting two pixels, one white and one black, and doing a flood fill creates a striped pattern which creates a diffraction grading. Get someone with a physics degree to work out the size of the lines to create (I guessed).

sliced_catNow we need to repeat the whole process and run DRC to make sure there are no faults. It will probably take several attempts before all the errors are removed. At the foundry, in order to meet some other design rules, the process will do two additional things which may ruin the design: slotting (also known as cheesing) and metal fill. Slotting involves punching holes in all large metal areas, and metal fill makes sure a certain range of the area of the chip is covered with metal. To stop these from ruining the design, there usually is a layer you can add (in our case it was M8_CAD). This is acceptable only because the metal is non functional and thus does not have to adhere to some design rules. Make sure the design does not cover the whole chip, so there is enough space for the fab to metal fill.

And then you’re done. The Utopium logo looks like this. Make sure you get permission to use any copyrighted artwork or trademarked designs (I did, thanks Fedora for letting me use your logo).

utopium_logo

Utopium (nearly there)

Utopium has been sitting waiting to be manufactured for ages now but everything that can go wrong, has. Firstly I was targeting the 65nm process but just as I got ready to choose a manufacturing date, Europractice decided to pull all the remaining 65nm runs for the year. So I migrated the design to the 130nm technology. Unfortunately the date was also being used by the Spinica project for their test chips, which would have been fine, but there would have been a bit of competition for the CAD resources and for Jeff. After waiting another two months, Eustace and Steve started laying the design out. Here the CAD tools started to go crazy and running out of memory because of the many logical loops in the design.

dieplotAfter battling the tools for over a month, Jeff came in to attempt the design with Astro (a much older toolset). With two weeks before tape-out, the whole design was laid-out from scratch. It is always worrying when you have a process consuming 1.8 of your 2GB of RAM, but somehow everything went to plan and we had a final design on the final day. Inset is a die plot of the final design. Just as we all breathed a sigh of relief at the fact the design was sitting on the manufacturer’s ftp server with hours to spare, we received an email saying “sorry but we dropped your design, no more space”. If there are commercial customers, they pay more and thus get preference if they run out of space.

To their credit we were given the option of joining another run two months later. So that is where we are now, the new tape-out is on November the 30th. At that point Doug asks for more features on the design to make it easier to get relative results. So at the beginning of this week, I finally made the last verilog dump and Jeff has been doing the hopefully last layout. This time we should be several weeks early so it will be more difficult for them to drop our design.

Snobbery and the such

The talks to the group went reasonably well. I presented a very brief overview of the Utopium and presented some more amusing thoughts as to how science should be conducted. If you were not there this is a short list of topics covered: Apple fan-boys, fair-trade organic cocaine, Socrates questioning fries McDonald’s, a delicious cup of tea with hemlock, usage of tabs in indentation styles, the temperature of flames, employment being for the stupid, talk of bullocks, letching, Hitler, fish with springs for legs, buckteeth and glasses styles, drinks machines in the middle of a desert, Stalin surrounded by lovely ladies, glorious five year plan, a race between Che Guevara, Darwin and a snob, “the great cleansing” (killing of everyone over the age of 18), Windows 7 and spelling mitsakes in blogs.

Project Utopium Continued

Drudgery continues as I try to complete the Utopium instruction set. Current progress:

utopium_17feb

So some 38 instructions to go. The speed has now dropped to 26MIPS and the gate count is now up to 17000 (woot! sigh).I did something stupid in spreading the instruction data to the different units (instruction length decoder, data memory controller and ALU …), instead of having a single block decoding the instruction and controling them all, as now I have the same decode logic repeated in 3 places. This isn’t a huge overhead but but it does mean that I end up writing a lot more code. Just waiting till I complete the instruction set before I start inserting the half buffers. Still to come are the stack operations (push, pop, call and ret). The rest is external so that can wait.

Project Utopium

For just over two weeks now I have been designing an asynchronous processor. The working name is “Utopium” (a play on “Lutonium“). It’s an 8051 Currently I am completing the instruction set.

There is a nice instruction set table I am using to mark which instructions it can currently execute. Everything highlighted in pink is done. This was the state on the 6th of February:

utopium_6feb

This was the state on the 11th of February:

utopium_11feb

And finally this is now (13th February):

utopium_13feb

The easy common instructions are done, so that just leaves the reather nasty ones which will be like pushing a pea up a mountain using my nose. So far I learned two things:

  1. The 8 bit micros were designed by either a higher power which I cannot hope to comprehend, or they are a result of top secret illegal government experiments involving LSD and computer engineers.
  2. I should have used the highlighter with most ink.

So far it is 13,948 gates but that should hopefuly go down a bit once I do slightley more intelligent caches although it will also go up once I implement all the instructions. And the performance is a fantastic 30 MIPS which will go up quite a bit once I add the half bufffers.

Asynchronous processor speeds

asyncspeedsSomething that people keep stating which is an outright lie is that asynchronous logic is great for performance and that recent research is making it better and better. Numbers such as “4.6x to 20x” improvement are thrown around as if they mean something. The truth is (sadly) that asynchronous designs are stuck in the early 90s when it comes to performance. The graph shows the number of inversion delays per instruction on a range of intel processors (in red) versus the ones from the asynchronous community (in blue). Because the numbers are technology independent, you can make a fair comparison of the designs should they be implemented on the same technology. The asynchronous designs are now a factor of 10 behind. On the positive side, because the asynchronous community is so far behind, the 1 million transistor designs are minute in comparison to the industry leading 1 billion transistor implementations.

Area is not an issue, asynchronous designs are so far behind we can happily throw area at the problems and continue to do so for a good while. While with performance, lets face it, it is damn poor and creating and recreating the same poor performance designs and then claiming they are several times faster than the incredibly slow designs (see far left of the graph) is fruitless.

Website Time-lapse

I made some animated gif images of popular websites showing how they changed over the years. The old versions of the sites are taken from The Wayback Machine. Unfortunately some images were blocked from being spidered by archive.org and are shown as gray boxes. So far I have done a time-lapse of Google , Yahoo and AltaVista.