In my previous article, “Why Is Hardware So Easy and Software So Hard?,” I suggested that hardware design is much easier than software. My fellow Design News contributor, Jacob Beningo, responded with his counterpoint, pointing out why software has become designable in blocks like hardware.
However, there's still an important argument for hardware being easier than software. One that actually came in response to one of the reader comments to my article. You have to consider the inherently lower-level design methodology used in software compared to hardware.
The basic idea here is to rank the design process from easy to hard based on the level of the basic symbols needed when “coding” in hardware or software. I think of design work as basically symbolic logic manipulation. You have some “icon” that stands for a concept, and you add icons together to do something, with a logic outcome.
MORE FROM DESIGN NEWS: Why Is Hardware So Easy and Software So Hard?
If you are creating any kind of algorithm -- be it control, digital signal processing, or video compression -- you are defining the algorithm in symbols, and you manipulate the symbols in such a way that they logically “execute” your algorithm. I would propose that, in general, the higher level (the more logical content) a particular icon has, the easier it is to create the algorithm you desire.
Now in software, the icons that we use are typically letters and words. We can create variables by naming them (stringing together letters), invoke functions by naming them, or include a specific library of specialized functions we need for our algorithm. We are always using letters, characters (like the “(“ and the “)” and the “,” and the “+”, etc), and words to create our code.
In my mind, a page of code represents a fairly low level of symbolic logic. Figure 1 is fairly representative of what software symbolic logic looks like. Maybe you are thinking that I’m showing my hardware bias already, but stick with me.
Now for hardware, the symbolic logic “icons” are very different. Basically we have boxes (or specialized boxes that represent capacitors, inductors, registers, etc) and lines (or lines that represent multiple lines, called a bus). One interesting fact about this set of icons is that it is, by definition, hierarchical in nature. Inside a box, another whole “world” of boxes and lines can exist. You can represent very complex “objects” with just a single box. (This fractal property, of self-similarity at any level of “zoom” when looking at the design, is a powerfully simplifying design element and perhaps deserves an article of its own!)
Take a look at Figure 2. This is a top-level block diagram of an image processing system using a Xilinx SoC FPGA. (Note that my Design News Continuing Education Center online course being held all this week, sponsored by Digi-Key, is going over SoC FPGAs in detail with some hands-on examples, so if you are interested in learning more, please sign up for it, as there is still time. Previous classes this week have been archived for on-demand catch-up viewing.) At a glance, you can tell the main elements of the design, and you can get a fairly good idea of the function that’s associated with each of them.
MORE FROM DESIGN NEWS: Counterpoint: Why Is Hardware So Easy and Software So Hard?
Now, this isn’t a “formal” design; it would need to be part of a design environment, but I hope the example illustrates my main point about the level of symbolic logic used in hardware. If it were a formal design element, we could “zoom” into each box and see what was going on inside. Note that some of the boxes might even include software “code” that would run on one of the processors. This code would need to be written in a language like C, however, not with boxes and lines.
My point is fairly simple. I think using boxes and lines, in a hierarchical design methodology, is fundamentally a higher-level design methodology than writing code with letters, words, and symbols. To my mind, this means that hardware is easier than software to design.
So what do you think? Does it make sense to judge the spectrum of easy and hard design based on the level of symbolic logic manipulation that the methodology presents the designer? Is there a better way to judge?
Let me know what you think. Perhaps you will be able to convince me that software is actually easier than I believe it is!
Warren Miller has more than 30 years of experience in electronics and has held a variety of positions in engineering, applications, strategic marketing, and product planning with large electronics companies like Advanced Micro Devices, Actel, and Avnet, as well as with a variety of smaller startups. He has in-depth experience of programmable devices (PLDs, FPGAs, MCUs, and ASICs) in industrial, networking, and consumer applications and holds several device patents.