Once upon there was a request to modify the pcell of an nmos to make it more reliable against EOS. But the way we modified it by tinkering with the pcell RPO block layer distance to the gate to ballast the drain resistance. But by being too agressive we inadvertently created a device that susceptible to parasitic turn on. It would be called single transistor event turn on that would have the parasitic device turn on but wouldn’t stay latched which is different from the typical case of an SCR or typical parasitic latch up. For that it would be forever latched until you turn off the entire device disabling VCC. But in our case it would turn off as soon as you lowered VCC to a certain voltage in this case just 1 volt below the turn on. Turns out that it was a layout issue as well as a design issue. The mos device was way too large in terms of current sourcing for the application. To give context the mos device when turned on would source so much current in a small delta time that the inductance of the bond wire the drain was attached to would make the drain see a voltage about a few volts higher than normal. This higher voltage due to the high dv/dt on the inductance of the bondwire according to Faradays law would place a high electric field in the region of the large mos device. Due to the high electric field inside the device there occurred high impact ionization which is due to charge carriers being injected into the substrate due to the higher voltage event. And with charge carriers in an high electric field, there is then a force applied and the energy of the moving particles would get higher and higher as time passed.
I stole this paragraph below and I don’t feel shame about it.
KE = 0.5 • m • v2
where m = mass of object
v = speed of object
This is where I stopped stealing.
This is why its a good rule to have body ties. These catches these charge carriers before they can attain enough energy to cause an issue. And since the energy is based on the square of the velocity, Its like stopping an airplane early on the runway. If you wait and it gets faster and faster its going to do some damage when it runs into the the tower station head on.
Anyway, once these charges got enough energy they would start hitting other charge carriers which would create charge carrier pairs which is a precursor to avalanch breakdown can happen but anyway as more particles create more charge carrier pairs a current would start to form as this movement of carriers creates a current in the substrate, this creates a voltage due to the ohms law which turn on the parasitic npn since the voltage in the substrate is like putting a voltage on the base of an npn. So to make a long story short, put alot of body ties around large current devices or to be specific in between the every distance of 10 um or so. And kindly and respectfully let the designer your concern to make a driver mos that can source so much current in the delta time than you really need. Especially if the drain is tied to VCC which is tied to a bondwire. Maybe its ok if you tie the VCC to a bump pad but who knows. Why take a chance. Please let me know if I made a mistake somewhere in the logic. thanks. In hindsight quickly ask but don’t spend too much time since its not really your job to re-examine the design. Is this all necessarily to know for layout? Well if you want to solve problems then yes. Since CMOS is a planar technology which is a sea of PN junctions. And impact ionization as well augers recombination are needed to understand PN junction behavior. This can be used to solve latch issues or bias issues when you can’t figure out where the current is leaking from.
Sometimes programming is a job, sometimes a hobby. There’s programming for pragmatism and then there’s the programming where its like a ballet. A dance, or balancing act where your stretching yourself and seeing things at a higher level.
This is what coding in Lisp or higher order languages is like sometimes. There are more practical ways of doing things but there’s something interesting and just challenging about lambda functions or lisp like coding languages. You can generalize, your seeing your limitations and its a challenge it stay within them so that you don’t drop the cascade of glasses your holding to do function. It sure took awhile to get that A ha moment after exploring Squeak smalltalk and lisp or chicken scheme to be more specific. But the benefits are exceptionally powerful constructs. There’s a place for control languages like C++ and C and such but there’s something great about dynamic languages, where its ok if you don’t know what that data type is and what you need. Because thats how real life is, you dont know why you need it for or the specifics just yet but because its a dynamic language you can wait until you do and this has benefits not just fill blog posts about. Because you’ve delayed it yet able to still move on, so when you do finally know what you need, you don’t have to re-write all your code to handle that specific data type all over your code.
Been toying with lisp or chicken scheme of late. Playing with higher order functions or employing them in whats is normal lisp. Pretty powerful stuff. Trick is to break things down step by step. But they’re immensely powerful in the sense that you can generalize functions. They called first class functions in other languages but the idea is that you can treat code as data. The language itself and the program becomes much more self inspective and reflective. And it really helps with code reuse. They tried this similair with virtual functions in C++ and Java and it sort of works the same but its just so much more elegant in lisp and scheme. Though the one I used it mostly on was in Skill a lisp variant. I was skeptical of late bound data, but I’m seeing how powerful it can be. Much of the time when starting a project alot of the data and what to do and what data type is somewhat vague and not well thought out. Latebound makes the problem much more flexible and robust. Done in c++ this would be really a headache if you had to change a data type. You’d have to go through all the code to fix it, and you’d have to do it correctly, and have to be able to know how you verified it correctly on how you did it correctly. Your putting your code into different state variables and increasing the chance of issues that you may or may not find. No wonder the java and C++ crowd need large teams. Though this doesn’t always mean some thing bad but you can see the power of smalltalks and lisp languages from this perspective. Dan Engals put it best that a true test is to see if you can introduce a new data type and have your methods and code be able to handle it without changing everything. Was so impressed by this that it took over most of my thinking about coding. Lambdas and such seem funny stuff but its pretty incredible. This makes coding fun again and putting the science back into computer science.
I got the source code which is open sourced and tweaked a bit and compiled to the rasberry pi on the rasberry pi. You have to change the pi settings to use the GPU which is pretty easy if googled. But it performs pretty well. Your probably limited to 20k gates but as you can see it actually works. You can use this to view gds files. Also you can generate gds files in another program to create 3d models. They have a techfile that you can easily specify the layer height and color of each gds later. This is pretty amazing that this actually works pretty somewhat smooth thanks to arm and the Pi’s internal gpu. You can probably go further by trying this with pcb files that you can generate to GDS and do all sorts of cool viewings. Theirs also a ruler function and trace functionality. Or you can make your minecraft world quickly with a free layout tool like klayout or others to generate the GDS. Its called 3dgdsii viewer it should be available on the university website if you google it or on github. GDS3D an Universie of Twente if you can’t read the text in the pic. You can maneuver around like in Doom or quake like fps controls. What you see are via in orange brown rectangular cubes. or contact layer. From the viewpoint of an micro electron.
Just started learning a bit of squeak. Normally this is off subject but can’t help it if there’s a tool that you can use that increases productivity. You’ve got the agile of Python but the power of lisp and OObj programming. Got one running on the rasberry pi which runs a VM running squeak. was able to use the pi create some pretty graphics with the Morphic class and available software. Sure it takes a bit to learn since this is not justa programming language but a whole environment but it makes you think of these things. Plus youve got http conneciivity, mqtt ability, access to the GPIO, wifi and running on less than 30mb perfect for the pi. Squeak was made from the ground up and I’m having alot of fun with it. Apparetntly so do the developers of Cadence. You can see the big influence on Cadence lately, if you look at how the drc and assura and the debuggers are used. Amazingly you can build the software using blocks more than straight on code. It takes some time but I can see how a small team can do alot of powerful things quicker using Squeak at the same time it takes 20 C language or Java jocks can do. I do like java but it is limited and not made with security in mind. Anyway IOT may give Squeak and SmallTalk a household word yet.
Start ups need to think of using tools that not everybody uses because you have to do more with less if your going to beat your rivals.
oh heres cool stuff
I don’t know why anyone hasn’t published about using unity tools typically used for game development for EDA. Unity is really easy to start out with in terms of being menu driven. The engine has 3d physics built into it automatically utilizing the GPU. And much of model and rcx simulation only needs local charge carrier data which is perfect for GPU utilization to get fast speed. In fact you can probably make a customized field solver. It’s relatively cheap as well. It wouldn’t be too hard to convert def or cif into actually 3d wires you can help with simulation especially for designs that are smaller in terms of complexity such as hybrid discretes. Probably great for checking find ESD and current crowding sims as well. Especially for analog designs. Packing, bonding, lead frame help as well. Unity is also used for normals programs as well and apps. It’s got a great community and is well supported. And its actually setup like a layout program where you add components. Plus with the cool gfx filters you can make great presentations to really wow people. Plus who wouldn’t want an app that you can take snap shots in the lab, tag it, and instantly publish to your company’s repository.
Can’t stress enough how important learning vi is if your doing alot scripting or handling EDA and process files on a some what regular basis. Even if your a coder learning Vi is extremely powerful. Given that there’s a somewhat learning curve. But if you can type you can code and get more done without hassle in Vi than Visual Studios or any other editor except for perhaps Emacs. Or if your doing physical synthesis your always changing your scripts and need to search for terms quickly without breaking your script.
Also it helps with sorting errors reports from DRC, LVS. DRC is pretty much out of control with the warnings as times moves forward. Mentor and Cadence have addressed this somewhat with their DRC editors but it can’t do everything. In one project we had 200 drc warnings. I mean you can’t eye ball that thats asking for trouble. So you can use vi to sort files to delete all the lines except the ones that contain warning or error keyword such as typing in once your in Vi. So you’d open a file in vi or vim and type in below.
Then you can save this and review the real errors or what you want.
Its much more clear and you can do it 1 second.
This is will delete all lines except the ones containing density or
Warning or fail.
Here’s some quick tips and lessons learned about diving into tsmc 16nm
Fin fet Tsmc
- Unlearn what you’ve learned. It’s layout instinct to compact it but give more room. Copy a working template see below. Do you like to rotate blocks to make it compact and input pin flow that convenient? That’s out the door. Poly gate can only go one direction usually vertical. So you can’t rotate blocks anymore. Only mirroring in one axis.
- Everything is on grid so have to place all pcells and devices on grid. And there’s a grid layer as well that you have to place correctly as well as the prboundary which you’ll have to calculate a bit but it’s really non intuitive to place these on their gridlines. You must get used to it that’s all.
- Have a layout sample template to mimic. There’s 500 or so new rules. So seems easier to just mimic what you know is DRC clean because DRC is a big big time sucker in fin fet. So it’s just better to not make drcs in the first place. You can still do arrays but once you got a pattern that’s DRC clean and compact then array it with relative copy etc. Make the template available to everyone you can exponentially save time and headache.
- There’s voltage rules so you need to put marker layers to make those clean.
- Resistance of the wire is more of an issue.
- Have a FAQ for common DRC world be handy. The wording in the tsmc drm is cryptic and not very clear. So if you put in keywords to look for and note what it means and how to fix. You ll save time from searching and figuring, reinventing the wheel. For example is you have certain drcs witj certain name type its probably due to the cell being offgrid. Nothing to do with what the DRC rule says. See very perplexing. So check your grid is not of course is a good first thing to look for if the messages don’t make sense.
- You have insulated layers for connecting to metal through poly with a subvia. Though not really used that much from what i saw the good engineers use.
- No more mos widths that change. Only Fixed widths and you add more current capacity by increasing the number of fin’s.
- Substrate contacts have grids s well so it’s kind of strange to use at first. But you can do partial select by clicking on the layer and and stretch it. Thru look like crosses since they have vertical poly as well. Use chop to fit cuts.
- I don’t go into colors since this is done differently per company and node.
- Again it’s the unlearning that’s the hard part no joke. Fin fet week make many designers think twice about doing layout as well as circuit design.
- Great engineers of the world is the any other good tips for finfett? Comments welcome
Art by AL
Mousewithoutborders from microsoft is great if you need to control a local pc. Sometimes this happens more now a days in workstation setups. Your working on more than one pc thats next to each other so you don’t have arms like Mr.Fantastic from the fantastic four so you need a program like mouse without borders. It allows you to control another pc on the same network with the mouse of another pc. Its also another way to get more screen space. We used to have certain machines for certain products that we taped out simply because it was an old machine that had only that certain software. Mouse without borders allows you to copy and paste from one pc to another pretty simply. So this app can be pretty handy and its best of all free. You simply just install on both pc’s and just move the mouse beyond the screen to get to the desktop of the other one, voila! Kudos to Microsoft Garage project.