logo
NotesNotesResumeResume
© 2026 Kiet Nguyen
← All notes
Solarpunk garden machine — shared memory greenhouse, CPU, living bus, and I/O terraces

Breakdown·May 22, 2026·7 min read

Von Neumann architecture — an overview breakdown

Computer Architecture · Foundations · Embedded · CPU · Memory · Systems

A working breakdown of the von Neumann (stored-program) model: shared memory for code and data, CPU control and ALU, I/O, the system bus, the fetch–decode–execute cycle, the von Neumann bottleneck, and how the idea shows up (and is bent) on modern MCUs.

When people say “a computer,” they almost always mean a machine in the von Neumann lineage: a processor that fetches instructions and data from the same memory system, executes them through a control unit and ALU, and talks to the world through input and output—all tied by buses.

LED and series path on a development board

This note is a breakdown overview: the canonical model, the stored-program idea, the instruction cycle, the famous bottleneck. It is literacy for engineers reading datasheets and memory maps.

One-sentence crystal

Von Neumann architecture is the stored-program computer model in which instructions and data live in a shared addressable memory, a CPU (control + datapath/ALU) fetches and executes those instructions over a bus, and I/O devices exchange information with that same computational world.


1. Why this model exists

Before stored-program machines, many “computers” were hardwired or plugboard setups: change the problem → rewire the machine. Reprogramming was physical labor.

The intellectual shift (associated with the EDVAC / IAS-era discussions around John von Neumann and collaborators, mid-1940s) was:

  1. Represent both program and data as numbers in memory.
  2. Let the machine modify its own control flow by treating addresses as data (branches, tables, later self-modifying code).
  3. Separate what the problem is (software image in memory) from what the machine always is (fixed ALU, control, buses).

You do not need the full 1945 paper to use the idea. You need the engineering contract: memory holds bits; the CPU interprets some of those bits as instructions.


2. The classic five-part picture

Teaching diagrams usually show five cooperating pieces:

                 ┌──────────────────────────────────────┐
                 │              CPU                     │
                 │  ┌────────────┐    ┌──────────────┐  │
                 │  │  Control   │◄──►│ Datapath/ALU │  │
                 │  │   unit     │    │  + regfile   │  │
                 │  └─────┬──────┘    └──────┬───────┘  │
                 │        │                  │          │
                 └────────┼──────────────────┼──────────┘
                          │                  │
                          ▼                  ▼
                    ┌────────────────────────────┐
                    │     System bus (addr/data  │
                    │     / control lines)       │
                    └───────┬──────────┬─────────┘
                            │          │
              ┌─────────────▼──┐   ┌───▼────────────┐
              │ Main memory    │   │ I/O subsystem  │
              │ (instructions  │   │ (sensors, UART,│
              │  + data)       │   │  disk, GPIO…)  │
              └────────────────┘   └────────────────┘
BlockJob
Control unitSequences the machine: fetch, decode, issue enables, handle branches/interrupts at a high level
ALU / datapathArithmetic, logic, shifts; often with a register file and flags
MemoryAddressable store of program and data (the defining shared pool)
InputBrings external information into the system
OutputSends results / actions out

3. Stored program — the defining idea

3.1 Instructions are data

At rest, an instruction is just a bit pattern at an address. The CPU fetches it, decodes the opcode, and executes side effects (ALU op, load/store, branch).

Consequences you already live with:

ConsequenceEveryday appearance
Programs are imagesELF/HEX/BIN loaded into flash or RAM
Code can be relocatedLinkers, loaders, position-dependent absolute addresses
Control flow is data-drivenBranch targets, jump tables, function pointers
Debuggers can show code as hexSame memory viewer for stack and .text

3.2 One address space (in the pure model)

In the pure von Neumann ideal, one linear (or mapped) address space holds:

  • machine instructions
  • constants
  • variables
  • often memory-mapped device registers (in later embedded practice)

The CPU does not have a separate “only code may live here” physical universe in the abstract model—though real silicon often adds protections (MPU/MMU execute-never, flash vs RAM attributes).


4. The instruction cycle (system view)

The architectural heartbeat is the same story as the CPU note, now framed as traffic on the shared memory path:

  1. FETCH     PC → address bus → memory returns instruction bits
  2. DECODE    Control interprets opcode / fields
  3. EXECUTE   ALU / address calc / decide branch
  4. MEMORY    Optional load/store (data uses the *same* memory system)
  5. WRITEBACK Result → register (and/or memory)
  6. PC UPDATE Next sequential address or branch target

5. The system bus (the shared road)

In textbook form, a single bus (or a small set of shared lines) carries:

ChannelCarries
AddressWhich location or device is selected
DataBits read or written
ControlRead/write, size, wait, interrupt, bus request/grant

Arbitration appears as soon as more than one master exists (CPU + DMA + debug). On MCUs this is the bus matrix story: multiple initiators, multiple slaves, priority and wait-states—still a descendant of “everything meets on interconnect.”


6. The von Neumann bottleneck

Because instructions and data share memory bandwidth (in the classic model), the machine can starve for work while waiting on memory:

  CPU wants next instruction  ──┐
                                ├──► same memory / bus resource
  CPU wants load/store data   ──┘

That congestion is the von Neumann bottleneck.

Mitigations (not pure-model, but why modern chips look “impure”):

MitigationIdea
CachesKeep hot lines close to the core
Separate I/D pathsFetch and data buses diverge (Harvard-ish)
Pipelines / prefetchOverlap fetch with execute
DMAMove bulk data without CPU in every cycle
Wide buses / dual-issueMore bits or more ops per unit time

7. Harvard vs von Neumann

Von Neumann (classic)Harvard (classic)
Instruction storageSame memory as dataSeparate instruction memory
Data storageShared with codeSeparate data memory
PathsOne conceptual memory pathDistinct I and D paths
FlexibilityCode as data, unified toolsOften faster for DSP-like loops
Cost of purityBottleneck riskHarder “code is just a file in RAM” story

Modern reality is mixed:

  • Many MCUs are modified Harvard or Harvard at the core interface (separate I-Code / D-Code buses on some Cortex-M) while the programmer’s model is still one memory map (flash, SRAM, peripherals).
  • PC / phone CPUs are von Neumann in the software sense (unified virtual address space) with massive Harvard-like cache and bus hierarchies underneath.
  • DSP and some accelerators stay closer to true Harvard for predictable dual-port bandwidth.

Use the labels as centers of mass, not purity tests. Ask: Do fetch and data share the critical resource that limits me right now?


8. Where the model meets embedded practice

PracticeVon Neumann root
Flash holds .text, SRAM holds stack/heapStored program image + working data
volatile MMIO loads/storesMemory-mapped I/O as “memory”
Bootloader copies image, jumps to reset vectorProgram is data that becomes control
Debugger memory windowSame address space for inspection
Self-modifying code / RAM functionsInstructions writable when allowed
Execute-never (XN) regionsSecurity patch on the pure model

9. What the model does not decide

Von Neumann architecture is an organization of computation, not a full product definition. It does not by itself specify:

  • ISA (x86, ARM, RISC-V, …)
  • endianness, word size, alignment rules
  • cache hierarchy or coherency
  • OS or bare-metal
  • real-time guarantees
  • power domains or safety partitions

Those layers sit on top of or beside the stored-program skeleton.


Closing

Von Neumann architecture is the idea that a computer is a machine that runs a program stored as data in memory, with a CPU that repeatedly fetches, decodes, and executes, and a shared path that also serves loads, stores, and often I/O.

Everything flashy in modern silicon—pipelines, caches, multi-issue, bus matrices—is largely an attempt to keep that idea while escaping its bandwidth and hazard limits. If you can draw the five boxes, the stored-program rule, and the bottleneck in one breath, you have the overview.

Back to notes

Was this page helpful?