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.