Designing a chip is a fascinating process. The end product may be too small to even hold, but the effort behind it is huge. More so is the intellectual work that goes in – nothing short of extraordinary. Right from planning to execution, it is your thinking and intuition that take the project forward. So how do you get into this mode? Does it just come when you begin working with it? Maybe… but it is you who has to channel it.
What is the big deal in coding
I sat with my project, working on a Verilog code. So what is the big deal in it? I know my project idea and I know coding. Let me just translate the idea into a Verilog code. Sounds simple, right? That is exactly what I did started off with defining variables and ended up writing a long, complete code. The only thing left was to run the code. I loaded the program and ran it. Errors! So many that the toolallowed maximum number of errors was too small a number! I went through the error list – I could not even understand what half of them meant. That is when I realised it is not that easy.
It is not that easy
The first step in designing a chip is to understand the errors that crop up. Be it a digital code or an analogue circuit, the errors are there to show. It might be a simple missing connection or complete usage of a wrong component; it might be a simple missing bracket or a misused keyword, but it is all there to show. Today’s tools are beautifully designed. All you need to do is read the error statement carefully, go back to where it points, and observe. You are bound to identify it. Solving it is another issue altogether, whether it is an oversight or a technical error. The point to remember is, all errors have easy solutions; we just need to look for them. It is always better to break the design into smaller parts, achieve perfection with each and then put them all together – easier to debug, easier to reuse.
Sometimes, just one tiny comma may lead to 20 errors. To see the error count decreasing makes your heart jump and beat faster at the same time – the thrill of solving, the apprehension of what is coming next. Every attempt leads to something new – sometimes in the right direction, sometimes complicating the error further. Still, in my opinion, it is always better to have errors. Else, you never know, you never learn.
Errors out but still not done
Done. Finally, all the errors are sorted. The code ran. Hurrah! Is that it? I opened the waveform and saw it. It seemed fine. No… wait… what was that? I do not seem to understand what is happening at the 2350th instant of time. Is this what was supposed to happen?
The need for design clarity
Here comes the difference between what you expect and what the design is doing. What you think of and what you code or create may end up being two different things.
The first step is to understand what actually is happening. Until you understand that, your design will never succeed. What you need to realise is that there are three things here what you have in mind, how you translate it, how the tool understands it. Interpreting the results correctly is as important, probably more important, as just interpreting them. The most important factor here is to not get confused by what you see. The output showing something other than expected is bound to confuse you. It is good if it makes you rework your thought process to reaffirm yourself about how you expect your design to behave. But it is not good if it is going to meddle with your basic design idea. That is why design clarity matters – you need to be very sure of what you expect the design to do, and when.
I always had this one doubt – Is just being sure of your design sufficient? When you do not know what is happening or why something is happening or not happening, what do you do? Patience is the key. Look at it again and again. Go back to the basics. Think differently. Discuss with people. Look for similar stuff. You are bound to achieve it when you are finally done and you have exhausted all your ideas. The last one will click. By then, you will know everything you need to know about your design.
Thinking out of the box
Most times, it is important to think outofthebox. To anticipate the effect of a certain change you make to your design – will it work? More importantly, will it affect anything else? If yes, how? This will certainly save you a lot of effort and time. It does not come easy, but it is not difficult either – you just need to be willing to think. Simulation in digital and analysis in analogue help you achieve exactly this.
Knowing your design
Another important fact is to know the ins and outs of your design. Know the advantages and disadvantages of every small section of your design. Know what each section does and why you cannot do without it. It helps when you are unable to solve a particular problem. It helps you realise why you chose to use a particular logic or circuit.
Just as in the design stage, the layout stage follows the very same rules – with one added complication, the statistical nature of manufacturing the chip. With advances in technology, the lower order effects, so far ignored, come into the picture. The environmental conditions may affect manufacturing; maybe one out of a hundred chips, maybe more. There are also effects that arise from variations in process parameters like the optical proximity effects, random dopant effect, etc. Semiconductor variability is another statistical phenomenon of utmost importance – the effect of too much scaling resulting in unpredictability.
And, not all of these are in the hands of the designer; some depend on the technology or the effectiveness of the tool and its library. So, the designer needs to accommodate a little deviation from what is expected. This could be in terms of timing, power, design tricks that allow small compromises, or precautions for what lies in store during later processes.
The demon called cost
Finally, the one factor that is so trivial, yet pervades the entire process, is the cost of making a single chip. In fact, making it in bulk is a lot cheaper. One needs to keep in mind the returns from it, also the trends and the customer’s interests. More importantly, the perfection in terms of design and testing that is to be achieved before going in for fabrication takes humongous precedence owing to the cost involved. Plus, it is not easy to rectify errors in a chip, once manufactured. One other factor to keep in mind is that it is all not just about manufacturing. Once done, the chip has to stand the test of time and use.
Chip Designing is an art – one that demands thoroughness and leaves no place for doubt. It might seem impossible, but time and again, people have proven that it is not. Still, there is a lot more to uncover, many more marvels to behold.
- How good a code is, is decided by how a tool understands it.
- Understand the errors that crop up, debug.
- Make sure the design is functioning correctly.
- Be clear with your design idea.
- Be patient.
- Think outofthebox.
- Know the ins and outs of your design.
- Accommodate for statistical deviations.
- Keep an eye on the cost.