The Route In Seven Milestones
- Manipulate Boolean logic. Build small switching functions until gates, truth tables, multiplexers, and shared terms feel concrete.
- Use Logisim as a circuit playground. Draw, wire, toggle, observe, and debug without making HDL syntax the first obstacle.
- 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.
- Simulate a counter and its testbench. Turn a behavior into a design under test, stimulus, expected results, and a waveform.
- 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.
- Look downward into CMOS. Study transistor-level logic, timing, power, metastability, memory, and clocking as deep subjects in their own right.
- 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.