Course Curriculum
All 47 levels, from the first wire to an FPGA: for each — the task, difficulty, typical time, and a measurable learning outcome.
Part 1 · Basics
≈ 330 min · ≈ 5.5 h
From the first wire and a NAND to the program counter: gates, adders, multiplexer, SR latch, D flip-flop, register, ALU, clock.
Part 2 · Advanced Architecture
≈ 415 min · ≈ 6.9 h
Instruction decoder and the final Harvard processor with assembler, then peripherals: variable PC step, dual ROM read, IX pointers, buses and I/O ports, status flags, the final Snake.
Part 3 · Verilog
≈ 360 min · ≈ 6 h
Hardware description language: primitives, module hierarchy, buses, ALU, RAM, datapath, multi-file projects, RTL Viewer, and waveforms.
Part 4 · Computer Design
≈ 135 min · ≈ 2.3 h
Control unit, custom instruction set (ISA), memory-mapped I/O, and export to a real Tang Nano 9K FPGA.
Total: ≈ 21 h of pure solving
≈ 1240 min
≈ 28 lessons of 45 minutes of pure solving; with theory, articles, and review — ≈ 40 lessons (30 h).
School implementation formats
Year-long elective
2 lessons a week (45 min each) — all 47 levels fit into one school year.
Half-year club
4 lessons a week — the full course fits into one semester.
Intensive
5 days × 6 hours — a summer school or profile camp format.
Part 1 · Basics · Levels 1–16 · ≈ 330 min
Let there be light!
Task: Connect the signal source (Input) to the receiver (Output).
Negation
Task: Build a NOT gate from a NAND. When the input is 1, the output should be 0.
Perfect pair
Task: Build a logical AND gate.
At least one
Task: Build a logical OR gate.
Strict choice
Task: Build an Exclusive OR (XOR) gate.
Half Adder
Task: Build a Half Adder.
Full Adder
Task: Build a Full Adder: 3 inputs, 2 outputs.
8-bit Adder
Task: Build an 8-bit adder (ADDER8) using FullAdders and buses.
Crossroads
Task: Build a multiplexer (MUX): selects one of two input bits.
Loopback
Task: Build an SR latch from NOR gates. State is held when S=0, R=0.
Smart memory
Task: Build a D flip-flop (DFF). Data is captured on the rising edge of the Clock.
Tangible Memory
Task: Build an 8-bit register from DFFs. Connect its output to LED8.
Operation Selection
Task: Build an operation selector. BusMUX picks the result: ADD, AND, or OR based on OpSelect.
Heart of math
Task: Build an 8-bit ALU (ADD, AND, OR, XOR, NOT, SHL, SHR). Hint: decoder -> operations -> MUX.
System Pulse
Task: Learn the concept of clocking. Press ManualClock and watch the counter on the LED8.
Program Counter
Task: Build a Program Counter (PC) from a Register and ADDER8. Each clock tick increments the address by 1.
Part 2 · Advanced Architecture · Levels 17–29 · ≈ 415 min
Anatomy of a Decoder
Task: Build the recognition logic for 3 opcodes (ADD, STA, JMP) in the decoder. LED indicators on the outputs show which line is active.
FINALE: The Ershov Computer
Task: Build an 8-bit computer! Harvard architecture: ROM (instructions) + RAM (data) + PC + Register + ALU + Decoder + Clock.
Step Forward (PC+2)
Task: Connect BusConstant(2) to the PC Inc input so the PC steps by +2 instead of +1.
Dual Read
Task: Add a second ROM for reading 2-byte operands. PC steps by +2.
Pointers
Task: Add Index Register (IX) for indirect addressing. Implement LDX, LDAX, STAX, INX in the decoder.
Bus Conflict
Task: Fix the data bus conflict: RAM and Gamepad both drive the bus. Add AddrDecoder and BusAND to gate the RAM output.
Gamepad
Task: Write a program that reads the gamepad (port 254) and stores the value in RAM[0].
Manual Pixel
Task: Connect 4 BusConstants to the MatrixDisplay and light up pixel at (0,0).
Negative Check
Task: Learn the JN (Jump if Negative) conditional jump. Run the test program and verify the jump works.
Dice Roll
Task: Connect the LFSR (random number generator) to the data bus via a second BusOR.
Hello, Ports!
Task: Change the constants in the program so the pixel lights up at X=4, Y=12.
Moving Dot
Task: Write a program that moves a dot on the screen using the gamepad.
FINALE: Snake
Task: Write a complete Snake game in assembly!
Part 3 · Verilog · Levels 30–43 · ≈ 360 min
Hello, Wire!
Task: Code is not an algorithm — it is a circuit blueprint. Call the basic AND gate to route your first wires in silicon. Write: and gate1(out, a, b);
Flow Control (MUX)
Task: Build an XOR gate using only and, or, and not. The built-in xor is disabled. Key rule: lines of code here work simultaneously, like connected conductors, not sequentially.
First Computation
Task: Design a 2→1 multiplexer. If sel=0, out=a; if sel=1, out=b.
Scaling Circuits
Task: Design a half adder. sum = a XOR b, carry = a AND b.
Transition to Data Buses
Task: Design a full adder. sum = a XOR b XOR c_in, c_out = (a AND b) OR (a AND c_in) OR (b AND c_in). You may use HalfAdder from the previous level.
Computation Center (ALU)
Task: Design an 8-bit adder. Use 8 full adders (FullAdder) in a ripple-carry chain.
ALU
Task: Build an 8-bit ALU. op_code=0: add (Adder8), op_code=1: bitwise AND. Use Adder8 and Mux modules from previous levels.
Memory and Time
Task: Design an 8-bit register from D flip-flops using generate-for. module Reg8(input wire [7:0] in, input wire clk, output wire [7:0] out);
Step by Step
Task: Design an 8-bit counter: register + adder in feedback. Constant 8'b00000001 = +1.
Random Access Memory
Task: Wrap the built-in RAM256 for reading and writing data by address. RAM256 ports: (clk, we, addr, data, q).
Heart of the CPU
Task: Design the datapath: Counter → ROM → ALU → Register. ROM data: 0→5, 1→7, 2→3, 3→10, 4→2. ALU adds.
System Anatomy
Task: Build the top-level CPU module. Instantiate Reg8 and FullAdder from neighboring files (register.v, full_adder.v) and connect them.
X-Ray for Silicon
Task: Explore the hierarchy through the RTL Viewer (X-ray machine for chips), find the wrong gate at the lowest level, and answer the question.
Freezing Time
Task: Find and fix the bug in FullAdder. The test fails — open the waveform scope and find the wrong carry wire.
Part 4 · Computer Design · Levels 44–47 · ≈ 135 min
Control Unit
Task: Implement the instruction decoder. Input: 4-bit opcode, outputs: control signals (RegWrite, MemWrite, ALUSel, Branch). Use AND/OR/NOT gates.
My ISA
Task: Build an 8-bit ALU. Support three operations: ADD (sel=0), AND (sel=1), OR (sel=2). Use Adder8 for addition, gates for bitwise AND/OR, and a sel decoder with MUX to select the result. Use generate-for loops.
Memory-Mapped I/O
Task: Implement an I/O controller. Writing to address 0xFF updates LEDs (led_out), reading 0xFE returns switch states (switches_in).
Create Computer
Task: Write top.v, instantiate the CPU, and wire the ports. Press "Build Computer" to export the project to Tang Nano 9K.
Related reading
Part 1 · Basics
- Introduction to Circuit Design
- How a Computer Works
- How a Processor Works
- Logic Gates: AND, OR, NOT
- De Morgan's Laws
- XOR Gate
- Anatomy of an Adder
- Information Buses
- Multiplexer: Electronic Switch
- ALU: Heart of Math
- The Magic of Feedback
- Clock and D Flip-Flop
- Registers: First Byte of Memory
- Program Counter