<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-534708807576459669</id><updated>2012-02-12T13:58:53.980-08:00</updated><title type='text'>IC reverse engineering</title><subtitle type='html'>Integrated circuit reverse engineering musings.  As I try different things, a brain dump of what went well and what didn't.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-7201799733420509137</id><published>2012-02-11T15:36:00.002-08:00</published><updated>2012-02-12T13:58:53.994-08:00</updated><title type='text'>Tile stitch</title><content type='html'>Now that I have a microscope that can generate lots of imaging data stitching has become the bottleneck.  I forget exactly how long but the large memory requirements of gigapixel (GP) sized images made it take a day or so to stitch on my desktop.   I might have been fine with this except that something, I suspect enblend or one of its libraries, seems to generate a number of glitches when the images get very large.   I've seen this on both 32 and 64 bit systems and should probably file a bug report...  In any case, I wanted to reduce system requirements since I figured there was a way to do things better.&lt;br /&gt;&lt;br /&gt;Recently I've been playing around with the Google maps API as an idea to use tiles instead of viewing the huge source images.  I first played around and tiled a visual6502.org image, the MOS 6522 that you can &lt;a href="http://siliconpr0n.org/map/mos/6522/v6502/"&gt;find here&lt;/a&gt;.   This is nice as people without powerful computers can view this large image at full detail. To be fair the jpg compression also significantly reduced its size although not to a point where significant quality was lost for my purposes.  The tool to do this &lt;a href="https://github.com/JohnDMcMaster/pr0ntools/blob/master/stitch/pr0nmap.py"&gt;can be found here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, this still leaves the question of how to avoid creating the large intermediate images.  After some thinking I came with the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;nona (a "remapper": transforms source images to their location in the output image) will only output images that are in the cropped area.  Note that it will still spend a small amount of time on each of the other images deciding if it needs to generate it&lt;/li&gt;&lt;li&gt;enblend (a "blender": resolves conflicts when two source images occupy the same area) output should only differ in areas where there's a potential conflict&lt;/li&gt;&lt;li&gt;There is no potential for conflict on areas where images are unique.  In particular this is the edges and there is less conflict in the center 1/3 of my images since I have 1/3 overlap with neighbors&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;This allows the following algorithm.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Step 1: get an optimized .pto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can get this from any source you want.  I am using my &lt;a href="https://github.com/JohnDMcMaster/pr0ntools/blob/master/stitch/pr0nstitch.py"&gt;pr0nstitch program&lt;/a&gt; (discussed in a previous post) which I then optimize for size and crop in Hugin.  While the Hugin stage could probably be automated its at least doesn't take very long and gives me an idea of how well the optimize went before trying a full stitch.&lt;br /&gt;&lt;br /&gt;For this example I'll show a smallish input image.  When stitched with Hugin it looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-W2ZNCLV10f4/TzcEfPSP4QI/AAAAAAAABMc/lf1DLHUBBZw/s1600/hugin_out.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/-W2ZNCLV10f4/TzcEfPSP4QI/AAAAAAAABMc/lf1DLHUBBZw/s320/hugin_out.jpg" alt="" id="BLOGGER_PHOTO_ID_5708035987440918786" border="0" /&gt;&lt;/a&gt;As an aside, this is a MOS 6522 that I used HF to remove the passivisation and then ate out the metal.  Then end result is that you can still see where the metal was (because there is still a lot of SiO2 leftover) while still seeing all of the bottom layers.&lt;br /&gt;&lt;br /&gt;Heres a visual from Hugin of what the input looks like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-3VdfIO71kmk/TzcEZ8FKUVI/AAAAAAAABMQ/01zhXrrw3lM/s1600/hugin_perspective.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 245px;" src="http://3.bp.blogspot.com/-3VdfIO71kmk/TzcEZ8FKUVI/AAAAAAAABMQ/01zhXrrw3lM/s320/hugin_perspective.png" alt="" id="BLOGGER_PHOTO_ID_5708035896386408786" border="0" /&gt;&lt;/a&gt;I  think the color gradients are related to me using semi-polarized light  on high quality but not strain free objectives (Mitutoyo plan apo 20X).   On the bright side it makes the source image boundaries much more  pronounced.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Step 2: pick the largest single panorama size you want to stitch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-CQbg7O2qTuo/TzcG-Z4u1PI/AAAAAAAABMs/BWiKI3cTfng/s1600/supertile_01.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 245px;" src="http://1.bp.blogspot.com/-CQbg7O2qTuo/TzcG-Z4u1PI/AAAAAAAABMs/BWiKI3cTfng/s320/supertile_01.png" alt="" id="BLOGGER_PHOTO_ID_5708038721885885682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ideally the supertile should be the largest size that enblend can fit into RAM (and is error free per the bugs I've had...).  The software chooses 4X4 source image size by default (~2.5 X ~2.5 shown above) and has a command line option to customize.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Step 3: stitch the selected region&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-PxNA9DOouMo/TzcIC9E6fYI/AAAAAAAABM8/2nDsdnuxRmI/s1600/supertile_01_stitched.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 278px;" src="http://3.bp.blogspot.com/-PxNA9DOouMo/TzcIC9E6fYI/AAAAAAAABM8/2nDsdnuxRmI/s320/supertile_01_stitched.jpg" alt="" id="BLOGGER_PHOTO_ID_5708039899563326850" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Remap (nona) and blend (enblend) to form a single large panorama image (a "supertile") that is a fraction of the entire output.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Step 4: generate tiles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-N5iuRDqwjEg/TzcJ_iekT4I/AAAAAAAABNM/c_pCEr4M6Uc/s1600/supertile_01_tiles.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 277px;" src="http://4.bp.blogspot.com/-N5iuRDqwjEg/TzcJ_iekT4I/AAAAAAAABNM/c_pCEr4M6Uc/s320/supertile_01_tiles.jpg" alt="" id="BLOGGER_PHOTO_ID_5708042039906815874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Greedy generate all tiles that are "safe" following the criteria from the last bullet above.  I assume that images around the full panorama are fully safe as well as any images that are more than a half image width in from the border.  Add these to a closed list as other supertiles may be able to regenerate them.&lt;br /&gt;&lt;br /&gt;In the visual the red crosshatched areas represent areas that are considered unsafe because they are too close to an area where the blending could vary across supertiles.    The green boxed in area are all tiles that we can safely generate.  Here are a few actual tiles from that full sized image upper left hand corner:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-gwkPKhJGVnY/TzcKzAPm7oI/AAAAAAAABNY/eOMXD1s0acA/s1600/y000_x000.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 250px; height: 250px;" src="http://4.bp.blogspot.com/-gwkPKhJGVnY/TzcKzAPm7oI/AAAAAAAABNY/eOMXD1s0acA/s320/y000_x000.jpg" alt="" id="BLOGGER_PHOTO_ID_5708042924070465154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-n2so1R3lqj4/TzcKzTU809I/AAAAAAAABNk/fqNoF8mdeIo/s1600/y000_x001.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 250px; height: 250px;" src="http://3.bp.blogspot.com/-n2so1R3lqj4/TzcKzTU809I/AAAAAAAABNk/fqNoF8mdeIo/s320/y000_x001.jpg" alt="" id="BLOGGER_PHOTO_ID_5708042929193145298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-8QxDHYQ5sRk/TzcKzlLvxfI/AAAAAAAABNw/FKQjaJssdDA/s1600/y001_x000.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 250px; height: 250px;" src="http://3.bp.blogspot.com/-8QxDHYQ5sRk/TzcKzlLvxfI/AAAAAAAABNw/FKQjaJssdDA/s320/y001_x000.jpg" alt="" id="BLOGGER_PHOTO_ID_5708042933986379250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-AS_WibKHtgs/TzcKz0RVRVI/AAAAAAAABN8/SErWblh0y_o/s1600/y001_x001.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 250px; height: 250px;" src="http://2.bp.blogspot.com/-AS_WibKHtgs/TzcKz0RVRVI/AAAAAAAABN8/SErWblh0y_o/s320/y001_x001.jpg" alt="" id="BLOGGER_PHOTO_ID_5708042938036340050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Step 5: repeat for other supertiles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Shift the supertile such that you can generate more tiles safely.  This works out to roughly shifting it by the border width + a tile size.  Only generate the tile if its not in the closed list.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The tool can be &lt;a href="https://github.com/JohnDMcMaster/pr0ntools/blob/master/stitch/pr0nts.py"&gt;found here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The first actual chip stitch I generated using this algorithm &lt;a href="http://siliconpr0n.org/map/microchip/pic32mx695f_512h-80ip__mit20x__semipol_lev_noz__unstable/"&gt;can be found here&lt;/a&gt;.  There are a few stitching artifacts but I believe they are more related to bad optimization than the stitching process.  I have been somewhat lazily always choosing the upper left hand image as the reference for position optimization.  In several of my large stitches images get noticeably worse as you move away from this point.  Additionally, there is a bug where I can lose a tile around the right and bottom.  Presumably this isn't hard to fix as its probably something I need to just round up instead of down.&lt;br /&gt;&lt;br /&gt;The performance improvement is also pretty good.  I did several GP sized images and the stitch completes in about 3 hours.  I haven't played with panotool's GPU mode to see if that results in any improvement.  For reference my system has a 3 GHz Woodcrest dual core CPU (although I'm currently only using one) with 12 GB of RAM.  I've been using a 10 GB enblend cache.  On that note, I believe this algorithm could also be parallelized to one job per supertile without too much effort.&lt;br /&gt;&lt;br /&gt;To be fair as part of this processed I also played around with caching options and such as I learned more about how the remapping and blending phase works.  Things on the TODO list for next steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fix the clipping bug&lt;/li&gt;&lt;li&gt;Start using a lens model&lt;/li&gt;&lt;li&gt;Try optimizing from a center anchor instead of a corner&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Look into ways to improve the accuracy of the optimize step (ex: statistical deviations)&lt;/li&gt;&lt;li&gt;See what I'm losing by using jpg's over tif's / png's  &lt;/li&gt;&lt;/ul&gt;Finally, my wiki Silicon Pr0n has been down for a while.  Now that I have a job I decided to rent a VPS and get a domain name.  The wiki is now at http://siliconpr0n.org/wiki/  This URL should now be stable regardless if the server blows up since I can always point it somewhere else.  Additionally I have backups in place now.  However, I'm still trying to recover some of the old data and it may have some (gaping) holes until I can get it back.  I tended to post more material to that then this blog though so its a good resource to have back up.&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;For the heck of it I decided to figure out how to package this.  Try it out at http://pypi.python.org/pypi/pr0ntools/1.0&lt;br /&gt;&lt;br /&gt;Also I found that the anchor image for optimization is more important than I realized.  A lot of my stitching artifacts appear to be due to my somewhat lazily choosing the upper left hand corner as the anchor which propagated a lot of errors.  I'd still like to add a lens model though to see how that further improves error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-7201799733420509137?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/7201799733420509137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2012/02/tile-stitch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7201799733420509137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7201799733420509137'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2012/02/tile-stitch.html' title='Tile stitch'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-W2ZNCLV10f4/TzcEfPSP4QI/AAAAAAAABMc/lf1DLHUBBZw/s72-c/hugin_out.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-4203394622539324920</id><published>2011-12-15T21:25:00.000-08:00</published><updated>2011-12-29T15:35:56.321-08:00</updated><title type='text'>CNC microscope mk2</title><content type='html'>This post will show my new imaging setup, what I was trying to accomplish in setting it up, and the design decisions I made to get it working.&lt;br /&gt;&lt;br /&gt;A bit of history first.  This is the first IC capable microscope I got some time on:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-IVuXXQVI2gs/Tur3HmJUUwI/AAAAAAAABEc/N3mOphbglNU/s1600/initial_setup.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 232px;" src="http://3.bp.blogspot.com/-IVuXXQVI2gs/Tur3HmJUUwI/AAAAAAAABEc/N3mOphbglNU/s320/initial_setup.jpg" alt="" id="BLOGGER_PHOTO_ID_5686629189379445506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But it wasn't well suited for computer control and inverted microscopes are difficult to mount IC samples in.  I also got ahold of a biological microscope that could view ICs using a strong halogen light from the side.  It did however have room to mount these:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-6YxB8gjyo0I/Tur3IrkLadI/AAAAAAAABE8/q0I8Cx94Tpg/s1600/stage_almost_there_perspective.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-6YxB8gjyo0I/Tur3IrkLadI/AAAAAAAABE8/q0I8Cx94Tpg/s320/stage_almost_there_perspective.jpg" alt="" id="BLOGGER_PHOTO_ID_5686629208014154194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The concept which you can kinda see here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-WFHWmf-nEys/Tur3HuIodTI/AAAAAAAABEs/x8CHZHV7n5s/s1600/linear_stage_springy_planning.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-WFHWmf-nEys/Tur3HuIodTI/AAAAAAAABEs/x8CHZHV7n5s/s320/linear_stage_springy_planning.jpg" alt="" id="BLOGGER_PHOTO_ID_5686629191524054322" border="0" /&gt;&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;br /&gt;The mechanics were kinda iffy and worked so-so but it did get me thinking.  After I got some money and with a little help I was able to get a Unitron microscope.  Looking back it wasn't a super high quality microscope (very old?) but it got me a lot of experience to figure out what I needed.  When I was about to scrap it I decided to get a little more aggressive with it and try to retrofit it for CNC control.  It turned into this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-7969WNWOe7c/Tur3ITe-a1I/AAAAAAAABE0/7ySzJBbhL7I/s1600/overview.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://4.bp.blogspot.com/-7969WNWOe7c/Tur3ITe-a1I/AAAAAAAABE0/7ySzJBbhL7I/s320/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5686629201549880146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which was finally a working CNC microscope!  Very crude but I guess it turned out pretty well for the money and effort I put into it.&lt;br /&gt;&lt;br /&gt;And here is the new setup:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-6B-6Q05bKIU/Tur068tqhiI/AAAAAAAABEM/a5Rmq5edXnk/s1600/microscope_mk2.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 214px; height: 320px;" src="http://2.bp.blogspot.com/-6B-6Q05bKIU/Tur068tqhiI/AAAAAAAABEM/a5Rmq5edXnk/s320/microscope_mk2.jpg" alt="" id="BLOGGER_PHOTO_ID_5686626773075920418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which cost me about 10X as much as the previous setup but is closer to the sort of thing I wouldn't want to run into in a dark alley or fear that might become sentient.  It is interesting to note that the first run of this used the motor drivers and motors that the original setup failed to really get working.  I only bought the linear stages for the original setup so I suppose the second setup cost about 10X as the original as well.  An interesting progression of what you get for logarithmically increasing cost.  I don't plan on adding a new point to that curve anytime soon ;)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-EvHzz0Ag1w8/TurW9N2PQzI/AAAAAAAABAM/VU44UrTJ888/s1600/angular_scenario.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;p style="margin-bottom: 0in; font-weight: bold;" align="LEFT"&gt;&lt;span style="font-size:180%;"&gt;Objectives&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;I was looking for several things for this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mitutoyo objectives seem to be prized by many, wanted some to try out&lt;/li&gt;&lt;li&gt;DIC seems to give good results&lt;/li&gt;&lt;/ul&gt;Unfortunately both above are also very expensive.  However, with some patience I managed to get both for at least a reasonable deal although neither was still cheap.  I got a set of 5X, 10X, and 20X Mitutoyo objectives included with the microscope.  They do have good optical quality and long working distance and so have been nice working with.&lt;br /&gt;&lt;br /&gt;The DIC was a little trickier.  I realized that the prisms aren't labeled very well and someone not very familiar with them might not know how to list them for maximum buck on eBay.  So I kept an eye out for the two things that they might be attached to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Objectives&lt;/li&gt;&lt;li&gt;Turrets&lt;/li&gt;&lt;/ul&gt;Objectives tend to be expensive and tend to be matched with DIC objectives meaning others find them as well.  However, turrets are more of a long shot.  Finally I got lucky and found this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-qM8VSbkp0zs/TurX9eRJEsI/AAAAAAAABAk/9RjJ14AIFp4/s1600/overview.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 310px; height: 320px;" src="http://3.bp.blogspot.com/-qM8VSbkp0zs/TurX9eRJEsI/AAAAAAAABAk/9RjJ14AIFp4/s320/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5686594930605626050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The whole assembly which I got for slightly more than a single prism sells for.  Best of all they are nice Olympus Neo SPlan prisms as opposed to an older Neo prism.  The set includes 10X, 20X, 50X, and 100X.&lt;br /&gt;&lt;br /&gt;Unfortunately I didn't have any NIC objectives or polarizers.  The real Olympus polarizers would easily cost me $300 for a pair surplus.  However, I'm not sure how special the polarizers are or if you are really just paying for the mounts.  So I bought a pair of polarizers for $8 shipped:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Y3aKJaZf3ZI/TurhVPf5EaI/AAAAAAAABB8/uEcKA3iBOaQ/s1600/pol_top.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 270px;" src="http://2.bp.blogspot.com/-Y3aKJaZf3ZI/TurhVPf5EaI/AAAAAAAABB8/uEcKA3iBOaQ/s320/pol_top.jpg" alt="" id="BLOGGER_PHOTO_ID_5686605234562470306" border="0" /&gt;&lt;/a&gt;Other side:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-gLdsOIsPqGs/TurhUzX8MzI/AAAAAAAABBs/C2NTxkjykF0/s1600/pol_bottom.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/-gLdsOIsPqGs/TurhUzX8MzI/AAAAAAAABBs/C2NTxkjykF0/s320/pol_bottom.jpg" alt="" id="BLOGGER_PHOTO_ID_5686605227012928306" border="0" /&gt;&lt;/a&gt;Basically its 4 pieces:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Polaroid (coated I presume) glass&lt;/li&gt;&lt;li&gt;Aluminum case&lt;/li&gt;&lt;li&gt;Retaining ring (screws in to hold the glass in place), visible in first picture&lt;/li&gt;&lt;li&gt;Lose fitting outer ring, above writing in bottom picture&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Unfortunately its too high as is.  Fortunately I have a small rotary table which allows me to reduce its height as well as mill a cavity for it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-HVH-DR7lf6o/Turbr6E7jjI/AAAAAAAABBQ/5ajVIdSWrwI/s1600/retaining_ring_milling.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 264px; height: 320px;" src="http://3.bp.blogspot.com/-HVH-DR7lf6o/Turbr6E7jjI/AAAAAAAABBQ/5ajVIdSWrwI/s320/retaining_ring_milling.jpg" alt="" id="BLOGGER_PHOTO_ID_5686599026879467058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The section holding the lose fitting outer ring was milled out and it was discarded.  This brings us to the device it will rest in.  I found an old heatsink of the correct height and started shaping it a little closer:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Cv626WW1K5I/Tura5PJF7RI/AAAAAAAABA0/1GhgbzgyCQ0/s1600/start.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 272px; height: 320px;" src="http://2.bp.blogspot.com/-Cv626WW1K5I/Tura5PJF7RI/AAAAAAAABA0/1GhgbzgyCQ0/s320/start.jpg" alt="" id="BLOGGER_PHOTO_ID_5686598156360740114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which was formed into this with the blank slider for comparison:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-LfGt3KQL6Oc/TurcIYu_NOI/AAAAAAAABBc/OyhvH75S37U/s1600/slider_blank.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 270px;" src="http://1.bp.blogspot.com/-LfGt3KQL6Oc/TurcIYu_NOI/AAAAAAAABBc/OyhvH75S37U/s320/slider_blank.jpg" alt="" id="BLOGGER_PHOTO_ID_5686599516145267938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For several reasons I wanted the optic to be removable.  The easiest way to do that tends to be to use a setscrew to hold it in place.  Its a bad idea to put a metal setscrew directly against glass so I decided to use the aluminum case the polarizer came with to buffer the force.  A setscrew holds the original polarizer case in the slider.  The slider has a step in it so that the polarizer case can only be inserted from one side and holds things in place well.  The optic is then inserted and the retaining ring holds it in place.  It looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-CvRzKrUaIio/Tura5CskT9I/AAAAAAAABBA/qSQfcOTDgqA/s1600/done.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 266px;" src="http://1.bp.blogspot.com/-CvRzKrUaIio/Tura5CskT9I/AAAAAAAABBA/qSQfcOTDgqA/s320/done.jpg" alt="" id="BLOGGER_PHOTO_ID_5686598153019871186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which seems to have turned out pretty good.  Fitting in the microscope:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-IwjCW_f45EQ/TurnzXCv__I/AAAAAAAABCI/z85iLZRPvh8/s1600/fixed_inserted.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 315px;" src="http://1.bp.blogspot.com/-IwjCW_f45EQ/TurnzXCv__I/AAAAAAAABCI/z85iLZRPvh8/s320/fixed_inserted.jpg" alt="" id="BLOGGER_PHOTO_ID_5686612349053566962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the matching polarizer is loosely sitting in the illuminator so that I can rotate it around:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-XL8Qpp4ZWtw/TurnzpxDsgI/AAAAAAAABCQ/EALZLCC55cw/s1600/rotating_inserted.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-XL8Qpp4ZWtw/TurnzpxDsgI/AAAAAAAABCQ/EALZLCC55cw/s320/rotating_inserted.jpg" alt="" id="BLOGGER_PHOTO_ID_5686612354079633922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I tried using a 20X Normarksi prism with a standard Neo SPlan 20X objective but it doesn't give you DIC so bit the bullet and bought a NIC rated one.  I didn't get it at a super great price but wanted something to play with.&lt;br /&gt;&lt;br /&gt;I also discovered that I had underestimated using polarized microscopy.  You can get a number of really neat effects on semiconductors by using crossed polarizers.  I think my cheap polarizers give a dark purple-blue color when crossed but I like blue so it turns out okay.  I'm glad to have a reasonably high power lamp as this takes considerably more light than standard brightfield microscopy.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;XY / linear stages hardware&lt;/span&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://1.bp.blogspot.com/-kYR58lmhpA8/Turrn9aJIWI/AAAAAAAABDA/KHqTWiwoLqE/s1600/stage.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-kYR58lmhpA8/Turrn9aJIWI/AAAAAAAABDA/KHqTWiwoLqE/s320/stage.jpg" alt="" id="BLOGGER_PHOTO_ID_5686616551240311138" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-size:100%;"&gt;The core of the robotics section are two &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Micro-Controle / &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Klinger / Newport high precision stages.  They were listed as being from a high precision milling machine or something.  This could be the case as while most stages are direct drive motor to shaft these have a planetary gearbox:&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://4.bp.blogspot.com/-RAvNPIchjFg/Turx8P37RxI/AAAAAAAABDw/ZRg_brnjpNk/s1600/planetary_gearbox_close.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 290px;" src="http://4.bp.blogspot.com/-RAvNPIchjFg/Turx8P37RxI/AAAAAAAABDw/ZRg_brnjpNk/s320/planetary_gearbox_close.jpg" alt="" id="BLOGGER_PHOTO_ID_5686623496864220946" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-size:100%;"&gt;This increase their torque (which I really don't need) but it also makes it easier to move smaller distances.  I'm not sure what the actual precision of the stage is but the aggregate step size I get out of the system is about 110 nm.  So far this has been far above anything i've needed but it may become more convenient as I move to 100X imaging.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;For whatever reason they use variable reluctance motors which I'm unfortunately not as familiar with as stepper motors.  I tried making a simple stepper like driver for it but it couldn't hold up under any reasonable load.  I read some papers and ultimately decided it was going to be less work for me to adapt some stepper motors on it.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;The two drive motors are two slightly mismatched NMB brand NEMA 17 motors.  I selected NMB motors since I was hoping that they would use the same connectors as my NEMA 23 Sherline motors but no dice.  Even so it has been really nice that the motors have plugs that allow me to quickly disconnect the wires.   They are mounted to the stages via some cheap flexible shaft couplers.  I had to make some shims to get the 1/8" (0.125") Klinger motor shafts to fit into the ~0.2 NEMA 17  shaft couplers.  Note that I didn't remove the motor as it contained the sun gear but rather replaced the opto-encoder disc at the end:&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://3.bp.blogspot.com/-2hY0AWSC9Nc/Turyro5U_vI/AAAAAAAABD8/8EaGtOhqNr4/s1600/opto_disc.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 285px;" src="http://3.bp.blogspot.com/-2hY0AWSC9Nc/Turyro5U_vI/AAAAAAAABD8/8EaGtOhqNr4/s320/opto_disc.jpg" alt="" id="BLOGGER_PHOTO_ID_5686624311034838770" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I machined them out of some old steel standoffs by carefully turning them on a rotary table and using a 1/16" endmill to mill out the center.  To be honest I was quite surprised I didn't break the endmill.  The adapters would have worked really well except that they deform when clamped and so it wasn't a good idea to try to move them around.  Things still work okay but I might want to try to make some fresh shims or order some brass rod for a more proper solution.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in; font-weight: bold;" align="LEFT"&gt;&lt;span style="font-size:180%;"&gt;Robotics electronics&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;All three motors are driven by Precision Motion Controls stepper drivers.  These are fed by a "USBIO" PIC based microcontroller board.  Basically I hammer on some GPIOs through USB.  On my Linux machine I was able to get some MHz but the Windows machine this runs on seems to be limited to about 500 kHz.  I'm pretty sure the motors can move a lot faster than this but it would take more care in software to try to get velocity and acceleration matched well enough so that things don't slip.  Since Windows XP isn't exactly an RTOS I'd be surprised if that could be made super reliable but possibly well enough for what I need.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Unfortunately while the USBIO board is powered off of a 5V USB line it uses 3.3V logic.  Logical 1 is defined as &amp;gt; 3.5V on my motor units which was causing unstable control.  To solve this I added a simple buffer chip powered off of the USBIO board's VCC breakout:&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://4.bp.blogspot.com/-ePU5sUCsfH8/Turv5b6GlOI/AAAAAAAABDg/5pHkB5-z0XU/s1600/usbio_control.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 209px; height: 320px;" src="http://4.bp.blogspot.com/-ePU5sUCsfH8/Turv5b6GlOI/AAAAAAAABDg/5pHkB5-z0XU/s320/usbio_control.jpg" alt="" id="BLOGGER_PHOTO_ID_5686621249531712738" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;The buffer chip (a CD4069 or something, I forget which exactly) doesn't actually give near 5V out but its good enough for what I need.  I couldn't find any industrial style (ie with screw terminal) voltage level converters but I assume they must exist.  Its not a terribly complicated circuit board, maybe I'll make some to clean this up a little.  I have some perf board laying around which would also probably do the job.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Control software&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-size:100%;"&gt;The &lt;/span&gt;software is descended from the original control software.  However, its very different in that it performs control in realtime instead of generating g-code.  Its at roughly the same location as the original software, I'll probably merge it into the original's location one dir up but until then you can &lt;a href="https://github.com/JohnDMcMaster/pr0ntools/tree/master/cnc_microscope/mk2"&gt;find it here&lt;/a&gt;..&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I tried a few different imaging libraries and eventually settled on the Python Imaging Library (PIL).  Although I had used PIL before for image processing I didn't realize it could do image capture as well.  It has mostly worked well but I have gotten truncated images on a few imaging run.  I think it may have losely had to do with AmScope software fighting with my software and so I added a check to refuse to start a job if the AmScope software is running.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;The USB device has a serial driver so no real magic there.  I did write a wrapper class but I already had that from previous projects.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;After a little thought I decided I wanted a GUI to make moving around more freestyle instead of entering coordinates at the command line.  Most of my GUI experience is using Qt so PyQt seemed like a good choice.  Its a "programmers GUI" in the respect that its a jumble of UI components without much thought to ergonomic / careful placement.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Camera&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The old setup used a point and shoot with mixed results.  It was nice that it could auto-focus but it was bad that it would sometimes focus poorly and that I couldn't decided what I wanted to focus on.  So I decided to look around for a real microscope camera and found a AmScope MD1800 (8.1 MP USB) at a halfway decent price.&lt;br /&gt;&lt;br /&gt;Originally I was using the camera through the eyepiece but this had several issues:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tended to move around&lt;/li&gt;&lt;li&gt;Couldn't look through very easily&lt;/li&gt;&lt;/ul&gt;So I acquired a trinocular head which is where it rests today:&lt;br /&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://3.bp.blogspot.com/-qt6iiecTeYM/TurpEsOA2jI/AAAAAAAABCk/ViPOPE5el5A/s1600/camera.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 136px; height: 320px;" src="http://3.bp.blogspot.com/-qt6iiecTeYM/TurpEsOA2jI/AAAAAAAABCk/ViPOPE5el5A/s320/camera.jpg" alt="" id="BLOGGER_PHOTO_ID_5686613746307357234" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;The trinocular head doesn't seem to fix it in place or seal it super well so I made a few crude enhancements.  Maybe there is a better adapter I should be using?  First, I put a rubber o-ring around the base to stop dust from getting in.  Second, I put some rubber strips between the camera and the base and then zip-tied them on.  This crudely fixes the camera in place while still providing some stress relief for things moving around.&lt;br /&gt;&lt;br /&gt;I  attempted to reverse engineer the camera driver to get it working on   Linux and kind of got it working except that I haven't figured out how   to sync frames.  I'll see if I can post some of the data dumps here in case someone has an idea as I'd love to ditch Windows.&lt;br /&gt;&lt;br /&gt;     &lt;style type="text/css"&gt;p { margin-bottom: 0.08in; }&lt;/style&gt;&lt;p style="margin-bottom: 0in; font-weight: bold;" align="LEFT"&gt;&lt;span style="font-size:180%;"&gt;Focusing&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;On  the old microscope the sample rested on a kinematic mirror mount (not shown) which  allowed basic sample adjustment:&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://1.bp.blogspot.com/-HLwxS-kNf-A/Tur3IiOqkkI/AAAAAAAABFM/ZwdXJy_6OUg/s1600/z_axis.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 282px; height: 320px;" src="http://1.bp.blogspot.com/-HLwxS-kNf-A/Tur3IiOqkkI/AAAAAAAABFM/ZwdXJy_6OUg/s320/z_axis.jpg" alt="" id="BLOGGER_PHOTO_ID_5686629205508002370" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;However, this was on a boom so it was  difficult to adjust without shaking things around.  However, I was able  to compensate a little as the main reason that it was mounted that way  was so that I had focus control from a precision Z stage.  This allowed  to compensate a little but didn't solve the fundamental problem.  Also, the Z  axis was kinda shaky and held in place by a rubber band to keep backlash down (the spectrometer it was scrapped from had the mirror weight holding it down).  So  for the second revision I tried to improve both of these focusing  elements which I'll describe separately. &lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Active focusing&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; (z axis)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I focused (haha) on this first since its what I used on the old setup.  Z axis control is via a NEMA 23 motor with a timing belt coupled to the fine focus knob:&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://3.bp.blogspot.com/-qZXM5r27zRk/TurrntGsY_I/AAAAAAAABC0/xEGOw_xprfo/s1600/z_mechanics.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-qZXM5r27zRk/TurrntGsY_I/AAAAAAAABC0/xEGOw_xprfo/s320/z_mechanics.jpg" alt="" id="BLOGGER_PHOTO_ID_5686616546863768562" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;After taking the focus knob cover's off I noticed some threaded rod was sticking out:&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://2.bp.blogspot.com/-i772jPXG7M4/Turs-7Emn4I/AAAAAAAABDQ/f_MLSzuvhqs/s1600/focus_cover_removed.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 270px;" src="http://2.bp.blogspot.com/-i772jPXG7M4/Turs-7Emn4I/AAAAAAAABDQ/f_MLSzuvhqs/s320/focus_cover_removed.jpg" alt="" id="BLOGGER_PHOTO_ID_5686618045261717378" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Its  probably M6 but I don't really know for sure.  I had a timing pulley on  a 1/4-20 bearing.  This sounds like a really bad idea at first since  the thread doesn't match and it would just slip around anyway.  However,  neither of these is hard to get around.  1/4-20 is very similar but not  similar enough to mount directly on.  Fortunately I had an M6 standoff  that fits well on the microscope and that the 1/4-20 screws into pretty  well too.  Finally, I put a serrated washer between the pulley and the  spacer to fix it in place.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Most  of my pulleys are designed to fit NEMA 23 / 0.25" shafts which was part  of the reason why I wanted to use a NEMA 23 motor.  So, mounting that  drive pulley was easy.  I'm trying to avoid mounting the motor on the  microscope in hopes of trying to reduce vibrations and so its currently  mounted to the adjacent optics table via 1" 80/20 t-slot aluminum.  I  have to re-adjust it every time I move the course Z axis but its not  difficult to adjust.  I've considered several alternatives (attach with  damping to microscope, rail mounted, etc) but haven't settled on  something more permanent yet, in part because I'm not using this much as described next.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Finally, this has considerably more vibration than the XY motors which makes me less enthusiastic to use it.  I'm not sure if its because the micro-stepping isn't adjusted properly on the NEMA 23 or just that it tends to move around more than the smaller NEMA 17 XY motors.  I slowed it down a lot more than the XY motors so that its at a reasonable level but I'm pretty sure the mechanics could be improved.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Sample leveling&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I  also wanted to improve  the basic angular control.  It would have been  nice to have this under  computer control but, since its a one time (per  sample or sometimes per  multiple sample run) setup thing, its not a high  priority.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Theory&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;This is how our system might look to an observer:&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://4.bp.blogspot.com/-EvHzz0Ag1w8/TurW9N2PQzI/AAAAAAAABAM/VU44UrTJ888/s1600/angular_scenario.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 199px;" src="http://4.bp.blogspot.com/-EvHzz0Ag1w8/TurW9N2PQzI/AAAAAAAABAM/VU44UrTJ888/s400/angular_scenario.png" alt="" id="BLOGGER_PHOTO_ID_5686593826686190386" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;The   line at the bottom represents the focal plan para-axial with the   objective.  The pivot is the bearing on which the kinematic mirror mount   mirror holder rests.  Turning the screw at the end raises or lowers  the  end of the plate in a single axis and effectively controls a single   angle.  We are only interested in the top of the sample and not the   mirror holder that the sample rests on.  I assume the sample is flat   such that its surface forms a focal plane.  The second line represents   some adjustment of the axis screw to form a second focal plane.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Note   that this model assumes that the XY plane is still parallel to the   imaging plane.  This is a non-trivial assumption since this difference   is likely to be signifigant and result in requiring active Z focusing to   get a good image.  However, for my purposes the most important thing   was to level out samples like packaged chips that may need significant   adjustment.  My stages are reasonably precise but I have yet to   determine if I need to try to level them out better.  The easiest way to   do that is probably to insert shims or play around with how tight I  set  it in.  The bottom stage only has 1 out of 4 screws installed and  is  probably the largest source of imperfections.  I have been  considering  either drilling out the original plate or creating a new  one so that it  can be secured more regularly.&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;In   this system angles are relatively small, hopefully no more than a few   degrees.  This allows us to make a small angle approximation so that   sin(x) ~= x to simplify the math.  This gives a triangle:&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;a href="http://2.bp.blogspot.com/-nf8nKljfsh0/TurXIHlRd_I/AAAAAAAABAY/K50bis9xXkA/s1600/angular_math.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 137px;" src="http://2.bp.blogspot.com/-nf8nKljfsh0/TurXIHlRd_I/AAAAAAAABAY/K50bis9xXkA/s400/angular_math.png" alt="" id="BLOGGER_PHOTO_ID_5686594013982980082" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="CENTER"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;The following ar proportional:&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;a / a' : (t + t')  / t' : (z + z') / z'&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;a / a' = (z + z') / z'&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;We know a, a', and z and want to find z'&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;z' a / a' = z + z'&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;z'( a / a' - 1) = z&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;z' = z / ( a / a' - 1)&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Taking   a few simple cases to get a warm fuzzy feeling this is correct.  The   two simple cases are that the first angle was correct and that the   second angle was correct.   &lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;If the first angle was correct:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;a = 0&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;z' = z / (0 / a'  - 1) = z / (0 - 1) = -z&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;That is we have to go back to where we were originally&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;If the second angle was correct:&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;a' = 0&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;z' = z / ( a / 0 - 1) = z / (inf - 1) = z / inf = 0&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;That is we stay where we are.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Practice&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p style="margin-bottom: 0in;" align="LEFT"&gt;In practice this above turns out to be too cumbersome to do by hand.  If I had computer controlled tilt capabilities (such as with a &lt;a href="http://search.newport.com/?x2=sku&amp;amp;q2=8071"&gt;Newport / New Focus 8071&lt;/a&gt;) these formulas might be more directly useful.  I tried to apply them and the time to whip out a calculator and try to turn the knobs "just right" doesn't work well enough.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;However, you can observe that if you iteratively do the following:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Focus on a point close to the pivot, ideally the edge of the chip is on it&lt;/li&gt;&lt;li&gt;Move to a distant point on a single axis, ideally the other edge of the chip&lt;/li&gt;&lt;li&gt;Adjust the screw until in focus&lt;/li&gt;&lt;li&gt;Move back to original location.  If its still sufficiently focused you are done with this axis&lt;/li&gt;&lt;li&gt;Repeat for the other axis&lt;/li&gt;&lt;/ul&gt;I'm thinking of marking some guidelines on the stage to make placing chips at the pivot point easier as this is theoretically just a single pass when that's the case.    If they are not at the origin it will take more passes but typically not more than 4.  For a large chip such as some GPUs I've been imaging my stages are slow enough that it can take 2 minutes to reach the other side.  So, for these chips its taking about 20 minutes to level.  Its not so bad though since the manual interaction doesn't take very long.&lt;br /&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Ultimately this seems sufficient without any active Z control.  On this setup the stages seem para-axial enough to the focal plane that I don't require any active focusing control.  Since using an active Z axis still doesn't eliminate uneven focusing across an image this method is generally preferable.  Currently the main advantage of the active Z control, although I'm not using it much anymore, is that it reduces setup time since it only requires collecting three or four points in a fairly small timeframe.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Next steps&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;span style="font-size:100%;"&gt;I fed some images into the stitching software I was using before and they come out a lot better because of the closer to planar setup.  I played briefly with constructing a more proper lens model and it would be a good idea to give that another go.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I'd like to share the chip images but I'm realizing they more or less take up obscene amounts of bandwidth and storage.  I briefly played around with a Google maps style display but didn't pursue it very heavily as it may at least cut down bandwidth and relieve the burden of needing to open huge image files.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I played around with some focus stacking but wasn't terribly impressed.  I need to see if I can find some more fine tuned options in panotools or look into alternative software.  This is a real problem at higher resolutions (ex: 50X) on large chips where there may be many layers.  If I only store the final focus stacked images I don't lose much disk space or imaging time and the pictures in theory can look a lot better.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Somewhat unrelated and on my TODO list is to finish digitizing the MOS 6522.  I put a lot of work into getting a better imaging platform and I'm now getting pretty satisfied that I do.  I want to focus future work on acquiring data and automating analysis.  My first goal is to try to find techniques for automatically extracting the metal layer.  Among image processing techniques I'm thinking of trying to use IR light since everything else should be pretty transparent to it.  However, there are a large number of minor difficulties to get this to work so I may try visible techniques first.  One thing in particular is that metal tends to saturate the video sensor without any polarization which I could probably use to my advantage.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;I'd like to be able to rotate samples easier and install my larger and flat kinematic stage.  The easiest way for me to do that is to remove the bottom illumination lamp housing / stand and replace it with my Newport rotary stage and a riser plate.  I'm looking to see if I can get a precision lab jack like a Newport 281 but they look like they cost more than I want to spend.  However, I've already had some commercial interest in some people wanting to use this system for wafer failure analysis imaging and so it might be worth the investment as it would allow me to image wafers a lot easier.&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;Finally, I'd like to improve the motor mounts so they are wiggle free.  This shouldn't be too hard as I either just need to spend some time on a lathe (I don't have one but I have a Tech Shop membership) or to order some telescoping brass tubing and fit as needed.  While this doesn't seem to effect imaging too much I'm sure its not ideal on the motors and probably causes friction that could effect repeatability, especially if I want to raise speeds.&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;" align="LEFT"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-4203394622539324920?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/4203394622539324920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/12/cnc-microscope-mk2.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/4203394622539324920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/4203394622539324920'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/12/cnc-microscope-mk2.html' title='CNC microscope mk2'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-IVuXXQVI2gs/Tur3HmJUUwI/AAAAAAAABEc/N3mOphbglNU/s72-c/initial_setup.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-6652367523023117919</id><published>2011-09-22T23:10:00.000-07:00</published><updated>2011-09-22T23:44:24.017-07:00</updated><title type='text'>Why basic logic chips are bad for beginners</title><content type='html'>For a while I was making a big push to try to decode a basic logic chip such as a CD4001 or a 7402/74HC02 sort of thing.  The justification was that they would be very simple to analyze because:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Feature size is large&lt;/li&gt;&lt;li&gt;Simple logic function&lt;/li&gt;&lt;li&gt;Many examples of the same chip to compare&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Inexpensive&lt;/li&gt;&lt;li&gt;Non-CMP: can help to see layers&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;However, I've come to the conclusion they are actually rather difficult to analyze over larger chips for the following reasons.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Highly irregular transistor size&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On modern chips transistors have to be cookie cutter sized in certain processes not to mention they are often used in standard cells.  Even a more custom chip like the Intel 4004 has somewhat irregular transistors but they still tend to be pretty limited in size.&lt;br /&gt;&lt;br /&gt;Basic logic chips have irregular transistors for several reasons.  First, due to low transistor count, every transistor gets loads of attention.  They will be molded and shaped almost like an analog chip instead of a digital chip&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Less data to work with&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Having fewer logic functions that you need to figure out also means that you have fewer to use as examples.  I did mitigate this a bit by decapsulating several since decapsulation time / photography time isn't too bad for SMD versions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use of less common technology&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This isn't necessarily bad in itself as it gives you more breadth, but it can still get in the way.  For example, CD4000 uses metal gate which are interesting for historical reasons but not used on typical modern chips.  7400s are similar since most modern digital chips don't use bipolar logic.&lt;br /&gt;&lt;br /&gt;To hammer on this point a bit more, lets move on to...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use of power transistors&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; This one is really the killer since it makes the chips really different.   Even microcontrollers will beef up output transistors, but nothing like you'll see on these chips. Heres something more or less like a textbook MOSFET:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-R1idVRM2egQ/TnwlWEoTHhI/AAAAAAAAA3Q/e0M3Urm0-Fw/s1600/fairchild_cd4011.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 201px;" src="http://2.bp.blogspot.com/-R1idVRM2egQ/TnwlWEoTHhI/AAAAAAAAA3Q/e0M3Urm0-Fw/s320/fairchild_cd4011.jpg" alt="" id="BLOGGER_PHOTO_ID_5655436293200616978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Metal gate which isn't quite so common, but you have a clearly visible source gate and drain.  This is what I was hoping to see and to be fair I did find two chips like this (above is from a Fairchild CD4011).  Heres an example of a transistor for a Texas Instruments CD4001:&lt;br /&gt;&lt;br /&gt;Top metal:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-muARuG7bRz8/Tnwk7LZCNpI/AAAAAAAAA3A/wti5gRiF250/s1600/vertical_mosfet_metal.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 258px; height: 320px;" src="http://1.bp.blogspot.com/-muARuG7bRz8/Tnwk7LZCNpI/AAAAAAAAA3A/wti5gRiF250/s320/vertical_mosfet_metal.jpg" alt="" id="BLOGGER_PHOTO_ID_5655435831159174802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And delayered with HF (same chip, not the same die):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-9tXJzJ_UULQ/Tnwk-wXoAuI/AAAAAAAAA3I/9VUJSbZIGrY/s1600/vertical_mosfet_delayered.jpeg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 257px; height: 320px;" src="http://2.bp.blogspot.com/-9tXJzJ_UULQ/Tnwk-wXoAuI/AAAAAAAAA3I/9VUJSbZIGrY/s320/vertical_mosfet_delayered.jpeg" alt="" id="BLOGGER_PHOTO_ID_5655435892624982754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I saw some structures like this and thought they might be diodes since I figured they were forming a PN junction.  However, if you &lt;a href="http://en.wikipedia.org/wiki/Power_MOSFET#Basic_structure"&gt;read this&lt;/a&gt; you'll see that these are probably actually power MOSFETs and in particular Vertical Diffused MOS (VDMOS / Double Diffused MOS (DMOS)).&lt;br /&gt;&lt;br /&gt;Its also worth pointing out the first image was taken on a Unitron N + Aus Jena (Zeiss) objectives with 3.2 MP point and shoot while the latter was taken on a Mitutoyo microscope + Mitutoyo Plan Apo objectives with an 8.1 MP AmScope eyepiece camera in case you are wondering why the latter looks so much better.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So what would the best chip to learn on be?  The Intel 4004 is a really great example since it has so much documentation and Flylogic has provided very nice images.  On the downside its not something you'd want to do yourself since a 4004 might cost you $150 or more.  There are plenty of similar less expensive chips of that scale though that should have similar value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-6652367523023117919?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/6652367523023117919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/09/why-basic-logic-chips-are-bad-for.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/6652367523023117919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/6652367523023117919'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/09/why-basic-logic-chips-are-bad-for.html' title='Why basic logic chips are bad for beginners'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-R1idVRM2egQ/TnwlWEoTHhI/AAAAAAAAA3Q/e0M3Urm0-Fw/s72-c/fairchild_cd4011.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-3339771703162502893</id><published>2011-09-14T12:09:00.000-07:00</published><updated>2011-09-17T15:52:56.232-07:00</updated><title type='text'>Understanding the Intel 4004</title><content type='html'>I have a new microscope that yields way  better images than anything I  had before, but, unfortunately, I'm having some difficulty getting a  camera hooked up to it nicely.  In the meantime since I still have  images from other sources I thought I'd take some time to go through  some parts of the Intel 4004.  Flylogic has a &lt;a href="http://www.flylogic.net/blog/?p=63"&gt;similar write-up&lt;/a&gt;.  This hopes to got a bit deeper especially showing how you can use tools to scale this up to analyze the/a full chip.&lt;br /&gt;&lt;br /&gt;This article will use data from a variety of sources.  The first is the &lt;a href="http://www.4004.com/"&gt;Intel 4004 35th anniversary page&lt;/a&gt; which I like since it explicitly lists material as &lt;a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"&gt;Creative Commons Attribution-Noncommercial-Share Alike 3.0 License&lt;/a&gt;.  They also have a &lt;a href="http://xenia.media.mit.edu/%7Emcnerney/2009-4004/4004-composite-photo.jpg"&gt;composite image&lt;/a&gt; (this is the author of the 4004 website so I presume its under the CC license?), schematics, and other assorted information.  &lt;a href="http://www.intel.com/about/companyinfo/museum/exhibits/4004/docs.htm"&gt;Datasheet and user manual&lt;/a&gt; can be found on Intel's website.  I got the masks from &lt;a href="https://github.com/pmonta/FPGA-netlist-tools"&gt;FPGA-netlist-tools&lt;/a&gt; and read them in CIF format, specifically &lt;a href="https://github.com/pmonta/FPGA-netlist-tools/blob/master/masks/4004/4004.cif"&gt;this file&lt;/a&gt;.  if you don't want to load this up, you can find &lt;a href="http://xenia.media.mit.edu/%7Emcnerney/2009-4004/4004-masks-composite.jpg"&gt;the original here&lt;/a&gt;.  Finally, I'm also going to use a few small excerpts from the &lt;a href="http://flylogic.net/knohl/i4004/i4004.jpg"&gt;Flylogic top metal image&lt;/a&gt; and the &lt;a href="http://flylogic.net/knohl/i4004/i4004b_200x_lg.jpg"&gt;Flylogic delayered image&lt;/a&gt; which I think should be fine under fair use but will take down if they would rather not have them here.  I thought Intel had some CC or related images (had maybe even contracted the Flylogic) job) but I can't find those now.  If there are no freely available images, if someone wants to donate a 4004 I could release some under a free license of your choice (or three if you have a million: one top metal, one delayered, and one for my collection!).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Intel_4004#History_and_production"&gt;According to Wikipedia&lt;/a&gt;, the 4004 is 10 um pMOS which I was also able to verify on &lt;a href="http://www.intel.com/Assets/PDF/DataSheet/4004_datasheet.pdf"&gt;the datasheet&lt;/a&gt; ("4004 SINGLE CHIP 4-BIT P-CHANNEL MIROPROCESSOR").  This is similar to the NMOS logic I used in my JSSim inverter write-up except with the polarities reversed.  Example PMOS inverter &lt;a href="http://www.scribd.com/doc/52414819/47/PMOS-Logic-Inverter"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However, I started getting a little confused as I started to look through things.  &lt;a href="http://www.4004.com/mcs4-masks-schematics-sim.html"&gt;Lajos describes pull-ups&lt;/a&gt; when I would expect PMOS to have pull-downs.  Looking at various circuits, I also see what appears to be pull-ups.  This confused me since I was thinking something along the lines of VDD = +5V, VSS = 0V with non-TTL compatible I/O (I didn't think through if the body connection is correct polarity, probably best to ignore it):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-hWfQPgSOJSI/TnEg0FWvFkI/AAAAAAAAAxI/2zzgoBNqM_4/s1600/pmos_inverter_conception__200.bmp"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 185px;" src="http://3.bp.blogspot.com/-hWfQPgSOJSI/TnEg0FWvFkI/AAAAAAAAAxI/2zzgoBNqM_4/s320/pmos_inverter_conception__200.bmp" alt="" id="BLOGGER_PHOTO_ID_5652335086489507394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;However, this doesn't really work since people would expect TTL compatible and this doesn't mask what I'm seeing in the mask as noted above.  However, after looking at the user manual I found this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-rk6IKJs-eFY/TnEPiN-U6dI/AAAAAAAAAw8/oKn4gnaF3hk/s1600/mcs-4_ttl_compat.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 223px;" src="http://4.bp.blogspot.com/-rk6IKJs-eFY/TnEPiN-U6dI/AAAAAAAAAw8/oKn4gnaF3hk/s320/mcs-4_ttl_compat.png" alt="" id="BLOGGER_PHOTO_ID_5652316087867730386" border="0" /&gt;&lt;/a&gt;Which shows that VDD = -10V and VSS = +5V which allows it to preserve TTL-compatible I/O.  It was paired with this summary diagram:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-PoOq7UkuALA/TnEu3SygyMI/AAAAAAAAAxo/c8xNyVXA3A0/s1600/mcs-4_ttl_compat_io.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 178px;" src="http://1.bp.blogspot.com/-PoOq7UkuALA/TnEu3SygyMI/AAAAAAAAAxo/c8xNyVXA3A0/s320/mcs-4_ttl_compat_io.png" alt="" id="BLOGGER_PHOTO_ID_5652350534798067906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The input stage shows why they want the +5V VSS: it provides the negative bias to trigger the PMOS input at 0 V while still allowing the pull-up to supply negative power for the input = 1 case.  I was told that if you think of the circuit in terms of VDD, VSS, etc rather than actual voltages it should be more or less identical to NMOS logic.  However, my understanding is that the depletion resistor is wired middle to bottom instead of middle to top so to speak as above.  I don't have a good enough understanding of depletion modes to really know why this is the case.&lt;br /&gt;&lt;br /&gt;That cleared up, lets see an example. I decided to look at the upper left hand corner because it was convenient.  Cross referencing with the schematic a particular signal such as TEST might have been more logical if I was following the schematic rather than focusing on the masks.  Here's the &lt;a href="https://github.com/pmonta/FPGA-netlist-tools/blob/master/masks/4004/i4004-metal.bmp"&gt;metal mask&lt;/a&gt; with VDD and VSS highlighted as well as an upper left hand corner area that I'll look at later in orange:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-Pj28RVV8Ci4/TnE49UsSGhI/AAAAAAAAAyI/1o3_NpL3dtg/s1600/i4004-metal-VDD_GND_pullup.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 291px;" src="http://3.bp.blogspot.com/-Pj28RVV8Ci4/TnE49UsSGhI/AAAAAAAAAyI/1o3_NpL3dtg/s400/i4004-metal-VDD_GND_pullup.jpg" alt="" id="BLOGGER_PHOTO_ID_5652361633504303634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And a &lt;a href="http://4004.com/assets/4004-masks-showing-fets-j3-.jpg"&gt;complete version&lt;/a&gt; also marked, but without VSS/VDD highlight:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-fg77n3raqZM/TnE5qsZYYlI/AAAAAAAAAyQ/i8ozGzNWU-c/s1600/4004-masks-showing-fets-j3-pullup_marked.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 294px;" src="http://2.bp.blogspot.com/-fg77n3raqZM/TnE5qsZYYlI/AAAAAAAAAyQ/i8ozGzNWU-c/s400/4004-masks-showing-fets-j3-pullup_marked.jpg" alt="" id="BLOGGER_PHOTO_ID_5652362412961587794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Lets start with a theoretical closeup.  Here's a dump from my CIF rendering:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-o5V5ePoYv7I/TnE9LPBsxxI/AAAAAAAAAzA/2Y8swMImGq4/s1600/pullup_mask_cif.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 183px; height: 200px;" src="http://4.bp.blogspot.com/-o5V5ePoYv7I/TnE9LPBsxxI/AAAAAAAAAzA/2Y8swMImGq4/s200/pullup_mask_cif.png" alt="" id="BLOGGER_PHOTO_ID_5652366270548199186" border="0" /&gt;&lt;/a&gt;The red (okay so its pink, otherwise I had opacity related rendering issues) is poly, the green is diffusion, the blue is metal (VDD), and the black are contacts.  So we have two contacts tied to VDD and one going elsewhere which forms our pull-up. Note that you might have a self aligned gate for an enhancement MOSFET, but for depletion the entire area is diffused for normally on behaviour.  This is what it actually looks like (Flylogic) in metal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-2NT5e-bh-Ms/TnE7IVHwR1I/AAAAAAAAAys/Mp7Lu87plvc/s1600/pullup_metal_flylogic.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 146px; height: 156px;" src="http://1.bp.blogspot.com/-2NT5e-bh-Ms/TnE7IVHwR1I/AAAAAAAAAys/Mp7Lu87plvc/s400/pullup_metal_flylogic.png" alt="" id="BLOGGER_PHOTO_ID_5652364021621344082" border="0" /&gt;&lt;/a&gt;If the poly had blocked the diffusion we would not have seen the diffusion squiggle inside of the poly area.  If they poly and diffusion masks were reversed, we could still tell that they were layered vs blocked since we can see a change on the squiggle exit rather than a solid line.  And after delayering:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-SXm15cRZa9A/TnE7H9XFqgI/AAAAAAAAAyc/UUubt0TsSgA/s1600/pullup_delayered_flylogic.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 139px; height: 150px;" src="http://4.bp.blogspot.com/-SXm15cRZa9A/TnE7H9XFqgI/AAAAAAAAAyc/UUubt0TsSgA/s400/pullup_delayered_flylogic.png" alt="" id="BLOGGER_PHOTO_ID_5652364015243209218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The poly and diffusion look almost identical.  Fortunately, with whatever microscope technique they used (DIC maybe?) they get some good contrast between the traces and the background.  I can't say for sure why it discolors where they meet, maybe just minor stress due to proximity.&lt;br /&gt;&lt;br /&gt;Okay, but one transistor is the middle of nowhere is kind of hard to follow, so lets take a look at some of the nearby pins and see how it fits in.  The upper left hand corner ties in the CM RAM 0-3 pins increasing clockwise starting with CM RAM 0 and 1 on the left and 2 and 3 on top:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-OEtgnRPB1aY/TnToPxqQncI/AAAAAAAAA0M/N_z7j0V_mXc/s1600/cm_ram_pins.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 251px;" src="http://2.bp.blogspot.com/-OEtgnRPB1aY/TnToPxqQncI/AAAAAAAAA0M/N_z7j0V_mXc/s400/cm_ram_pins.jpg" alt="" id="BLOGGER_PHOTO_ID_5653398789983083970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;These pins essentially provide the chip (bank) selection outputs to the RAM chips (4002).   Since you can operate the system with a single 4002 this is an optional pin.  Nonetheless, its fine for demonstration purposes.  Lets arbitrarily focus on CM-RAM 0.  Detailed picture of its layout:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-jnim1fN6d3s/TnT-0B5F6PI/AAAAAAAAA0s/PMjXfSHKMYo/s1600/cm_ram_0_labeled_orig_focus.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 254px; height: 320px;" src="http://4.bp.blogspot.com/-jnim1fN6d3s/TnT-0B5F6PI/AAAAAAAAA0s/PMjXfSHKMYo/s320/cm_ram_0_labeled_orig_focus.png" alt="" id="BLOGGER_PHOTO_ID_5653423602071365874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first thing I did was label all of the transistors that looked like they were involved in this input stage:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-TaWVp2L1pxQ/TnUjWpoTcjI/AAAAAAAAA20/HfKBnppX5iw/s1600/cm_ram_0_labeled_focus.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 256px; height: 320px;" src="http://1.bp.blogspot.com/-TaWVp2L1pxQ/TnUjWpoTcjI/AAAAAAAAA20/HfKBnppX5iw/s320/cm_ram_0_labeled_focus.png" alt="" id="BLOGGER_PHOTO_ID_5653463779272520242" border="0" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-3Vb0dl78Avc/TnUAU7UriLI/AAAAAAAAA04/6vLWBSZ-SbU/s1600/cm_ram_0_labeled_focus.jpg"&gt;&lt;br /&gt;&lt;/a&gt;There is an identical input stage above that shares a small bit of poly with Q4 (diffusion just visible), but this does not influence us so ignore it.  I then created a schematic with transistors arranged like in the above:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-iGLbjMD4H1g/TnUBcNUqsSI/AAAAAAAAA1U/Nn622Di4-NI/s1600/cmram_0_300_as_layout.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 258px; height: 320px;" src="http://2.bp.blogspot.com/-iGLbjMD4H1g/TnUBcNUqsSI/AAAAAAAAA1U/Nn622Di4-NI/s320/cmram_0_300_as_layout.png" alt="" id="BLOGGER_PHOTO_ID_5653426491357835554" border="0" /&gt;&lt;/a&gt;This is fine for layout capture, but a little ugly to read.  Lets rearrange it to something a little nicer:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-o_libHuBOYU/TnUBk3cjD5I/AAAAAAAAA1c/jsszOLpkDek/s1600/cmram_0_300_rearranged.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 300px; height: 320px;" src="http://2.bp.blogspot.com/-o_libHuBOYU/TnUBk3cjD5I/AAAAAAAAA1c/jsszOLpkDek/s320/cmram_0_300_rearranged.png" alt="" id="BLOGGER_PHOTO_ID_5653426640104132498" border="0" /&gt;&lt;/a&gt;And then simplify by converting transistors to resistors where appropriate:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-h9DSV4bQ8hQ/TnUBovs9MEI/AAAAAAAAA1k/dMrgu_loPGQ/s1600/cmram_0_300_simplified.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 305px; height: 320px;" src="http://3.bp.blogspot.com/-h9DSV4bQ8hQ/TnUBovs9MEI/AAAAAAAAA1k/dMrgu_loPGQ/s320/cmram_0_300_simplified.png" alt="" id="BLOGGER_PHOTO_ID_5653426706744946754" border="0" /&gt;&lt;/a&gt;Cross referencing against Lajo's schematic:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-3vQf4BTujhg/TnUCPZ3regI/AAAAAAAAA1s/ubkLfEZfnGU/s1600/lajos_cm_ram_0_output.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 134px; height: 320px;" src="http://4.bp.blogspot.com/-3vQf4BTujhg/TnUCPZ3regI/AAAAAAAAA1s/ubkLfEZfnGU/s320/lajos_cm_ram_0_output.png" alt="" id="BLOGGER_PHOTO_ID_5653427370899241474" border="0" /&gt;&lt;/a&gt;They are equivalent.  I'm particularly happy with this because this would have taken me a long time before but I got this pretty quickly and without having to fudge anything.&lt;br /&gt;&lt;br /&gt;Okay, but that's only part 1 where we've managed to reverse the mask into the schematic.  For part 2 is we need to see if we could figure this out from just the optical image.  Here's top metal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/--aCd3oae8wI/TnUIC0C-XFI/AAAAAAAAA14/XumrhbPFESI/s1600/i4004b_200x_lg_cmram_0_focus.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 294px; height: 320px;" src="http://1.bp.blogspot.com/--aCd3oae8wI/TnUIC0C-XFI/AAAAAAAAA14/XumrhbPFESI/s320/i4004b_200x_lg_cmram_0_focus.jpg" alt="" id="BLOGGER_PHOTO_ID_5653433751657405522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And delayered:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-G66VlcM-xkw/TnUIGVfx2FI/AAAAAAAAA2A/3mJ2DYOeYQQ/s1600/i4004_cm_ram_0_focus.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 290px; height: 320px;" src="http://2.bp.blogspot.com/-G66VlcM-xkw/TnUIGVfx2FI/AAAAAAAAA2A/3mJ2DYOeYQQ/s320/i4004_cm_ram_0_focus.jpg" alt="" id="BLOGGER_PHOTO_ID_5653433812176197714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Which I've just roughly cut by using a box select + copy/paste from the full size images.  I could of course work with the full size images, but they are large enough that they take up a significant amount of memory.&lt;br /&gt;&lt;br /&gt;Anyway, I then imported them into Gimp by creating a new, slightly oversized canvas (700 X 700), importing them as layers, and setting their opacity each to 50%:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-QjD-_gjnbgk/TnUIttIOm6I/AAAAAAAAA2I/yZT0Fg1IKjk/s1600/gimp_imported_and_opacity.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 235px;" src="http://4.bp.blogspot.com/-QjD-_gjnbgk/TnUIttIOm6I/AAAAAAAAA2I/yZT0Fg1IKjk/s320/gimp_imported_and_opacity.png" alt="" id="BLOGGER_PHOTO_ID_5653434488534768546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You'll notice the two images aren't quite aligned.  This is why I wanted the oversize canvas as it allows me to move them around.  Move them around until they line up.  I should mention that I am by no means a Gimp expert, so don't take anything I do as to be the best was possible.&lt;br /&gt;&lt;br /&gt;Next I created a layer for each mask.  Since its difficult to tell buried contacts from contacts just by looking, I just created a single contacts layer (there there aren't any in our example).  Since metal is very clear and un-ambiguous, I started with that by turning opacity back off and hiding the delayered image.&lt;br /&gt;&lt;br /&gt;Press B to select the path tool.  Click around a metal segment to form a polygon, remembering to click on the start portion to close it.  You should now have a dashed line around your metal segment:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-b_dyZUPLkuQ/TnUMz_SxnsI/AAAAAAAAA2U/NHBmtZ1M1-4/s1600/metal_path_selection.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 231px;" src="http://4.bp.blogspot.com/-b_dyZUPLkuQ/TnUMz_SxnsI/AAAAAAAAA2U/NHBmtZ1M1-4/s320/metal_path_selection.png" alt="" id="BLOGGER_PHOTO_ID_5653438994536570562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Then press shift-V to convert the path into a selection.  Then press shift-B to select the fill tool and select a color (I used blue).  Finally, fill the color in by clicking the mouse on the selection and then de-select your polygon by press ctrl-shift-A:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-t-fNpXb7dB8/TnUM8NAuAUI/AAAAAAAAA2c/Ji-OHU9Tb4Y/s1600/metal_path_complete.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 234px;" src="http://2.bp.blogspot.com/-t-fNpXb7dB8/TnUM8NAuAUI/AAAAAAAAA2c/Ji-OHU9Tb4Y/s320/metal_path_complete.png" alt="" id="BLOGGER_PHOTO_ID_5653439135657886018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Make sure you put it on the metal layer by toggle show/hide for the metal layer.  I believe this is the technique that was used to create the masks for the &lt;a href="http://visual6502.org/JSSim/expert-6800.html"&gt;visual-6800&lt;/a&gt; (plus a tool that converted the masks to JSSim input).  A few tips:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You don't have to de-select the previous path.  Just start working on the next one after fill and previous will automatically de-select when you convert it to a new path&lt;/li&gt;&lt;li&gt;You don't need to close the polygon.  Last and first points will be assumed to be connected&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;One metal is done contacts are good to do next.  As we saw with the original pullup, diffusion and poly can be difficult to tell apart just by looking at them.  However, we know that IC designers have specific goals, so we can use those to figure out which is which.  That said, some ICs are obfuscated, but we'll ignore that for now.  Poly will usually cross diffusion areas.  In particular look for it jutting out to complete a diffusion cut-off.  That said, in the Flylogic 4004 example poly tends to get a lot of brown discolouration while the diffusion does not.&lt;br /&gt;&lt;br /&gt;My first cut looked like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-cFPIJGN7YFo/TnUbrU3b2KI/AAAAAAAAA2o/m7dmhBaIhug/s1600/composite_first.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 301px; height: 320px;" src="http://4.bp.blogspot.com/-cFPIJGN7YFo/TnUbrU3b2KI/AAAAAAAAA2o/m7dmhBaIhug/s320/composite_first.png" alt="" id="BLOGGER_PHOTO_ID_5653455338383071394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A few issues:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Need to figure out how to make level paths in Gimp so that it looks nicer.  Right now it looks more like a kindergarten or abstract art drawing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The bit of diffusion that forms the pullup is not connected.  Cross referencing with the masks, it is suppose to jut out to the side to go to a buried contact / via stack.  However in the image it looks pretty clearly to NOT do that to me as I clearly the the edge of the diffusion.  Maybe I'll get some feedback to clear this up&lt;/li&gt;&lt;li&gt;I also made an error with some poly to the right of this going to a buried contact, but this is visible in the images and a double check would have caught this.  I also cared less since it wasn't part of the circuit I was analysing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;What is the stuff under the pad?  Maybe diffusion, but its not in those masks.  There is a matching passivation mask but that should be on top and this is on the lower layers&lt;/li&gt;&lt;/ul&gt;This is close enough to the original that I think I could have derived the same schematic although maybe with low confidence on the pullup part.  The rest of the chip can be decoded be continuing this exercise.&lt;br /&gt;&lt;br /&gt;Hopefully this served to augment the Flylogic article and not just repeat it.  In any case it helped me to make sure I really understood it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-3339771703162502893?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/3339771703162502893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/09/understanding-intel-4004.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3339771703162502893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3339771703162502893'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/09/understanding-intel-4004.html' title='Understanding the Intel 4004'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hWfQPgSOJSI/TnEg0FWvFkI/AAAAAAAAAxI/2zzgoBNqM_4/s72-c/pmos_inverter_conception__200.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-3304728924551383412</id><published>2011-08-08T23:40:00.000-07:00</published><updated>2011-08-15T23:21:03.407-07:00</updated><title type='text'>Probing sneak peak</title><content type='html'>I was going to hold off on this since its a bit premature, but since Hyna wanted some details on what I was hoping to do for a probing station here is some quick info.&lt;br /&gt;&lt;br /&gt;Since this is still just a part time hobby for me, I didn't want to spend too much on a probe station and waited patiently (course of a year or two of saved eBay searches...).  I picked up several micropositioners for pretty good deal but had a much harder time finding a halfway decent probe station inexpensively.  My goal was:&lt;br /&gt;-Under $500, especially if it didn't have a microscope&lt;br /&gt;-Have XY axis&lt;br /&gt;-Have a solid platform for mounting probes&lt;br /&gt;-Either have a microscope or not be too much trouble to add one&lt;br /&gt;&lt;br /&gt;With that in mind, I eventually found this&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-U8OgLo2j1os/TkDeYMel83I/AAAAAAAAAnM/BKnKCye54aA/s1600/overview.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 260px;" src="http://4.bp.blogspot.com/-U8OgLo2j1os/TkDeYMel83I/AAAAAAAAAnM/BKnKCye54aA/s320/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5638751240715629426" border="0" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-So219ERz0xU/TkDcph1xkvI/AAAAAAAAAm4/B-WQ6tF_xHg/s1600/overview.jpg"&gt;&lt;br /&gt;&lt;/a&gt;Which was decently within budget and even had a Nikon microscope of sorts.  The base is pretty solid which was the main thing I was after.  The plugs (not visible) happily fit my micropositioners.&lt;br /&gt;&lt;br /&gt;Unfortunately, the microscope is not in the best condition and not made with high quality components.  However, there is a lot of mounting support and so I kept my eyes peeled on eBay for something I could replace it with.  I was looking for something like a Nikon Optiphot since I knew a few people use that with good results.  Eventually I found this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-So219ERz0xU/TkDcph1xkvI/AAAAAAAAAm4/B-WQ6tF_xHg/s1600/overview.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 158px;" src="http://2.bp.blogspot.com/-So219ERz0xU/TkDcph1xkvI/AAAAAAAAAm4/B-WQ6tF_xHg/s320/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5638749339484525298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-z-yjWsdpUUY/TkDcpmNWfNI/AAAAAAAAAnA/oKgEtMIYXHE/s1600/objectives.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 142px;" src="http://3.bp.blogspot.com/-z-yjWsdpUUY/TkDcpmNWfNI/AAAAAAAAAnA/oKgEtMIYXHE/s320/objectives.jpg" alt="" id="BLOGGER_PHOTO_ID_5638749340657155282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;the core of an Olympus BHMJ which seemed like a good match since you can mount it with a boom stand like on mine.  It seems well cared for and in good condition.  Before purchasing I did some measurements on my station and cross referenced some Olympus documents and was under the impression that the post was even the same diameter.  Unfortunately, this turns out not to be the case, but I have access to lathes and so can make a new post without too trouble if I allocate some time for that.  This is more of an industrial class microscope that I can buy numerous accessories and high quality optics for as I want to upgrade.  I need to take a picture for comparison, but these are 25 mm compared to the standard ~20 mm thread RMS objectives most microscopes use.&lt;br /&gt;&lt;br /&gt;You may have also noticed that the microscope didn't include an illuminator.  However, I have one in the mail and should soon be able to do a test drive.  The Nikon parts are not compatible, but the Nikon lamp setup was pretty bad anyway.&lt;br /&gt;&lt;br /&gt;I also might want to switch out the stages for something more accurate. I use to play with lasers and so have a pile of optical quality micropositioners.  On that note, you may have noticed the odd orange cord wrapped around the microscope.  For some reason the camera port is loaded with a colminator with an FC fiber port + fiber.  The exposed end of the fiber is in poor shape, but fiber is relatively inexpensive if I want another.  I am not entirely sure what purpose it served though.  I asked someone in the photonics business and he mentioned he'd used similar equipment for testing at his facility.  I have some YAG lasers...maybe could be retrofitted for microsurgery?&lt;br /&gt;&lt;br /&gt;I may look into getting a trinocular head to mount a camera.  In the short term though I can put my camera in the eyepiece.&lt;br /&gt;&lt;br /&gt;I also decapsulated a chip with some RFNA the other day with good results.  For a sneak peak see https://picasaweb.google.com/JohnDMcMaster/First_rfna_decap?authuser=0&amp;amp;feat=directlink but otherwise I'll wait until I can try a second chip and do a more careful job (although the first chip did work, shown below "blinking" although all you can see is a solid on LED)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-poSOcBbj2dA/TkDhMgaHFdI/AAAAAAAAAnY/ypo4aAMPiKc/s1600/initial_eposure_launchpad.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 290px; height: 320px;" src="http://4.bp.blogspot.com/-poSOcBbj2dA/TkDhMgaHFdI/AAAAAAAAAnY/ypo4aAMPiKc/s320/initial_eposure_launchpad.jpg" alt="" id="BLOGGER_PHOTO_ID_5638754338441991634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Edit: some more sneak peak &lt;a href="https://picasaweb.google.com/JohnDMcMaster/Ic_live_analysis_08142011?authuser=0&amp;amp;feat=directlink"&gt;https://picasaweb.google.com/JohnDMcMaster/Ic_live_analysis_08142011?authuser=0&amp;amp;feat=directlink&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-3304728924551383412?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/3304728924551383412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/08/probing-sneak-peak.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3304728924551383412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3304728924551383412'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/08/probing-sneak-peak.html' title='Probing sneak peak'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-U8OgLo2j1os/TkDeYMel83I/AAAAAAAAAnM/BKnKCye54aA/s72-c/overview.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-2410472678315953630</id><published>2011-07-10T16:45:00.001-07:00</published><updated>2011-07-10T21:54:52.985-07:00</updated><title type='text'>A less simple experiment with JSSim</title><content type='html'>In short:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/JohnDMcMaster/pr0ntools/tree/master/jssim"&gt;Code here&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://johndmcmaster.github.com/visual6502/tutorial-inverter-uvjssim.html"&gt;Demo here&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;This post builds on a previous post where I described how to manually build a NMOS clock driven inverter in JSSim.  It gave this (&lt;a href="http://johndmcmaster.github.com/visual6502/tutorial-inverter.html"&gt;see it live&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-dVxOp7RYFEI/ThpyKNT9hnI/AAAAAAAAAf8/F8M0Oj4Qzp0/s1600/input_low_fixed.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 248px;" src="http://2.bp.blogspot.com/-dVxOp7RYFEI/ThpyKNT9hnI/AAAAAAAAAf8/F8M0Oj4Qzp0/s320/input_low_fixed.png" alt="" id="BLOGGER_PHOTO_ID_5627936204050499186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I concluded by saying I was going to look into automating it and here's the first cut.  I tried poking around for tools to automatically convert image files to JSSim files.  They seem to either be not fully automated, don't exist, or are squirrelled away somewhere where I can't get to them.&lt;br /&gt;&lt;br /&gt;The squireling possibility comes from that I would find it hard to believe that someone actually typed up all of the content in the *.js files.  They are difficult to read as is (polygons are position dependent x/y coordinates in a long array) and it seems it would be error prone and tedious to generate that much data from the image files.  That said, it did take them a large number of hours to complete the 6502 and it may not have been worth it.&lt;br /&gt;&lt;br /&gt;Quietust wrote a toolchain more recently &lt;a href="http://www.qmtpro.com/%7Enes/chipimages/#tools"&gt;that you can find at here&lt;/a&gt; (&lt;a href="https://github.com/JohnDMcMaster/pr0ntools/tree/master/quietust"&gt;my sandbox copy on Github&lt;/a&gt;).  Since it only appeared recently it could not have been used to generate the 6502 meaning there is still a missing link even if there is an alternate route.  I messed with it briefly and could not get it to parse my input SVG files.  I've since learned more about SVG and probably will have a better idea of why it couldn't parse them (SVG is a huge specification, can specify a rectangle as a rectangle, polygon, patch ,etc), .&lt;br /&gt;&lt;br /&gt;Finally, the first point that they are not fully automated comes from the fact that &lt;a href="https://github.com/pmonta/FPGA-netlist-tools"&gt;FPGA-netlist-tools&lt;/a&gt;.  This toolchain is centered around producing synthesizable HDL from a variety of sources (images, JSSim).  It has some good tools that pull in a lot of support from Magic VLSI, KLayout, Icarus Verilog, potrace, ImageMagick, gdspy, scipy/ndimage, and more.   For example, I was impressed with how little code masks_to_netlists.py  (136 lines including comments) used to create netlists from chip images.  I was told that it may be possible to convert the output into JSSim files but haven't thoroughly explored it yet.  It might not be too much work but I do need to learn more about various EDA CAD formats (CIF, GDS, spice, tech, etc) to figure out what I need to do.&lt;br /&gt;&lt;br /&gt;Ultimately I decided I'd rather see how hard it is for me to do it with what I had available and then add support, rework, and integrate with the other tools as I learn more about them.  I probably learned a lot more about for example, SVG format this way than I would have by blindly using the other tools/libraries.&lt;br /&gt;&lt;br /&gt;For my test case I started by redrawing my image in Inkscape:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-SPVXtzahUxQ/Thp8Z1nQARI/AAAAAAAAAg0/tW3XnGFXK28/s1600/master.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 281px; height: 320px;" src="http://4.bp.blogspot.com/-SPVXtzahUxQ/Thp8Z1nQARI/AAAAAAAAAg0/tW3XnGFXK28/s320/master.png" alt="" id="BLOGGER_PHOTO_ID_5627947467683135762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;after deciding SVG would be easier than a raster image (ex: .tif) to parse.  I tried a few conversion utilities with the following results:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Open .tif in Inkscape and save as .svg: .tif embedded in .svg, not useful&lt;/li&gt;&lt;li&gt;Convert using ImageMagick "convert" utility: created an element for every (non-white?) pixel.  Impractical&lt;/li&gt;&lt;/ul&gt; Fortunately  my chip isn't large enough where re-drawing is an issue.   FPGA-netlist-tools seems to use potrace with good results for this type  of conversion.  I'd like to experiment with FPGA-netlist-tools and/or  potrace directly in the future to see what I can leverage.&lt;br /&gt;&lt;br /&gt;In order to convert an image into decent JSSim code you need to do the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Render polygons to screen in correct layer in correct net&lt;/li&gt;&lt;li&gt;Figure out net connections: which components are connected&lt;/li&gt;&lt;li&gt;Identify transistors&lt;/li&gt;&lt;li&gt;Identify pullup resistors&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Identify net names for inputs (and potentially outputs too)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;You should also do the following although they aren't critical:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Provide transistor geometry.  Its used to find transistors which isn't used in main simulation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I wrote the tool in Python and somewhat arbitrarily chose "xml.parsers.expat" to parse the XML.  I'm not sure if I could have leveraged anything by using a more integrated SVG parser.  One thing I found I had to be careful with was how SVG / Inkscape liked to throw viewports around which led to nested coordinate corrections.&lt;br /&gt;&lt;br /&gt;Rendering the polygons is fairly straightforward input to output conversion.  After a small bit of research I decided to use Shapely's libgeos GIS library Python bindings for polygons.    My simple SVG files were only rectangle, so I only had to parse rectangles.   My core engine is built on polygons though and does work with them as demonstrated by the fact that I was able to merge rectangles into single polygons.  However, since I drew the polygons as rectangles, I had to combine them.  Otherwise you get results like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-WHyPILrrdI8/Thp1OAY9wCI/AAAAAAAAAgE/khnaMG8iQz4/s1600/before_merge.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 311px; height: 320px;" src="http://2.bp.blogspot.com/-WHyPILrrdI8/Thp1OAY9wCI/AAAAAAAAAgE/khnaMG8iQz4/s320/before_merge.png" alt="" id="BLOGGER_PHOTO_ID_5627939567836184610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The alpha transparency on the metal doesn't overlay well and shows the underlying construction.  I eliminated this by simply using a polygon union function on intersecting polygons on the same layer, replacing one of the polygons, and removing the other.  You may also observe the image is upside down.  SVG uses an upper left coordinate system and JSSim uses a lower left which means final conversion requires a horizontal flip.&lt;br /&gt;&lt;br /&gt;Nets were decided by first assigning each node to a net.  I then merged nets when one of the following happened:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A polygon intersected itself on the same layer&lt;/li&gt;&lt;li&gt;A via intersected diffusion, poly, or metal&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Nets were then renumbered for the final output rather than trying to eliminate holes during the merge process.&lt;br /&gt;&lt;br /&gt;I thought transistors were going to be difficult to identify but it turned out to be rather simple at least for this simple case.  Transistors occur when two diffusion regions are separated by a poly gate (or metal gate for old school CMOS, but uncommon and not supported right now).  I expanded each diffusion and poly polygon around its center of mass by a few pixels to find near neighbors and plotted the intersection (plotted using Tkinter):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-FQV-VPzlvkg/Thp4K35lbAI/AAAAAAAAAgM/8v0pocjmJoY/s1600/intersection_test.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 302px; height: 320px;" src="http://1.bp.blogspot.com/-FQV-VPzlvkg/Thp4K35lbAI/AAAAAAAAAgM/8v0pocjmJoY/s320/intersection_test.png" alt="" id="BLOGGER_PHOTO_ID_5627942812552358914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm not sure how this method will scale but will see as I try it out on actual chips.  In particular it will only accept the match if there are two intersections but I could easily imagine two gates being controlled by the same poly segment.  I'll have to add some arbitration logic to sort out the connections if/when that becomes an issue.  With two diffusion nets and a polygon net, we now have the two connections and the gate nodes respectively.  I'm currently using the entire poly segment as a rough approximation of where the transistors is but maybe a better approach would be to try to protect between the two intersection polygons.&lt;br /&gt;&lt;br /&gt;Pull-ups aren't that hard to identify once the transistors are identified.  A pull-up requires the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One connection to positive voltage / VDD&lt;/li&gt;&lt;li&gt;Other two connections shorted together&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Simply iterate over the transistors and mark the doubly connected net as a pull-up net.&lt;br /&gt;&lt;br /&gt;Finally we have to identify the net names for input and output so that we can actually play with the chip.  FPGA-netlist-tools specifies node names as a text file with the various coordinates and names specified in the file.  However, I figured I could take advantage of SVG's being able to store text and place that information directly in the layers.  From a conceptual standpoint I look for the intersection of the textbox polygon with a net and label that net which is similar to the point concept.  This seems fair to do for the following reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Most important signals are on the pads which typically don't have wires running under them in a non-flip chip padframe&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Current chips don't have enough layers that they can't be unambiguously identified.  In theory a very dense chip could have multiple metal layers that make resolving which layer we refer to ambiguous&lt;/li&gt;&lt;li&gt;Could potentially allow layer specific labels if there were collisions which would allow unambiguous identification.  Alternatively could put some markup in the name such it gets identified.  For example, instead of "clk0" put "metal2:clk0" to say that clk0 belongs to metal2 which would otherwise be ambiguous&lt;/li&gt;&lt;/ul&gt;Here's an example showing the text boxes (displayed using a rendering glitch in gthumb):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-M2vhS8ECnEE/Thp6tgiNuCI/AAAAAAAAAgc/Aq8AgXbxYfw/s1600/fixed_labels.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 275px; height: 320px;" src="http://4.bp.blogspot.com/-M2vhS8ECnEE/Thp6tgiNuCI/AAAAAAAAAgc/Aq8AgXbxYfw/s320/fixed_labels.png" alt="" id="BLOGGER_PHOTO_ID_5627945606598998050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You have to careful though since text boxes can be much larger than the text.  For example:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-IBL_gjzpaBc/Thp729SIIbI/AAAAAAAAAgs/FEsXdi90g6s/s1600/bad_text_box.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 280px; height: 320px;" src="http://4.bp.blogspot.com/-IBL_gjzpaBc/Thp729SIIbI/AAAAAAAAAgs/FEsXdi90g6s/s320/bad_text_box.png" alt="" id="BLOGGER_PHOTO_ID_5627946868446601650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If this box was any bigger it would have hit diffusion and caused issues.&lt;br /&gt;&lt;br /&gt;When the tool runs it looks for layer files in the current directory and spits out *.js.  Running in JSSim (&lt;a href="http://johndmcmaster.github.com/visual6502/tutorial-inverter-uvjssim.html"&gt;see it live&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-d-hA88wMLH4/Thp9F05l5GI/AAAAAAAAAg8/oOZtVvA38zc/s1600/auto_clk_off.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 289px;" src="http://1.bp.blogspot.com/-d-hA88wMLH4/Thp9F05l5GI/AAAAAAAAAg8/oOZtVvA38zc/s320/auto_clk_off.png" alt="" id="BLOGGER_PHOTO_ID_5627948223405876322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We now have straight polygons!  Mostly anyway.  Zooming in:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-6lNrHckt8wg/Thp95CiUwFI/AAAAAAAAAhE/XSLS_4ETtJo/s1600/defect.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 281px;" src="http://1.bp.blogspot.com/-6lNrHckt8wg/Thp95CiUwFI/AAAAAAAAAhE/XSLS_4ETtJo/s320/defect.png" alt="" id="BLOGGER_PHOTO_ID_5627949103239708754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In particular you'll notice this since it makes segdefs.js larger with the extra 2 points we added.  If you look back at the non-merged metal it should be pretty obvious where this comes from.  If I care to remove this I'll have to implement some sort of smoothing function to remove points close to each other.&lt;br /&gt;&lt;br /&gt;My next step is to try to convert some of the chips in FPGA-netlist-tools into JSSim chips.  I believe polygon intersection is somewhat computationally expensive and may have to implement a quadtree map for efficient large scale operation.&lt;br /&gt;&lt;br /&gt;Until next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-2410472678315953630?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/2410472678315953630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/07/less-simple-experiment-with-jssim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2410472678315953630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2410472678315953630'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/07/less-simple-experiment-with-jssim.html' title='A less simple experiment with JSSim'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dVxOp7RYFEI/ThpyKNT9hnI/AAAAAAAAAf8/F8M0Oj4Qzp0/s72-c/input_low_fixed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-3408458412064965182</id><published>2011-07-10T14:10:00.000-07:00</published><updated>2011-07-10T14:26:40.336-07:00</updated><title type='text'>Epoxies</title><content type='html'>Plastic chips come in a variety of epoxies.  Some sample chips:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-PX2kloZEtw8/ThoVkr1ol_I/AAAAAAAAAds/ynwkholN7UQ/s1600/epoxies_labeled.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 203px;" src="http://3.bp.blogspot.com/-PX2kloZEtw8/ThoVkr1ol_I/AAAAAAAAAds/ynwkholN7UQ/s320/epoxies_labeled.jpg" alt="" id="BLOGGER_PHOTO_ID_5627834404340013042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Chip 1 was in acid for a short amount of time so its not a completely fair visual, but it looked about the same before going in.  Anyway,  In order of increasing glass content, these chips are 2, 3, 1.  3 is a PDIP-40 Microchip PIC, 2 is a TI chip, and I forget what 1 was although I'm tempted to say it was made by ST.  Chip 1 decapsulates very qiuckly, 2 is what I'd call normal or a little better, and 2 is difficult.  You can see what 1 looks like being in acid for a few minutes, here's what 2 looks like after sitting for a while (with 1):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-V8KBaAhowgM/ThoWdmplFfI/AAAAAAAAAd0/2EDuqGT4uHU/s1600/1_2_processed.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-V8KBaAhowgM/ThoWdmplFfI/AAAAAAAAAd0/2EDuqGT4uHU/s320/1_2_processed.jpg" alt="" id="BLOGGER_PHOTO_ID_5627835382199817714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It forms a hard sediment at the bottom of the beaker instead of really breaking up.  There's so much epoxy that acid soaking in actually become noticeable instead of the chip breaking up like usually happens.&lt;br /&gt;&lt;br /&gt;1's surface looks like this under a microscope (maybe 10X):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-W9jZqVC-zH4/ThoXsm0cOmI/AAAAAAAAAd8/5xHbIjnsPk4/s1600/1_surface.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-W9jZqVC-zH4/ThoXsm0cOmI/AAAAAAAAAd8/5xHbIjnsPk4/s320/1_surface.jpg" alt="" id="BLOGGER_PHOTO_ID_5627836739455040098" border="0" /&gt;&lt;/a&gt;Notice all the junk in there.  It makes dissolving it much easier since not only do we not have to dissolve that stuff, but it falls out, pitting the surface and making it corrode faster.&lt;br /&gt;&lt;br /&gt;Here's the side of 2:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-f_CiM2Bh0wk/ThoXtPtdCTI/AAAAAAAAAeM/FySA4kuQhxc/s1600/2_side.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-f_CiM2Bh0wk/ThoXtPtdCTI/AAAAAAAAAeM/FySA4kuQhxc/s320/2_side.jpg" alt="" id="BLOGGER_PHOTO_ID_5627836750431586610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Interesting that the top and bottom look a little different, I'm not sure if its related to it being hard to dissolve as I haven't got a chance to compare it to similar chips.&lt;br /&gt;&lt;br /&gt;And here's 3 (maybe 10X):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-ksXLQrfNkEw/ThoXs7B51_I/AAAAAAAAAeE/rUnthw8lgUA/s1600/3_surface.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-ksXLQrfNkEw/ThoXs7B51_I/AAAAAAAAAeE/rUnthw8lgUA/s320/3_surface.jpg" alt="" id="BLOGGER_PHOTO_ID_5627836744880216050" border="0" /&gt;&lt;/a&gt;You can see some particulate in there (maybe not as apparent in this lower res picture?) and its lighter in color than the 2.&lt;br /&gt;&lt;br /&gt;To finish off a few things not related to epoxies but came up during this.  This thin package had the die close enough to the surface that it actually managed to poke through long before the package was dissolved:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-PT4H0vbWCfw/ThoYHgHboLI/AAAAAAAAAeU/FQnyi3DZmIM/s1600/natural_live_top.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-PT4H0vbWCfw/ThoYHgHboLI/AAAAAAAAAeU/FQnyi3DZmIM/s320/natural_live_top.jpg" alt="" id="BLOGGER_PHOTO_ID_5627837201512112306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Also when you do a large lot you get a pile of that junk leftover:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Gd8mFNOZIO4/ThoYH9fy5zI/AAAAAAAAAec/049HBEt42gA/s1600/pile_of_leads.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-Gd8mFNOZIO4/ThoYH9fy5zI/AAAAAAAAAec/049HBEt42gA/s320/pile_of_leads.jpg" alt="" id="BLOGGER_PHOTO_ID_5627837209398929202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I use to use HNO3 to get rid of it, but it tends to dillute quickly and dilute HNO3 attacks aluminium.  Fortunately its unlikely that you'll need to decap any valuable chip in volume so you can safely just pick these out with tweezers for most chips.  I'm afraid of the chips scratching but the passivation is pretty strong.&lt;br /&gt;&lt;br /&gt;Until next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-3408458412064965182?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/3408458412064965182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/07/epoxies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3408458412064965182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3408458412064965182'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/07/epoxies.html' title='Epoxies'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-PX2kloZEtw8/ThoVkr1ol_I/AAAAAAAAAds/ynwkholN7UQ/s72-c/epoxies_labeled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-208587721468776703</id><published>2011-07-04T19:37:00.001-07:00</published><updated>2011-07-16T10:11:59.523-07:00</updated><title type='text'>Preparing for live analysis</title><content type='html'>I have a probing station on the way and am going to try to start learning about live analysis because it will allow me to confirm my understanding of chips.  That is  I'll predict the state, apply voltage, and then check the levels on the  chip.  Later on it will of course be useful for numerous applications (probe lines, change signals, etc).&lt;br /&gt;&lt;br /&gt;My very first attempt was using 70 % HNO3 on a hot chip a while ago (maybe a year?).  Rinse, repeat until exposed.  Unfortunately, this method is very slow and takes about an hour of work for a PDIP.  Even if you don't care so much about your time, so many handling cycles is dangerous for the chip (thermal stress, break bond wires, dissolve Al, etc).&lt;br /&gt;&lt;br /&gt;My next attempt which I only partially went through with was an attempt to automate the above a little.  I Dremeled a hole in the bottom of some glassware and filled a beaker with a small amount of nitric.  It was then RTV'd onto the surface of a chip and the whole assembly heated.  Early results were promising, but its somewhat dangerous if you run out of RTV before the chip is done.  Additionally, you can't see the chip's surface so cannot gauge progress easily.  I was also left with some residue on the chip.  I'm not sure if it was from improper cleaning or more than usually since it was all pooling into the acid cavity.&lt;br /&gt;&lt;br /&gt;I didn't go back to this for a while mainly because without a probing station it wasn't a good use of time when I could just throw the chip in an acid bath with much less work.  I've recently been moving onto more complicated scenarios and now consider live analysis to be a key objective for the reasons stated at the beginning.  However, I value my time and don't want to spend a lot of time putting drops on a sample or dealing with RFNA for assorted reasons.  Professional shops use decapsulation machines that squirt acid jets.  Could I do something similar?&lt;br /&gt;&lt;br /&gt;I started to think and I decided the first thing I should try is to see if I could build an automatic decapsultion with equipment I had.  I had a rusted out peristaltic pump which seemed like an okay place to started.  I gave up on the motor and rigged up a flexible shaft to it. &lt;a href="http://www.youtube.com/watch?v=CuuedfQYQ74"&gt; See it in operation here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This fed an H2SO4 from the bottom of a beaker which was to squirt a chip on a raised platform in the same beaker.  I knew someone that said UL would approve anything, but probably not this.  The machine was flat out hazardous for the following reasons:&lt;br /&gt;-Exposed spinning shaft&lt;br /&gt;-Pressurized heated acid on surplus / scavenged parts&lt;br /&gt;-If the acid flow was uneven it could stress the glass and break it&lt;br /&gt;&lt;br /&gt;It also suffered from some practical problems:&lt;br /&gt;-I could not get the acid hot enough.  I guess a combination that the glass insulated the chip too much and the acid cooled too much (although it was still pretty hot) before it reached the chip&lt;br /&gt;-My platform was just an inverted beaker (inside a larger beaker) and the chip could easily get knocked off&lt;br /&gt;&lt;br /&gt;I'm not a man easily defeated though.  I spent some time to think about what I could do better.  I got some PTFE beakers which I drilled out to make PTFE baskets so that I could take chips out of acid baths easier.  Probably a short post on that at some point.  It got me thinking: although I couldn't machine / shape glass very easily, I could easily machine PTFE.  My goal was to make an assembly that would shield the chip from the acid except for a milled out impression where I wanted it to etch.  I ordered some stock, ordered some PTFE bolts, and already had a PTFE sheet.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-qXUtE53sHsU/ThonLGkmgpI/AAAAAAAAAes/-BZENQ-VQB4/s1600/mk1_jig1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-qXUtE53sHsU/ThonLGkmgpI/AAAAAAAAAes/-BZENQ-VQB4/s320/mk1_jig1.jpg" alt="" id="BLOGGER_PHOTO_ID_5627853756049031826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Before chips can actually be used, its a good idea to mill out a cavity (I used 3/16" (0.1875") TiN coated endmill for 0.3" pitch) so that the die will be reached much faster. Make it less wide than your chip so that you don't collapse the lead frame from excessive etching on the sides.  Professional shops x-ray the chips, but you have a few options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rule of thumb: mill halfway to the top of the leads&lt;/li&gt;&lt;li&gt;Sacrifice one to find where the bond wires are.  Might be worth it if you have a pile of them, although it still will probably only be an approximation&lt;/li&gt;&lt;li&gt;Don't mill it at all if its very thin.  Certainly shouldn't be your first sample though as you'll have more issues with the lead frame collapsing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some professional units short all of the pins and wait for continuity to the bond wires.  I tried putting some water in the cavity to help detect when they were getting close, but could not do it reliably&lt;/li&gt;&lt;/ul&gt;In any case, inspect after milling.  Try adding water to make bond wires more apparent.&lt;br /&gt;&lt;br /&gt;When I was experimenting with the continuity method I got sloppy and didn't pay attention to depth.  The endmill hit the Si.  While not dangerous to the user, it did ruin the tip by dulling it and taking off the TiN coating (as a &lt;a href="http://homepages.rpi.edu/%7Eschubert/Educational-resources/Materials-Hardness.pdf"&gt;reference&lt;/a&gt;, silicon is 7.0 Mohs hardness but even titanium is only 6.5)   Afterwords packages would heat up instead of being cool to the touch.  I'm also told that excessive heat can burn the epoxy and make it difficult to dissolve although I haven't seen this yet.  Healthy endmill that went too far:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-R1DmGJQGM9A/Thoyyd9pyKI/AAAAAAAAAf0/xmZ2lZ_DfEA/s1600/sharp_endmill_bond_wires.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-R1DmGJQGM9A/Thoyyd9pyKI/AAAAAAAAAf0/xmZ2lZ_DfEA/s320/sharp_endmill_bond_wires.jpg" alt="" id="BLOGGER_PHOTO_ID_5627866526970923170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dull endmill that went too far:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-ZYDglZZt1z4/ThoyyB7qMXI/AAAAAAAAAfs/9OavsPwwyzU/s1600/dull_endmill_bond_wires.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-ZYDglZZt1z4/ThoyyB7qMXI/AAAAAAAAAfs/9OavsPwwyzU/s320/dull_endmill_bond_wires.jpg" alt="" id="BLOGGER_PHOTO_ID_5627866519446368626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You can see the wires are more smeared around than cut. For example, in the first image you can make out the bond wire arc cross section but they are more scattered around in the second.   Both will still feel pretty sharp to the touch so I'd reccomend you start with a new endmill or be very careful.  Another problem with using a dull endmill is that it requires more pressure to start a cut.  You need to take off very thin slices and a dull endmill will tend to "bite" and then take a larger slice out.  I had good luck using a sharp endmill in a breadboard.  The breadboard / pin contact provided a small spring factor which allowed very slow, precise cuts.  Additionally, I was able to place it back into position after inspecting depth.&lt;br /&gt;&lt;br /&gt;I assembled my piece and lowered it into a beaker after milling a small cavity into the top of a PDIP.  To avoid letting the epoxy slag accumulate in the cavity, I put it into the beaker upside-down.  This aspect seemed to work rather well.  Unfortunately, a few things didn't.  First, I misunderestimated PTFE's thermal expansion coefficient.  The block expanded a fair amount and wedged itself up against the glass.  I feel lucky that it didn't break.  Second, related to the first point, PTFE becomes soft at higher temperatures.  This had two effects: making the gasket droop down, breaking the seal, and shearing the bolts from the added stress and being softer.  Another thing that I did was to tack the chip in place with RTV.  Initially I used just a small amount, but I tried to fill it in after seeing the gasket wasn't going to hold the chip in place.  I then went so far as the flip the assembly over, but this caused the predicted slag problem.  Although there was a clear separation between the epoxy that was still part of the package and that which wasn't, it couldn't be removed without destroying the fragile bond wires.  Finally, the larger volume of RTV was significant since it got attacked more readily than the epoxy.&lt;br /&gt;&lt;br /&gt;Although it didn't work out, it was a step in the right direction.  The PTFE bolts were kinda expensive though so i was a little bummed about that.  What if I just made a sold piece?  I could prevent circulation at the top by not filling the bath above the top of the assembly.  Acid would then stay stagnant in the middle and most likely cooler.  And here it is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-An73RpfFw_8/ThorvPyy67I/AAAAAAAAAe0/t8uEbDcc20w/s1600/mk2_running_top.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-An73RpfFw_8/ThorvPyy67I/AAAAAAAAAe0/t8uEbDcc20w/s320/mk2_running_top.jpg" alt="" id="BLOGGER_PHOTO_ID_5627858775046286258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After adding some handles to take it out of the acid easier:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-rKofeLGAJrM/ThosoTrp46I/AAAAAAAAAfE/qpARKaZhC-I/s1600/IMG_3963.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://3.bp.blogspot.com/-rKofeLGAJrM/ThosoTrp46I/AAAAAAAAAfE/qpARKaZhC-I/s320/IMG_3963.JPG" alt="" id="BLOGGER_PHOTO_ID_5627859755342619554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The idea worked quite well.  I was able to see though that the stirbar:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-KlmVEqbs9ao/Thos-6c5pxI/AAAAAAAAAfM/Z1oSzB6sOO4/s1600/mk2_running_side.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-KlmVEqbs9ao/Thos-6c5pxI/AAAAAAAAAfM/Z1oSzB6sOO4/s320/mk2_running_side.jpg" alt="" id="BLOGGER_PHOTO_ID_5627860143706842898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;wasn't knocking the bubbles out like I thought it would.  I solved this in two ways.  First, I filled the cavity up more carefully from the side to let the acid flow in from the side rather than letting air bubbles get trapped if the acid was just poured in.  Second, I drilled two holes on the side to let air escape.  While it does increase package corrosion, it didn't see to signfigantly since the acid was mostly hitting the milled out portion.&lt;br /&gt;&lt;br /&gt;The first chip gave very good results:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-Cf4BEqJjlpo/Thot7QiSmuI/AAAAAAAAAfU/PI692GDDFh4/s1600/chip_low_mag.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 159px;" src="http://4.bp.blogspot.com/-Cf4BEqJjlpo/Thot7QiSmuI/AAAAAAAAAfU/PI692GDDFh4/s320/chip_low_mag.jpg" alt="" id="BLOGGER_PHOTO_ID_5627861180427180770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Die before any cleaning:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-zwuT6kJK6rM/ThouH16mVFI/AAAAAAAAAfk/fhCUQj8FN1g/s1600/chip_die_shot_fresh.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-zwuT6kJK6rM/ThouH16mVFI/AAAAAAAAAfk/fhCUQj8FN1g/s320/chip_die_shot_fresh.jpg" alt="" id="BLOGGER_PHOTO_ID_5627861396619678802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After pressurized water (although acetone would be preferred if I was serious about keeping it alive, water is hazardous to circuits.  98% H2SO4 is hygroscopic and should not contaminate the chip):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-qWaL1PGSq04/Thot7sAU4yI/AAAAAAAAAfc/o4-fYfl9kCo/s1600/chip_water_squirt_clean.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/-qWaL1PGSq04/Thot7sAU4yI/AAAAAAAAAfc/o4-fYfl9kCo/s320/chip_water_squirt_clean.jpg" alt="" id="BLOGGER_PHOTO_ID_5627861187800916770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ultrasound would probably clean it up nicely.  Beware though if the connections are weak you may knock them off.  Try shielding the ultrasound / user lower power or soaking first and see if it will take it off before running at full force.  On a related note, be absolutely sure that you've cleaned the chip thoroughly to eliminate acid.  Use acetone, 98 % rubbing alcohol, other other things that won't add water.  Put it on gentle heat after to drive out any leftover moisture and store in a sealed container away from moisture and dust.  Dissicant is probably a good idea.  I had a chip I just flat didn't wash after doing this to, need to take a picture of it.&lt;br /&gt;&lt;br /&gt;I need to also test to see how much this special jig helps vs just milling and dumping in the bath.  Since the acid doesn't corrode the pins very fast, it may very well be sufficient to just dump it into the bath as is.&lt;br /&gt;&lt;br /&gt;I'd like to eliminate the RTV completely by making some PTFE spacers.  They'll go on the side of the chip so that it gets held in place better and allows less acid to flow to the top.&lt;br /&gt;&lt;br /&gt;An associate has started to experiment with making microprobes which turns out to not be that hard.  I think he told me its something along the lines of put tungsten rod in 20 % w/v KOH and run some current through it with a certain polarity.  I was told the other parameters but just can't remember them off of the top of my head.  Hopefully he'll do a writeup on at some point or I will once I have a need to start making probes.  I recently received a probing station and so this might be in the near future.&lt;br /&gt;&lt;br /&gt;To summarize, here are the key points&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Your first chip should be easy to handle.  Try a PDIP as they are heavy duty and have lots of room for error.  Whatever you chose, you'll probably want to mill it and will want a way to securely hold it&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Start by milling out a cavity.  Use something narrower than your package to avoid collapsing the lead frame.  Halfway from the top to the top of the lead frame is a good rule of thumb&lt;/li&gt;&lt;li&gt;Mount the chip upside down in a acid proof jig.  I used PTFE, glass would also work fine.&lt;/li&gt;&lt;li&gt;I used a stir bar to increase circulation although I have yet to prove it actually helps&lt;/li&gt;&lt;li&gt;Make sure you can take the chip out of the bath to check on it.  You can't under-etch and over-etching endangers the integrity of the chip.  Be aware though that thermal shock can kill the chip&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Avoid using water when rinsing.  Use hygroscopic and / or water free solvents.  Use ultrasound carefully as it may knock off bond wires.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Gently heat dry it when done to be sure you've driven out moisture&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Store in a dry location.  I use centrifuge tubes.  Desiccant is probably a good idea although probably not needed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-208587721468776703?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/208587721468776703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/07/preparing-for-live-analysis.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/208587721468776703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/208587721468776703'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/07/preparing-for-live-analysis.html' title='Preparing for live analysis'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qXUtE53sHsU/ThonLGkmgpI/AAAAAAAAAes/-BZENQ-VQB4/s72-c/mk1_jig1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-1189726618699726816</id><published>2011-07-03T16:36:00.001-07:00</published><updated>2011-07-04T02:14:33.515-07:00</updated><title type='text'>A simple experiment with JSSim (visual6502)</title><content type='html'>The folks at visual6502.org have really done a great job on their project and I've been meaning to get more familiar with their work for a while.  Now that I graduated I have more time for these projects and was able to dig in over the past week and especially yesterday.  Bottom line: my experiment can be found at http://johndmcmaster.github.com/visual6502/  and a demo at  http://johndmcmaster.github.com/visual6502/tutorial-inverter.html  This writeup is based on my git commit 6a613ee1131bbdec9a8bf4b6eeb02d13147842ab which was forked from mainline's de265ecdb89d8c5d299f09ad69aaf8b87b1aed5d.  Changes are as noted, but most code snippets are copyright Brian Silverman, Barry Silverman, Ed Spittles, Achim Breidenbach, Ijor and maybe some others that I missed.  See the github source for details.&lt;br /&gt;&lt;br /&gt;I don't have much experience with JavaScript but I have enough experience with C like languages that it isn't really hard to use and just try to follow the syntax of things around me.  I started by moving the 6502 into its own folder like later chips have been tending to so that I could focus on the relevant files easier.  For those not familar with visual6502, here's a screenshot of the 6502 running in JSSim (Java Script Simulator):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-IFELAVZfJQg/ThD_X1ZTpZI/AAAAAAAAAcA/5R6Jy_ma-8E/s1600/visual6502_running.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 187px;" src="http://1.bp.blogspot.com/-IFELAVZfJQg/ThD_X1ZTpZI/AAAAAAAAAcA/5R6Jy_ma-8E/s320/visual6502_running.png" alt="" id="BLOGGER_PHOTO_ID_5625276719521047954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Although its not obvious from the still picture, metal, poly, and diffusion are being colored according to their voltage potential.  Wow!  An outstanding way to learn about chips.  However, the complexity of the simulator scared me from really trying to understand how it worked.  Fortunately, most of the work is put into the data and the simulator core is easy to follow.  In this post I'm going to step you through how visual6502 works and how to create a clocked inverter circuit using simple tools.&lt;br /&gt;&lt;br /&gt;The first thing that you'll need is a reference diagram.  I somewhat arbitrarily decided to try an NMOS inverter since I knew the 6502 was NMOS logic and could look at an example if I got stuck.  An inverter just seemed like something I could easily clock with a single input.  Lets start with a brief review of NMOS logic since these days its all about CMOS.  In NMOS logic, we use a single transistor polarity and short out voltage through transistors to invert outputs.  Here is an NMOS inverter &lt;a href="http://en.wikipedia.org/wiki/NMOS_logic"&gt;from Wiki&lt;/a&gt;:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-r1u1T5LRGZ4/ThEEAvL6PNI/AAAAAAAAAco/C2DoiPpHVqg/s1600/inverter_schematic.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 287px; height: 320px;" src="http://4.bp.blogspot.com/-r1u1T5LRGZ4/ThEEAvL6PNI/AAAAAAAAAco/C2DoiPpHVqg/s320/inverter_schematic.png" alt="" id="BLOGGER_PHOTO_ID_5625281820275391698" border="0" /&gt;&lt;/a&gt;When A is 0 the switch is open and current can flow from VDD through R to OUT (A: 0, OUT: 1).  If we put voltage on A (gate) the switch is closed and shorts out OUT (A: 1, OUT: 0) through the drain at top and source at bottom.  NMOS was discontinued because CMOS didn't have the issue of needing to short out a resistor (power consumption when input is 1), eventually became faster (better noise margin), and also took up less chip space.&lt;br /&gt;&lt;br /&gt;Converting this into a (simplified) layout:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-TnKvpUoBEjw/ThECl3rxCeI/AAAAAAAAAcY/wDCTtsFx8jU/s1600/inverter-400.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://4.bp.blogspot.com/-TnKvpUoBEjw/ThECl3rxCeI/AAAAAAAAAcY/wDCTtsFx8jU/s320/inverter-400.png" alt="" id="BLOGGER_PHOTO_ID_5625280259188394466" border="0" /&gt;&lt;/a&gt;I used gray for metal, black for contacts, red for poly, green for N diffusion, and white for P substrate.  The blue lettering is an arbitrarily assigned net (electrically connected group) number which we'll use later as we convert this into a simulatable data file.  I might use the term node and net interchangeably, they mean the same thing here.  As a reminder, the distinction between source and drain is less important at a fundamental level.  For our purposes we only care that the ends of the green blocks are the switch contacts and that the switch is controlled by the red part (polysilicon aka poly).  Finally, assuming self aligned gates, the poly protects the silicon under the gate and so we only have diffusion around the poly and not under it.  Early CMOS used metal gates but later switched to poly (not regular Si because you can't grow good crystals on an amorphous SiO2 glass surface).&lt;br /&gt;&lt;br /&gt;Notice that we really try to avoid conventional resistors.  While they can be made from strips of poly or diffusion, the easiest way is to make them out of transistors.  I am not deeply familiar with this and initially had the drain and gate connected instead of the gate and source as above. So if you see images with them reversed its because I was too lazy to re-take screenshots after I fixed it.  On my TODO list so that I can better recognize and understand them.  The transistor below is more interesting and we'll mostly focus on it.&lt;br /&gt;&lt;br /&gt;Pretty picture, but its also pretty lifeless.  Time to start digging into the codebase.  If you grab a copy of the visual6502 source code (either from my repo listed above or from the main repository at https://github.com/trebonian/visual6502) you should see chip-6800 subdirectory which defines the files you'll need to create for your own simulation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;nodenames.js: defines human friendly node names such as clk0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;segdefs.js: defines how to draw the non-transistor parts and their connections&lt;br /&gt;&lt;/li&gt;&lt;li&gt;transdefs.js:transistor to net connections and transistor drawing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;support.js: utilities and overrides to stub out unneeded functions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;testprogram.js: CPU instructions.  Since we won't have a CPU we don't need this file&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;nodenames.js contains the nodenames variable and looks something like:&lt;br /&gt;&lt;blockquote&gt;var nodenames ={&lt;br /&gt;gnd: 2,&lt;br /&gt;vcc: 1,&lt;br /&gt;clk0: 3,&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;vcc is net 1, gnd is net 2, and clk0 has been aliased to net 3.&lt;br /&gt;&lt;br /&gt;segdefs.js contains the segdefs variable and looks something like:&lt;br /&gt;&lt;blockquote&gt;var segdefs = [&lt;br /&gt;[ 4,'-',5, 177,94, 193,95, 193,179, 178,180],&lt;br /&gt;[ 1,'+',4, 128,214, 177,214, 177,265, 129,264],&lt;br /&gt;[ 2,'-',3, 128,95, 179,94, 177,146, 128,146],&lt;br /&gt;[ 4,'-',0, 66,163, 192,161, 193,179, 64,179],&lt;br /&gt;]&lt;br /&gt;&lt;/blockquote&gt;Which probably looks pretty cryptic at first glance.  The first element is the node number.  The second is the pullup status: '+' for pullup and '-' (although I think any non-'+' value will work) for regular.  That is a '+' indicates a resistor is connected to the positive supply and will turn on attached gates if not shorted out.  Each pair thereafter forms part of the polygon used to draw the chip.  All of the above are rough rectangles.&lt;br /&gt;&lt;br /&gt;The next number is the layer number.  This does not effect the simulation to my knowledge but we do want the visual aspect to work correctly.  If you look in expertWires.js you should see:&lt;br /&gt;&lt;blockquote&gt;var layernames = ['metal', 'switched diffusion', 'inputdiode', 'grounded diffusion', 'powered diffusion', 'polysilicon'];&lt;br /&gt;var colors = ['rgba(128,128,192,0.4)','#FFFF00','#FF00FF','#4DFF4D',&lt;br /&gt;      '#FF4D4D','#801AC0','rgba(128,0,255,0.75)'];&lt;br /&gt;var drawlayers = [true, true, true, true, true, true];&lt;br /&gt;&lt;/blockquote&gt;Which defines the layer numbers (0 indexed).  Thus the sample data above defines the layers poly, powered diffusion, grounded diffusion, and metal.  Switched diffusion is diffusion that will change state during simulation because its on a switched side of a transistor.  In the sample image the two diffusion segments on the right are switched since they may or may not have a voltage potential on them depending on whether the transistor is on.  The upper left diffusion is powered since it always has positive voltage and the lower left is grounded diffusion since its always at ground potential.  Hopefully poly and metal are self explanatory.&lt;br /&gt;&lt;br /&gt;We render in the order given, so make sure to place them in a good  order.  Make metal last as its semi-transparent and anything else will  just cover it up.  None of the other polygons (except transistors, but they aren't usually rendered) should overlap but if they do just arrange things as needed.&lt;br /&gt;&lt;br /&gt;The final key file is transdefs.js which contains the transdefs variable:&lt;br /&gt;&lt;blockquote&gt;var transdefs = [&lt;br /&gt;['t1',4,2,3,[176,193,96,144],[415,415,11,5,4566],false],&lt;br /&gt;['t2',1,1,3,[177,191,214,265],[415,415,11,5,4566],true],&lt;br /&gt;]&lt;br /&gt;&lt;/blockquote&gt;The first element is the node name which is followed by the gate, first, and second net connections respectively.  Like in the layout we don't distinguish between the gate and drain.&lt;br /&gt;&lt;br /&gt;Now that we know what data we need we need to generate it.  While I could learn to use or develop my own tools for converting layers to *.js files, I decided to go with the KISS strategy.  I used the Kolourpaint toolchain to generate my *.js files:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-2PLt-vSw3Ys/ThEEARTFxlI/AAAAAAAAAcg/5qLEVujtJt0/s1600/tracing_polygon_cords.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 302px; height: 320px;" src="http://2.bp.blogspot.com/-2PLt-vSw3Ys/ThEEARTFxlI/AAAAAAAAAcg/5qLEVujtJt0/s320/tracing_polygon_cords.png" alt="" id="BLOGGER_PHOTO_ID_5625281812252444242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I generated the points by hovering the mouse over the various coordinates and typing them into the *.js files.  With both windows open at once it went pretty quick. If you're wondering why its upside-down, its because the simulator has the origin in the lower left hand corner and kolourpaint has it in the upper left hand corner.  By flipping upside-down the coordinates come out correctly.&lt;br /&gt;&lt;br /&gt;But its not over yet.  I've glazed over utils.js but its actually necessary for this to work.  The stock functions are more specialized for a full blown MCU, a 6502 in particular, and we will have to override these functions as appropriate.  Finally, we need to set the canvase size by setting grChipSize which sets width and height.  My images were 400 X 400 so I set grChipSize to 400.  Lets step through initialization so that we know what we need to fixup.&lt;br /&gt;&lt;br /&gt;We start in the main .html file by including a bunch of stuff.  In particular you'll need to change the paths to reflect your files instead of the template's.  For example, I used chip-6800 so had do substitute things like:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;lt;s cript src="chip-6800/segdefs.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;blockquote&gt;&lt;script src="chip-6800/segdefs.js"&gt;&lt;/script&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;for&lt;br /&gt;&lt;blockquote&gt;&lt;script src="chip-tutorial/inverter/segdefs.js"&gt;&lt;/script&gt;&amp;lt;s cript src="chip-tutorial/inverter/segdefs.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;or whereever you put your files.  Trusting the general structure and skipping over the HTML layout, the key item is&lt;br /&gt;&lt;blockquote&gt;function handleOnload() {&lt;br /&gt;...&lt;br /&gt;setTimeout(setup,200);&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;Which launches setup() in expertWires.js after 200 milliseconds.  The other key item in the main file is the play button:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;a href ="javascript:runChip()"  id="start"&amp;gt;&amp;lt;img class="navplay" src="images/play.png" title="run"&amp;gt;&amp;lt;/a&amp;gt;&lt;/blockquote&gt;which calls runChip(), but we won't worry about this for now.&lt;br /&gt;&lt;br /&gt;This function is mostly just a bootstrap for the next stage.  They do a lot of this and I'm not sure why they don't just make function calls.&lt;br /&gt;EDIT: I've been told this is related to not letting scripts run too long and make the browser complain.  By re-submitting the request the browser doesn't get so angry.  They aren't sure if this is standard for web services but it seems to work.&lt;br /&gt;Anyway, here it is:&lt;br /&gt;&lt;blockquote&gt;function setup(){&lt;br /&gt;statbox = document.getElementById('status');&lt;br /&gt;setStatus('loading &lt;your chip="" here=""&gt;...');&lt;br /&gt;setTimeout(setup_part2, 0);&lt;br /&gt;}&lt;br /&gt;&lt;/your&gt;&lt;/blockquote&gt;And this gives:&lt;blockquote&gt;function setup_part2(){&lt;br /&gt;frame = document.getElementById('frame');&lt;br /&gt;statbox = document.getElementById('status');&lt;br /&gt;setupNodes();&lt;br /&gt;setupTransistors();&lt;br /&gt;setupParams();&lt;br /&gt;setupExpertMode();&lt;br /&gt;detectOldBrowser();&lt;br /&gt;setStatus('loading graphics...');&lt;br /&gt;setTimeout(setup_part3, 0);&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;setupNodes() works on segdefs to setup the visual portion.  For historical reasons (in a comment I read somewhere) it also contains the pullup status as noted earlier.&lt;br /&gt;&lt;br /&gt;setupTransistors() does the actual transistor and net setup.  One point of interest is that C1 will become "interesting" if C2 is but C1 isn't (ie GND and VCC will be moved to C2 if they weren't in transdefs.js).  We also build a list of all of the transistors connected to each net.  That way when we simulate an event we only have to reference the net instead of iterating through all of the other transistors looking for relevant gates by exchanging memory for CPU usage.&lt;br /&gt;&lt;br /&gt;setupParams() parses query parameters (page.html?key=value) and so isn't important for basic usage.  setupExpertMode() sets up the probe control panel and you don't really need to worry about it.  Finally, detectOldBrowser() is compatibility related (makes rendering faster on certain systems?) and you also don't need to worry about it.&lt;br /&gt;&lt;br /&gt;We now move onto setup_part3():&lt;br /&gt;&lt;blockquote&gt;function setup_part3(){&lt;br /&gt;if(chipLayoutIsVisible){&lt;br /&gt;    updateChipLayoutVisibility(true);&lt;br /&gt;}&lt;br /&gt;setStatus('resetting ' + chipname + '...');&lt;br /&gt;setTimeout(setup_part4, 0);&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;The chip layout should be visible and so we start to render the layout and move onto part 4:&lt;br /&gt;&lt;blockquote&gt;function setup_part4(){&lt;br /&gt;setupTable();&lt;br /&gt;setupNodeNameList();&lt;br /&gt;logThese=signalSet(loglevel);&lt;br /&gt;loadProgram();&lt;br /&gt;setupConsole();&lt;br /&gt;if(noSimulation){&lt;br /&gt;stopChip();&lt;br /&gt;running=undefined;&lt;br /&gt;setStatus('Ready!');&lt;br /&gt;} else {&lt;br /&gt;initChip();&lt;br /&gt;document.getElementById('stop').style.visibility = 'hidden';&lt;br /&gt;go();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;Glaze over things and go to initChip() which is important since you'll need to define it.  initChip() is responsible for setting the startup logic state.  Unfortunately the default implemetnation in macros.js has statements like setHigh('rdy') which are 6502 specific.  I cut that stuff out to give a very basic chip initialization instead.  See my support.js, but basically it sets all transistors to off and then recalculates all transistors (recalcNodeList(allNodes())).&lt;br /&gt;&lt;br /&gt;recalcNodeList() is a core interface.  Its a discrete event simulator where we propagate switch information when things change.  Since there's no guarantee it will settle, it will abort after 100 iterations if we did something dumb like create a ring oscillator by accident.&lt;br /&gt;&lt;br /&gt;setup_part4 finished by calling go().  This will start looping the simulation.  Usually this is by hitting the play button in main, but I hard coded the running variable to true so that I didn't have to hit the button.  Also worth noting that I added a step delay variable (go_timeout).  It may make sense for larger chips to run at full throttle, but for this simple simulation I limited at 1 Hz.  step() will look for the net clk0 and invert its state.  It also does a few other things so I added the following stubs:&lt;br /&gt;&lt;blockquote&gt;/*&lt;br /&gt;Simple logic chip stubs&lt;br /&gt;*/&lt;br /&gt;/*&lt;br /&gt;Print registers and such, we have none&lt;br /&gt;Could use the input and output pins I guess if we really wanted to&lt;br /&gt;Used extensivly in macros.js&lt;br /&gt;*/&lt;br /&gt;function chipStatus(){}&lt;br /&gt;//Simple logic chips have no bus to read/write, skip over&lt;br /&gt;//Executed as part of clocking (halfStep()) in macros.js&lt;br /&gt;//Alternativly we could have just re-implemented these functions&lt;br /&gt;function handleBusRead() {}&lt;br /&gt;function handleBusWrite() {}&lt;br /&gt;//Stub implementation in case not using memtable.js&lt;br /&gt;//No memory to track&lt;br /&gt;function setupTable() {}&lt;br /&gt;&lt;/blockquote&gt;Whew!  We should be ready to run.  Check my data files for how I defined the*.js files.  Allright, lets see what we get:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-OiATutHFakQ/ThErGpVVvAI/AAAAAAAAAcw/GgoQ82-ZGDk/s1600/default_settings_wheres_the_chip.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 284px;" src="http://3.bp.blogspot.com/-OiATutHFakQ/ThErGpVVvAI/AAAAAAAAAcw/GgoQ82-ZGDk/s320/default_settings_wheres_the_chip.png" alt="" id="BLOGGER_PHOTO_ID_5625324802737028098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?!?  Upon a little investigation, we see that there is a 400 pixel gutter.  Since our image is 400 pixels, if we set grChipSize to 1200, we will see it centered at the bottom:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-T03cExODRCw/ThErk46hdeI/AAAAAAAAAdA/YJRaES-Y_Es/s1600/default_settings_full_geometry.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 284px;" src="http://4.bp.blogspot.com/-T03cExODRCw/ThErk46hdeI/AAAAAAAAAdA/YJRaES-Y_Es/s320/default_settings_full_geometry.png" alt="" id="BLOGGER_PHOTO_ID_5625325322315593186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But really we want it to look nicer and so take of the 400 pixel left gutter:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-L5iDZrOJur4/ThErksV8Y_I/AAAAAAAAAc4/PfpeQkpYHHg/s1600/finished_transistor_refreshed.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 283px;" src="http://2.bp.blogspot.com/-L5iDZrOJur4/ThErksV8Y_I/AAAAAAAAAc4/PfpeQkpYHHg/s320/finished_transistor_refreshed.png" alt="" id="BLOGGER_PHOTO_ID_5625325318940943346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Alternativly we could have made the transistors big enough so that the gutter doesn't matter.  I added the variable main_area_left_gutter and set it to 0.  I'm not clear why they added a gutter to the left but not bottom.  In any case, lets see some clocking action! (The above image was taken before I added the clock)  Clock on:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-CSXmD6xR6zs/ThExYH-xoFI/AAAAAAAAAdI/5P9nTKaa4Hw/s1600/input_high_fixed.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 246px;" src="http://1.bp.blogspot.com/-CSXmD6xR6zs/ThExYH-xoFI/AAAAAAAAAdI/5P9nTKaa4Hw/s320/input_high_fixed.png" alt="" id="BLOGGER_PHOTO_ID_5625331700091428946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Clock off:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-MoESumjyJdE/ThExYXR723I/AAAAAAAAAdQ/hzAsPeAxDzE/s1600/input_low_fixed.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 248px;" src="http://4.bp.blogspot.com/-MoESumjyJdE/ThExYXR723I/AAAAAAAAAdQ/hzAsPeAxDzE/s320/input_low_fixed.png" alt="" id="BLOGGER_PHOTO_ID_5625331704198323058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And it works!   As you can see, the powered and grounded diffusion stay the same and the active diffusion area changes along with the metal.  Not too much work overall even if you don't much about web technology.&lt;br /&gt;&lt;br /&gt;Thanks to the visual6502 folks for providing such great software and making my inverter be more correct instead of "just work"!  My next steps will be to start cross referencing the *.js against the die images and also to generate *.js automatically from layer images.  On a final note, I've also learned a relatively simple technique for preparing ICs for live analysis that I'll hopefully make a post in the near future about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-1189726618699726816?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/1189726618699726816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/07/simple-experiment-with-jssim-visual6502.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/1189726618699726816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/1189726618699726816'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/07/simple-experiment-with-jssim-visual6502.html' title='A simple experiment with JSSim (visual6502)'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-IFELAVZfJQg/ThD_X1ZTpZI/AAAAAAAAAcA/5R6Jy_ma-8E/s72-c/visual6502_running.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-2001590986164242153</id><published>2011-03-02T20:20:00.000-08:00</published><updated>2011-03-02T23:56:47.564-08:00</updated><title type='text'>Studying the CD4001</title><content type='html'>Somewhat arbitrarily I decided a CD4001 would be a good chip to really study to get a better feel for how a chip was put together.  While I can recognize bits and pieces of larger chips, I still lack the fundamental understanding of how to recognize raw transistor arrangements.  Although such basic logic chips have heavy optimizations which can be somewhat undesirable as a study tool, I'm hoping their simplicity makes up for it.&lt;br /&gt;&lt;br /&gt;The original chip I was going to look at was a Fairchild CD4011:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-PWe3z9dDMF4/TW8X2CIw4-I/AAAAAAAAAWY/6z3_7fatJok/s1600/package.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 130px;" src="http://2.bp.blogspot.com/-PWe3z9dDMF4/TW8X2CIw4-I/AAAAAAAAAWY/6z3_7fatJok/s320/package.jpg" alt="" id="BLOGGER_PHOTO_ID_5579704680389338082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I decapsulated it and found it had nice coloring:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-alLtkT8QlDg/TW8Yd5P4cpI/AAAAAAAAAWg/FY9jzB80boY/s1600/corner_example.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 270px;" src="http://1.bp.blogspot.com/-alLtkT8QlDg/TW8Yd5P4cpI/AAAAAAAAAWg/FY9jzB80boY/s320/corner_example.jpg" alt="" id="BLOGGER_PHOTO_ID_5579705365198041746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hopefully "POS" doesn't refer to their confidence in their design. This was only intended to be a preliminary quick photo before cleaning, but my metal tweezers slipped and sent it flying to who knows where.  I now have plastic tweezers which tend to chip the dies less and less susceptible to slipping.   Anyway, take a look at what I think is a National Semiconductor 4001 (was in a tank of 4001's):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-ztKLlRPDQh0/TW9BmnTcNhI/AAAAAAAAAXg/CTF4E-t0WEg/s1600/national_semi.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 139px;" src="http://4.bp.blogspot.com/-ztKLlRPDQh0/TW9BmnTcNhI/AAAAAAAAAXg/CTF4E-t0WEg/s320/national_semi.png" alt="" id="BLOGGER_PHOTO_ID_5579750594976691730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In a similar area:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-V2pPlxORrRo/TW853Iox_YI/AAAAAAAAAWw/LWhz5MNNhc0/s1600/national_semi_corner.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 272px;" src="http://3.bp.blogspot.com/-V2pPlxORrRo/TW853Iox_YI/AAAAAAAAAWw/LWhz5MNNhc0/s320/national_semi_corner.jpg" alt="" id="BLOGGER_PHOTO_ID_5579742082709454210" border="0" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-KTLe2RWRYcs/TW85BAx_V_I/AAAAAAAAAWo/6CKi1roUEXw/s1600/national_semi_corner.jpg"&gt;&lt;br /&gt;&lt;/a&gt;Maybe its just the "natural" arrangement for this sort of configuration?  I'll figure out more as I etch out the transistors.  Its interesting though that ones a CD4001 and the other is a CD4011.&lt;br /&gt;&lt;br /&gt;Another item is interest is that older Texas Instruments datasheets had top metal included.  Compare a datasheet with one of my snaps:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-fB7Q_WlxBnc/TW86f_UYyvI/AAAAAAAAAW4/0cnQyj64c_Y/s1600/ti_datasheet_cd4001b_6939.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 264px;" src="http://1.bp.blogspot.com/-fB7Q_WlxBnc/TW86f_UYyvI/AAAAAAAAAW4/0cnQyj64c_Y/s320/ti_datasheet_cd4001b_6939.png" alt="" id="BLOGGER_PHOTO_ID_5579742784582634226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;...and the (rough) stitch:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Y_VbTyxxf3U/TW875N44YrI/AAAAAAAAAXA/ORSQsAx8iMg/s1600/poly3.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://2.bp.blogspot.com/-Y_VbTyxxf3U/TW875N44YrI/AAAAAAAAAXA/ORSQsAx8iMg/s320/poly3.jpg" alt="" id="BLOGGER_PHOTO_ID_5579744317502153394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One interesting thing with the TI parts is that you can identify pin 1 with a bullet  shaped pad.  Other vendors have similar things and it seems the shapes tend to be unique per vendor.  For example, it seems Motorola may use an octagon like pattern (all taken from what appear to be different revisions of the same 4001):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-whREWWw0c0U/TW8_J7wDTNI/AAAAAAAAAXQ/QC0CBlGjHOo/s1600/motorola_pad_1.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 275px;" src="http://4.bp.blogspot.com/-whREWWw0c0U/TW8_J7wDTNI/AAAAAAAAAXQ/QC0CBlGjHOo/s320/motorola_pad_1.png" alt="" id="BLOGGER_PHOTO_ID_5579747903225941202" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/-p4EuzxwfK8k/TW8_KUpYhdI/AAAAAAAAAXY/fXID835cPwY/s1600/motorola_pad_2.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/-gDRylCK6Nqw/TW8_JT9erWI/AAAAAAAAAXI/-1R0LQfr8Es/s1600/motorola_pad_0.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 268px;" src="http://1.bp.blogspot.com/-gDRylCK6Nqw/TW8_JT9erWI/AAAAAAAAAXI/-1R0LQfr8Es/s320/motorola_pad_0.png" alt="" id="BLOGGER_PHOTO_ID_5579747892544843106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-p4EuzxwfK8k/TW8_KUpYhdI/AAAAAAAAAXY/fXID835cPwY/s1600/motorola_pad_2.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 276px;" src="http://3.bp.blogspot.com/-p4EuzxwfK8k/TW8_KUpYhdI/AAAAAAAAAXY/fXID835cPwY/s320/motorola_pad_2.png" alt="" id="BLOGGER_PHOTO_ID_5579747909908858322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The first two are nearly identical.  The last one has a full octagon where as the first two had a square corner.&lt;br /&gt;&lt;br /&gt;I have some etching chemicals coming that will hopefully come by this weekend and I can use to expose some transistors.  I have a roll of 100 Phillips 4011's (about $6 from Jameco):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-HYlJPfINxbM/TW9BzR2t-7I/AAAAAAAAAXo/n6mpPtVOEVQ/s1600/package.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 205px;" src="http://4.bp.blogspot.com/-HYlJPfINxbM/TW9BzR2t-7I/AAAAAAAAAXo/n6mpPtVOEVQ/s320/package.jpg" alt="" id="BLOGGER_PHOTO_ID_5579750812557376434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;which I'll practice on and then expose other chips that I have more limited capacities after I have some results.  Since these chips are so simple, I can actually make guess as to what a lot of things do, but I would like the transistors as well to complete the picture.  If successfull, I'd like to write up a tutorial that takes someone through decoding the chip.&lt;br /&gt;&lt;br /&gt;On a random note, I get a lot of my chips by scrapping old electronics.  I heat gun the board (wearing my 3M industrial respirator so as to not get too many fumes) and collect chips into a tray.  Usually there are only a few I really care about, such as the main CPU or some FPGAs.  There are lots of leftover small chips.  Its not cost effective for me to use them in anything I design for a number of reasons.  So, what to do with them?  How about throw them in a beaker and decap in mass:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-PZZRfIC2lk4/TW9EjvZ5BfI/AAAAAAAAAXw/Pl1iAHX61bs/s1600/in_beaker.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/-PZZRfIC2lk4/TW9EjvZ5BfI/AAAAAAAAAXw/Pl1iAHX61bs/s320/in_beaker.jpg" alt="" id="BLOGGER_PHOTO_ID_5579753844146505202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The larger chip is an i960 that I savagely ripped out of a computer that was being junked.  As such, it got cracked in two spots.  Setting up for mass photography:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-sRNJ5tSq1YE/TW9Ej3ZHA2I/AAAAAAAAAX4/7stf8xwnHfY/s1600/setup.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 195px;" src="http://4.bp.blogspot.com/-sRNJ5tSq1YE/TW9Ej3ZHA2I/AAAAAAAAAX4/7stf8xwnHfY/s320/setup.jpg" alt="" id="BLOGGER_PHOTO_ID_5579753846290711394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;They are on a microscope slide with sticky tape.  I estimate I spent only about 1 min on each chip.  Granted, this has limited usefulness, but it does show a number of interesting designs and I was never going to use the chips otherwise.  For the curious, I uploaded a bunch of them to http://intruded.net:8080/uv/UVSG/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-2001590986164242153?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/2001590986164242153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/03/studying-cd4001.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2001590986164242153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2001590986164242153'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/03/studying-cd4001.html' title='Studying the CD4001'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-PWe3z9dDMF4/TW8X2CIw4-I/AAAAAAAAAWY/6z3_7fatJok/s72-c/package.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-7846951198764033524</id><published>2011-02-17T23:21:00.000-08:00</published><updated>2011-02-20T23:36:50.370-08:00</updated><title type='text'>Scaling up image stitching</title><content type='html'>In summary, find the Python program I wrote here (works, but work in progress), you'll need the entire repo though:&lt;br /&gt;https://github.com/JohnDMcMaster/pr0ntools/tree/master/stitch&lt;br /&gt;&lt;br /&gt;Now that image capture is getting reasonably automated, stitching is the next bottleneck for mass scale IC -&gt; netlist conversion.  The Visual6502 team is working at scaling up their image -&gt; netlist conversion.  I recently got in contact with them and am hoping to try to get more involved.  In the meantime, I suppose I'm a turbo nerd  and just even looking over the layouts.&lt;br /&gt;&lt;br /&gt;Knowing that Visual6502 had the best images, I managed to convince Christian Sattler to give me his stitch code and get it under an open source license which I somewhat arbitrarily called csstitch.  You can now &lt;a href="https://github.com/JohnDMcMaster/csstitch"&gt;find it here&lt;/a&gt; along with some of my patches.  Unfortunatly, I quickly realized that the high quality imagery from the confocal microscope had simplified a lot of the stitching.  For example, no photometric optimization was being done and it was based off of autopano-sift-c (SIFT based), which I've always gotten far inferior results compared to autopano.kolor.com (also SIFT based, which I call autopanoaj since that's the author's initials and autopano is too vague).  From what I can tell, autopanoaj's secret may be that it has a very good outlier detection algorithm.  If you turn it off, it produces many very poor control points (features).  I've also been playing around with panomatic (SURF based).  My general feel has been that the quality is less than autopano-sift-c, but I haven't had enough time yet to give it a fair trial.&lt;br /&gt;&lt;br /&gt;Having this experience and getting some ideas from csstitch, I had dabbled at making my own higher performance stitching app.  With the CNC producing very accurate XY coordinates, it seemed I could heavily optimize the control point finding process.  Unfortunately, there turned out to be a bunch of gotchas along the way.  Some of them are due to some oddities of the .pto format, some of them due to the fact that I run autopanoaj under WINE (yuck...) since I don't want to run Windows and the Linux version is out of date.&lt;br /&gt;&lt;br /&gt;The first step is to arrange the images into a rectangle.  Since the Python Image Library (PIL) and .pto like the origin at the upper left, this seemed the natural coordinate system.  At first I tried lower left since that's what I was taught in math class, but quickly realized this was a bad idea and converted the code to use upper left hand coordinate system.  I added a series of flip options so that as long as you started in some reasonable grid layout, you could flip it to the upper left hand corner convention.  I also pre-process the images with something like "find '*.jpg' -exec convert -strip {} {} ';'" to get rid of accelerometer data and other stuff that I found over-smart programs used to mess things up.  For example, gthumb will flip images based on this and made me arrange the images wrong.  Anyway, start by getting them into some intuitive grid and then flip them as mentioned earlier:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-Wac1SA8tUk8/TV4mTU90uMI/AAAAAAAAAUU/QYZ2C8oVy64/s1600/arranged_images_gthumb.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 297px;" src="http://2.bp.blogspot.com/-Wac1SA8tUk8/TV4mTU90uMI/AAAAAAAAAUU/QYZ2C8oVy64/s320/arranged_images_gthumb.png" alt="" id="BLOGGER_PHOTO_ID_5574935502218639554" border="0" /&gt;&lt;/a&gt;And I had a picture demonstrating flips...but don't know where it is.  In any case, these pictures are already in the correct order above, but are not named correctly for the column/row convention.  I might allow parsing rows first to make the above arrangement possible.  If you add a transpose, the image matrix is arranged correctly.&lt;br /&gt;&lt;br /&gt;Next, it generates all of the adjacent image pairings (as a generator).  The images are cut down to only stitch on a common overlap area.  This cuts down processing time considerably, reduces false positives by limiting where matches can be placed. However, we've added some complexity with merging project files, discussed later.  Image pairs look something like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-Bcw1mp5nWO4/TV4qlVMi3-I/AAAAAAAAAU0/J_M9puxHth0/s1600/sub_pair_1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 142px;" src="http://4.bp.blogspot.com/-Bcw1mp5nWO4/TV4qlVMi3-I/AAAAAAAAAU0/J_M9puxHth0/s320/sub_pair_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5574940209564540898" border="0" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-ezeK450-V0k/TV4qLA8PFXI/AAAAAAAAAUk/K4Rt7F2veeY/s1600/sub_pair_1.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-BR2dTE-sNf0/TV4qlCbcoqI/AAAAAAAAAUs/585vzMItH7Q/s1600/sub_pair_0.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 142px;" src="http://1.bp.blogspot.com/-BR2dTE-sNf0/TV4qlCbcoqI/AAAAAAAAAUs/585vzMItH7Q/s320/sub_pair_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5574940204526772898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A lot of the distortion you see I originally thought was due to camera-lens or other similar alignment.  I eventually realized it had to do with the non-uniformity of my light source.  It has a diffuser filter wheel which seems to have helped a lot.  I also put it more off center which decreased intensity, but made the light more regular.  In any case, it should be obvious from the above images that photometric optimization is a must for my images.&lt;br /&gt;&lt;br /&gt;Next running autopanoaj under Linux required some magic.  First, it doesn't behave well to a number of file related options, possible due to WINE imperfections.  The only way for it to reliably work is to let it generate its own project file(s) by running it without any file options in the dir you have the images and want the project file(s) in.  This requires post-processing to convert the WINE file paths to Linux file paths for the image names.&lt;br /&gt;&lt;br /&gt;After that, projects are combined with pto_merge.  While autopanoaj produced fairly lean projects, pto_merge seems to shove a bunch of junk in.  This was creating some issues, so I decided to filter a lot of this out.&lt;br /&gt;&lt;br /&gt;Finally, I do some post processing to get things closer to the final output.  This includes changing the mapping to rectilinear and changing variables to only d (x) and e (y) optimization.  Currently, stitching has to be finished in the GUI.  This should be fixed if I can eliminate more control point gaps by image processing.&lt;br /&gt;&lt;br /&gt;.pto documentation is surprisingly scarce among panotools.  I don't know if I'm just not looking in the right place.  I eventually realized that the suite that pto_merge is part of has some good documentation and was quite happy to find good documentation on the .pto format.  Would be something good to add to the panotools wiki.  I just requested mailing list membership and might bounce some of my ideas off of them.&lt;br /&gt;&lt;br /&gt;One of the issues is that some of my images are of such poor quality that RANSAC / min result thresholding rejects the control points entirely.  This is usually due to a blurry image.  Example troublesome pair:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-BQetD5ET3sQ/TV4xJLTz6zI/AAAAAAAAAVM/BRNY8QW5xNo/s1600/1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 142px; height: 320px;" src="http://4.bp.blogspot.com/-BQetD5ET3sQ/TV4xJLTz6zI/AAAAAAAAAVM/BRNY8QW5xNo/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5574947422455720754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-lby4kbICg4c/TV4xIwBc-MI/AAAAAAAAAVE/5o8lJf3yIVA/s1600/0.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 142px; height: 320px;" src="http://4.bp.blogspot.com/-lby4kbICg4c/TV4xIwBc-MI/AAAAAAAAAVE/5o8lJf3yIVA/s320/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5574947415130962114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If I remove RANSAC, I can get it to generate a very poor match:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-nsnu178iQyM/TV4xtQ7RNYI/AAAAAAAAAVU/oWFacusT-Zc/s1600/orig.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 319px;" src="http://3.bp.blogspot.com/-nsnu178iQyM/TV4xtQ7RNYI/AAAAAAAAAVU/oWFacusT-Zc/s320/orig.png" alt="" id="BLOGGER_PHOTO_ID_5574948042438686082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After a suggestion from someone, I played around with Kolourpaint image  transforms and observed that softening the images (blurring sorta)  causes the features to be uniform in both and can successfully generate  accurate control points.  Although the images look somewhat different,  the control points are still in the same location on the original  images.  Example transformed images:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-fN9ynOmcxbw/TV4yJZNLlfI/AAAAAAAAAVc/DHq7YXB9LTg/s1600/0.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 142px; height: 320px;" src="http://1.bp.blogspot.com/-fN9ynOmcxbw/TV4yJZNLlfI/AAAAAAAAAVc/DHq7YXB9LTg/s320/0.jpg" alt="" id="BLOGGER_PHOTO_ID_5574948525697635826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-tm2311rr6F8/TV4yKbzeBII/AAAAAAAAAVk/A-PJoKyhzAY/s1600/1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 142px; height: 320px;" src="http://4.bp.blogspot.com/-tm2311rr6F8/TV4yKbzeBII/AAAAAAAAAVk/A-PJoKyhzAY/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5574948543574967426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-ACDoc3F1eQ8/TV4yrWsXQVI/AAAAAAAAAVs/-slWn9RyenQ/s1600/soften.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 306px; height: 320px;" src="http://1.bp.blogspot.com/-ACDoc3F1eQ8/TV4yrWsXQVI/AAAAAAAAAVs/-slWn9RyenQ/s320/soften.png" alt="" id="BLOGGER_PHOTO_ID_5574949109138669906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Wow!  What an improvement.  The new set was ran with RANSAC since it generated so much better data.  I have yet to figureout how to implement an equivalent transform in Python, although I did some preliminary tests with ImageTransform.* and haven't tried very hard yet.&lt;br /&gt;&lt;br /&gt;I've also been working on fully decoding a CD4011.  Hopefully I'll have a write-up of that soon.  In some ways, large CMOS designs are easier than small jobs because standard logic cells and other components have to be more regular for large designs to scale.  That aside, the schematic is rather simple and other factors make the number of permutations fairly small.  The main issue has actually been how to record the circuit nicely.  My main choices so far seem to be the visual6502 Python GUI and Gimp.  I've found GIMP not so user friendly, although I hear its not so bad once you get use to it.  I'm not sure if any pictures of the layout editor have been published and I don't remember any restrictions not to publish them, so for those of you who have never seen the layer editor:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-NmydisKkA3k/TV4v_izTnLI/AAAAAAAAAU8/Qz1SUT2aU4A/s1600/visual6502_editor.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 294px; height: 320px;" src="http://2.bp.blogspot.com/-NmydisKkA3k/TV4v_izTnLI/AAAAAAAAAU8/Qz1SUT2aU4A/s320/visual6502_editor.png" alt="" id="BLOGGER_PHOTO_ID_5574946157451517106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I now work for an aerospace company, &lt;a href="http://www.skyboximaging.com/"&gt;Skybox Imaging&lt;/a&gt; where i'm now starting to learn about rad hard parts.  Don't think I can get any from work, but if someone happened to have something, it might be fun to image and compare to other parts (maybe not be able to publish if ITAR issues though).  Finally, someone suggested I submit something to kickstart, so I figured why not.  Better toys, better research.&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;Kickstart rejected me, was worth a try.  Looking back over tools, Degate is really what I should be using.  I played with it a little and and if I really want simulatable results, I'll look into writing a plugin for it to export to visual6502 jsim format.  Its too bad I lost the Fairchild CD4011 I had, it looked a lot more like textbook CMOS I had seen.  I only got initial images from it and then lost it.  Since then, I've gotten better (plastic now) tweezers that tend not to slip and launch things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-7846951198764033524?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/7846951198764033524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/02/scaling-up-image-stitching.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7846951198764033524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7846951198764033524'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/02/scaling-up-image-stitching.html' title='Scaling up image stitching'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Wac1SA8tUk8/TV4mTU90uMI/AAAAAAAAAUU/QYZ2C8oVy64/s72-c/arranged_images_gthumb.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-787098315368027658</id><published>2011-01-27T20:29:00.000-08:00</published><updated>2011-01-28T14:18:38.591-08:00</updated><title type='text'>Metalurgical microscope CNC</title><content type='html'>I now own what is possibly the worlds first combination CNC milling machine and metalurgical microscope.&lt;br /&gt;I've realized among things, I just like looking at dies to admire the work put into them.  Unfortunately, its a lot of work to take the many thousands of pictures required to get a good level of detail on even something like a 386.  Plus, if you want the whole circuit, you need to repeat this for many layers.&lt;br /&gt;Fortunately, I have some background in robotics and since I'm planning on getting a better microscope in the next few months, I don't feel bad being a little more aggressive with my current setup.  A Unitron N, the model I have, is suppose to look something like this (image from http://microscopesonline.info/):&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_MJhykioAWqo/TUJHkjmXfMI/AAAAAAAAATA/TicZysjgOcs/s1600/a_unitron_n.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 181px; height: 279px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/TUJHkjmXfMI/AAAAAAAAATA/TicZysjgOcs/s320/a_unitron_n.png" alt="" id="BLOGGER_PHOTO_ID_5567090782740380866" border="0" /&gt;&lt;/a&gt; The z-axis gear got partially stripped at one point when I was trying to fit a shim as mine was missing.  One thing in particular I hated though was the upside down sample mounting.  I usually used post-its or similar to hold the dies to a drilled out petri dish.  Which of course brings to the next annoyance that its also annoying to even get something mounted onto the stage at all.&lt;br /&gt;Not too scared to be a little aggressive then at my half loved contraption, I got this after a few modifications:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TUJJeyvEMqI/AAAAAAAAATI/823Ny3YzrpE/s1600/overview.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 254px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TUJJeyvEMqI/AAAAAAAAATI/823Ny3YzrpE/s320/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5567092882747437730" border="0" /&gt;&lt;/a&gt;See a &lt;a href="http://www.youtube.com/watch?v=i79gllA3WSI"&gt;crude video of it working&lt;/a&gt; here.&lt;br /&gt;Some time ago I ditched the polaroid setup since I wasn't going to use that in any form. Next, I mounted the microscope upside down on some t-slot aluminium to make it much more convenient to view samples.  Next, I wanted CNC control and I didn't really like the XYZ set-up anyway, so I replaced the XY with my Sherline 2000 CNC XY stage.  Turns out, the CNC head can also still fit, but I didn't have it there during early testing.&lt;br /&gt;The Z axis was a bit trickier. An earlier picture that shows the basic idea:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TUJa_b2-99I/AAAAAAAAATY/fluCr99vMTo/s1600/z_axis.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 282px; height: 320px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TUJa_b2-99I/AAAAAAAAATY/fluCr99vMTo/s320/z_axis.jpg" alt="" id="BLOGGER_PHOTO_ID_5567112135239989202" border="0" /&gt;&lt;/a&gt;Also you can see I had to tape the eyepieces in so they wouldn't fall out.  At first I tried to figure something out with my rotary table since it was the only other heavy duty CNC equipment I (thought I) had.  I also had a Z stage for optical work, but the thumb screw was very hard to turn and adapting a servo would be difficult.  The dimensions were also awkward to actuate it using the rotary table.  I eventually realized I had a CNC micrometer from half of a UV-VIS spectrometer I found and scrapped at RPI.  The brackets were close enough to easily adapter to the XY t-slot with an l-bracket.  The sample tray base is a largish l-bracket which I've attached several different holders on to experiment.  Ultimately I'll probably replace it was a kinematic mirror mount so I can correct tilt errors easily.  An early test was to instead use a largish petri dish for the same purpose, but I found that Z axis movement tended to move things around too much.  I should still try to couple it tighter to the main axis to reduce vibration, but it doesn't seem suitable enough unfortunately.  Finally, the original set-up depended on gravity to remain stable.  To compensate, I have it tightened with a rubber band:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TUJdmPmnHqI/AAAAAAAAATo/IobK1ZmYIgs/s1600/rubber_band.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 258px; height: 320px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TUJdmPmnHqI/AAAAAAAAATo/IobK1ZmYIgs/s320/rubber_band.jpg" alt="" id="BLOGGER_PHOTO_ID_5567115000988245666" border="0" /&gt;&lt;/a&gt;The rubber band goes around the brass part which was suppose to be pressed against the shaft by the weight of the equipment mounted to it.  As its been turned on its side, this is no longer true.  At some point I might see if I can make some more proper spring loaded replacement.&lt;br /&gt;One issue came up was that although you still can view through the eyepiece, its pretty awkward.  With the camera over one and not wanting to re-adjust, it becomes difficult.  So, I wanted to get the view onto a computer screen which is probably nicer on the eyes anyway.  A 1/8" audio style jack breaks out composite where I convert it to an RCA type plug so it can go into my composite -&gt; VGA converter box.  The VGA then goes to an LCD display that was affixed to the t-slot.  The second display behind the first, possibly not obvious in the above image, was arbitrarily fixed there to get a display up on a media server nearby and get the screen off of the floor.&lt;br /&gt;The camera is mounted on t-slot aluminium as well.  My Canon SD630 doesn't have a remove capture cord port and USB only supports PTP, so there is no built in way to do remote capture.  So, I removed the top cover and soldered some wires onto the capture button.  There are two spots: focus and snap.  Shorting snap by itself is not enough to take a picture, focus must be depressed first.  A DB25 breakout box runs to some optoisolators to short the signal.  I figured out the correct polarity by using a volt meter on the leads coming from the camera button.&lt;br /&gt;Electronics hardware is very simple.  DB25 goes to a breakout board and then continues onto the stock Sherline driver box.  I made a simple adapter to use the Vexta motor on the a axis with the Sherline box.  The camera driver circuitry is very minimal:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_MJhykioAWqo/TUJcWxt-pwI/AAAAAAAAATg/vnnieoWLrBw/s1600/breadboard.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 246px; height: 320px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/TUJcWxt-pwI/AAAAAAAAATg/vnnieoWLrBw/s320/breadboard.jpg" alt="" id="BLOGGER_PHOTO_ID_5567113635756418818" border="0" /&gt;&lt;/a&gt;The unused IC there is a CD4050 buffer I was going to use on the parallel port.  I got lazy and didn't wire it up as the parallel port was already putting out near 5V.&lt;br /&gt;Finally, there are several pieces to the software.  At the core, I'm running &lt;a href="http://linuxcnc.org/"&gt;EMC2&lt;/a&gt;.  I set the step speeds and acceleration low so as to try to discourage the sample from vibrating.  The camera is actuated from M7/M8 (coolant mist/flood) and then reset with M9 (coolant off).  I use dwell instructions to give the camera enough time to take pictures, the necessary length of which I'm still working out.&lt;br /&gt;The second part of the set-up is the software that generates the g-code.  I wrote a Python program that you can find on my &lt;a href="https://github.com/JohnDMcMaster/pr0ntools/"&gt;pr0ntools github repo&lt;/a&gt;.  Its very crude currently, but may be sufficient.  It assumes you are scanning a rectangle.  One point is assumed to be the origin and the other is supplied on the command line.  In order to make a plane, I assume the most level plane you could form from those.  I'm currently always starting scans from one side on the theory it might make backlash issues less, but I'm not sure if it matters.&lt;br /&gt;The test wafer I used looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_MJhykioAWqo/TUJZsu3ui7I/AAAAAAAAATQ/l_IVC1KUPic/s1600/wafer.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TUJZsu3ui7I/AAAAAAAAATQ/l_IVC1KUPic/s320/wafer.jpg" alt="" id="BLOGGER_PHOTO_ID_5567110714414238642" border="0" /&gt;&lt;/a&gt;An interesting piece in its own right, from what I can tell it came from an &lt;a href="http://www.cpu-world.com/forum/viewtopic.php?p=97466"&gt;Intel Journey Inside the Computer educational kit&lt;/a&gt;.  Of course, I didn't scan the entire wafer, but just one chip.  While the plastic distorts the image, it does make a good test as its easy to level and rotate.&lt;br /&gt;From a combination of my lenses are kinda dirty (probably can fix this or upgrade to modern optics, think it uses DIN components), not washing the wafer holder, and the plastic layer, the first pictures came out relatively nice.  Why it may not produce quality images like the visual6502 team or Flylogic team does, it should serve to efficiently create a number of relatively high resolution shots to my hearts content.  As I get a better microscope, I might also look into CNC retrofitting it, but more likely I'll focus on improving this one as better microscopes are current beyond my budget as a high risk project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-787098315368027658?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/787098315368027658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2011/01/metalurgical-microscope-cnc.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/787098315368027658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/787098315368027658'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2011/01/metalurgical-microscope-cnc.html' title='Metalurgical microscope CNC'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MJhykioAWqo/TUJHkjmXfMI/AAAAAAAAATA/TicZysjgOcs/s72-c/a_unitron_n.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-6156477536459686433</id><published>2010-12-29T00:33:00.000-08:00</published><updated>2010-12-29T00:35:24.398-08:00</updated><title type='text'>Berlin and CCC/Berlinsides</title><content type='html'>Just wanted to say I'll be in Berlin for a few days if anybody wants to say hi.&lt;br /&gt;Lab is moving and I'm on the move, but I should also finally get settled and $$$ flowing in in the next few months, stand by for cool stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-6156477536459686433?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/6156477536459686433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/12/berlin-and-cccberlinsides.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/6156477536459686433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/6156477536459686433'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/12/berlin-and-cccberlinsides.html' title='Berlin and CCC/Berlinsides'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-4500485572348404493</id><published>2010-11-30T09:46:00.000-08:00</published><updated>2010-11-30T10:28:28.976-08:00</updated><title type='text'>Sulphuric acid decapsulation</title><content type='html'>Something I've been meaning to try for some time.  Somewhat arbitrarily I decided to go analog, the victims were a 741 op amp and a 555 timer.  The torture:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TPU8BfznedI/AAAAAAAAAQc/9mTKJKv07EQ/s1600/sulphuric_acid.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 135px; height: 320px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TPU8BfznedI/AAAAAAAAAQc/9mTKJKv07EQ/s320/sulphuric_acid.jpg" alt="" id="BLOGGER_PHOTO_ID_5545404512592165330" border="0" /&gt;&lt;/a&gt;The victim (I snapped the pins off since they are easy to remove and had more of an impact of nitric reactions):&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_MJhykioAWqo/TPU8cQXo-BI/AAAAAAAAAQk/7Kkw4IkWXUM/s1600/ST_555_before_sulphuric.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 225px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TPU8cQXo-BI/AAAAAAAAAQk/7Kkw4IkWXUM/s320/ST_555_before_sulphuric.jpg" alt="" id="BLOGGER_PHOTO_ID_5545404972304758802" border="0" /&gt;&lt;/a&gt;Initial setup:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_MJhykioAWqo/TPVCKIXKKVI/AAAAAAAAARU/Yy4OQV_oLRE/s1600/start.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 276px; height: 320px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/TPVCKIXKKVI/AAAAAAAAARU/Yy4OQV_oLRE/s320/start.jpg" alt="" id="BLOGGER_PHOTO_ID_5545411257987377490" border="0" /&gt;&lt;/a&gt;I didn't take a picture of this, but the solution started to turn brown and diffuse out around the IC before too long.  Began to turn darker:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_MJhykioAWqo/TPU_ONB98VI/AAAAAAAAARE/RE7IISK24xI/s1600/741_progress.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 261px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TPU_ONB98VI/AAAAAAAAARE/RE7IISK24xI/s320/741_progress.jpg" alt="" id="BLOGGER_PHOTO_ID_5545408029425267026" border="0" /&gt;&lt;/a&gt;And eventually black:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TPU_NafTQJI/AAAAAAAAAQ8/UQB5WQcUO-g/s1600/741_late.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 315px; height: 320px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TPU_NafTQJI/AAAAAAAAAQ8/UQB5WQcUO-g/s320/741_late.jpg" alt="" id="BLOGGER_PHOTO_ID_5545408015858090130" border="0" /&gt;&lt;/a&gt;The acid behaved differently in the 555 flask (misty, no creeping along sides in 555 vs creeping and no mist):&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_MJhykioAWqo/TPU_MjoBb4I/AAAAAAAAAQ0/GEV3FnjZ3Gs/s1600/555_late.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 307px; height: 320px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/TPU_MjoBb4I/AAAAAAAAAQ0/GEV3FnjZ3Gs/s320/555_late.jpg" alt="" id="BLOGGER_PHOTO_ID_5545408001130721154" border="0" /&gt;&lt;/a&gt;After draining and some initial acetone rinse:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TPVALFm8EpI/AAAAAAAAARM/SrXWp_XWk20/s1600/remains.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 259px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TPVALFm8EpI/AAAAAAAAARM/SrXWp_XWk20/s320/remains.jpg" alt="" id="BLOGGER_PHOTO_ID_5545409075404870290" border="0" /&gt;&lt;/a&gt;The die is seen in the leftmost object.  I've been told that sulphuric is useful for live decapsulation and it certainly shows here.  Much of the "wiring" was preserved despite prolonged exposure to acid.  Nitric on the other hand would have obliterated these.  Not as visible, but also all of the bond wires were preserved.&lt;br /&gt;Since they were both analog ICs made by ST, it less likely that they were different epoxies.  Both used fresh acid.  Probably due to some contamination in the flasks.&lt;br /&gt;I'll try to update with some IC pictures.  Nitric tends to leave a lot of residue.  This on the other hand had overall clean dies, although one of them had sort of a grainy appearance, maybe from certain residues?  Apparently the 555 didn't have a passivation layer and the 741 did which resulted in scratches on the 555 after I was careless during plucking and didn't realize it wasn't protected.&lt;br /&gt;&lt;br /&gt;In summary, this is what I thought&lt;br /&gt;Advantages&lt;br /&gt;-Less fumes than nitric acid, MIGHT be safer with less equipment / ventilation.  With the cover on my glassware and the top being somewhat cold from the environmental temperature, it seemed to reflux the acid and I didn't even really notice the fumes.  Contrast with nitric where fumes are an inherent problem from the nitrate decomposition.&lt;br /&gt;-Inexpensive&lt;br /&gt;-Readily availible materials?  Battery acid and drain cleaner are  readily availible.  Battery acid tends to be purer and would likely need  to be distilled first, but drain cleaner (ex: Bull Dozer) is much  stronger but with contaminants.  In any case, generally not a controlled  substance and one should be able to order it without too much trouble.&lt;br /&gt;Disadvantages&lt;br /&gt;-Higher working temperature.  Might literally take your hand fall off if you spilled on it.  When I was younger a single drop of cold concentrated sulphuric landed on my hand and caused a severe burn to which I'm reminded to this day by a scar.  I can't imagine what a broken boiling beaker could do.&lt;br /&gt;-From the solution turning black and the lack of bubbles, no clear indication of when its "done."  Combined with the larger cool down time of the acid and glassware, this can make it inefficient for doing small batches.&lt;br /&gt;Overall, probably a good compromise for those that want to try some of this stuff&lt;br /&gt;-Grainy appearance on dies?  Need to look more into what that came from&lt;br /&gt;&lt;br /&gt;With this in mind, one good application might be to use it as a wash after nitric.  Since I've found issues with particulate residues after nitric, a brief sulphuric bath might be able to clear them off.  I think sulphuric works at lower (ie room) temperatures, albeit much slower, so it might not even require heating.  I'll probably try to soak a fully encapsulated IC overnight and see how it goes as a starter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-4500485572348404493?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/4500485572348404493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/11/sulphuric-acid-decapsulation.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/4500485572348404493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/4500485572348404493'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/11/sulphuric-acid-decapsulation.html' title='Sulphuric acid decapsulation'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MJhykioAWqo/TPU8BfznedI/AAAAAAAAAQc/9mTKJKv07EQ/s72-c/sulphuric_acid.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-2470000792547867851</id><published>2010-11-08T21:49:00.000-08:00</published><updated>2010-11-08T22:47:50.327-08:00</updated><title type='text'>Back to Troy, NY</title><content type='html'>After spending the summer in Cambridge, MA and back to SF Bay area for a few weeks, I've been back to Troy, NY.  What makes Troy special?  I'll tell you...&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TNjhiX9MbZI/AAAAAAAAAPQ/9gEznTTXBKw/s1600/sketchy_street.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 219px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TNjhiX9MbZI/AAAAAAAAAPQ/9gEznTTXBKw/s320/sketchy_street.jpg" alt="" id="BLOGGER_PHOTO_ID_5537423722514509202" border="0" /&gt;&lt;/a&gt;Luxurious homes&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_MJhykioAWqo/TNjhP5pFwdI/AAAAAAAAAPI/o9_OfcrbjkU/s1600/furari.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 111px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/TNjhP5pFwdI/AAAAAAAAAPI/o9_OfcrbjkU/s320/furari.jpg" alt="" id="BLOGGER_PHOTO_ID_5537423405139476946" border="0" /&gt;&lt;/a&gt;Expensive cars&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_MJhykioAWqo/TNjhzFo9-XI/AAAAAAAAAPg/9IGgH0iJ6eU/s1600/booming_industry.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/TNjhzFo9-XI/AAAAAAAAAPg/9IGgH0iJ6eU/s320/booming_industry.jpg" alt="" id="BLOGGER_PHOTO_ID_5537424009655613810" border="0" /&gt;&lt;/a&gt;Booming industry&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_MJhykioAWqo/TNjhrDzaVDI/AAAAAAAAAPY/ZJa2-hMmTb0/s1600/troy_art.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 244px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TNjhrDzaVDI/AAAAAAAAAPY/ZJa2-hMmTb0/s320/troy_art.jpg" alt="" id="BLOGGER_PHOTO_ID_5537423871723590706" border="0" /&gt;&lt;/a&gt;And fine art&lt;br /&gt;&lt;/div&gt;Okay, so its not quite as bad as I make it look, but most of these were taken pretty close to my apartment.  To be fair, they've been knocking down a lot of the old buildings and graffiti is pretty rare except when this construction wall went up at RPI and people went nuts.  I'll omit those pictures as if the first pictures don't get me hate mail, I get the feeling RPI might give me a "strong suggestion" to take down the latter.&lt;br /&gt;Now that the small talk is out of the way, on to business.  Although I haven't been posting anything, a lot has been happening.  First, the microscope I previously mentioned never came, but eBay refunded me.  However, my room-mate bought a metallurgical microscope with USB camera, so I'm better off than ever.  Being off campus now, I also have less restrictions and don't have to deal with RA BS and such.  One perk of my apartment is that I got some lab space in an area that's being remodelled.  Its going to go away in January, but I'm hopefully moving out then anyway, so that shouldn't really effect me.  The end effect of this is that I'm finally getting a chance to do all of the stuff I wanted to before and actually have some time and space to try things out.&lt;br /&gt;I've imaged a bunch more IC pictures.  In particular, I have images of discrete transistors, fully delayered 7404 hex-inverter, and other ICs.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_MJhykioAWqo/TNjtfq3VfII/AAAAAAAAAP4/S44A0WTt18o/s1600/3906_top_metal.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 298px; height: 320px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/TNjtfq3VfII/AAAAAAAAAP4/S44A0WTt18o/s320/3906_top_metal.jpg" alt="" id="BLOGGER_PHOTO_ID_5537436870190136450" border="0" /&gt;&lt;/a&gt;3906 top metal&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_MJhykioAWqo/TNjt721PhJI/AAAAAAAAAQI/gpyAck3uGaY/s1600/TI_TMS320.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TNjt721PhJI/AAAAAAAAAQI/gpyAck3uGaY/s320/TI_TMS320.jpg" alt="" id="BLOGGER_PHOTO_ID_5537437354438919314" border="0" /&gt;&lt;/a&gt;Old TMS320 logo section&lt;br /&gt;&lt;/div&gt;On that note, a die image archive was started at http://intruded.net:8080/wiki/  Since I like Wiki's, I got myself an account and you should expect to see any die images I publicly release to appear there.  I posted a few from a bit back, but haven't gone on a rampage yet.  One of the things they are working on is getting a "Google Maps" style IC viewer for larger ICs.  A crude test page is at http://intruded.net:8080/map/ (you'll have to zoom to correct level).&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_MJhykioAWqo/TNjqwI4nWuI/AAAAAAAAAPo/q-Xc0O6-HGo/s1600/map_test.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 241px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/TNjqwI4nWuI/AAAAAAAAAPo/q-Xc0O6-HGo/s320/map_test.png" alt="" id="BLOGGER_PHOTO_ID_5537433854591589090" border="0" /&gt;&lt;/a&gt;Map view test for large ICs&lt;br /&gt;&lt;/div&gt;Regarding http://siliconpr0n.wikispaces.com/, I recently got permission from Sergei P. Skorobogatov to include images from his Semi Invasive Attacks paper on the Wiki as long as they are credited to him.  So, along with the other material I've been accumulating from my own research, expect some rapid expansion on the Wiki in the near future.&lt;br /&gt;After delayering a few 7400 series ICs, I've realized I had in fact been at the transistor layer before, but just didn't understand what I was looking at.  Probably bad been confused by all of the MOS pictures I had seen?  In any case, I tried a 74163, but found it was too complex to start with.  I could only recognize a handful of components.  A few days ago I delayered a 7404 which should provide a much cleaner reference circuit since its small and more or less split into 6 regular units.  Unfortunately, I let it sit for a while without agitating it, so it crystallized a bit, but should be fine for my purposes.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_MJhykioAWqo/TNjr9yjrJvI/AAAAAAAAAPw/7tRsPGEhRY8/s1600/7404_transistors.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 308px; height: 320px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TNjr9yjrJvI/AAAAAAAAAPw/7tRsPGEhRY8/s320/7404_transistors.jpg" alt="" id="BLOGGER_PHOTO_ID_5537435188627973874" border="0" /&gt;&lt;/a&gt;7404 transistors&lt;br /&gt;&lt;/div&gt;A quick overview of the techniques I currently use and why.  Most ICs are in epoxy.  I boil them in 70% nitric until the epoxy is removed.  Lacking an ultrsonic cleaner, I wash them in room temp 3% HF for about a minute to clean the surface.  This takes a thin layer off the top, which removes most debris.  Then, depending on how patient I'm feeling, either room temperature or near boiling 3% HF to delayer the IC.  If I want to keep it suitable for live analysis (mostly my roommate has been doing this), a Dremel "drill press" with a small endmill is used to make a cavity above the die.  We use a rough estimate, usually slightly above the pins, to guess how far to go down.  The package is pre-heated to 300F and a drop is put on top, allowed to etch, and washed with acetone before it dries out.  Heating the acid doesn't seem to make a difference as its heat is negligible (plus transfer cool off) compared to many IC packages.  I also played around briefly with another low cost method that is more automatic but less selective, I'll try to post something on that soon.&lt;br /&gt;Finally, I'm interviewing with various companies and looking for a job, so if you think you might be interested in me, feel free to send me an e-mail at JohnDMcMaster &lt;at&gt; gmail.com.&lt;/at&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-2470000792547867851?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/2470000792547867851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/11/back-to-troy-ny.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2470000792547867851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2470000792547867851'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/11/back-to-troy-ny.html' title='Back to Troy, NY'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MJhykioAWqo/TNjhiX9MbZI/AAAAAAAAAPQ/9gEznTTXBKw/s72-c/sketchy_street.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-1868381158546003900</id><published>2010-07-25T09:57:00.000-07:00</published><updated>2010-07-25T10:52:35.848-07:00</updated><title type='text'>End of summer plans</title><content type='html'>As my summer internship comes to a close, I was never able to get access to microscopes over here.  If i had bugged a large number of people I might have, but there was so much else to do in Boston that its just as well.&lt;br /&gt;That doesn't mean that I haven't been preparing though. For starts, I've accumulated a small hoard of Intel CPUs that I will hope in the near future to image.  The microscope I bought a bit back wasn't as good as I thought it was, although it should still be fine for short term work coming up.  I'm very grateful to be able to borrow the microscope at RPI, but for a number of reasons it is good to get my own.  After searching around for a large portion of the summer, a decent quality Olympus microscope showed up on eBay finally:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/TExu6_630rI/AAAAAAAAAME/xZyxpidQfC0/s1600/1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 219px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/TExu6_630rI/AAAAAAAAAME/xZyxpidQfC0/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5497891204982362802" border="0" /&gt;&lt;/a&gt;What made this affordable?  Two things.  First, it was a first time eBay seller.  Second, it coming from Thailand.  So there's a bit of risk involved.  Usually people don't scam on scientific items and if they do I can probably do a chargeback  or possibly even a PayPal dispute.  I'm not sure on their policies with other countries.  If you scream loud enough, someone will usually do something if bad things happen.&lt;br /&gt;The other part is I looked briefly into what it would take for me to order RFNA.  From the companies I saw, they required you to be associated with a business.  I'm not sure if I could play any tricks with my school, but from the business standpoint it would be very expensive.  Yearly business registration fees seem to be pretty high in CA (something like $800 a year if I recall) which is not justified for this project.&lt;br /&gt;Next, I've aquired some ground glass glassware, which has been on my TODO list since early high school.  If I need to produce any chemicals for analysis now, it should be considerably easier and of higher quality.&lt;br /&gt;I fly home for CA in two weeks.  While there, my plan is to image a number of 7400 series logic chips to form a practical foundation.  This should also be useful for others to study from.  I could have bought some from Digikey etc, but I am thinking they probably use newer process technologies that would be harder to analyse.  So, I heat gunned some off of old circuit boards and will be using those.  Assuming those three weeks go well and my microscope arrives at RPI, as permitting during the school year I will start imaging the Intel chips.&lt;br /&gt;Finally, I may be involved playing a small part in a commercial project coming up.  While I will not be able to disclose the details of it, part of it would include them buying all of the acid and such I need to decap the chips, giving me an idea of how using commercial grade equipment contrasts.  My role will be focused on the decapsulating and possibly aiding in the analysis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-1868381158546003900?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/1868381158546003900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/07/end-of-summer-plans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/1868381158546003900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/1868381158546003900'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/07/end-of-summer-plans.html' title='End of summer plans'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_MJhykioAWqo/TExu6_630rI/AAAAAAAAAME/xZyxpidQfC0/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-7446794855511455184</id><published>2010-05-15T22:06:00.000-07:00</published><updated>2010-05-15T23:33:39.227-07:00</updated><title type='text'>Biological, inverted microscope layer image comparison</title><content type='html'>Biological, top metal (220X):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S-99q-ullxI/AAAAAAAAAKI/QcZU5m0bCp8/s1600/biological_top_metal.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S-99q-ullxI/AAAAAAAAAKI/QcZU5m0bCp8/s320/biological_top_metal.jpg" alt="" id="BLOGGER_PHOTO_ID_5471730249624819474" border="0" /&gt;&lt;/a&gt;Biological interconnect doesn't image well as all black.  Sample for comparison (not same area):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S--O7V5kvDI/AAAAAAAAAKg/vRwY1kh0lQs/s1600/biological_interconnect.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S--O7V5kvDI/AAAAAAAAAKg/vRwY1kh0lQs/s320/biological_interconnect.jpg" alt="" id="BLOGGER_PHOTO_ID_5471749222420495410" border="0" /&gt;&lt;/a&gt;If you are stuck with a biological microscope, set the intensity as high as you can and you should be able to make things out with your eye, but cameras might have more difficulty.&lt;br /&gt;Inverted metallurgical (inverted), top metal (440X):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S-99rSvM0QI/AAAAAAAAAKQ/ZtRH5E_G6Fk/s1600/inverted_top_metal.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 224px; height: 320px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S-99rSvM0QI/AAAAAAAAAKQ/ZtRH5E_G6Fk/s320/inverted_top_metal.jpg" alt="" id="BLOGGER_PHOTO_ID_5471730254996099330" border="0" /&gt;&lt;/a&gt;Inverted metallurgical (inverted), interconnect (440X):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S-99rlkghqI/AAAAAAAAAKY/SMJbxP0slQw/s1600/inverted_interconnect.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 242px; height: 320px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S-99rlkghqI/AAAAAAAAAKY/SMJbxP0slQw/s320/inverted_interconnect.jpg" alt="" id="BLOGGER_PHOTO_ID_5471730260051527330" border="0" /&gt;&lt;/a&gt;Although all three are from the same chip type, only the two inverted images are from the exact same chip.  &lt;span style="font-weight: bold;"&gt;NOTE&lt;/span&gt;: I have done a vertical flip on the inverted images to correct them to what the actual object is like (as in the biological image).&lt;br /&gt;For those wondering where the magnification levels come from, it is a combination of the eyepiece, objective, and camera magnification.  For the biological microscope, the image was shot at 10X eyepiece * 10X objective * 2.2X camera = 220X.  For the inverted metallurgical microscope, the images were shot at 10X eyepiece * 20X objective * 2.2X camera = 440X.  Thus, I (poorly) manually stitched two images together from each to get closer to the size of the biological image.&lt;br /&gt;Alas, despite my best efforts, I still can't see transistors.  Today I tried some extended hot baths in HF acid on the chip above and even tried adding some 30% H202 which dramatically increases the action of the HF.  I'm letting it sit overnight (or maybe till Wed after finals) and see if it ate through.  Maybe these chips are just resistant?  I'll have to go back to sanding though to get other sample since I haven't gotten another technique to work yet on epoxied ICs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-7446794855511455184?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/7446794855511455184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/05/biological-inverted-microscope-layer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7446794855511455184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7446794855511455184'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/05/biological-inverted-microscope-layer.html' title='Biological, inverted microscope layer image comparison'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MJhykioAWqo/S-99q-ullxI/AAAAAAAAAKI/QcZU5m0bCp8/s72-c/biological_top_metal.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-9183794719699376160</id><published>2010-05-13T20:44:00.000-07:00</published><updated>2010-05-14T09:03:17.158-07:00</updated><title type='text'>Image stitching</title><content type='html'>One of the challenges of using computer analysis is that it is highly desirable to assemble a full image of the chip, but only a small section of the chip can be imaged at a time.&lt;br /&gt;For the DRAM example chip that's been used throughout several of these posts (its because they are easy to decap and I have a lot of them), I started by manually pushing the chip around since I didn't have linear stages and taking pictures, trying to get 1/3 or so overlap on each side. However, these initial sets resulted in far inferior results compared to those made by using linear stages.  That said, I need to make a comparison where I manually paste the images together.  In any case, I first tried to use Hugin to manually stitch the images together.  Unfortunately, while Hugin works very well for standard images, it seems to have issues with the vectorized patterns typical of ICs.  I was only able to paste two well formed pictures together after setting 15 or so control points:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S-zKk5kPMtI/AAAAAAAAAJA/8U8K5wfU9i0/s1600/first_stich.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 239px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S-zKk5kPMtI/AAAAAAAAAJA/8U8K5wfU9i0/s320/first_stich.JPG" alt="" id="BLOGGER_PHOTO_ID_5470970382625223378" border="0" /&gt;&lt;/a&gt;Thinking that I could do better, I looked into how to automate this process better.  I cam across some information on the SIFT algorithm.  Unfortunatly, while the SIFT algoirthm is patented by University of British Columbia, there are still some free implementations of it.  The first I evaulated with autopano and later, after a reccomendation, was autostitch. Using the screwdriver pushed around die (as opposed to linear stage), with autopano, I go this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S-zLKAhGHbI/AAAAAAAAAJI/luZVnvOhtqw/s1600/autostich_result.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 194px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S-zLKAhGHbI/AAAAAAAAAJI/luZVnvOhtqw/s320/autostich_result.jpg" alt="" id="BLOGGER_PHOTO_ID_5470971020146253234" border="0" /&gt;&lt;/a&gt;However, I can't find a result using the linear stage version.  I need ot rerun on that to confirm that autopano can't do better.&lt;br /&gt;Next I tried autostich.  After some help from my friend on the linear stage set, I go this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S-zPgSlGbmI/AAAAAAAAAJQ/Aja-4c-DHXU/s1600/my_autostich_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 136px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S-zPgSlGbmI/AAAAAAAAAJQ/Aja-4c-DHXU/s200/my_autostich_small.jpg" alt="" id="BLOGGER_PHOTO_ID_5470975800998522466" border="0" /&gt;&lt;/a&gt;My friend that reccomended it to me is a bit better at using it though, and was able to get a much nicer image seen &lt;a href="http://transistor-man.com/temp/manual_linear_PANO.jpg"&gt;here&lt;/a&gt; (warning: 16MB).  Scaled down local version:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S-zQIMR7Z4I/AAAAAAAAAJY/QY63VjodDss/s1600/manual_linear_PANO_recompress_small.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 136px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S-zQIMR7Z4I/AAAAAAAAAJY/QY63VjodDss/s200/manual_linear_PANO_recompress_small.jpg" alt="" id="BLOGGER_PHOTO_ID_5470976486502262658" border="0" /&gt;&lt;/a&gt;His version is slightly more linear.  My original image was quite distorted before he gave me the setting advice.  In order to get good images with autostich, adjust quality settings to 100% (otherwise it will shrink it), set to linear, and adjust theta value low.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-9183794719699376160?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/9183794719699376160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/05/image-stitching.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/9183794719699376160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/9183794719699376160'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/05/image-stitching.html' title='Image stitching'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_MJhykioAWqo/S-zKk5kPMtI/AAAAAAAAAJA/8U8K5wfU9i0/s72-c/first_stich.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-2589982862850633231</id><published>2010-05-13T19:48:00.000-07:00</published><updated>2010-05-13T20:08:14.887-07:00</updated><title type='text'>Inverted metallurgical microscope</title><content type='html'>A few weeks ago, Tom Ditto was kind enough to lend me this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S-y6d_CPluI/AAAAAAAAAII/XX83uz-3R7E/s1600/initial_setup.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 232px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S-y6d_CPluI/AAAAAAAAAII/XX83uz-3R7E/s320/initial_setup.jpg" alt="" id="BLOGGER_PHOTO_ID_5470952671648126690" border="0" /&gt;&lt;/a&gt;A sample image:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S-y8aTbQdTI/AAAAAAAAAIg/XH8_U6wgeWI/s1600/basic_etch.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 301px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S-y8aTbQdTI/AAAAAAAAAIg/XH8_U6wgeWI/s320/basic_etch.jpg" alt="" id="BLOGGER_PHOTO_ID_5470954807425529138" border="0" /&gt;&lt;/a&gt;It has a number of differences over a standard biological microscope.&lt;br /&gt;First, its primary advantage is that it does not require light to shine through the sample.  Instead, light is injected directly into the view path, allowing easy view of opaque objects.  I get around this with the biological microscope by shining intense lights to the side of the sample.  I'm currently using a small 650W cone shaped halogen on a rheostat.  Before I was using a 500W with a roll cage.  I don't push it anywhere near full power.  I had to make a shield to only allow in the needed amount of light and not toast the microscope with the intense heat it puts off.&lt;br /&gt;Second, it inverts the image.  As an example, here is an image of of an Intel 80486 ("486") copyright on the die:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S-y7oePBSdI/AAAAAAAAAIQ/frVP5g43-UQ/s1600/80486_label_original.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S-y7oePBSdI/AAAAAAAAAIQ/frVP5g43-UQ/s320/80486_label_original.jpg" alt="" id="BLOGGER_PHOTO_ID_5470953951333534162" border="0" /&gt;&lt;/a&gt;Note it is flipped.  After cropping and inverting, a much nicer image is produced:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S-y7xqm53mI/AAAAAAAAAIY/fvMGrtghd5M/s1600/80486_label.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 141px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S-y7xqm53mI/AAAAAAAAAIY/fvMGrtghd5M/s320/80486_label.jpg" alt="" id="BLOGGER_PHOTO_ID_5470954109273759330" border="0" /&gt;&lt;/a&gt;Those black spots are dirt on the lenses.  I've cleaned a lot off, but some of the larger spots are still present.  In order to use this analytically, I will obviously have to fully clean it so spots of dirt don't appear where some critical interconnect image should be.&lt;br /&gt;Various filters are available.  I haven't played much with these though.  I think the options include regular, polarized, and green. Here is a regular image, showing interconnect layers on some DRAM:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S-y9UqAPkVI/AAAAAAAAAI4/TRvoWn07y-w/s1600/green__no_green.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 310px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S-y9UqAPkVI/AAAAAAAAAI4/TRvoWn07y-w/s320/green__no_green.jpg" alt="" id="BLOGGER_PHOTO_ID_5470955809918652754" border="0" /&gt;&lt;/a&gt;With the green filter:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S-y9RQwQA-I/AAAAAAAAAIw/SneHa3sRBfk/s1600/green__green.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 313px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S-y9RQwQA-I/AAAAAAAAAIw/SneHa3sRBfk/s320/green__green.jpg" alt="" id="BLOGGER_PHOTO_ID_5470955751601079266" border="0" /&gt;&lt;/a&gt;Finally, although many do, for some reason the biological microscope I have doesn't have a movable stage on it.  Maybe you were expected to push a slide around with your fingers?  On the other hand, this one has an XY knobs for smooth, precise movement of the stage.&lt;br /&gt;For future work, first on the TODO list is a proper camera mount.  I'm using a clip on type mount that Tom let me borrow, but, unfortunately, its not stable enough for good images.  This should fix alignment issues resulting in fuzzy, darker colors at the bottom and will allow me to zoom in, removing the dark circle.   Next, I'm working on fitting some timing pulley's to the XY knobs for CNC control.  I have all of the parts assembled for that and could probably due the fit in several hours.  However, I need a larger peice of particle board to mount it on.  Unfortunatly, I probably won't get back to this until August when I'm done working for the summer.  With luck, I'll find someplace to continue work with it at MIT over the summer.  Extra lab space anyone?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-2589982862850633231?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/2589982862850633231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/05/inverted-metallurgical-microscope.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2589982862850633231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/2589982862850633231'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/05/inverted-metallurgical-microscope.html' title='Inverted metallurgical microscope'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_MJhykioAWqo/S-y6d_CPluI/AAAAAAAAAII/XX83uz-3R7E/s72-c/initial_setup.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-5159711558448086761</id><published>2010-05-13T17:40:00.000-07:00</published><updated>2010-05-13T18:12:51.889-07:00</updated><title type='text'>Why I'm not to the transistor layer yet, initial NaOH etch results</title><content type='html'>Several factors behind this.  First, I'm approaching finals and haven't had a lot of time to delve into the deeper layers.  Second, I haven't had much success in the few tries I've done to get below the metal layer.  Although I should try this more, the initial sanding I tried with a dremel was too course.  It had a tendency to produce a relativly uneven surface and take too much off.  The HF would take off the top metal layer, but nothing else.  I talked to Travis Goodspeed last night and he pointed out I should be (near) boiling the HF.  Yum.  Tried today briefly and I think I have some progress.  However, I really need to take some pictures as I go to get a better idea of exactly what is being corroded.&lt;br /&gt;I had also tried with some NaOH on a P3 die since I heard that is also corrosive to glass.  I ordered some KOH which I read somewhere is preferred more in the semi industry, but it got sent to my home in CA by accident, so maybe I'll play with that in a few weeks.  First, this is your typical P3 slot 1 die after being tin snip cut from the BGA carrier:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S-ygxj9_p_I/AAAAAAAAAHY/3BnRq2v5QKA/s1600/blue_overview.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 218px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S-ygxj9_p_I/AAAAAAAAAHY/3BnRq2v5QKA/s320/blue_overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5470924420677609458" border="0" /&gt;&lt;/a&gt;This is actually a metalic blue, but apperas more black in the image.  There is a gray epoxy holding it in place and a brown carrier around that.  After inspecting the blue area under the microscope, I realized its just a coating to make heat dissipation better and not actually part of the silicon.  In fact, you can see crystals poking through it (100X biological microscope):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S-yg4uaiNXI/AAAAAAAAAHo/Mcm_TLR2spA/s1600/blue_100X_0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S-yg4uaiNXI/AAAAAAAAAHo/Mcm_TLR2spA/s320/blue_100X_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5470924543740753266" border="0" /&gt;&lt;/a&gt;Unfortunatly, it was somewhat difficult to get a good picture of them, but you get the idea.  Thinking this, being a large chunk of silicon, was a good canidate for NaOH etching, I boiled it in some NaOH for a bit.  Result (note this is not the exact same chip as above):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S-yg043cAnI/AAAAAAAAAHg/IB8mdc1X1EM/s1600/noblue_overview.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 220px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S-yg043cAnI/AAAAAAAAAHg/IB8mdc1X1EM/s320/noblue_overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5470924477826859634" border="0" /&gt;&lt;/a&gt;Hmm...what are those cracks?  I think its stress from using the tin snips.  If I was doing this for an imaging sample, I should probably dremel or carefully hacksaw cut them out.  In any case, you can see the silicon crystalline surface much better (100X biological microscope):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S-yhFMkmZ7I/AAAAAAAAAHw/pVtFVkPQqOQ/s1600/noblue_50X_1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S-yhFMkmZ7I/AAAAAAAAAHw/pVtFVkPQqOQ/s320/noblue_50X_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5470924757994465202" border="0" /&gt;&lt;/a&gt;in this picture, one of the cracks is also visible.  I'm actually not sure how much the NaOH etched the surface since I didn't realize the blue wasn't silicon and wasn't really paying attention to see otherwise.  I'll try the other side of thise or some other dies I have laying around in the near future.&lt;br /&gt;Also on the not going so well side, this is how my first attempt at a rosin decap ended:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S-yeEKbNRoI/AAAAAAAAAHQ/873hnAUK9hM/s1600/alcohol_broken_overview.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 189px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S-yeEKbNRoI/AAAAAAAAAHQ/873hnAUK9hM/s320/alcohol_broken_overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5470921441703446146" border="0" /&gt;&lt;/a&gt;After ordering some borosilicate test tubes, I tried with a heat gun instead since I could control it with a variac and gave more regular results. After a few hours of boiling, a small nick came out of the underside of the chip along the die area, but not corroded as I was hoping. However, a large portion of this time was also devoted to boiling off the petrollium jelly after which the solution darkened and roes in temperature.  The CCC IC RE Wiki page (written by Martin Schobert I think) shows the rosin doing more of a higher temp boil.  I was at a lower boil.   So, I might try to get a propane torch or a more proper alcohol lamp and try that.  I'll have a few weeks soon to mess around at home and can probably figure something out.  Also, this killed the TCO in the heat gun after I was done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-5159711558448086761?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/5159711558448086761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/05/why-im-not-to-transistor-layer-yet.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/5159711558448086761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/5159711558448086761'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/05/why-im-not-to-transistor-layer-yet.html' title='Why I&apos;m not to the transistor layer yet, initial NaOH etch results'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MJhykioAWqo/S-ygxj9_p_I/AAAAAAAAAHY/3BnRq2v5QKA/s72-c/blue_overview.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-3426700653488675899</id><published>2010-04-20T18:08:00.001-07:00</published><updated>2010-04-20T19:20:37.255-07:00</updated><title type='text'>Paypal payload</title><content type='html'>There have been several advancements including work on finishing the automation of the biological microscope and automation of the inverted metelergical microscope, but school has kept me busy and I haven't had time to finish those.  In the meantime, here is a small deviation on taking apart a security key to get to the IC.  In such situations, there is a double decap.  We not only have to decap the IC pacakge, but its a bit of an effort to even get to it.&lt;br /&gt;At DEF CON 17, there was a side event of sorts called &lt;a href="http://www.securitybsides.com/BSidesLasVegas01"&gt;BSides&lt;/a&gt;/&lt;a href="http://twitter.com/neighborcon"&gt;Neighborcon&lt;/a&gt; (thanks Travis!).  This actually had my favorite talk of the entire trip by HD Moore on &lt;a href="http://warvox.org/"&gt;WarVOX&lt;/a&gt;.  In any case, PayPal handed out stacks of the PayPal (or someone anyway, I think it was them) &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=xpt/Marketing_CommandDriven/securitycenter/PayPalSecurityKey-outside"&gt;Security Key&lt;/a&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S85Ul4RH1UI/AAAAAAAAAEo/dO1aW1M46d0/s1600/beginning.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 186px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S85Ul4RH1UI/AAAAAAAAAEo/dO1aW1M46d0/s200/beginning.jpg" alt="" id="BLOGGER_PHOTO_ID_5462396407783085378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;From some articles such as &lt;a href="http://journal.drfaulken.com/paypal-security-key-card-review/"&gt;this&lt;/a&gt; it is based off of  &lt;a href="http://www.rsa.com/node.aspx?id=1156"&gt;RSA’s Securid&lt;/a&gt;.  I'm not a crypto guy, but I figure if I take some images of this and work out some of the logic, someone else more experienced in the field who can't do this type of hardware analysis might be able to build off of this work.  I won't be be imaging the chip until I can get some more experience since future cards will cost me $5 a pop.  Plus, I haven't made any agreements at this point not to tear it to shreds.  I originally had a lot, but I gave them away to a number of people who thought they were cool.&lt;br /&gt;One cool feature of these things its display  Basically, it will retain the image on it even with power gone.  It is the same (class?) of technology used in the more famous &lt;a href="http://en.wikipedia.org/wiki/Amazon_Kindle"&gt;Amazon Kindle&lt;/a&gt;.&lt;br /&gt;From what I hear, &lt;a href="http://gmweek.union.rpi.edu/"&gt;GM week&lt;/a&gt; at RPI use to be about getting wasted and they use to bring large amounts of beer for students to drink.  But they don't do that anymore.  I don't drink, but it would have been hillarious to watch.  On the surface, its about elections...w/e.  I still have my mug from last year which is better and I needed some glassware to dissolve the card in.  To top it off, it had a Vegas theme, which seemed appropriete to make the card go full circle.&lt;br /&gt;In any case, lets get started with the teardown.  After a few minutes in acetone, the outter cover is starting to shed:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S85W4k2FfDI/AAAAAAAAAEw/hoDh1nLWfNU/s1600/initial_dissolve_front.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 108px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S85W4k2FfDI/AAAAAAAAAEw/hoDh1nLWfNU/s200/initial_dissolve_front.jpg" alt="" id="BLOGGER_PHOTO_ID_5462398928010181682" border="0" /&gt;&lt;/a&gt;A side view showing the ridges a bit better:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S85XCBss7VI/AAAAAAAAAE4/sheRVOVixa0/s1600/initial_dissolve_side.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 124px; height: 200px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S85XCBss7VI/AAAAAAAAAE4/sheRVOVixa0/s200/initial_dissolve_side.jpg" alt="" id="BLOGGER_PHOTO_ID_5462399090374274386" border="0" /&gt;&lt;/a&gt;I think peeled this off to speed things up and soaked it a bit more:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S85XSYEVxtI/AAAAAAAAAFA/zK7yt4qd76o/s1600/second_dissolve_left.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 176px; height: 200px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S85XSYEVxtI/AAAAAAAAAFA/zK7yt4qd76o/s200/second_dissolve_left.jpg" alt="" id="BLOGGER_PHOTO_ID_5462399371256907474" border="0" /&gt;&lt;/a&gt;The other half is starting to break apart a bit:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S85Xa1soh5I/AAAAAAAAAFI/IRFd_MofRlo/s1600/second_dissolve_right.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 154px; height: 200px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S85Xa1soh5I/AAAAAAAAAFI/IRFd_MofRlo/s200/second_dissolve_right.jpg" alt="" id="BLOGGER_PHOTO_ID_5462399516649490322" border="0" /&gt;&lt;/a&gt;A little dissolving later, I can peel off the outside plastic to reveal the circuit board:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S85Ycty9s3I/AAAAAAAAAFQ/Cx_R0XzKJv0/s1600/electronics_exposed_overview.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 100px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S85Ycty9s3I/AAAAAAAAAFQ/Cx_R0XzKJv0/s200/electronics_exposed_overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5462400648399926130" border="0" /&gt;&lt;/a&gt;Closeup of the label section:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S85YgfS3hRI/AAAAAAAAAFY/6b6PkM1w05Y/s1600/electronics_exposed_label.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 137px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S85YgfS3hRI/AAAAAAAAAFY/6b6PkM1w05Y/s200/electronics_exposed_label.jpg" alt="" id="BLOGGER_PHOTO_ID_5462400713226683666" border="0" /&gt;&lt;/a&gt;There are very small surface mount components on the board.  The label says "InCardIC006AV11".  There's also a number 2, whatever that is for.  My guess is that five dot gold pattern is for programming and/or testing. That black dot should be the IC, which is what I'm primarily after.  Unfortunately, it has no external labeling of any kind.  Finally, the last component is what appears to be a lithium polymer battery based on its shape.  Voltage reading:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S85ZaLe0bsI/AAAAAAAAAFg/DO4CgRtDTgI/s1600/battery.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S85ZaLe0bsI/AAAAAAAAAFg/DO4CgRtDTgI/s200/battery.jpg" alt="" id="BLOGGER_PHOTO_ID_5462401704340516546" border="0" /&gt;&lt;/a&gt;Amazingly, the card still works! (the battery was removed later, still had battery here)&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-401e8f544db62358" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v17.nonxt8.googlevideo.com/videoplayback?id%3D401e8f544db62358%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331277599%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4D7B1C8D49A544CB91A9A80AC47C6E697BEF9EBE.5964C89C3184A3D21DE37B0B01D422782EFB060%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D401e8f544db62358%26offsetms%3D5000%26itag%3Dw160%26sigh%3D9MkV-JB7KgOAwXc1anLlXyo7xN8&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v17.nonxt8.googlevideo.com/videoplayback?id%3D401e8f544db62358%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331277599%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4D7B1C8D49A544CB91A9A80AC47C6E697BEF9EBE.5964C89C3184A3D21DE37B0B01D422782EFB060%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D401e8f544db62358%26offsetms%3D5000%26itag%3Dw160%26sigh%3D9MkV-JB7KgOAwXc1anLlXyo7xN8&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;The acetone was getting a bit dirty.  Time to clean it up a little:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S85c5GUpTaI/AAAAAAAAAFo/8CumZ3fBPi0/s1600/filtering.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 184px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S85c5GUpTaI/AAAAAAAAAFo/8CumZ3fBPi0/s200/filtering.jpg" alt="" id="BLOGGER_PHOTO_ID_5462405534066494882" border="0" /&gt;&lt;/a&gt;After soaking for the last time, I wasn't able to get much else to come off even after soaking for a while. I had been hoping the board was going to dissolve at least slightly and release the IC package.  Final front board image:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S85dqp-OSQI/AAAAAAAAAFw/0dwDQQwyJ-s/s1600/LCD_off_board.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 100px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S85dqp-OSQI/AAAAAAAAAFw/0dwDQQwyJ-s/s200/LCD_off_board.jpg" alt="" id="BLOGGER_PHOTO_ID_5462406385449715970" border="0" /&gt;&lt;/a&gt;The battery came off with minimal force.  Final back image:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S85d76xQPuI/AAAAAAAAAF4/cPIw2aBx3T0/s1600/LCD_off_board_back.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 107px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S85d76xQPuI/AAAAAAAAAF4/cPIw2aBx3T0/s200/LCD_off_board_back.jpg" alt="" id="BLOGGER_PHOTO_ID_5462406682016497378" border="0" /&gt;&lt;/a&gt;The black IC package was then forcably removed and stored into a vial for later analysis.  As I get better suited to dissolve the resin, I'll dissolve it and take at least a top metal layer picture.  In the meantime, I'll keep practicing on expendable chips so scarcer chips like this can be properly analyzed.&lt;br /&gt;To top things off, what kind of person would I be if I let flammables go to waste?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S85g6VB_xlI/AAAAAAAAAGA/k5vhUdWcphU/s1600/cheers.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S85g6VB_xlI/AAAAAAAAAGA/k5vhUdWcphU/s200/cheers.jpg" alt="" id="BLOGGER_PHOTO_ID_5462409953241187922" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-3426700653488675899?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/3426700653488675899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/paypal-payload.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3426700653488675899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/3426700653488675899'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/paypal-payload.html' title='Paypal payload'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_MJhykioAWqo/S85Ul4RH1UI/AAAAAAAAAEo/dO1aW1M46d0/s72-c/beginning.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-521570236768459573</id><published>2010-04-15T19:16:00.001-07:00</published><updated>2010-04-15T21:54:29.946-07:00</updated><title type='text'>IC decapping round 4: burnt perfection</title><content type='html'>As you can hopefully see from some of the previous posts, people employ many techniques to remove the irritating resin casing.  I've seen suggestions of simply burning away the casing, which I was somewhat skeptical of, thinking this would annihilate the chip.  However, I am open to ideas, and thought I'd give it a spin.&lt;br /&gt;First off, burning is probably a bad word.  The image I had in my head of how this would work was the physically heat the chip until the resin was utterly destroyed, like burning away a piece of wood.  It turns out its not hard to make the resin brittle through heating.  Or in other words, all one has to do is apply a short burst of intense heat and you can crumble the casing away with minimal chip damage.  A picture is worth a thousand words, lets see an example.  This was the result of the first chip I tried:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8fn7vQ3WnI/AAAAAAAAAEA/eIMDE3mf6hY/s1600/first_die.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 174px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8fn7vQ3WnI/AAAAAAAAAEA/eIMDE3mf6hY/s200/first_die.jpg" alt="" id="BLOGGER_PHOTO_ID_5460588086695516786" border="0" /&gt;&lt;/a&gt;It came out amazingly clean like this in under a minute.  Microscope inspection seems to indicate the die is healthy.  More on this later.  Starting from the beginning, here is a virgin chip:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8fnCGRyOeI/AAAAAAAAADo/kthqJ2i1KkU/s1600/step_1__healthy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 163px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8fnCGRyOeI/AAAAAAAAADo/kthqJ2i1KkU/s200/step_1__healthy.jpg" alt="" id="BLOGGER_PHOTO_ID_5460587096440977890" border="0" /&gt;&lt;/a&gt;A CP82C59A interrupt controller. All torch images are of one of these, but not necesarily the exact same unit.  A tube of them was being kicked around in the RPI Electronics Club junk drawer.  Torch meat now:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8fnTV2TuAI/AAAAAAAAADw/mSmTtZ2qhV0/s1600/step_2__first_light.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 174px; height: 200px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8fnTV2TuAI/AAAAAAAAADw/mSmTtZ2qhV0/s200/step_2__first_light.jpg" alt="" id="BLOGGER_PHOTO_ID_5460587392678475778" border="0" /&gt;&lt;/a&gt;You shouldn't heat the chip too strongly.  If you get this, you've gone too far:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8fndvrKLoI/AAAAAAAAAD4/QVjCXM-aQFk/s1600/step_3__red_hot.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 178px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8fndvrKLoI/AAAAAAAAAD4/QVjCXM-aQFk/s200/step_3__red_hot.jpg" alt="" id="BLOGGER_PHOTO_ID_5460587571409727106" border="0" /&gt;&lt;/a&gt;I actually would have never guessed you could get a red hot IC package.  In any case, as will be seen in the video, the most important thing is even heating.  I'm not sure what the shock temperature is, but there was a certain cutoff line where the chip was extremely brittle vs very hard.  In the video I don't heat the lower half of the chip good enough and it only breaks moderately well.&lt;br /&gt;After removing the torch, it will burn like a well down marshmallow for a few seconds:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8fofI_gRgI/AAAAAAAAAEI/BFAiZlkhoBQ/s1600/step_4__flame.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 162px; height: 200px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8fofI_gRgI/AAAAAAAAAEI/BFAiZlkhoBQ/s200/step_4__flame.jpg" alt="" id="BLOGGER_PHOTO_ID_5460588694897444354" border="0" /&gt;&lt;/a&gt;It should go out by itself fairly quick, but I was waving or blowing it out.  Result:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8fowUkpU6I/AAAAAAAAAEQ/dsaKG91Xwu4/s1600/step_5__well_done.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 138px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8fowUkpU6I/AAAAAAAAAEQ/dsaKG91Xwu4/s200/step_5__well_done.jpg" alt="" id="BLOGGER_PHOTO_ID_5460588990063793058" border="0" /&gt;&lt;/a&gt;Breaking now:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8fo3Wf_cOI/AAAAAAAAAEY/M2B-TUj0whE/s1600/step_6__extract.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 186px; height: 200px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8fo3Wf_cOI/AAAAAAAAAEY/M2B-TUj0whE/s200/step_6__extract.jpg" alt="" id="BLOGGER_PHOTO_ID_5460589110840226018" border="0" /&gt;&lt;/a&gt;This final image is the die from the video.  The one from the sequence above is the one on top shown here (contrasted with the very first one I flame decapped):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8fpHXFXQoI/AAAAAAAAAEg/3qgebWBObsY/s1600/extracted_die_and_bare.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 195px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8fpHXFXQoI/AAAAAAAAAEg/3qgebWBObsY/s200/extracted_die_and_bare.jpg" alt="" id="BLOGGER_PHOTO_ID_5460589385874883202" border="0" /&gt;&lt;/a&gt;The heat managed to separate the die and the carrier!  So that's what happens when you apply too much heat.  I wasn't paying attention at the time and I'm not sure what happened to the die.  I figured it had been melted in some weird way where as it probably fell to the floor when I cracked the casing open.  The first one I tried (bottom die above) couldn't have gone any better.  The case split perfectly and no resin was left covering the die.&lt;br /&gt;Seeing how well the die withstood the heat, I wondered how far can we go?  So I torched a die red hot.  Although it was not as clear under the microscope as before, it still was of decent quality.  I'll try to add a pic in a bit comparing an area of the first die extracted with the one that I tortured.&lt;br /&gt;Here is a short video showing an heat based extraction:&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-f06235db647c3ff6" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v3.nonxt1.googlevideo.com/videoplayback?id%3Df06235db647c3ff6%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331277599%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3CFDB2C79877C505A1F395EEEF230198398D7EBE.4C5A4623EED44F8CEBB71DF5AC7B7F19643CE1C4%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df06235db647c3ff6%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dx8gHMt9cHGc_sXYs5fuTWqhQm_U&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v3.nonxt1.googlevideo.com/videoplayback?id%3Df06235db647c3ff6%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331277599%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3CFDB2C79877C505A1F395EEEF230198398D7EBE.4C5A4623EED44F8CEBB71DF5AC7B7F19643CE1C4%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df06235db647c3ff6%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dx8gHMt9cHGc_sXYs5fuTWqhQm_U&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;In this test setup, that blue thing is a filter system to help reduce fumes.  I also have a gas mask handy for exactly this sort of work.  It really does help a lot.  The resin was really brittle and very little force was required to break it.  However, I didn't heat it enough towards the bottom, so one side of the die was still relatively well set into the case.  This can be easily fixed though and is partly due to me trying to get this on film and not doing for an ideal setup.&lt;br /&gt;For some future work, I may have gotten away with this due to the relatively large traces the 2 um test die I used had.  Thinner traces may be much more sensitive.  Still, the results are much more promising than I was expecting.  As I move down the semiconductor technology roadmap, I'll revisit this and see how well it does against finer masks.&lt;br /&gt;Thanks to Will Carder for lending me the torch!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-521570236768459573?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/521570236768459573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/ic-decapping-round-4-burnt-perfection.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/521570236768459573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/521570236768459573'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/ic-decapping-round-4-burnt-perfection.html' title='IC decapping round 4: burnt perfection'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_MJhykioAWqo/S8fn7vQ3WnI/AAAAAAAAAEA/eIMDE3mf6hY/s72-c/first_die.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-8679442158415233884</id><published>2010-04-11T18:04:00.000-07:00</published><updated>2010-04-11T19:49:43.905-07:00</updated><title type='text'>PLACE SANDWICH HERE: the camera</title><content type='html'>The original camera setup involved zip-tying t-slot aluminum to the microscope neck and positioning the camera based on a series of adjustments to the slot angles.  There were a few issues with this setup.  First, I didn't have any t-slot nuts, so it was always a pain to tighten things.  I at first didn't have any t-slot L brackets either, but I had some nearly equivalent aluminum brackets, so that wasn't as big of a deal.  Next, the small distances between the neck and the eyepiece really limited the flexibility in positioning the camera.  It was very hard to position it accurately.  Finally, the zip ties were only moderately stable, so if you hit it too hard, it would shift around.&lt;br /&gt;The second setup I tried was to use a neck lamp as a flexible mount.  It was abandoned because the camera was so much heavier than the light bulb that it caused it to sag.  I took an old style fuse and ran a 1/4" bolt through it so it could mount to a camera.  The camera isn't mounted to it here, but here I am disassembling it since I'm not going to use it anymore and bad things would happen if someone plugged in the lamp by mistake:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8J--eDYvbI/AAAAAAAAADQ/YxIDep_HJGw/s1600/original_camera_mount.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 188px; height: 200px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8J--eDYvbI/AAAAAAAAADQ/YxIDep_HJGw/s200/original_camera_mount.jpg" alt="" id="BLOGGER_PHOTO_ID_5459065310010719666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As the current setup is being upgraded for CNC control, the camera positioning will still remain manual since it doesn't need to be moved as the die is being scanned.  Here is an overview of it:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S8J_J0nVUwI/AAAAAAAAADY/1XMxm4l9tmQ/s1600/overview.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 197px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S8J_J0nVUwI/AAAAAAAAADY/1XMxm4l9tmQ/s200/overview.jpg" alt="" id="BLOGGER_PHOTO_ID_5459065505045631746" border="0" /&gt;&lt;/a&gt;Basically, this has two easy to position axis, which really help.  The microscope eyepeice is on an angular axis and there is a linear slide that the camera is mounted on.  Usually only minimal adjustment is needed with the t-slots, mostly for height.  The slide was spring loaded to keep accurate positioning.  When viewing the image manually, the eyepeice is swung around to the front of hte microscope where the neck is rather than at a 90 degree offset to standard orientation.  This makes switching between manual and camera based viewing convenient.&lt;br /&gt;Interesting to see the focal length as it relates to magnification.  Here is 10X objective:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8J97WLtb_I/AAAAAAAAAC4/YqwzNS_xVx4/s1600/100X_zoom_height.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 112px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8J97WLtb_I/AAAAAAAAAC4/YqwzNS_xVx4/s200/100X_zoom_height.jpg" alt="" id="BLOGGER_PHOTO_ID_5459064156846911474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And here is 40X objective:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8J9-UKp81I/AAAAAAAAADA/HhTnN04pPmI/s1600/400X_zoom_height.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8J9-UKp81I/AAAAAAAAADA/HhTnN04pPmI/s200/400X_zoom_height.jpg" alt="" id="BLOGGER_PHOTO_ID_5459064207845225298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It looks like its touching, but its not. However, its very, very close.  You can still get it out of focus by moving it closer.  If you move it too close, the spring loaded objective lenses will move up rather than break.  Here is what you see on the camera at 400X (more like 800X actually since we are zoomed in on the camera itself):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8J-Mb9NgjI/AAAAAAAAADI/pSi3bVMaAag/s1600/camera_screen.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 128px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8J-Mb9NgjI/AAAAAAAAADI/pSi3bVMaAag/s200/camera_screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5459064450454487602" border="0" /&gt;&lt;/a&gt;There is also a 100X objective, but I haven't looked into what it would take to use it.  I believe I need to do something with immersion oil.&lt;br /&gt;The original setup used an incandescent light.  However, it only provided moderately acceptable light levels with the 40X objective.  I recently bought a 500W halogen light that has really helped.  However, its not very directional, so I installed a sandwich wrapper as a deflector to increase directionality to the sample and not blind the operator.  As my friend Alex finished his lunch, he probably never thought about his burger wrapper again until he reads this. Little did he know it would become a critical ingredient in the camera setup after being banished to the gray cylinder labeled "TRASH."&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8KA-yVTlmI/AAAAAAAAADg/NDwQ_Jde7E8/s1600/place_sandwich_here.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 140px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8KA-yVTlmI/AAAAAAAAADg/NDwQ_Jde7E8/s200/place_sandwich_here.jpg" alt="" id="BLOGGER_PHOTO_ID_5459067514477844066" border="0" /&gt;&lt;/a&gt;Although it is festive, I'll probably replace it with some aluminum foil when I get a chance to go to the store or something.&lt;br /&gt;This setup is pretty stable and I'm a lot happier with it over the previous one.  It seems like a flexible mount would have been nice, but with the stability I've gained from the T-slot, this setup is probably best.&lt;br /&gt;Thanks to Dane Kouttron (&lt;a href="http://transistor-man.com/Index.html"&gt;http://transistor-man.com/Index.html&lt;/a&gt;) for the pictures!  Also thanks to Magesh Alagiriraj for lending me an SD card since mine died :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-8679442158415233884?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/8679442158415233884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/place-sandwich-here-camera.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/8679442158415233884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/8679442158415233884'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/place-sandwich-here-camera.html' title='PLACE SANDWICH HERE: the camera'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_MJhykioAWqo/S8J--eDYvbI/AAAAAAAAADQ/YxIDep_HJGw/s72-c/original_camera_mount.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-7508463851799941419</id><published>2010-04-11T15:23:00.001-07:00</published><updated>2010-04-11T19:43:52.264-07:00</updated><title type='text'>Stepping things up</title><content type='html'>One of the goals for an effective setup is to automate taking pictures of the dies.  Current technique is to manually move the chip around while snapping pictures.  As the chips get large, technology shrinks, etc, it becomes increasingly desirable to get more precise and automated control.  The plan: use &lt;a href="http://www.linuxcnc.org/"&gt;EMC2&lt;/a&gt; controlling some linear stages and &lt;a href="http://www.gphoto.org/"&gt;gphoto2&lt;/a&gt; controlling a Canon SD100 to scan across a die to be assembled by &lt;a href="http://hugin.sourceforge.net/"&gt;Hugin&lt;/a&gt;.&lt;br /&gt;The control system doesn't necessarily have to be EMC2.  In fact, I've heard people have difficulty using it outside of the GUI.  So, I might just use raw outp() calls to pulse a parallel port as needed to control the stepper drivers.  I have some old Precision Motion Control drivers that can just barely be seen to the right in &lt;a href="http://mcfluffin.110mb.com/images/robot/machining/t_tech/quick_circuit_6000/mk1/smiley_overview.jpg"&gt;this image&lt;/a&gt;.  The motors I'm using are fairly small, but the drivers are current limited, so it might work out.  Otherwise, I'll make up a transistor based driver which shouldn't take too long. On the same note, I might end up using that stage setup if I want to scan some larger images later under high precision.  I have a few other things I need to get detailed images of that are much larger.&lt;br /&gt;The original plan to control the stepper motors was to couple them with springs to the stages.  Something like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S8Jpd8H93GI/AAAAAAAAACw/dWa3UWdFBC8/s1600/linear_stage_springy_planning.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S8Jpd8H93GI/AAAAAAAAACw/dWa3UWdFBC8/s200/linear_stage_springy_planning.jpg" alt="" id="BLOGGER_PHOTO_ID_5459041661403126882" border="0" /&gt;&lt;/a&gt;However, in early testing before even mounting things, I realized that they would build up enough force to overcome the static friction, but the stored energy in the spring would cause a large movement.  Higher spring constants would only lead to the stiffness problems I was trying to avoid in the first place, so this solution was a no go.&lt;br /&gt;Here is the current attempt at linear motion control:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8Jn8Nvf-2I/AAAAAAAAACo/K1PnoABEV_E/s1600/stage_almost_there_perspective.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8Jn8Nvf-2I/AAAAAAAAACo/K1PnoABEV_E/s200/stage_almost_there_perspective.jpg" alt="" id="BLOGGER_PHOTO_ID_5459039982505163618" border="0" /&gt;&lt;/a&gt;It uses two stepper motors with longish gears to overcome issues from the micrometer moving in and out as turned.  The Y axis (one on right) will be slightly trickier as the gear will move back and forth as the X axis is actuated.  To overcome this, I'm going to try to put a spring force on it.  With the small distances being moved, it shouldn't move enough to become a problem.&lt;br /&gt;My luck with libgphoto2 has been mixed so far.  It tends to get into internal error states fairly easily.  Also, I've had difficulty building it to get the latest version.  I tried to use a VM which could get a better version, but still same issues.  In particular, I need to disable the flash, but this results in internal errors.  Since I really need this, I'll probably put in the effort to get the newest version working and/or get in contact with the libgphoto2 team to help develop a patch to fix w/e the error is.  This is an issue because it severely lowers the exposure time, resulting in bad pictures despite my relatively bright levels of light. I got this camera because gphoto claimed very good support for it and they were available on eBay at quite a reasonable price ($15 + S/H for used units, maybe $40 + S/H for newish units).  I bought a SD110 originally, but it turned out to be much worse condition than the seller claimed, but since it was so inexpensive I didn't find it worth the effort to pursue.  I found a SD100 buy it now for $15 without charger and get a good condition one for around $40.  So all in all, I have a SD110 for parts and two SD100s.  This has been quite good as the major complaint of the units is their relatively short battery life.  With a spare battery or two, I can let one charge while I use the unit, which leads to good usage.  The batteries tend to charge faster than then are drained.&lt;br /&gt;My experience with Hugin has also been mixed.  Under Linux, when I try to stitch together pictures, it crashes.  I tried to use it under Windows to stitch together some of my dies, but they ended up coming out more like pretzels than beautiful images.  In theory, use of the stages will make this process much easier as the images should be able to be precision aligned to each other.&lt;br /&gt;Thanks to Robert Reeve for helping me with the design of this stage setup and for fitting the gears on the ends of the micrometers!  Also, thanks to Jim Schatz for letting me borrow the microscope!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-7508463851799941419?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/7508463851799941419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/stepping-things-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7508463851799941419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/7508463851799941419'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/stepping-things-up.html' title='Stepping things up'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_MJhykioAWqo/S8Jpd8H93GI/AAAAAAAAACw/dWa3UWdFBC8/s72-c/linear_stage_springy_planning.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-5232956574797543673</id><published>2010-04-11T14:56:00.001-07:00</published><updated>2010-04-11T19:22:03.401-07:00</updated><title type='text'>IC decapping, round 3: chemical etch</title><content type='html'>In my last post, I discussed some of my early experience with sanding.  After sanding, I tried some simple chemical etching.  Unfortunately, my memory card died and I lost some cool stuff such as a microscope etch video, but I will hopefully be able to get some new, better images and videos later.&lt;br /&gt;In any case, there were two areas to try: etching the case and etching the die.  Etching the resin case is usually done with nitric acid.  Travis Goodspeed has a good blog post about doing this at room temp &lt;a href="http://travisgoodspeed.blogspot.com/2009/06/cold-labless-hno3-decapping-procedure.html"&gt;here&lt;/a&gt;.  I was able to get 70% nitric considerably easier than RFNA, so I decided I'd try that first.  If you use non fuming nitric acid (but still required to be high conc I think), you must strongly heat the mixture.  But, I did try a few other things first to see if there were alternatives.  The first thing I tried was just to let it set overnight.  This ate away the metal leads pretty quickly, but not the resin.  The next thing I tried was to adding HCl to form aqua regia, hoping such a strong mixture would eat it away. Alas, this did not help either.  Out of simple ideas, I then moved on to heat it to 80C using a hotplate.  Unfortunatly, I didn't have a fume hood availible (someone is workong on getting me access to one), so I could only do it for a short time before having to cut if off due to fumes.  I did not see signigant chip etching on the time I was working.&lt;br /&gt;However, since I had other ways to get to the die, I figured I'd still try chemically etching the die.  Using one of my cermic packaged dies, I was able to easily place HF into the die cavity so I could watch it etch under the miscrope.  Defintly want to get another video of this.  I was able to get a clean etch of what seems to be the top layer off and reveal the intermediate connection layer with vias.  If I let it sit for longer, I imagine I could easily eat layer by layer.  The top layer was taken off quite quickly even at the low concentration of acid.&lt;br /&gt;I later tried to see if HCl would etch the chip.  I saw initial high activity followed by not little activity.  I then tried to put fresh HF on the chip and saw no reaction.  I'm wondering if a protective SiCl4 or w/e coating formed on the surface, making the chip highly reistant to further chemical attack by a dilute acid.  If the concentration was stronger it may have been able to dissolve this coating if thats what had happened.  I ran out of decapped chips and couldn't easily decap another one at the time, so I'll go back to heat gunning some caps off.  I have a stash of centrifuging tubes that I've realized work well for clean storage of dies.&lt;br /&gt;I need to work on getting better storage for my HF acid.  I've ordered a set of plastic test tubes with rubber stoppers for stage.  Ideally I wanted screw cap, but couldn't find them at a quick look and stopopers is probably just as good.  I had two different types of glass test tubes I stored it in intermitantly and one was corroded by it and the other wasn't.  I'm not sure if this is simply because it had been used up by the time it got to the second test tube.  In any case, it couldn't etch the IC after this, so I assume it was just that it got rapidly used up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-5232956574797543673?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/5232956574797543673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/ic-decapping-round-3-chemical-etch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/5232956574797543673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/5232956574797543673'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/ic-decapping-round-3-chemical-etch.html' title='IC decapping, round 3: chemical etch'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-4282294774265914733</id><published>2010-04-11T10:55:00.001-07:00</published><updated>2010-04-11T14:57:04.533-07:00</updated><title type='text'>IC decapping, round 2: sanding</title><content type='html'>The earliest way to view chips was to "cheat" and use old chips that were more readily accessible by soldering their physical caps.  However, modern chips generally don't do this.  The ones that do do similar things include chips like Xilinx Virtex or Intel x86 chips that run very hot.  These can probably be decapped simply by throwing into some moderate acid to eat away the metal.&lt;br /&gt;There seem to be three major techniques for decapping, but only two are used in the hobbyist space.  From what I can tell, professional shops use plasma etch machines (http://www.stockly.com/forums/archive/index.php?t-16.html).  These are slow, but accurate, and the machines can be had for only a few thousand dollars for a small one.  I've even seen presumably working industrial sized ones for under a thousand on eBay.  While a few thousand dollars is nothing to the core of a busines, its a bit much for a hobbyist.&lt;br /&gt;The first technique I was introduce to was from Karsten Nohl's talk at the 25thCCC (http://events.ccc.de/congress/2008/Fahrplan/events/2896.en.html).  He advocates the use of sanding techniques.  Since I didn't need a particular chip to start with, I started with a wide DIP I could mount in a ZIF socket.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8I_NZKSUrI/AAAAAAAAABQ/aOxwWAXSolI/s1600/dremel_begin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 110px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8I_NZKSUrI/AAAAAAAAABQ/aOxwWAXSolI/s200/dremel_begin.jpg" alt="" id="BLOGGER_PHOTO_ID_5458995197651342002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is after I just started doing a thin amount of Dremeling.  I then used a Dremel to go down until I could see the wire bonding arcs. Wikipedia has a good picture to help visualize this (http://en.wikipedia.org/wiki/File:DIP_Cross-section.svg):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8IOA6IWP_I/AAAAAAAAABI/Q3fTtEAGygE/s1600/DIP_Cross-section.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 160px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8IOA6IWP_I/AAAAAAAAABI/Q3fTtEAGygE/s200/DIP_Cross-section.jpg" alt="" id="BLOGGER_PHOTO_ID_5458941107093520370" border="0" /&gt;&lt;/a&gt;On some chips I could see this with naked eye, but usually had to be made wet with something first.  It was easiest to just use a 10X lens to do periodic inspection when you think you are about there.  In practice, this might look something like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8I_bH-yloI/AAAAAAAAABY/rLdz6xXji8Y/s1600/dremel_done.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 93px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8I_bH-yloI/AAAAAAAAABY/rLdz6xXji8Y/s200/dremel_done.jpg" alt="" id="BLOGGER_PHOTO_ID_5458995433557890690" border="0" /&gt;&lt;/a&gt;You can't see the wires very well in this one, but just note how we are almost at the leads.  Here is a (slightly) better picture with some zoom:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8I_qxXY6NI/AAAAAAAAABg/_Gqt2jCFL_g/s1600/dremel_done_closeup.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 157px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8I_qxXY6NI/AAAAAAAAABg/_Gqt2jCFL_g/s200/dremel_done_closeup.jpg" alt="" id="BLOGGER_PHOTO_ID_5458995702364956882" border="0" /&gt;&lt;/a&gt;They are barely noticeable as gold dots.  Much more visible if you put some fluid on there.  Basically, I could see them easily by getting it wet or by inspection under a 10X lens.&lt;br /&gt;The rest will need to be carefully sanded and polished.  After a brief bit of sanding, the bonding wires become much more visible:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S8JAG1npc1I/AAAAAAAAABo/lQ9SUesxx-k/s1600/sanding_basic.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 94px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S8JAG1npc1I/AAAAAAAAABo/lQ9SUesxx-k/s200/sanding_basic.jpg" alt="" id="BLOGGER_PHOTO_ID_5458996184543228754" border="0" /&gt;&lt;/a&gt;Some sanding later...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S8JAZXjLbpI/AAAAAAAAABw/Mt7s0Trg_y4/s1600/first_silicon.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 141px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S8JAZXjLbpI/AAAAAAAAABw/Mt7s0Trg_y4/s200/first_silicon.jpg" alt="" id="BLOGGER_PHOTO_ID_5458996502888935058" border="0" /&gt;&lt;/a&gt;We can now begin to see the die.  I didn't sand it very evenly as you can see one corner much sooner than the rest of the die.  This takes a bit of practice to learn how to sand evenly.  Basically though, once you begin to see this, tilt your peice slighly so as to try to get the other parts to catch up.&lt;br /&gt;I decided this uneveness was probably just as well anyway since it would give me a gradient slice of the die.  After sanding away until we have a good gradient:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8JBMhQB8WI/AAAAAAAAAB4/xTigztfbi4E/s1600/silicon_gradient_fresh.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 180px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8JBMhQB8WI/AAAAAAAAAB4/xTigztfbi4E/s200/silicon_gradient_fresh.jpg" alt="" id="BLOGGER_PHOTO_ID_5458997381666304354" border="0" /&gt;&lt;/a&gt;You can see resin still in the upper right hand corner.  It turns out you can see through this more than you might expect:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S8JBhZ-vA5I/AAAAAAAAACA/mI3jpzSpLBU/s1600/some_resin_some_clear.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S8JBhZ-vA5I/AAAAAAAAACA/mI3jpzSpLBU/s200/some_resin_some_clear.jpg" alt="" id="BLOGGER_PHOTO_ID_5458997740491965330" border="0" /&gt;&lt;/a&gt;The top section still has some resin and the bottom section doesn't  It gets a bit fuzzy, but not too much more so, even on the deeper sections.  Here we can see some damage from the sanding:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8JBxy_DZmI/AAAAAAAAACI/NKUcEXkgPqk/s1600/sanding_damage.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 189px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8JBxy_DZmI/AAAAAAAAACI/NKUcEXkgPqk/s200/sanding_damage.jpg" alt="" id="BLOGGER_PHOTO_ID_5458998022082094690" border="0" /&gt;&lt;/a&gt;Two types of damage occur: planar depth going too low and particulates causing die scratches.  Both need to absolutely be avoided for a decent die image.  In any case, after polishing up one of the better sections a bit with some mystery paste substance:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8JCMJ8n9KI/AAAAAAAAACQ/2rqGYxe7w4M/s1600/after_polish.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 192px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8JCMJ8n9KI/AAAAAAAAACQ/2rqGYxe7w4M/s200/after_polish.jpg" alt="" id="BLOGGER_PHOTO_ID_5458998474922521762" border="0" /&gt;&lt;/a&gt;Although we have a lot of damage, we are getting a smoother image.  Future work will be around getting better images.  A key factor will probably be higher quality polishing pastes instead of the mystery brand dried out paste I tried to use.  In any case, I still can't see multiple layers and even sanded down very finly until I saw raw silicon.&lt;br /&gt;And to top it off, I sanded it down really far just to get a feel for it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8JC5KBpcEI/AAAAAAAAACg/sAoHBcNzdzg/s1600/oversanding.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 92px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8JC5KBpcEI/AAAAAAAAACg/sAoHBcNzdzg/s200/oversanding.jpg" alt="" id="BLOGGER_PHOTO_ID_5458999248037703746" border="0" /&gt;&lt;/a&gt;Basically, you'll notice some cement used to hold the die in place under the silicon and how the leads go through the package.  I'm curious what those two extra leads are for...someone suggested to me something related to power.&lt;br /&gt;Well, that was what came out of round 2.  Since I did this, I bought some more polishing compounds including a bottle of actual Dremel brand.&lt;br /&gt;In conclusion, sanding seems like a viable option to get to the die, but I've had some bad luck actually getting multiple layers out of it.  As you will find out in later posts, I had decent results with chemical etch of the die, but bad resulsts with chemical etch of the resin.  Here, I had good resulsts with sanding off the resin, but bad results sanding off the die.  So, I will probably be focusing on this hybrind technique in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-4282294774265914733?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/4282294774265914733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/ic-decapping-round-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/4282294774265914733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/4282294774265914733'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/ic-decapping-round-2.html' title='IC decapping, round 2: sanding'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MJhykioAWqo/S8I_NZKSUrI/AAAAAAAAABQ/aOxwWAXSolI/s72-c/dremel_begin.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-659482842215425678</id><published>2010-04-11T09:41:00.000-07:00</published><updated>2010-04-11T20:03:43.235-07:00</updated><title type='text'>IC decapping round 1: very first IC images</title><content type='html'>Some easy IC chips to work with are the old gold capped ceramic chips.  Something like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJhykioAWqo/S8H-8o5lvEI/AAAAAAAAAAo/2jvqCSKodDM/s1600/with_cap.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 290px;" src="http://3.bp.blogspot.com/_MJhykioAWqo/S8H-8o5lvEI/AAAAAAAAAAo/2jvqCSKodDM/s320/with_cap.jpg" alt="" id="BLOGGER_PHOTO_ID_5458924541074324546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This particular chip is labeled MD513 76R / 7407.  Since a 7407 is just a line buffer, I can't imagine it being that complicated on silicon and it must be some military grade other chip with an obscure part number. I did find similar chips that were listed as DRAM, which seems consistent with the very regular, memory like die image.  Although it took a bit of practice to figure out how to do this, you can use a heat gun to take the cap off.  I tried doing this again the other day and I couldn't get the caps off.  Thinking back,  before I used a vice with a plastic jaw and held the chip in the end, just barley not burning it.  This time I put it full in a metal vice which wouldn't release it even under extreme heat.  Maybe I'll Dremel them slightly to get a small hole I can grab with pliers.  In any case, this is what you get:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJhykioAWqo/S8H_H-16DxI/AAAAAAAAAAw/IpHF7F2LOxQ/s1600/cap_removed.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 269px;" src="http://1.bp.blogspot.com/_MJhykioAWqo/S8H_H-16DxI/AAAAAAAAAAw/IpHF7F2LOxQ/s320/cap_removed.jpg" alt="" id="BLOGGER_PHOTO_ID_5458924735943020306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Well the first thing to try is to use a bright light and a magnifying glass or similar.  I had a 10X objective from a projector, microscope, or something.  Setup:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8H9BZKnq-I/AAAAAAAAAAY/WdkmTmheKRE/s1600/alpha.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 280px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8H9BZKnq-I/AAAAAAAAAAY/WdkmTmheKRE/s320/alpha.jpg" alt="" id="BLOGGER_PHOTO_ID_5458922423726877666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And an idea of the image quality you get:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8H9LsowxII/AAAAAAAAAAg/zQub6ncl6fw/s1600/alpha.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 313px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8H9LsowxII/AAAAAAAAAAg/zQub6ncl6fw/s320/alpha.jpg" alt="" id="BLOGGER_PHOTO_ID_5458922600752268418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can just barely read the text on the die if you strain your eye, but probably not in that picture.&lt;br /&gt;Next, a biological microscope was acquired.  I seem to not have a picture of it, but later setups will anyway, and you probably used one at some point in your life or Google can help you.  Anyway, you can now get pictures like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJhykioAWqo/S8IGwDrT9FI/AAAAAAAAABA/HcluL0iYq4g/s1600/p5070014.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_MJhykioAWqo/S8IGwDrT9FI/AAAAAAAAABA/HcluL0iYq4g/s320/p5070014.jpg" alt="" id="BLOGGER_PHOTO_ID_5458933121016919122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you use the camera optical zoom, you can get slightly higher details and also eliminate that eyepiece ring.  The biggest issue is probably that the zoom level is then a bit hard to tell.  I need a standardized length object to calibrate against.  Looks like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJhykioAWqo/S8IDJ4cWa_I/AAAAAAAAAA4/iuYsL3Eu-ag/s1600/random_chip_section.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_MJhykioAWqo/S8IDJ4cWa_I/AAAAAAAAAA4/iuYsL3Eu-ag/s320/random_chip_section.jpg" alt="" id="BLOGGER_PHOTO_ID_5458929166631463922" border="0" /&gt;&lt;/a&gt;This was an old die I wasn't protecting well and you can see some dust on it.  The electronics club is sorta the anti-cleanroom.  More on how the camera was mounted, lighting and such later.&lt;br /&gt;Oh and don't drive yourself mad trying to line up the pictures.  I think they were from the same chip, but not entirely sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-659482842215425678?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/659482842215425678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/very-first-ic-images.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/659482842215425678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/659482842215425678'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/very-first-ic-images.html' title='IC decapping round 1: very first IC images'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_MJhykioAWqo/S8H-8o5lvEI/AAAAAAAAAAo/2jvqCSKodDM/s72-c/with_cap.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-534708807576459669.post-5381220260152631934</id><published>2010-04-11T09:30:00.000-07:00</published><updated>2010-04-11T09:41:03.841-07:00</updated><title type='text'>This blog</title><content type='html'>This blog is my adventures as I try to unravel the mysteries of silicon  based life.  The ultimate goal would be to create a toolsuite that can take raw collections of chip images and convert them into VHDL or verilog.  Under the hood it might use something like Hugin to stich the images together and Degate to create the netlists.  I'd probably make the HDL decompiler as a stand alone program with a library core that could make tranformed into a Degate plugin. &lt;br /&gt;There also a wiki setup at http://siliconpr0n.wikispaces.com/ to provide a more summarized form of what I learn.  Another RPI student has been working with me on a few things here and&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;there with this as well.  Additionally, I'll probably be collaborating with Travis Goodspeed and Karsten Nohl throughout this process.  Travis seems to be a big fan of chemical etch, where Karsten seems to favor physical etching techniques more such as using a Dremel.  As I get better with the imaging process, I might see if I can get in touch with the Degate authors to provide patches and such.&lt;br /&gt;I've already explored a few things and had some good starting results before I start writing this, so the first few posts will be about past results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/534708807576459669-5381220260152631934?l=uvicrec.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://uvicrec.blogspot.com/feeds/5381220260152631934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://uvicrec.blogspot.com/2010/04/this-blog.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/5381220260152631934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/534708807576459669/posts/default/5381220260152631934'/><link rel='alternate' type='text/html' href='http://uvicrec.blogspot.com/2010/04/this-blog.html' title='This blog'/><author><name>John McMaster</name><uri>http://www.blogger.com/profile/11714069658809228929</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_MJhykioAWqo/S-ZIFj1xtsI/AAAAAAAAAGw/lHlIQfUsG0U/S220/uvnet.jpg'/></author><thr:total>1</thr:total></entry></feed>
