What I do for a living

I felt I had to write a page like this on my technical blog since what I do is generally unknown to most programmers and techies today. Whenever I have to talk about my work I have to talk a lot and even after that most people don't get it. Its not difficult -- it is relatively uncommon.
I work for a SystemVerilog simulator, more precisely ncsim. Previously I have worked on another simulator for SystemVerilog and Vera when I was in a startup that got acquired by one of the three giants in our industry. Prior to that I have worked in a parser and a static rule checker for these hardware description langauges. At this point, I'd like to move to a Q&A format.

Q: Who uses such languages? Google, Amazon, Microsoft?
A: Well as a matter of fact they are small-time users. But the major users are semiconductor companies -- Apple, Qualcomm, Intel, Broadcom, Samsung, and so on

Q: What are these languages used for?
A: As I mentioned these are hardware description languages. Designing hardware, i.e., semiconductor circuits (or 'chips' in common parlance) is a mammoth task impossible for any number of humans to achieve. You can only create a high-level design of a chip and feed it to a software program which will produce a lower-level description, and repeat this process a number of times to finally produce the actually design of the chip.

Q: Oh, this means you design chips?
A: Not at all, we create the software and the language for designing chips at a high level.

Q: Is that all? That shouldn't be much difficult
A: On the contrary it is very difficult and very challenging. These languages are parallel and event-driven at their core, but also have procedural, object-oriented, and template-driven programming constructs. And the size of source code we need to handle frequently goes into gigabytes, which leads to simulation running for days at times.

Q: Why try to simulate the entire thing? why not simulate the parts and then try out in hardware?
A: Hardware costs money and software is very very cheap compared to that. Without these software-driven methods of creating hardware you'd not see all the cheap electronic gadgets around yourself.

Q: I don't see why you need object-oriented programming
A: That need came once people wanted to verify the hardware they have written in a reusable manner. People used Java/C++ in conjunction with Verilog simulators at one time. Now SystemVerilog has many of the features of Java/C++ life is better in some ways.

Q: How come I never heard of this kind of programming?
A: This entire industry -- EDA, is very small. It has three giant players (I work in one of them) and maybe a dozen startups. It is a very old field (more than 50 years) and its prime time has passed. The tragedy is that the demand and applicability is at its maximum today but the world is busy funding internet apps.

Q: Okay, now what do you code in?
A: C. Plain, pure, unadulterated :-). It is a remarkable language which allows you so much freedom provided you are willing to take some time to type out the source code. Layers of meta-programming help generate some boilerplate code which reduces some of the latter.

Q: Why don't you use C++/Python/Java?
A: One reason is historical -- much of the code was born in the 1980s. The other reason is that the performance of high-level languages has improved only recently and we as an industry are in the process of moving to C++. The last reason is that good programmers in any language are hard to find in our industry -- most have retired or moved on to other industries. It is difficult to change from one language to another when you have an army of mostly-average programmers.

There is a Udacity course on Functional verification which can tell you about the tools I make. Wikipedia also covers EDA and functional verification.

No comments:

Post a Comment