1.2 Binary Logic: Logic 0/1 and Active-High / Active-Low Conventions
Explain how a two-state system represents true/false information, and correctly interpret active-high and active-low signal naming conventions used throughout digital design.
Binary logic is the foundation every digital circuit is built on: every signal in a digital system is treated as one of exactly two states, conventionally labeled logic 0 and logic 1. These two states can represent numeric bits, Boolean true/false values, or — critically for real circuit design — whether a control signal is currently asserted (active) or not. Understanding binary states in isolation is easy; the subtlety engineers must master is that a signal's numeric value (0 or 1) and its meaning (asserted or not asserted) are two different things, connected by a naming convention the designer chooses.
Two states, many meanings
At the most basic level, a binary signal can only be logic 0 or logic 1 — there is no third state in ordinary combinational logic (three-state / tri-state buses are a special, separate mechanism covered later in this course). This two-valued system maps naturally onto Boolean true/false: 1 is often read as 'true' and 0 as 'false', which is why Boolean algebra (AND, OR, NOT) applies directly to digital circuits.
But a binary value can also represent whether something is 'on' or 'off', 'enabled' or 'disabled', without any numeric interpretation at all. If a signal ENABLE = 1, the circuit it controls is enabled; if ENABLE = 0, that circuit is disabled. Here the numbers 0 and 1 are just convenient labels for two physical states of a switch-like control line, not quantities to be added or compared.
Active-high vs active-low: same states, opposite meaning of 'asserted'
Because a designer must choose what logic 1 versus logic 0 means for any given control signal, two conventions exist. An active-high signal is considered asserted (doing its job) when it is at logic 1 — this is the intuitive default, as with ENABLE above. An active-low signal is considered asserted when it is at logic 0 — counter-intuitively, the signal is 'active' precisely when its numeric value is low, not high.
Active-low signals are everywhere in real hardware, usually because of the underlying transistor-level circuit behavior (pulling a line to ground is often faster or more electrically convenient than driving it high). By strong convention, an active-low signal's name carries a suffix or prefix marker — most commonly _N, _n, _L, or an overbar in schematics — so that anyone reading the signal name immediately knows how to interpret its numeric value.
This means the raw numeric value of a signal never tells you, by itself, whether that signal is currently asserted — you must also know its naming convention. RESET_N = 0 means reset IS active, even though the signal reads numerically 0, precisely because the _N suffix declares it active-low.
Logic inversion
Logic inversion is the operation of flipping a signal's state: 0 becomes 1, and 1 becomes 0. It is the physical/logical basis of the NOT gate (covered in Module 3) and is also exactly how active-high and active-low versions of 'the same' control signal relate to each other — an active-low reset is, in effect, the logical inversion of an active-high reset with the same underlying purpose.
Recognizing inversion in signal names and schematics (an overbar, a bubble on a gate symbol, or an _N/_L suffix) is a core reading skill for digital design: it tells you to mentally flip the signal's numeric value before reasoning about what it means physically.
Binary state and active-low naming notation
The _N (or _L, or a trailing #/b/overbar) suffix is a naming convention only — it changes nothing about the electrical signal itself, only how a human (or synthesis tool) should interpret its asserted state. Always read a signal's assertion convention from its name/documentation before concluding whether 0 or 1 means 'active' for that particular signal.
A = 0 -- signal A is at logic LOW
A = 1 -- signal A is at logic HIGH
RESET_N = 0 -- active-low assertion: reset IS active
RESET_N = 1 -- reset is NOT active (inactive/deasserted)
Convention markers for active-low signals:
NAME_N NAME_n NAME_L /NAME NAME (with overbar in schematics)Code Examples
ENABLE follows the intuitive active-high convention, so its numeric value matches its meaning directly. RESET_N follows the active-low convention (signalled by the _N suffix), so its meaning is the logical inverse of its numeric value — you must know the naming convention to correctly interpret the signal.
RESET_N = 0 means reset is ASSERTED, not that reset is numerically off.
ENABLE = 1 -> circuit IS enabled (active-high: 1 = asserted)
ENABLE = 0 -> circuit is NOT enabled (active-high: 0 = not asserted)
RESET_N = 0 -> reset IS active (active-low: 0 = asserted)
RESET_N = 1 -> reset is NOT active (active-low: 1 = not asserted)Reading an active-low signal name
The same two numeric values (0 and 1) mean opposite things depending on the signal's active-high or active-low convention.
Signal name: RESET_N
|
"_N" suffix flags active-LOW
|
value = 0 ----> asserted (reset IS happening)
value = 1 ----> deasserted (reset is NOT happening)
compare to plain active-high signal:
Signal name: ENABLE
value = 1 ----> asserted (enabled)
value = 0 ----> deasserted (disabled)Important Rules
A binary signal has exactly two valid states: logic 0 and logic 1.
Active-high: the signal is asserted when it equals 1.
Active-low: the signal is asserted when it equals 0 — signalled by a naming convention such as _N, _L, or an overbar.
Logic inversion flips a signal's state (0 <-> 1) and is the basis of both the NOT gate and the relationship between active-high and active-low forms of a control signal.
Never assume a raw 0 or 1 means 'off' or 'on' without checking the signal's declared convention.
Where this shows up
Active-low signals are pervasive in real hardware: microcontroller reset pins, chip-select lines on memory and peripheral ICs, and interrupt request lines are very commonly active-low, because pulling a shared line to ground (open-drain style) is a simple, robust way to let multiple devices safely share one control wire. Reading datasheets correctly — recognizing CS_N, WE_N, OE_N, IRQ_N and similar signals as active-low — is a basic and essential hardware literacy skill.
Reading RESET_N = 0 and concluding 'reset is off / not happening' because the numeric value is 0.
Recognize the _N suffix as an active-low marker, and correctly conclude that RESET_N = 0 means reset IS currently active.
The _N (or _L) naming suffix is an explicit, standard convention indicating the signal asserts on logic 0. Misreading active-low signals as though they were active-high is one of the most common beginner errors when reading real schematics and datasheets, and can lead to circuits that behave exactly backwards from what was intended.
[tricky] If RESET_N = 0, what is actually true about the reset function? A. Reset is inactive, because the numeric value is 0 B. Reset is active, because the _N suffix indicates active-low assertion C. The signal is invalid — reset signals cannot be 0 D. It depends on the clock signal, not the RESET_N value
B. Reset is active, because the _N suffix indicates active-low assertion — The _N convention commonly indicates active-low behavior, meaning the signal is considered asserted when it is numerically 0. So RESET_N = 0 means reset IS active, even though the value itself is 'low'.
[interview] Why do real chips so often use active-low control signals instead of active-high ones? A. Active-low signals are purely a stylistic/legacy choice with no electrical basis B. Active-low often maps more naturally onto transistor-level circuit behavior (e.g., pulling a shared line to ground), and supports simple shared open-drain buses C. Digital logic cannot physically produce a stable logic-1 output D. Active-low signals use less power in every case, with no exceptions
B. Active-low often maps more naturally onto transistor-level circuit behavior (e.g., pulling a shared line to ground), and supports simple shared open-drain buses — Many active-low conventions trace back to convenient transistor-level behavior — for example, an open-drain output can only pull a shared line low, never drive it high, which naturally supports active-low, wired-together control and interrupt lines shared by multiple devices.
[multiple-choice] Which of the following correctly distinguishes logic inversion from active-low naming? A. They are unrelated concepts with nothing in common B. Logic inversion flips a signal's numeric state (0<->1); active-low naming is a convention about what 'asserted' means for a given signal, and the two are related because an active-low version of a signal behaves like a logically-inverted active-high version C. Logic inversion only applies to clock signals D. Active-low naming physically inverts the voltage supply of the circuit
B. Logic inversion flips a signal's numeric state (0<->1); active-low naming is a convention about what 'asserted' means for a given signal, and the two are related because an active-low version of a signal behaves like a logically-inverted active-high version — Inversion is the general logic operation of flipping 0 to 1 and vice versa (the basis of the NOT gate). Active-low naming applies that idea specifically to how a control signal's assertion is defined: an active-low signal behaves, in terms of 'is it doing its job', like the logical inverse of an equivalent active-high signal.
A datasheet lists a chip-select pin named CS_N and an enable pin named OE (no suffix). Write out the truth table of asserted/not-asserted for each pin at values 0 and 1, and state which pin(s) must be driven low to select the chip and enable its output.
CS_N: value 0 = asserted (chip selected), value 1 = not asserted (chip not selected). OE: value 1 = asserted (output enabled), value 0 = not asserted (output disabled). To select the chip and enable its output, drive CS_N low (0) and OE high (1).
Recall that a trailing _N (or similar marker) means active-low, while the absence of such a marker defaults to active-high.