Our new hires have to go through a series of refresher courses on basic/fundamental skills that are important here – Git, C/C++ programming, etc. For most of these things, there are plenty of resources online that can be used. However, there seems to be a shortage of materials for a particular skill that we need – digital chip design. Therefore, I plan to write a set of materials to serve as a basic introduction to what is important that will be published in a series of blog entries.
We will start this week with an introduction to Hardware Description Languages (HDL).
In the past, digital circuits were designed by hand. Engineers would draw circuit schematics by hand. Even today, students are still learning how to design digital circuits by sketching circuit schematics either on a piece of paper or with the aid of a Computer-Aided Design (CAD) software tool. There is nothing inherently wrong with designing electronic circuits this way.
However, this is not sustainable as circuits get more and more complex. When a circuit has a million transistors in it, it would be impractical to design it by hand. It would also be difficult to debug the problem. This is akin to writing software in assembly – while perfectly fun to do, it is not suitable for significantly complex software applications.
Therefore, the solution to this was to use HDL. These look just like high-level programming languages and most students who learn them, treat them just like software programming languages. Unfortunately, that is a common mistake as these languages are actually used to replace schematic drawings, used to describe the electronic circuits. There are some fundamental differences.
For one thing, while most software programming languages have inherently linear data flows, HDLs have to be inherently concurrent because an electrical current flows down however many wires it is connected to, at the same time. Therefore, HDL designer needs to be able to think concurrently, not linearly. This is something that should not be overlooked when teaching these languages.
Also, the purpose of these languages is to describe hardware. Although the control logic looks like software control structures, it is actually used to describe electronics hardware. While knowledge of electronics is not strictly necessary, using HDL without it will result in hardware bugs. This is just like how C programmers need to understand CPU architecture to avoid writing bugs into their software.
Two most commonly used HDL are Verilog and VHDL. While there are several others, these two have proven the most popular in both academia and industry. For the purpose of these set of blog entries, we will be covering Verilog first. Besides the language, we will also be introducing some tools with learning these languages.
While the languages are very capable, not everything can be used to design electronics hardware. Some parts of the language are only useful for simulation purposes. Therefore, these materials will focus on only a subset of the language – what is referred to as the synthesizable subset.
What is synthesis? That is something that will be explained in the next entry.