Ask HN: Thinking like a hardware designer

3 points by DigitalJack ↗ HN
I understand it's difficult to realize what you don't know, so this question may be unanswerable. I'm a hardware engineer, I develop ASICs and FPGAs for various tasks. I also develop simple software as a hobby. I don't have a background in the kinds of algorithms that a CS student would have, but I can hack my way through stuff. That said, I'm interested in working a book to take a software engineer into the realm of hardware hacking of FPGAs. Rather than just give a CPU example in VHDL I'd like to work through the main principals of what sort of thinking is needed for hardware development. However, since I don't have a CS degree, there is a lot of intro material that I'm just not sure is common knowledge to CS students or not. So this is an open ended question. What sorts of things would you like to see in such an introductory book (geared toward software hackers) and what would you like it to assume you already understand? For example are CS folks comfortable with the idea of two's complement for subtraction? Are you interested in semiconductor physics or the process of constructing integrated circuits? (that's interesting background, but not strictly required for digital design). Are you comfortable with boolean logic, stuff like demorgan's laws? I'm assuming karnaugh maps aren't frequently brought up in a CS environment. I'm trying to figure out what would be a waste if I am targeting CS hacker types vs someone with no computer background.

4 comments

[ 3.7 ms ] story [ 16.3 ms ] thread
Hey, I had the exact same motivation to introduce software folks to HW thinking and started this page: https://en.wikibooks.org/wiki/Programmable_Logic/Verilog_for...

Maybe you want to add more pages based on what you think is important.

I think I did run across this in my initial research, but I was also interested in learning LaTeX and thought this project would be a good excuse to do that.
I'd say most people in computer science have a comprehensive understanding of data representations so they have knowledge of things like two's complement. I think it's most important to start of explaining that verilog and vhdl are hardware descriptor languages not a programming language and get them to the point where they can visualize the actual logic being described. It's important to understand that registers can't just be thought of as a variable in the traditional sense despite looking like one at the syntax level; they're really a flip-flop that needs to be clocked. And that there is a critical delay path in the combinatorial logic that will dictate how fast your clock can be.
Thanks for the feedback. I have quite a bit written already and was just getting to the concept of timing and clocking signals.