Skip to content

VHDL · Chapter 1.3 · Foundation

Describing Hardware, Not Writing Software

This is the most important lesson in the chapter, and it contains almost no syntax. Every painful early VHDL bug traces back to one habit carried over from software, reading the code as a sequence of steps a processor performs. It is not that at all. VHDL describes a circuit, a network of wires and gates that all exist and react at the same time. This lesson rewires that instinct toward concurrency over sequence, connectivity over assignment, and hardware that is built rather than executed. You will see why the order of concurrent statements does not matter, why an assignment is a permanent wire, and why a loop becomes parallel hardware. Internalise this now and every later topic, from signals and processes to latches and timing, becomes far easier to reason about.

Foundation12 min readVHDLConcurrencyRTL DesignHardware MindsetMental Model

1. Intuition — built, not executed

In software, code is a list of instructions and a processor walks them one at a time: line 1, then line 2, then line 3. Time is the order of execution.

In VHDL there is no processor walking your lines. Your code is a description of a circuit, and once that circuit exists, every part of it is live at once — exactly like a schematic where every gate is always powered. Nothing "runs first." The right question is never "what happens next?" but "what is connected to what?"

2. Everything is concurrent

Consider two concurrent assignments in an architecture:

two_gates.vhd
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
architecture rtl of two_gates is
begin
  y1 <= a and b;     -- one AND gate
  y2 <= a or  b;     -- one OR gate, side by side
end architecture rtl;

These are not "step 1: compute y1, step 2: compute y2." They are two gates wired in parallel. Both watch their inputs continuously; the moment a or b changes, both outputs re-evaluate at the same instant. There is no first.

A direct consequence: order does not matter. Swap the two lines and the circuit is byte-for-byte identical, because text order is not execution order — it is just the order you happened to write two independent gates.

3. Parallelism you can see

The clearest proof that concurrent statements run together is a waveform. With y1 <= a and y2 <= not a driven by the same input, a single change in a updates both outputs at the same instant — not one cycle apart, not in source order:

Concurrent statements update together — y1 and y2 both react to a at once

6 cycles
Concurrent statements update together — y1 and y2 both react to a at oncea rises → y1 and y2 update simultaneouslya rises → y1 and y2 up…a falls → both update again, togethera falls → both update …ay1y2t0t1t2t3t4t5
y1 follows a and y2 inverts a, but the key point is timing: both respond to the same edge of a at the same moment. Two parallel gates, not two sequential steps.

If these were software statements, y2 could only update after y1. In hardware they are independent, so they move as one.

4. Assignments are wires, not variable updates

y <= a and b; does not "store the value of a and b into y." It permanently wires y to the output of an AND gate fed by a and b. The connection is the hardware; it holds for all time, not just at the moment a line executes. This is why you cannot drive the same signal from two concurrent statements — that is two gates fighting over one wire, a short circuit, not a "last assignment wins."

5. A loop builds hardware — it does not iterate in time

The software instinct says a for loop runs N times over time. In synthesizable VHDL a for ... generate loop is unrolled at build time into N copies of hardware that all exist at once:

parallel, not iterative
Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
gen_inv : for i in 0 to 3 generate
  y(i) <= not a(i);     -- this is FOUR inverters, built in parallel
end generate;

There is no "loop counter ticking through time" in the resulting circuit — there are four inverters, side by side, all live. The loop was a way to describe repeated structure, not a runtime iteration. (A process is similar: it is a parallel block that reacts to its inputs, not a function the program calls.)

6. Common software-brain mistakes

  • Reading line order as execution order. Concurrent statements have no order; only inside a process do statements run top-to-bottom (and even there they describe hardware, covered later).
  • Driving one signal from two places. Not "the second wins" — it is two drivers on one wire (contention), which is a real hardware fault.
  • Expecting a loop to take time. A synthesizable loop is unrolled structure, not a timed iteration.
  • Thinking a signal updates the instant you assign it. Signals schedule their new value (the next lessons on the signal model and delta cycles make this precise) — they are wires, not variables you mutate in place.

7. Summary & next step

VHDL describes hardware: a parallel structure that is built and then lives all at once, not a sequence of steps a CPU executes. Concurrent statements run together and in no particular order; an assignment is a permanent wire, not a stored update; a loop builds repeated hardware rather than iterating through time. Hold this mindset and the rest of the language stops being surprising.

With the mindset set, the foundations turn to the vocabulary that mindset uses — the design units that VHDL files are built from, and the std_logic type that models a real wire. The next lessons build that vocabulary up.