Live data from Hacker News

Ask HN: How does code get translated to voltage inside a CPU transistor?

news.ycombinator.com

1–10 of 23 posts

Ask HN: How does code get translated to voltage inside a CPU transistor?

#1
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?)

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#2
Any boundary noted is is artificial and people doing software must know about the hardware - especially in the 1950s. Every subject in the book is written by somebody who has no clue what he is talking about directed at other people who are equally clueless and perhaps gullible. Most readers grab onto the vague feeling of understanding and ride it like a bearded man on a narwhal. This was the era when hipsters were coined.

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#3
That's a very unusual way to phrase the question, there are many steps between code and voltage in a CPU.

In brief, Code is stored in memory as a series of 1's and 0's.

Now the memory is stored as different voltage levels in transistors - 5 volts for a 1 and 0 Volts for a 0 for argument sake (but the voltage to logic value is arbitary).

Now the CPU executes the code by walking along different pieces of memory and executing different instructions depending on the value of those pieces of memory.

There's a lot more. For a start Google 'Introductory Digital Electronics' or 'Introductory Computer Architecture' and this might get you started.

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#4
post #3

That's a very unusual way to phrase the question, there are many steps between code and voltage in a CPU. In brief, Code is stored in memory as a series of 1's and 0's. Now the memory is stored as different voltage levels in transistors - 5 volts for a 1 and 0 Volts for a 0 for argument sake (but the voltage to logic value is arbitary). Now the CPU executes the code by walking along different pieces of memory and exe…

OK... how do the 1's and 0's in code become different voltage levels? That's all I'm interested in. That's the software|hardware boundary I'm referring to (and artificial one perhaps, but the boundary of interest to me).

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#5
post #3

That's a very unusual way to phrase the question, there are many steps between code and voltage in a CPU. In brief, Code is stored in memory as a series of 1's and 0's. Now the memory is stored as different voltage levels in transistors - 5 volts for a 1 and 0 Volts for a 0 for argument sake (but the voltage to logic value is arbitary). Now the CPU executes the code by walking along different pieces of memory and exe…

OK... how do the 1's and 0's in code become different voltage levels? That's all I'm interested in. That's the software|hardware boundary I'm referring to (and artificial one perhaps, but the boundary of interest to me).

Well, where does the code reside? If it is in RAM, then those 0's and 1's are different voltage levels; if it's coming in through a cable (ethernet or USB or keyboard), then 0's and 1's are already different voltage levels; if they're on a hard drive, then they're becoming different voltage levels as soon as the head reads them from the magnetic platter.

I'd draw the boundary this way - hardware talks about how physical components will affect behavior of voltage levels, software talks about how one voltage levels will affect behavior of other voltage levels.

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#6
Hardware has functionality in and of itself, for example a flop-flop is a circuit that can store a voltage (ie. a one for an arbitrary voltage or a zero for a different arbitrary voltage), an adder is a circuit which adds to sets of values etc.

In a computer there are a bunch of these different low level circuitry components which when combined in different ways can be used to produce any functionality. There is a certain amount of the circuitry which is unusable by the programmer which is reserved to know where all of these components are and how to connect one component to another. You can think of this as a program that is built into the hardware which knows how to install and run other programs.

Basically when you write code, there is a program or multiple programs which transforms the words you write into a string of binary numbers which tells the control circuitry how to arrange the free components to get the desired behavior.

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#7
post #3

That's a very unusual way to phrase the question, there are many steps between code and voltage in a CPU. In brief, Code is stored in memory as a series of 1's and 0's. Now the memory is stored as different voltage levels in transistors - 5 volts for a 1 and 0 Volts for a 0 for argument sake (but the voltage to logic value is arbitary). Now the CPU executes the code by walking along different pieces of memory and exe…

OK... how do the 1's and 0's in code become different voltage levels? That's all I'm interested in. That's the software|hardware boundary I'm referring to (and artificial one perhaps, but the boundary of interest to me).

They don't become voltage levels, they are represented by voltage levels. There's nothing that converts a 1 to a particular voltage level. In TTL logic for example (an old type of transistor based logic circuits) it has a voltage swing of 0 to 5 Volts and a 1 is usually defined as 5 volts.

There's a think called a J-K flip flop that is worth having a look at - it's the simplest memory element conceptually and it takes a number of transistors to actually implement (6 I think from memory in TTL - I may be wrong - it was a long time ago).

In a real cpu D-Ram stores the bits (1's and 0's) and it works by storing a charge http://en.wikipedia.org/wiki/Dynamic_random-access_memory

The software / hardware boundary you speak of is a matter of definition and different people would define it differently. For a hardware developer, they would probably regard microcode as software, but an application developer would regard it as part of the hardware.

hth

Re: Ask HN: How does code get translated to voltage inside a CPU transistor?

#9
I'm happy to say that I'm uniquely qualified to help you.

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.

Post reply on HN