Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Getting started with hardware development?
25 points by eagerigor on Aug 31, 2017 | hide | past | favorite | 10 comments
I've seen many great guides that outline the topics needed for the foundations of software development (data structures, algorithms, etc.). There are also many great guides that focus on certain specialties as well. A lot of them are quite useful and can help you advance in your career and make an impact in the field.

I have been highly interested in learning hardware, but fail to find any guides that explain (or even outline) core concepts and topics. There are a few that are around specializing, but it's hard to follow if I don't have my foundations steady.

Do any sort of these guides exist? Note that I tried googling, but I understand it's easy to just search for things online and get lost in (on?) the wrong path.

If it helps answer the question further, I'm looking to grow my knowledge and apply it in the field, meaning I'm not looking for any simple "Hello World!" tutorials.

Thanks in advance!

If you want some tree way model to learn, you can start:

1- studying the difference types of transistor ( bipolares -> NPN, PNP; unipolares -> MOSFET, JFET). How they works, how you can build logic with them.

2 - Understanding the simple ports ( or, and, not, xor), how they works, how they are build with transistors. Learn the method of Karnaugh.

3 - Learn some circuits like the differents type of flipflops, ULA, Mux, Demux, registers. Asynchronous and Synchronous system.

4 - Learn how state machine works, the Moore and Mealy models.

5 - Study the Data and Control Path of a CPU. You can do some dedicated circuits.

6 - Learn some Design hardware language like Verilog or VHDL, and implement your circuits from step 5.

7 - Learn the MIPS processor, and add some news instructions.

8 - Use your modified MIPS to build some microcontroller design, with PIC and others devices.

9 - You can keep walking from here...

PS.: - From step 3 to 5 you can use a software called Logisim to build your logiv circuits . - From step 6 to 9 you can use any VHDL/Verilog IDE. some companies has good ones like Freescale and Altera.

So I see 4 different paths to learning hardware development:

1) analog electronic projects. 2) microcontroller projects. 3) fgpa projects. 4) some combination of the above.

Understanding FGPAs/Digital Logic/Basic Computer Architecture will help you better appreciate using a computer.

Analog electronics are the most foreign to me, but they are foundational, and it's really amazing to see people using analog electronics for computation.

Microcontroller projects are great because they can bridge your existing software experience with basic analog electronics and systems.

I recommend you start with one of these paths, for example a simple microcontroller project and then migrate to learning about digital logic and FPGAs. I don't have any specific resources to share, but hopefully this comment helps, and my apologies if it doesn't.

I agree with jrowley, and here are some resources I can recommend. These are college textbooks, not websites.

First, some EE. Horowitz & Hill's "The Art of Electronics" is the gold standard.


Then, Hennessey and Patterson's "Computer Organization and Design: The Hardware/Software Interface (ARM edition)",


...or Tannenbaum's "Stuctured Computer Organization"


Last December I started being interested in hardware development, and experimentation. I initially started with Arduino boards, but almost immediately jumped-ship to the ESP8266 devices - because they come with on-board WiFi support, and they're very very cheap.

For me it had been years since I'd touched a soldering iron, and even then the things I'd done had been very basic. But I've had a lot of fun wiring up sensors to the devices, writing software that works in the tiny amount of space available (though much more space than I had when I was first exposed to programming, on a 48k Spectrum back in the early eighties.)

You're not specific about the type of hardware, but I found this "IoT" style development pretty well documented, and fun. You don't need many parts, you don't need much time, and if you can code in C already you're not having to learn too many new things all at once.

Right now I have a bunch of projects I made around the place. Some more useful than others. I expect I'll stop soon, but it was a fun diversion and no doubt I'll get back to it in the future.

To get started from hobby perspective, you can start with online electronics courses at Instructables[1].

If you are looking for something more academic to start with, check Computer organization/architecture and Embedded systems courses at [2] and [3]. UT Austin's Embedded Systems course at Edx.org [4] is also good place to start.

[1] https://www.instructables.com/classes/tagged/electronics/

[2] https://github.com/Developer-Y/cs-video-courses

[3] https://github.com/Developer-Y/engineering-video-courses

[4] https://www.edx.org/course/embedded-systems-shape-world-utau...

If you want to build your own CPU, you should learn about Hardware Description Languages like Verilog. There are free simulators out there that you can play with like Icarus Verilog.

For fundamental electronic circuits MIT 6.002 course is available on edx if you have a calc background. In any case original lectures are very worthwhile with Anant Agarwal. Get a feel for fundamental concepts from youtube videos by Eugene Khutoryansky If you want to share with son or daughter as crazy as it sounds, snap circuits and other electronic project kits like these get you breadboarding. Then arduino and raspberry pi projects like the other good people suggest.

What kind of hardware are you looking to produce? If its fairly simple stuff with a single micro controller, a handful of sensors, and maybe a little I/O then I'd point you towards Arduino. It might not the be most elegant solution for hardware, but it'll be a good stepping stone to get your feet wet and see if you want to really pursue it.

CMU's Intro to Physical Computing course materials provide an excellent jumping off point:


jrowley's comment is a good start. In addition one could also suggest digital design for asics, but then I guess the thing is you have to either be at a university or work with tools from vendors like Cadence or Synopsys. But there is a free software called alliance which is supposed to work with ubuntu (I have never used it yet though... here it is https://soc-extras.lip6.fr/en/alliance-abstract-en/).

Maybe with the power of the internet we can create a guide :-)

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact