An FPGA Learning Roadmap: Logic, HDL, Simulation, And Hardware

July 23, 2026

FPGA + Verilog · Chapter 3 of 7

Learn the circuit before the syntax, prove it in simulation before assigning pins, and reach for hardware with an expected result already written down.

This route begins with Boolean switching in Logisim, moves through Verilog and a self-checking counter, then crosses the physical boundary into FPGA I/O. CMOS and ASIC tapeout remain visible as deeper paths rather than being compressed into beginner prerequisites.

See the complete seven-chapter course

Comparison of SQL, publish-subscribe, input-output, and Arduino-loop analogies with the central model of HDL as concurrent hardware changing over time
Original Greenforest I/O diagram. Software comparisons can get a learner moving, but each has a breaking point. The stable center is a circuit with concurrently existing structure, explicit state, timing, and physical resources.

The Route In Seven Milestones

  1. Manipulate Boolean logic. Build small switching functions until gates, truth tables, multiplexers, and shared terms feel concrete.
  2. Use Logisim as a circuit playground. Draw, wire, toggle, observe, and debug without making HDL syntax the first obstacle.
  3. Write practical HDL. Learn enough Verilog and SystemVerilog to express combinational logic, clocked state, hierarchy, and checks; learn to read VHDL when a project requires it.
  4. Simulate a counter and its testbench. Turn a behavior into a design under test, stimulus, expected results, and a waveform.
  5. Move the same idea onto an FPGA board. Select a specific board revision, bind ports to pins, meet electrical and clock constraints, build a bitstream, and observe real I/O.
  6. Look downward into CMOS. Study transistor-level logic, timing, power, metastability, memory, and clocking as deep subjects in their own right.
  7. Follow the ASIC path when the question demands it. Treat synthesis, physical design, signoff, packaging, and tapeout as another full engineering course, not as “FPGA plus one command.”

The order is progressive, not a gatekeeping checklist. You can revisit every layer. A puzzling Verilog result may send you back to the circuit. A board timing failure may send you back to the RTL. An ASIC question may change the architecture you first explored on an FPGA.

Boolean Logic Before Language Ceremony

Begin with Boolean values and switching circuits: AND, OR, NOT, XOR, multiplexers, decoders, adders, and simple state. Write truth tables. Simplify expressions. Notice when two outputs share an intermediate term. Then add feedback only through an explicit storage element and ask what changes at a clock edge.

Logisim-evolution is useful because the circuit stays visible. You can toggle an input and watch a wire change, inspect a subcircuit, or discover that the output you expected was never connected. That immediacy makes it a good playground for Boolean logic and switching theory.

But Logisim is not the FPGA. Its schematic is a model, and its timing can be simpler than physical propagation, clocking, and device constraints. Use it to learn and test structure; do not infer that a clean schematic automatically meets timing or maps efficiently to one target fabric.

The site’s bubbles-free bit-serial multiplier is a useful advanced Logisim artifact: one result bit leaves every clock after pipeline fill, showing how a visible circuit can teach a schedule rather than merely a truth table.

Learn HDL As A Way To Specify Hardware

The practical syntax target is Verilog and SystemVerilog: modules and ports, vectors and indexing, continuous assignments, combinational procedures, edge-triggered procedures, parameters, hierarchy, and testbench constructs. This is enough to build commercially recognizable FPGA work and to enter an ASIC flow later.

VHDL remains important in many codebases. Python is valuable around HDL—for generating data, running tests, inspecting artifacts, or driving a verification framework—but a Python script is not a substitute for understanding what hardware the RTL describes.

Keep one language reference beside the work, but do not learn by reading a reference from top to bottom. The project-anatomy chapter keeps this course’s canonical Verilog quick reference. Use it when a concrete counter or testbench gives a syntax question somewhere to land.

Make The First Verilog Result Executable

The first hands-on HDL milestone is deliberately small: create a counter circuit, create a testbench, compile both with Icarus Verilog, and run the simulation with vvp. The source curriculum compressed that into one shell line. The course expands it into named design and test files, explicit reset and clock stimulus, checks, a VCD dump, and an expected terminal result.

This separation matters. The counter is the hardware you intend to build. The testbench is the environment that drives it and decides whether observed behavior is acceptable. A simulator command must include both—or otherwise provide a source of stimulus—because an isolated counter has no clock, reset sequence, or human-visible acceptance test.

Cross The Physical Boundary Deliberately

Simulation proves behavior in a model. FPGA work adds a physical contract: a selected device and board revision, a clock source, named top-level ports, package pins, I/O standards, timing requirements, power, connectors, and a way to load the resulting bitstream.

The curriculum left the board “TBA.” That is honest: a board-neutral introduction should not publish one pin file as if it fit every device carrying the same product-family name. Choose the exact board revision before downloading constraints or running a loader. Then make the first hardware result boring and visible—a counter bit driving an LED slowly enough to see, or a loopback signal that can be measured.

A successful board lab should state its acceptance test before the build: which LED or pin changes, at what approximate human-visible rate, what reset does, and how failure will be distinguished from a pin-mapping or board-detection problem.

Fun, Cheap, And Easy—Then Deeper

The original topic map drew a memorable line:

Above: fun & cheap & easy.
Below: useful & career-focused.

Keep the line, but reject the idea that the upper half is disposable. Boolean play, a small simulator, and one visible board result are useful precisely because they make feedback fast. They build the intuition needed for harder work without requiring a tapeout budget or a complete semiconductor curriculum.

Below that line, the subjects get deep quickly. CMOS knowledge opens transistor behavior, noise margins, delay, dynamic and leakage power, clocking, storage, and physical implementation. ASIC tapeout adds technology libraries, design-for-test, floorplanning, power distribution, clock trees, extraction, timing and physical signoff, packaging, fabrication, and bring-up. Those are career-scale domains, not one unfinished “more hardware” step.

FPGA experience is still a strong bridge. It teaches clocked state, finite resources, synthesis, timing reports, constraints, I/O, and verification while preserving short edit-build-test cycles. It does not remove the additional physics and process obligations of an ASIC.

Five Analogies, Each With A Breaking Point

The fastest way to explain HDL to a software developer is often to ask what it resembles. The safest way is to answer the second question immediately: where does the resemblance stop?

Is it like Logisim?

Useful resemblance: both describe networks of logic, storage, and connections. A Verilog module can correspond to a Logisim subcircuit, and a testbench can exercise cases you once toggled by hand.

Breaking point: HDL also carries widths, signedness, clock and event semantics, hierarchy, parameterization, and simulation-only behavior. Synthesis may transform the written structure substantially before it reaches the FPGA.

Is it like SQL and set-based thinking?

Useful resemblance: SQL helps break the habit of spelling every operation as an imperative loop. Likewise, an HDL expression can describe a relationship that hardware maintains whenever its inputs change.

Breaking point: SQL describes results over data under a database execution model. RTL allocates finite state, operators, and connections with clock and timing consequences. Two equivalent equations may have different hardware cost or latency after mapping.

Is it like publish/subscribe?

Useful resemblance: a signal change can awaken multiple dependent processes, and one produced value can fan out to several consumers. Event-driven simulators make this resemblance visible.

Breaking point: a net is not a broker and a signal transition is not a queued message. Fanout consumes electrical and routing resources; clock-domain crossings need explicit treatment; there is no implicit buffering policy or backpressure protocol.

Is it like high-throughput I/O?

Useful resemblance: FPGA pipelines can accept and transform streams continuously, and many pins or serial lanes can operate concurrently. Data need not be fetched as one CPU instruction stream before every elementary operation.

Breaking point: there is no generic “FPGA I/O is 200 MHz” fact. Rate depends on the device, I/O standard, board, clocking, protocol, timing closure, and architecture. Width, frequency, serialization, latency, and backpressure must all be named before quoting throughput.

Is it like Arduino setup() and loop()?

Useful resemblance: in simulation, an initial block begins once, while an always block repeatedly reacts according to its timing or event control. That can help an Arduino programmer notice two different kinds of process.

Breaking point: there is no single imperative main loop. Every initial and always block is its own concurrently scheduled process; statements inside one block are ordered; synthesizable meaning depends on the construct and tool. Use always_comb for combinational intent and always_ff @(posedge clk) for clocked intent when SystemVerilog support allows. Learn blocking and nonblocking assignment rules directly instead of extending the Arduino analogy.

Use A Hypothesis-Test Loop At Every Layer

For each exercise, write an informed guess before running the tool: this truth table should match; this counter should wrap after sixteen states; this waveform edge should occur after reset; this LED should toggle from a divided clock; this timing path should be the limiting one. Then test the guess and preserve the evidence.

That habit is the thread from a Logisim switch to a physical FPGA. It prevents “the tool completed” from becoming the definition of success. It also prepares the ground for the later counter recreation, where a datasheet behavior becomes a set of explicit, executable checks.