In "Zen and the Art of Motorcycle Maintenance" there's a section about how there are these 2 buildings on a corporate campus, housing hardware and software personnel respectively. The hardware people make flip-flop circuits, and the software people work with the software equivalent of the same. But neither group properly understands at which point exactly the software|hardware boundary lies.
Text in my text editor gets converted to 1's and 0's which then get converted to electric signals inside transistors in my iPad's CPU.
What's the mechanism by which 1's and 0's turn into different voltages? Can someone point me to a resource (preferably a video) that explains this?
(How is mere text able to control what happens inside an inanimate machine?)
(In other words, what happens at the software|hardware boundary?)
I have a BS in Computer Engineering and a MS in Electrical Engineering, with a specialty in VLSI and microelectronics.
While in school, I had to design a microprocessor, one transistor at a time. Great experience, by the way.
I will summarize this process from a Top-Down approach, in case you're a CS major. (Note that engineering is Bottom-Up!)
- C/C++ gets converted into Assembly Language.
- Assembly Language gets converted into bytes. (One or more bytes encode each machine instruction and data)
- Each machine instruction takes multiple clock cycles to execute.
- On each clock cycle, a "microcode" (a.k.a. Register Transfer Language) moves data around. (The order in which data are moved from one register to another is controlled by a Finite State Machine.)
- Each finite state machine is composed of sequential circuits and combinational circuits: multiplexers, decoders, etc.
- Each sequential circuit is composed of some type of memory element : flip-flops, latches, etc. (Sequential circuits can be static, quasi-static, or dynamic. In all cases, they are composed of combinational logic with feed-back.)
- Combinational logic is composed of CMOS (MOSFET) transistors. In the past, we used BJTs... and they're actually making a comeback.
- Transistors are arranged in such a way as to perform logic equations: Inverter, NAND, NOR, etc. (Look up a CMOS Inverter to know what I'm talking about.)
Pretty easy, right!?!
I want to encourage you to look at the following references, in order.
(1) CMOS Digital Integrated Circuits by Kang and Leblebici --the best digital VLSI book ever (2) Digital Logic Circuit Analysis & Design by Nelson et al. --tough book on digital logic, but pretty good (3) Computer System Architecture by Morris Mano --works its way up from logic design (K-maps, etc.) to state machines to assembly language
And now, I'm going to through a curve ball at you: Any algorithm you can implement in software, you can also implement in hardware.
How is this possible? Hint: Think of Finite State Machines. And then look into ASIC and FPGA design of digital filters and digital control systems.