
Ask HN: Getting started with hardware development? - eagerigor
I&#x27;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.<p>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&#x27;s hard to follow if I don&#x27;t have my foundations steady.<p>Do any sort of these guides exist? Note that I tried googling, but I understand it&#x27;s easy to just search for things online and get lost in (on?) the wrong path.<p>If it helps answer the question further, I&#x27;m looking to grow my knowledge and apply it in the field, meaning I&#x27;m not looking for any simple &quot;Hello World!&quot; tutorials.<p>Thanks in advance!
======
fefb
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.

------
jrowley
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.

~~~
joezydeco
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.

[https://artofelectronics.net/](https://artofelectronics.net/)

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

[https://www.amazon.com/Computer-Organization-Design-ARM-
Arch...](https://www.amazon.com/Computer-Organization-Design-ARM-
Architecture/dp/0128017333)

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

[https://www.amazon.com/Structured-Computer-Organization-
Andr...](https://www.amazon.com/Structured-Computer-Organization-Andrew-
Tanenbaum/dp/0132916525)

------
stevekemp
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.

------
yogeshp
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/](https://www.instructables.com/classes/tagged/electronics/)

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

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

[4] [https://www.edx.org/course/embedded-systems-shape-world-
utau...](https://www.edx.org/course/embedded-systems-shape-world-utaustinx-
ut-6-10x)

------
e19293001
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.

------
negativereturn
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.

------
Jeremy1026
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.

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

[https://courses.ideate.cmu.edu/16-223/f2017/text/index.html](https://courses.ideate.cmu.edu/16-223/f2017/text/index.html)

------
elhiruko
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/](https://soc-
extras.lip6.fr/en/alliance-abstract-en/)).

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

