<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Digital Logic Notebook</title><link>https://applied-ee.github.io/digital-logic-notebook/</link><description>Recent content on Digital Logic Notebook</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://applied-ee.github.io/digital-logic-notebook/index.xml" rel="self" type="application/rss+xml"/><item><title>📖 Preface</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/preface/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/preface/</guid><description>&lt;h1 id="preface"&gt;Preface&lt;a class="anchor" href="#preface"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Modern digital hardware is easy to use without understanding. A logic gate, a flip-flop, a lookup table in an FPGA — all can be dropped into a design as black boxes that simply behave. But the shape of those black boxes is not arbitrary. Every one of them carries the fingerprints of the technology it replaced and the constraints that technology lived under.&lt;/p&gt;
&lt;p&gt;This notebook exists to make that lineage visible.&lt;/p&gt;</description></item><item><title>Comparators</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/comparators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/comparators/</guid><description>&lt;h1 id="comparators"&gt;Comparators&lt;a class="anchor" href="#comparators"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A comparator is the doorway from the analog world into the digital one. It looks at two analog voltages and produces a single logic bit: high if the positive input is above the negative input, low otherwise. Every threshold decision a digital system makes about a continuous signal — is the battery low, has the sensor crossed a level, did the waveform cross zero — starts at a comparator.&lt;/p&gt;</description></item><item><title>Decoder</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/decoder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/decoder/</guid><description>&lt;h1 id="decoder"&gt;Decoder&lt;a class="anchor" href="#decoder"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A decoder takes an &lt;em&gt;n&lt;/em&gt;-bit binary code and activates exactly one of its 2ⁿ outputs — the one whose number matches the input. A 3-bit input picks one of eight outputs, a 4-bit input one of sixteen. It turns a compact binary number into a &lt;strong&gt;one-hot&lt;/strong&gt; signal: &amp;ldquo;this specific one, and no other.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="every-output-is-a-minterm"&gt;Every Output Is a Minterm&lt;a class="anchor" href="#every-output-is-a-minterm"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Internally, each output is an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/and/"&gt;AND&lt;/a&gt; of the input bits in a particular true/complemented combination — output 5 of a 3-to-8 decoder is high only for the input &lt;code&gt;101&lt;/code&gt;. That combination is a &lt;strong&gt;minterm&lt;/strong&gt;, so a decoder generates &lt;em&gt;all&lt;/em&gt; the minterms of its inputs at once. Because any Boolean function is a sum of the minterms where it is true (its &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/canonical-forms/"&gt;sum-of-products form&lt;/a&gt;), a decoder plus a single OR gate can build any function of its input variables — which is one reason decoders show up far beyond their obvious use.&lt;/p&gt;</description></item><item><title>Half &amp; Full Adders</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/half-and-full-adders/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/half-and-full-adders/</guid><description>&lt;h1 id="half--full-adders"&gt;Half &amp;amp; Full Adders&lt;a class="anchor" href="#half--full-adders"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Binary addition is just a combinational function, and it is built from one small cell repeated. That cell is the adder, and understanding it is understanding how gates do arithmetic.&lt;/p&gt;
&lt;h2 id="the-half-adder"&gt;The Half Adder&lt;a class="anchor" href="#the-half-adder"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A half adder adds two bits and produces a sum and a carry. The sum is 1 when the inputs differ, and the carry is 1 only when both are 1 — which is to say the sum is an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xor/"&gt;XOR&lt;/a&gt; and the carry is an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/and/"&gt;AND&lt;/a&gt;:&lt;/p&gt;</description></item><item><title>Microcontrollers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/microcontrollers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/microcontrollers/</guid><description>&lt;h1 id="microcontrollers"&gt;Microcontrollers&lt;a class="anchor" href="#microcontrollers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A microcontroller is a whole small computer on one chip: a CPU, its memory (flash for the program, RAM for data), and a set of peripherals, all on a single die. For most small systems it is the first and most common answer to the question this chapter asks — &lt;em&gt;where did the logic go?&lt;/em&gt; It went into a program running on a cheap MCU.&lt;/p&gt;
&lt;h2 id="logic-that-became-a-program"&gt;Logic That Became a Program&lt;a class="anchor" href="#logic-that-became-a-program"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The peripherals around an MCU&amp;rsquo;s CPU are, quite literally, the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/"&gt;functional building blocks&lt;/a&gt; of this book absorbed onto the die and made software-configurable. A timer/counter peripheral is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/"&gt;counter&lt;/a&gt; — a 7490 that moved inside the chip. A UART or SPI block is &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/shift-registers/"&gt;shift registers&lt;/a&gt; plus a small &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/"&gt;state machine&lt;/a&gt;. GPIO is latches and buffers. Where a 1975 design wired those functions together from 74xx parts, an MCU design configures them in firmware and wires them with lines of code.&lt;/p&gt;</description></item><item><title>NOT</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/not/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/not/</guid><description>&lt;h1 id="not"&gt;NOT&lt;a class="anchor" href="#not"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The NOT gate, or inverter, is the simplest logic function: its output is the complement of its input. A high in produces a low out, and a low in produces a high out.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;NOT A&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="how-its-built"&gt;How It&amp;rsquo;s Built&lt;a class="anchor" href="#how-its-built"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/"&gt;CMOS&lt;/a&gt; the inverter is the most economical gate there is — one PMOS transistor pulling the output up and one NMOS pulling it down, two transistors total. A low input turns the PMOS on and pulls the output high; a high input turns the NMOS on and pulls it low. Because exactly one of the two is on in each stable state, no current flows through from supply to ground except briefly during a switch — the reason CMOS logic burns almost no static power.&lt;/p&gt;</description></item><item><title>One Inverter</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/one-inverter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/one-inverter/</guid><description>&lt;h1 id="one-inverter"&gt;One Inverter&lt;a class="anchor" href="#one-inverter"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The problem is small and extremely common: a design needs exactly &lt;em&gt;one&lt;/em&gt; &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/not/"&gt;inverter&lt;/a&gt; — to flip an active-low signal to active-high, correct a polarity, or generate a complement — and nothing else. Dropping a 14-pin hex inverter to use one-sixth of it is wasteful on a modern board.&lt;/p&gt;
&lt;h2 id="the-part"&gt;The Part&lt;a class="anchor" href="#the-part"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Reach for a &lt;strong&gt;single-gate (&amp;ldquo;tiny logic&amp;rdquo;) inverter&lt;/strong&gt;: the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/tiny-logic/"&gt;74LVC1G04&lt;/a&gt; in a tiny SOT-23-5 or smaller package, running at low voltage with 5 V-tolerant inputs. On an all-5 V board the classic &lt;strong&gt;74HC04&lt;/strong&gt; hex inverter still works if the extra five gates can be spared or reused elsewhere. If the signal is also slow or noisy, use the Schmitt-trigger version (&lt;strong&gt;74LVC1G14&lt;/strong&gt; / 74HC14) and get &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/debounce/"&gt;debounce&lt;/a&gt;-grade edge cleaning in the same part.&lt;/p&gt;</description></item><item><title>Propagation Delay &amp; Fan-Out</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/timing/propagation-delay-and-fan-out/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/timing/propagation-delay-and-fan-out/</guid><description>&lt;h1 id="propagation-delay--fan-out"&gt;Propagation Delay &amp;amp; Fan-Out&lt;a class="anchor" href="#propagation-delay--fan-out"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The first crack in the ideal picture is that a gate does not respond instantly. &lt;strong&gt;Propagation delay&lt;/strong&gt; is the time between an input changing and the output following — a few nanoseconds for ordinary logic, but never zero. Every timing limit in a digital system traces back to this one fact.&lt;/p&gt;
&lt;h2 id="delay-accumulates-along-a-path"&gt;Delay Accumulates Along a Path&lt;a class="anchor" href="#delay-accumulates-along-a-path"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Delays add up along a chain of gates. A signal passing through five gates arrives roughly five gate-delays late, and the &lt;strong&gt;critical path&lt;/strong&gt; — the slowest route from one register to the next — sets how fast the whole circuit can run. This is why a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/"&gt;ripple counter&lt;/a&gt; and a ripple-carry &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/half-and-full-adders/"&gt;adder&lt;/a&gt; slow down as they get wider: the carry has to propagate stage by stage, and nothing downstream is valid until it arrives. It is also why &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/hazards-and-glitches/"&gt;hazards and glitches&lt;/a&gt; exist at all — two paths of unequal delay reconverging produce a transient wrong value. Shortening the critical path, by using fewer levels of logic or faster carry schemes, is how a design is made to run faster.&lt;/p&gt;</description></item><item><title>Relays</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/relays/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/relays/</guid><description>&lt;h1 id="relays"&gt;Relays&lt;a class="anchor" href="#relays"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A relay is an electrically controlled switch: a coil, when energized, generates a magnetic field that pulls a movable armature, and that armature opens or closes a set of contacts. The essential feature is not the switching itself but the &lt;em&gt;separation&lt;/em&gt; — the coil that does the controlling is electrically independent of the contacts being controlled. One circuit commands another.&lt;/p&gt;
&lt;p&gt;That single property is the seed of all logic. A plain switch is thrown by a hand or a cam; a relay is thrown by &lt;em&gt;another circuit&amp;rsquo;s output&lt;/em&gt;. Once a switch can be operated by the same kind of signal it produces, switches can be cascaded — the output of one drives the input of the next — and cascaded switches are exactly what a logic gate is.&lt;/p&gt;</description></item><item><title>Ripple Counters</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/</guid><description>&lt;h1 id="ripple-counters"&gt;Ripple Counters&lt;a class="anchor" href="#ripple-counters"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A ripple counter is the simplest way to count in hardware: a chain of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/t-flip-flop/"&gt;toggle flip-flops&lt;/a&gt; in which each stage&amp;rsquo;s output clocks the next. The first stage toggles on the input clock, dividing it by two; its output clocks the second stage, dividing by two again; and so on. With &lt;em&gt;n&lt;/em&gt; stages the chain counts from 0 to 2ⁿ−1 in binary and divides the input frequency by 2ⁿ — all from flip-flops and a wire, no logic gates and no software.&lt;/p&gt;</description></item><item><title>RTL</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/rtl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/rtl/</guid><description>&lt;h1 id="rtl"&gt;RTL&lt;a class="anchor" href="#rtl"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Resistor-Transistor Logic was the first practical way to build logic gates inside an integrated circuit. Its name is its schematic: resistors at the inputs, a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/transistors/"&gt;transistor&lt;/a&gt; doing the switching. It is obsolete now, but it is where the family tree starts, and every weakness of RTL is the reason the next family exists.&lt;/p&gt;
&lt;h2 id="how-its-built"&gt;How It&amp;rsquo;s Built&lt;a class="anchor" href="#how-its-built"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The basic RTL gate is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nor/"&gt;NOR&lt;/a&gt;. Each input drives the base of its own transistor through a resistor; all the transistors share a single collector resistor to the supply. If &lt;em&gt;any&lt;/em&gt; input is high, its transistor conducts and pulls the shared output low — low-when-any-input-is-high is exactly NOR. Adding transistors in parallel adds inputs; that is the entire trick.&lt;/p&gt;</description></item><item><title>Shift Registers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/shift-registers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/shift-registers/</guid><description>&lt;h1 id="shift-registers"&gt;Shift Registers&lt;a class="anchor" href="#shift-registers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A shift register is a row of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/"&gt;flip-flops&lt;/a&gt; wired so that each one&amp;rsquo;s output feeds the next one&amp;rsquo;s input. On every clock edge the whole row shifts its contents one position along. Where a plain &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/registers/"&gt;register&lt;/a&gt; holds a word still, a shift register makes it &lt;em&gt;move&lt;/em&gt; — which is the basis for nearly every way hardware moves data on a small number of wires.&lt;/p&gt;
&lt;h2 id="serial-and-parallel-in-four-combinations"&gt;Serial and Parallel, in Four Combinations&lt;a class="anchor" href="#serial-and-parallel-in-four-combinations"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The value of a shift register is converting between serial and parallel form, and parts are named for how data enters and leaves:&lt;/p&gt;</description></item><item><title>SR Latch</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/sr-latch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/sr-latch/</guid><description>&lt;h1 id="sr-latch"&gt;SR Latch&lt;a class="anchor" href="#sr-latch"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The SR (set-reset) latch is the simplest memory element, and it is the seed from which every latch, flip-flop, and register grows. Cross-couple two gates so that each one&amp;rsquo;s output feeds back into the other&amp;rsquo;s input, and the pair becomes &lt;strong&gt;bistable&lt;/strong&gt;: it has two stable states and will rest in whichever one it was last driven into, holding that state after the driving input is removed. That feedback loop is what &amp;ldquo;remembering&amp;rdquo; means in hardware.&lt;/p&gt;</description></item><item><title>Truth Tables</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/truth-tables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/truth-tables/</guid><description>&lt;h1 id="truth-tables"&gt;Truth Tables&lt;a class="anchor" href="#truth-tables"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A truth table is the complete, unambiguous specification of a combinational function: every possible input combination on the left, the output it must produce on the right. It says &lt;em&gt;what&lt;/em&gt; a function does without saying anything about &lt;em&gt;how&lt;/em&gt; it is built, which makes it the natural starting point for every design and the common ground between a specification and a circuit.&lt;/p&gt;
&lt;h2 id="complete-but-it-scales-badly"&gt;Complete, but It Scales Badly&lt;a class="anchor" href="#complete-but-it-scales-badly"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For &lt;em&gt;n&lt;/em&gt; inputs there are 2ⁿ combinations, so a truth table has 2ⁿ rows. That is fine for the two- and three-input &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/"&gt;gates&lt;/a&gt; whose behavior &lt;em&gt;is&lt;/em&gt; a small truth table, but it grows explosively: four inputs give 16 rows, eight give 256, and twenty give over a million. Completeness is the strength and the weakness — nothing is left unspecified, but the table is unusable as a design tool much past a handful of variables. That is exactly why the rest of this subsection exists: &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/boolean-algebra/"&gt;Boolean algebra&lt;/a&gt; and &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/canonical-forms/"&gt;canonical forms&lt;/a&gt; compress the table into an expression, and &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/karnaugh-maps/"&gt;Karnaugh maps&lt;/a&gt; reorganize it to be simplified by eye.&lt;/p&gt;</description></item><item><title>What Is a State Machine?</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/fsm-concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/fsm-concepts/</guid><description>&lt;h1 id="what-is-a-state-machine"&gt;What Is a State Machine?&lt;a class="anchor" href="#what-is-a-state-machine"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A finite state machine is the most general form a sequential circuit can take. It is defined by three things: a finite set of &lt;strong&gt;states&lt;/strong&gt;, a rule for choosing the &lt;strong&gt;next state&lt;/strong&gt; from the current state and the inputs, and a rule for producing &lt;strong&gt;outputs&lt;/strong&gt;. Anything that has to remember where it is and act on what happens next — a controller, a protocol handler, a vending machine — is a state machine.&lt;/p&gt;</description></item><item><title>Analog Switches</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/analog-switches/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/analog-switches/</guid><description>&lt;h1 id="analog-switches"&gt;Analog Switches&lt;a class="anchor" href="#analog-switches"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;An analog switch lets a &lt;em&gt;digital&lt;/em&gt; signal turn an &lt;em&gt;analog&lt;/em&gt; one on and off. Where a logic gate can only handle clean highs and lows, an analog switch passes whatever voltage sits on it — an audio signal, a sensor output, a reference — while a logic-level control decides whether the path is open or closed. It is the fundamental primitive for routing analog signals under digital control.&lt;/p&gt;</description></item><item><title>AND</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/and/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/and/</guid><description>&lt;h1 id="and"&gt;AND&lt;a class="anchor" href="#and"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The AND gate outputs high only when &lt;em&gt;all&lt;/em&gt; of its inputs are high. It is the &amp;ldquo;every condition met&amp;rdquo; gate: the output asserts precisely when nothing is missing.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;B&lt;/th&gt;
 &lt;th&gt;A AND B&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The physical picture is two switches in &lt;strong&gt;series&lt;/strong&gt;: current reaches the output only when both are closed, which is exactly the behavior first built from &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/relays/"&gt;relay contacts in series&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Boolean Algebra</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/boolean-algebra/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/boolean-algebra/</guid><description>&lt;h1 id="boolean-algebra"&gt;Boolean Algebra&lt;a class="anchor" href="#boolean-algebra"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Boolean algebra is the algebra of two-valued logic: variables that are only ever 0 or 1, combined with three operations — AND (·), OR (+), and NOT (′). It is the lever between a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/truth-tables/"&gt;truth table&lt;/a&gt; and a circuit, because it lets a logic expression be manipulated and &lt;em&gt;simplified&lt;/em&gt; on paper before a single &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/"&gt;gate&lt;/a&gt; is committed. Fewer terms mean fewer gates, fewer levels of logic, less delay, and less power.&lt;/p&gt;</description></item><item><title>Bus Transceivers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/bus-transceivers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/bus-transceivers/</guid><description>&lt;h1 id="bus-transceivers"&gt;Bus Transceivers&lt;a class="anchor" href="#bus-transceivers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A bus transceiver is a bidirectional &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/buffers/"&gt;buffer&lt;/a&gt; with direction control — the part that lets a device drive a shared bus, receive from it, and get out of the way when it is not its turn. It exists because a bus is a set of wires many devices share, and sharing wires safely is harder than it looks.&lt;/p&gt;
&lt;h2 id="the-problem-of-a-shared-bus"&gt;The Problem of a Shared Bus&lt;a class="anchor" href="#the-problem-of-a-shared-bus"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On a bus, several devices connect to the same lines, but only &lt;strong&gt;one&lt;/strong&gt; may drive them at any instant. If two devices drive the same wire to opposite levels, they fight — a low-impedance path from supply to ground that corrupts the data and can damage the drivers. This is &lt;strong&gt;bus contention&lt;/strong&gt;, and avoiding it is the whole discipline of bus design: every device must present a &lt;strong&gt;three-state&lt;/strong&gt; output that can go high-impedance (electrically disconnected) whenever it is not the active driver.&lt;/p&gt;</description></item><item><title>D Latch</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-latch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-latch/</guid><description>&lt;h1 id="d-latch"&gt;D Latch&lt;a class="anchor" href="#d-latch"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The D latch fixes the two awkward things about the raw &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/sr-latch/"&gt;SR latch&lt;/a&gt;: its forbidden state, and its lack of any control over &lt;em&gt;when&lt;/em&gt; it listens. It does this by adding a single data input &lt;strong&gt;D&lt;/strong&gt; and an &lt;strong&gt;enable&lt;/strong&gt;, arranged so that set and reset can never be asserted at the same time.&lt;/p&gt;
&lt;h2 id="transparent-when-enabled"&gt;Transparent When Enabled&lt;a class="anchor" href="#transparent-when-enabled"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Steering logic drives the internal set/reset from D and its complement, gated by the enable. The result is simple to state:&lt;/p&gt;</description></item><item><title>Debounce</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/debounce/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/debounce/</guid><description>&lt;h1 id="debounce"&gt;Debounce&lt;a class="anchor" href="#debounce"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A mechanical switch or button does not make one clean transition. Its contacts — like the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/relays/"&gt;relay contacts&lt;/a&gt; that first exposed the problem — bounce for a few milliseconds on every closure, producing a burst of edges that a fast logic input or an interrupt reads as many presses.&lt;/p&gt;
&lt;h2 id="the-part"&gt;The Part&lt;a class="anchor" href="#the-part"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The classic answer is a &lt;strong&gt;74HC14&lt;/strong&gt; hex &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/schmitt-trigger/"&gt;Schmitt-trigger&lt;/a&gt; inverter (or the single-gate &lt;strong&gt;74LVC1G14&lt;/strong&gt;) with a small &lt;strong&gt;RC filter&lt;/strong&gt; on its input. The resistor and capacitor slow the signal so the bounce is smeared into a gentle ramp; the Schmitt input&amp;rsquo;s hysteresis then turns that ramp into exactly one clean edge, ignoring the wobble in between.&lt;/p&gt;</description></item><item><title>DTL</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/dtl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/dtl/</guid><description>&lt;h1 id="dtl"&gt;DTL&lt;a class="anchor" href="#dtl"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Diode-Transistor Logic answered &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/rtl/"&gt;RTL&lt;/a&gt;&amp;rsquo;s weaknesses by changing what does the logic at the input: diodes instead of resistors. It is also obsolete, but it is the most instructive stop in the lineage, because understanding DTL is understanding exactly what problem &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/ttl/"&gt;TTL&lt;/a&gt; then solved.&lt;/p&gt;
&lt;h2 id="how-its-built"&gt;How It&amp;rsquo;s Built&lt;a class="anchor" href="#how-its-built"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;DTL splits the work in two. A network of &lt;strong&gt;diodes&lt;/strong&gt; at the input performs the combinational logic — several diodes into a common node form an AND — and a &lt;strong&gt;transistor&lt;/strong&gt; stage behind it inverts and restores the signal to a clean level. Diode-AND followed by transistor-inversion is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nand/"&gt;NAND&lt;/a&gt;, the characteristic DTL gate.&lt;/p&gt;</description></item><item><title>Encoder</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/encoder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/encoder/</guid><description>&lt;h1 id="encoder"&gt;Encoder&lt;a class="anchor" href="#encoder"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;An encoder is the reverse of a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/decoder/"&gt;decoder&lt;/a&gt;: it takes 2ⁿ inputs, one of them active, and produces the &lt;em&gt;n&lt;/em&gt;-bit binary code that names which one. Eight input lines become a 3-bit number, sixteen become a 4-bit number. Where a decoder expands a code into one-hot, an encoder compresses one-hot back into a code.&lt;/p&gt;
&lt;h2 id="the-problem-of-more-than-one"&gt;The Problem of More Than One&lt;a class="anchor" href="#the-problem-of-more-than-one"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A plain encoder assumes &lt;em&gt;exactly one&lt;/em&gt; input is active. If two are high at once, the naïve output is meaningless — it is neither input&amp;rsquo;s code. Real inputs do not cooperate, so the useful part is the &lt;strong&gt;priority encoder&lt;/strong&gt;: when several inputs are active, it outputs the code of the &lt;strong&gt;highest-priority&lt;/strong&gt; one and ignores the rest, usually flagging separately whether &lt;em&gt;any&lt;/em&gt; input was active at all. The standard parts are the 74148 (8-to-3 priority) and 74147 (10-line-to-4-line BCD priority).&lt;/p&gt;</description></item><item><title>Moore vs. Mealy</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/moore-vs-mealy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/moore-vs-mealy/</guid><description>&lt;h1 id="moore-vs-mealy"&gt;Moore vs. Mealy&lt;a class="anchor" href="#moore-vs-mealy"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The two classic styles of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/fsm-concepts/"&gt;state machine&lt;/a&gt; differ in one respect: what the outputs depend on. It is the first design decision after deciding a machine is needed, and it trades response speed against clean, predictable timing.&lt;/p&gt;
&lt;h2 id="the-distinction"&gt;The Distinction&lt;a class="anchor" href="#the-distinction"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Moore&lt;/strong&gt; machine&amp;rsquo;s outputs depend &lt;strong&gt;only on the current state&lt;/strong&gt;. The output logic looks at the state register and nothing else, so outputs change only &lt;em&gt;after&lt;/em&gt; a clock edge moves the machine to a new state.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Mealy&lt;/strong&gt; machine&amp;rsquo;s outputs depend on the &lt;strong&gt;current state and the current inputs together&lt;/strong&gt;. An input change can ripple straight to an output within the same state, without waiting for a clock edge.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-trade-off"&gt;The Trade-off&lt;a class="anchor" href="#the-trade-off"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Because a Moore output is a function of the registered state alone, it is &lt;strong&gt;clean and glitch-free&lt;/strong&gt; — it changes synchronously, once per transition, and never twitches in response to a noisy input. The cost is a step of latency (the machine must clock into a new state before the output reflects an input) and sometimes more states, since distinctions that a Mealy machine draws with inputs must become separate states.&lt;/p&gt;</description></item><item><title>PLDs &amp; CPLDs</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/plds-cplds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/plds-cplds/</guid><description>&lt;h1 id="plds--cplds"&gt;PLDs &amp;amp; CPLDs&lt;a class="anchor" href="#plds--cplds"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Programmable logic devices are the step between fixed-function chips and the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/fpgas/"&gt;FPGA&lt;/a&gt;: user-defined logic without custom silicon. They exist to answer a specific frustration — a board covered in 74xx glue that has to be redesigned every time the logic changes — by putting that glue into a single part whose function is programmed, not wired.&lt;/p&gt;
&lt;h2 id="from-pal-to-gal-to-cpld"&gt;From PAL to GAL to CPLD&lt;a class="anchor" href="#from-pal-to-gal-to-cpld"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The original &lt;strong&gt;PLDs&lt;/strong&gt; implemented logic as a programmable &lt;strong&gt;sum-of-products&lt;/strong&gt; array: a grid of AND terms feeding OR terms, with fuses (PAL) or reprogrammable cells (GAL) selecting which connections are made. Because any Boolean function can be written in &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/canonical-forms/"&gt;sum-of-products form&lt;/a&gt;, that one structure can implement a wide range of combinational logic — and with a flip-flop on each output, small state machines too. A single GAL could swallow a fistful of gates, decoders, and latches.&lt;/p&gt;</description></item><item><title>Setup &amp; Hold Time</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/timing/setup-and-hold/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/timing/setup-and-hold/</guid><description>&lt;link rel="stylesheet" href="https://applied-ee.github.io/digital-logic-notebook/katex/katex.min.css" /&gt;&lt;script defer src="https://applied-ee.github.io/digital-logic-notebook/katex/katex.min.js"&gt;&lt;/script&gt;&lt;script defer src="https://applied-ee.github.io/digital-logic-notebook/katex/auto-render.min.js" onload="renderMathInElement(document.body, {&amp;#34;delimiters&amp;#34;:[{&amp;#34;left&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;display&amp;#34;:true},{&amp;#34;left&amp;#34;:&amp;#34;\\(&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\)&amp;#34;,&amp;#34;display&amp;#34;:false},{&amp;#34;left&amp;#34;:&amp;#34;\\[&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\]&amp;#34;,&amp;#34;display&amp;#34;:true}]});"&gt;&lt;/script&gt;
&lt;h1 id="setup--hold-time"&gt;Setup &amp;amp; Hold Time&lt;a class="anchor" href="#setup--hold-time"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/"&gt;flip-flop&lt;/a&gt; captures its data input at the clock edge, but only if that data is stable in a narrow window &lt;em&gt;around&lt;/em&gt; the edge. &lt;strong&gt;Setup time&lt;/strong&gt; is how long the data must be steady &lt;em&gt;before&lt;/em&gt; the edge; &lt;strong&gt;hold time&lt;/strong&gt; is how long it must remain steady &lt;em&gt;after&lt;/em&gt;. Meet both and the flip-flop captures a clean value; violate either and it can go &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/timing/metastability-and-synchronizers/"&gt;metastable&lt;/a&gt;. These two numbers are the foundation on which all synchronous timing rests.&lt;/p&gt;</description></item><item><title>Subtractors</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/subtractors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/subtractors/</guid><description>&lt;link rel="stylesheet" href="https://applied-ee.github.io/digital-logic-notebook/katex/katex.min.css" /&gt;&lt;script defer src="https://applied-ee.github.io/digital-logic-notebook/katex/katex.min.js"&gt;&lt;/script&gt;&lt;script defer src="https://applied-ee.github.io/digital-logic-notebook/katex/auto-render.min.js" onload="renderMathInElement(document.body, {&amp;#34;delimiters&amp;#34;:[{&amp;#34;left&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;display&amp;#34;:true},{&amp;#34;left&amp;#34;:&amp;#34;\\(&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\)&amp;#34;,&amp;#34;display&amp;#34;:false},{&amp;#34;left&amp;#34;:&amp;#34;\\[&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\]&amp;#34;,&amp;#34;display&amp;#34;:true}]});"&gt;&lt;/script&gt;
&lt;h1 id="subtractors"&gt;Subtractors&lt;a class="anchor" href="#subtractors"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Hardware rarely builds a dedicated subtractor, because it does not need one. Subtraction is addition of a negative number, and in two&amp;rsquo;s-complement arithmetic negating a number is nearly free — so the same &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/half-and-full-adders/"&gt;adder&lt;/a&gt; that adds also subtracts, with a trivial change to its inputs.&lt;/p&gt;
&lt;h2 id="subtraction-is-addition-in-disguise"&gt;Subtraction Is Addition in Disguise&lt;a class="anchor" href="#subtraction-is-addition-in-disguise"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In two&amp;rsquo;s complement, a number is negated by &lt;strong&gt;inverting all its bits and adding 1&lt;/strong&gt;. Therefore:&lt;/p&gt;</description></item><item><title>Synchronous Counters</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/synchronous-counters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/synchronous-counters/</guid><description>&lt;h1 id="synchronous-counters"&gt;Synchronous Counters&lt;a class="anchor" href="#synchronous-counters"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A synchronous counter fixes the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/"&gt;ripple counter&lt;/a&gt;&amp;rsquo;s central flaw by clocking &lt;strong&gt;every flip-flop from the same clock at the same time&lt;/strong&gt;. There is no ripple: on each edge all stages that need to change do so together, so the count is valid all at once and the counter runs as fast as a single stage allows.&lt;/p&gt;
&lt;h2 id="knowing-when-to-toggle"&gt;Knowing When to Toggle&lt;a class="anchor" href="#knowing-when-to-toggle"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If every flip-flop shares the clock, each one needs to be told &lt;em&gt;in advance&lt;/em&gt; whether to flip on the coming edge. That is the job of a little combinational logic: a stage toggles only when all the stages below it are already 1. Stage 0 toggles every edge; stage 1 toggles when bit 0 is 1; stage 2 toggles when bits 0 and 1 are both 1 — a chain of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/and/"&gt;AND gates&lt;/a&gt; feeding each &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/"&gt;flip-flop&lt;/a&gt;&amp;rsquo;s toggle enable. The flip-flops still all fire on the same edge; the logic just decides which ones act.&lt;/p&gt;</description></item><item><title>Vacuum Tubes</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/vacuum-tubes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/vacuum-tubes/</guid><description>&lt;h1 id="vacuum-tubes"&gt;Vacuum Tubes&lt;a class="anchor" href="#vacuum-tubes"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The vacuum tube was the first device to switch &lt;em&gt;electronically&lt;/em&gt; — with no moving parts. Where a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/relays/"&gt;relay&lt;/a&gt; throws a metal armature to make or break a circuit, a tube controls a stream of electrons flying through a vacuum. Nothing mechanical moves, so switching happens at the speed of electron flow rather than the speed of a spring. That single change took switching from milliseconds to microseconds, and it is what made genuinely fast computation possible.&lt;/p&gt;</description></item><item><title>Buffers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/buffers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/buffers/</guid><description>&lt;h1 id="buffers"&gt;Buffers&lt;a class="anchor" href="#buffers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A buffer is a gate that computes nothing — its output simply equals its input — yet it is one of the most useful parts in the toolbox. What a buffer provides is not logic but &lt;em&gt;electrical&lt;/em&gt; help: drive, isolation, and, in its three-state form, the ability to disconnect.&lt;/p&gt;
&lt;h2 id="the-gate-that-does-nothing-usefully"&gt;The Gate That Does Nothing, Usefully&lt;a class="anchor" href="#the-gate-that-does-nothing-usefully"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A non-inverting buffer is, at heart, two &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/not/"&gt;inverters&lt;/a&gt; in series — the double inversion cancels, leaving the logic value unchanged but the signal freshly restored and able to drive a much heavier load than the original could. That buys three things:&lt;/p&gt;</description></item><item><title>Clocks &amp; Distribution</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/timing/clocks-and-distribution/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/timing/clocks-and-distribution/</guid><description>&lt;h1 id="clocks--distribution"&gt;Clocks &amp;amp; Distribution&lt;a class="anchor" href="#clocks--distribution"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The clock is the heartbeat that keeps a synchronous system in step: every &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/"&gt;flip-flop&lt;/a&gt; updates on its edge, so the whole machine advances together. That only works if a clean edge reaches every flip-flop at very nearly the same instant — which is harder than it sounds, and where a surprising amount of real-world timing trouble lives.&lt;/p&gt;
&lt;h2 id="where-clocks-come-from"&gt;Where Clocks Come From&lt;a class="anchor" href="#where-clocks-come-from"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A clock starts at an oscillator. A &lt;strong&gt;crystal oscillator&lt;/strong&gt; gives an accurate, stable frequency and is the reference for anything that must keep real time or talk to the outside world. Cheaper &lt;strong&gt;RC or ring oscillators&lt;/strong&gt; are built from an inverter and a delay, trading precision for cost — the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/schmitt-trigger/"&gt;Schmitt-trigger relaxation oscillator&lt;/a&gt; is the simplest example. A &lt;strong&gt;PLL&lt;/strong&gt; multiplies or divides a reference to synthesize the several frequencies a modern chip needs, and simple &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/frequency-dividers/"&gt;frequency dividers&lt;/a&gt; derive slower clocks from a fast one.&lt;/p&gt;</description></item><item><title>D Flip-Flop</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/</guid><description>&lt;h1 id="d-flip-flop"&gt;D Flip-Flop&lt;a class="anchor" href="#d-flip-flop"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The D flip-flop is the workhorse of sequential logic — the element behind essentially every register, counter, shift register, state machine, and pipeline stage in a modern design. It stores one bit, and it captures that bit at a single, well-defined instant: the clock edge.&lt;/p&gt;
&lt;h2 id="edge-triggered-not-level-sensitive"&gt;Edge-Triggered, Not Level-Sensitive&lt;a class="anchor" href="#edge-triggered-not-level-sensitive"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is the one distinction that matters. A &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-latch/"&gt;D latch&lt;/a&gt; is transparent — its output follows D the whole time it is enabled. A D flip-flop instead samples D &lt;strong&gt;only at the rising (or falling) edge of the clock&lt;/strong&gt; and holds that value for the entire cycle until the next edge, ignoring anything D does in between.&lt;/p&gt;</description></item><item><title>De Morgan's Theorems</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/demorgans-theorems/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/demorgans-theorems/</guid><description>&lt;h1 id="de-morgans-theorems"&gt;De Morgan&amp;rsquo;s Theorems&lt;a class="anchor" href="#de-morgans-theorems"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;De Morgan&amp;rsquo;s theorems are the two most-used identities in all of digital logic. They describe what happens when the output of an AND or an OR is inverted:&lt;/p&gt;
&lt;p&gt;$$ (A \cdot B)&amp;rsquo; = A&amp;rsquo; + B&amp;rsquo; $$&lt;/p&gt;
&lt;p&gt;$$ (A + B)&amp;rsquo; = A&amp;rsquo; \cdot B&amp;rsquo; $$&lt;/p&gt;
&lt;p&gt;In words: inverting the output of a gate is the same as &lt;strong&gt;swapping the gate type (AND ↔ OR) and inverting every input&lt;/strong&gt;. The theorems extend to any number of inputs — the complement of a whole product is the sum of the complemented terms, and vice versa.&lt;/p&gt;</description></item><item><title>FPGAs</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/fpgas/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/fpgas/</guid><description>&lt;h1 id="fpgas"&gt;FPGAs&lt;a class="anchor" href="#fpgas"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A Field-Programmable Gate Array is the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/"&gt;building blocks&lt;/a&gt; of this book made configurable: a fabric of logic and flip-flops whose function is defined after manufacture by loading a configuration. Where a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/microcontrollers/"&gt;microcontroller&lt;/a&gt; turns logic into a sequential program, an FPGA turns it into actual parallel hardware — every part of the design runs at once, the way discrete logic always did.&lt;/p&gt;
&lt;h2 id="a-fabric-of-lookup-tables-and-flip-flops"&gt;A Fabric of Lookup Tables and Flip-Flops&lt;a class="anchor" href="#a-fabric-of-lookup-tables-and-flip-flops"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The fabric is made of many small configurable blocks, each holding a &lt;strong&gt;lookup table (LUT)&lt;/strong&gt; and a &lt;strong&gt;flip-flop&lt;/strong&gt;, tied together by a mesh of programmable interconnect and surrounded by configurable I/O.&lt;/p&gt;</description></item><item><title>Frequency Dividers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/frequency-dividers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/frequency-dividers/</guid><description>&lt;h1 id="frequency-dividers"&gt;Frequency Dividers&lt;a class="anchor" href="#frequency-dividers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A frequency divider produces a slower clock from a faster one, and a counter is already a frequency divider — the two are the same circuit viewed two ways. Every &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/t-flip-flop/"&gt;toggle flip-flop&lt;/a&gt; stage halves the frequency, so an &lt;em&gt;n&lt;/em&gt;-stage &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/"&gt;counter&lt;/a&gt; divides its input by 2ⁿ while it counts. Deriving usable clocks this way is one of the most common jobs a counter does.&lt;/p&gt;
&lt;h2 id="dividing-by-two-by-2ⁿ-and-by-n"&gt;Dividing by Two, by 2ⁿ, and by N&lt;a class="anchor" href="#dividing-by-two-by-2%e2%81%bf-and-by-n"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dividing by a power of two is free: tap the output of the right stage of a binary counter. Stage 0 gives ÷2, stage 3 gives ÷16, and so on.&lt;/p&gt;</description></item><item><title>Magnitude Comparators</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/magnitude-comparators/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/magnitude-comparators/</guid><description>&lt;h1 id="magnitude-comparators"&gt;Magnitude Comparators&lt;a class="anchor" href="#magnitude-comparators"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A magnitude comparator decides the relationship between two binary numbers — whether A equals B, A is greater, or A is less. It answers in logic what a subtraction answers in arithmetic, and it is a distinct, common building block wherever hardware has to make a decision about a value.&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; this is the &lt;em&gt;digital&lt;/em&gt; comparator, comparing multi-bit numbers. It shares its name with the analog voltage &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/comparators/"&gt;comparator&lt;/a&gt; in Analog Helpers, which compares two continuous voltages and outputs a single bit — a different device for a different job.&lt;/p&gt;</description></item><item><title>More Outputs</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/more-outputs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/more-outputs/</guid><description>&lt;h1 id="more-outputs"&gt;More Outputs&lt;a class="anchor" href="#more-outputs"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A microcontroller or FPGA has run out of pins, but the design still needs to drive many things — a bank of LEDs, seven-segment digits, relays, or status lines. The trick is to trade a few pins and a little time for as many outputs as needed.&lt;/p&gt;
&lt;h2 id="the-part"&gt;The Part&lt;a class="anchor" href="#the-part"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The workhorse is the &lt;strong&gt;74HC595&lt;/strong&gt;, an 8-bit serial-in, parallel-out &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/shift-registers/"&gt;shift register&lt;/a&gt; with a latched output. Three signals — data, shift clock, and latch — feed eight bits in serially, and the latch then presents all eight at the outputs at once (so they change cleanly together rather than rippling). Its serial-output pin feeds the next &amp;lsquo;595&amp;rsquo;s input, so devices &lt;strong&gt;daisy-chain&lt;/strong&gt;: three pins can drive 8, 16, 24, or more outputs, limited mainly by how long the shifting takes.&lt;/p&gt;</description></item><item><title>Multiplexer</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/multiplexer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/multiplexer/</guid><description>&lt;h1 id="multiplexer"&gt;Multiplexer&lt;a class="anchor" href="#multiplexer"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A multiplexer (mux) selects one of many inputs and passes it to a single output, chosen by a set of select lines. With &lt;em&gt;n&lt;/em&gt; select lines it picks among 2ⁿ inputs — an 8-to-1 mux needs three. It is the fundamental &lt;strong&gt;data router&lt;/strong&gt;: many sources, one destination, and a control that decides which source gets through.&lt;/p&gt;
&lt;p&gt;The standard parts are the 74151 (8-to-1), 74153 (dual 4-to-1), and 74157 (quad 2-to-1). Internally a mux is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/decoder/"&gt;decoder&lt;/a&gt; on the select lines enabling one input path, all &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/or/"&gt;OR&lt;/a&gt;-ed together — select, gate, combine.&lt;/p&gt;</description></item><item><title>OR</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/or/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/or/</guid><description>&lt;h1 id="or"&gt;OR&lt;a class="anchor" href="#or"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The OR gate outputs high when &lt;em&gt;any&lt;/em&gt; of its inputs is high. It is the &amp;ldquo;at least one condition met&amp;rdquo; gate, and the natural counterpart to AND.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;B&lt;/th&gt;
 &lt;th&gt;A OR B&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The physical picture is two switches in &lt;strong&gt;parallel&lt;/strong&gt;: current reaches the output if either one is closed — the behavior built from &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/relays/"&gt;relay contacts in parallel&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Sample &amp; Hold</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/sample-and-hold/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/sample-and-hold/</guid><description>&lt;h1 id="sample--hold"&gt;Sample &amp;amp; Hold&lt;a class="anchor" href="#sample--hold"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A sample-and-hold captures an analog voltage at a chosen instant and holds it steady long enough to be measured. It exists because measurement takes time: an analog-to-digital converter needs its input to stay constant while it works out the digital value, and a signal that moves during the conversion produces a wrong reading. Sample-and-hold freezes the signal at a defined moment so the converter has something still to look at.&lt;/p&gt;</description></item><item><title>State Diagrams</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/state-diagrams/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/state-diagrams/</guid><description>&lt;h1 id="state-diagrams"&gt;State Diagrams&lt;a class="anchor" href="#state-diagrams"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A state diagram is how a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/fsm-concepts/"&gt;state machine&lt;/a&gt; is designed before any gates exist. States are drawn as bubbles and transitions as arrows labeled with the input condition that causes them. It is the specification the machine is reasoned about — the logic is &lt;em&gt;derived from&lt;/em&gt; the diagram, not the other way around.&lt;/p&gt;
&lt;h2 id="a-worked-example"&gt;A Worked Example&lt;a class="anchor" href="#a-worked-example"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The canonical example is a turnstile. It has two states — &lt;strong&gt;Locked&lt;/strong&gt; and &lt;strong&gt;Unlocked&lt;/strong&gt; — and two inputs: inserting a &lt;strong&gt;coin&lt;/strong&gt; and &lt;strong&gt;pushing&lt;/strong&gt; the arm.&lt;/p&gt;</description></item><item><title>Transistors</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/transistors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/transistors/</guid><description>&lt;h1 id="transistors"&gt;Transistors&lt;a class="anchor" href="#transistors"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The transistor is the solid-state switch — the semiconductor successor to the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/vacuum-tubes/"&gt;vacuum tube&amp;rsquo;s&lt;/a&gt; triode, doing the same job with no heater, no vacuum, and nothing moving. A small signal on one terminal controls a much larger current between the other two, exactly as the tube&amp;rsquo;s grid controlled its plate current, but now the control happens inside a sliver of doped silicon. Demonstrated at Bell Labs in 1947, it is the device every logic family and every chip in the rest of this notebook is ultimately built from. It is also the hinge of the whole story: the last switch small and cheap enough to hold in the hand, and the first one that could be replicated by the million on a single piece of silicon.&lt;/p&gt;</description></item><item><title>TTL</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/ttl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/ttl/</guid><description>&lt;h1 id="ttl"&gt;TTL&lt;a class="anchor" href="#ttl"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Transistor-Transistor Logic was the family that made integrated logic ubiquitous. For roughly two decades it was simply what &amp;ldquo;a logic chip&amp;rdquo; meant, and although &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/"&gt;CMOS&lt;/a&gt; has replaced it in almost every new design, TTL&amp;rsquo;s conventions — its part numbers and its voltage levels — are so deeply embedded that they still govern logic built today.&lt;/p&gt;
&lt;h2 id="how-its-built"&gt;How It&amp;rsquo;s Built&lt;a class="anchor" href="#how-its-built"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TTL took &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/dtl/"&gt;DTL&lt;/a&gt; and replaced its two weak spots. The string of input diodes became a single &lt;strong&gt;multi-emitter transistor&lt;/strong&gt;: each emitter is an input, and the transistor actively sweeps charge out of the following stage, switching far faster than passive diodes could. The passive pull-up became a &lt;strong&gt;totem-pole output&lt;/strong&gt; — a stacked pair of transistors that actively drives the output both high and low, giving fast edges and real drive strength. The signature gate is the 7400 quad two-input &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nand/"&gt;NAND&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Canonical Forms (SOP &amp; POS)</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/canonical-forms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/canonical-forms/</guid><description>&lt;h1 id="canonical-forms-sop--pos"&gt;Canonical Forms (SOP &amp;amp; POS)&lt;a class="anchor" href="#canonical-forms-sop--pos"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A canonical form is a systematic, mechanical way to write down a function straight from its &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/truth-tables/"&gt;truth table&lt;/a&gt; — no cleverness required. There are two, and they are duals of each other: sum of products, built from the rows where the output is 1, and product of sums, built from the rows where it is 0.&lt;/p&gt;
&lt;h2 id="sum-of-products-from-the-1s"&gt;Sum of Products (from the 1s)&lt;a class="anchor" href="#sum-of-products-from-the-1s"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For each row where the output is &lt;strong&gt;1&lt;/strong&gt;, write a &lt;strong&gt;minterm&lt;/strong&gt;: the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/and/"&gt;AND&lt;/a&gt; of every input variable, taken true where the variable is 1 and complemented where it is 0. OR all those minterms together and the result is the &lt;strong&gt;sum-of-products (SOP)&lt;/strong&gt; form — it is 1 for exactly the input combinations that should give 1, and nothing else. For a function that is 1 on rows 3 and 5 of three variables, F = A′BC + AB′C, often written compactly as Σm(3, 5).&lt;/p&gt;</description></item><item><title>CMOS</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/</guid><description>&lt;h1 id="cmos"&gt;CMOS&lt;a class="anchor" href="#cmos"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Complementary Metal-Oxide-Semiconductor logic is the milestone the whole lineage was building toward. Every other family on this list is either an ancestor of CMOS or a variety of it, and every integrated circuit in a modern device — processor, memory, FPGA, microcontroller — is CMOS underneath. It won on the one axis that ultimately mattered most: power.&lt;/p&gt;
&lt;h2 id="how-its-built"&gt;How It&amp;rsquo;s Built&lt;a class="anchor" href="#how-its-built"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A CMOS gate uses two complementary networks between the output and the rails: a &lt;strong&gt;PMOS&lt;/strong&gt; network that can pull the output high and an &lt;strong&gt;NMOS&lt;/strong&gt; network that can pull it low, arranged so that in any stable input state &lt;em&gt;exactly one&lt;/em&gt; network conducts. Because there is never a path from supply to ground in a settled state, a CMOS gate draws essentially &lt;strong&gt;no static current&lt;/strong&gt; — it dissipates power only briefly while switching, charging and discharging capacitance.&lt;/p&gt;</description></item><item><title>Demultiplexer</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/demultiplexer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/demultiplexer/</guid><description>&lt;h1 id="demultiplexer"&gt;Demultiplexer&lt;a class="anchor" href="#demultiplexer"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A demultiplexer (demux) is the reverse of a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/multiplexer/"&gt;multiplexer&lt;/a&gt;: it takes a single input and routes it to one of many outputs, chosen by the select lines. One source, many destinations, and a control that decides which destination receives the signal while the others stay idle.&lt;/p&gt;
&lt;h2 id="the-same-hardware-as-a-decoder"&gt;The Same Hardware as a Decoder&lt;a class="anchor" href="#the-same-hardware-as-a-decoder"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A demux is not a distinct circuit — it is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/decoder/"&gt;decoder&lt;/a&gt; with its enable input used as the data input. The decoder already activates exactly the one output named by the select lines; feed data into its enable and that selected output follows the data instead of simply going active. This is why a part like the 74138 is sold as a &amp;ldquo;decoder/demultiplexer&amp;rdquo;: the two functions are one piece of silicon addressed two ways. When the input is held permanently active it is a decoder; when the input carries data it is a demux.&lt;/p&gt;</description></item><item><title>HDL Concepts</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/hdl-concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/hdl-concepts/</guid><description>&lt;h1 id="hdl-concepts"&gt;HDL Concepts&lt;a class="anchor" href="#hdl-concepts"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A hardware description language — Verilog or VHDL — is how logic is actually specified once there is too much of it to draw. Nobody schematics a million gates; instead they &lt;em&gt;describe&lt;/em&gt; the intended behavior in an HDL, and a synthesis tool turns that description into real gates and flip-flops, whether for an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/fpgas/"&gt;FPGA&lt;/a&gt;&amp;rsquo;s fabric or an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/asics/"&gt;ASIC&lt;/a&gt;&amp;rsquo;s cells.&lt;/p&gt;
&lt;h2 id="it-describes-hardware-it-does-not-run"&gt;It Describes Hardware, It Does Not Run&lt;a class="anchor" href="#it-describes-hardware-it-does-not-run"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The single most important idea — and the one that trips up newcomers from software — is that &lt;strong&gt;an HDL describes hardware that all exists at once; it is not a program that executes line by line.&lt;/strong&gt; When a Verilog file says one signal is the AND of two others and, elsewhere, that a third is the OR of two more, both pieces of logic are built and both operate concurrently, forever. There is no &amp;ldquo;first this, then that.&amp;rdquo; Order of appearance is irrelevant; everything is simultaneous, because it is describing wires and gates, not instructions.&lt;/p&gt;</description></item><item><title>JK Flip-Flop</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/jk-flip-flop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/jk-flip-flop/</guid><description>&lt;h1 id="jk-flip-flop"&gt;JK Flip-Flop&lt;a class="anchor" href="#jk-flip-flop"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The JK flip-flop is the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/sr-latch/"&gt;SR latch&lt;/a&gt;&amp;rsquo;s clocked, well-behaved descendant — and, for the discrete-logic era, its most versatile one. It takes SR&amp;rsquo;s set and reset inputs (here called J and K) but replaces the forbidden &amp;ldquo;both asserted&amp;rdquo; combination with something useful: &lt;strong&gt;toggle&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;J&lt;/th&gt;
 &lt;th&gt;K&lt;/th&gt;
 &lt;th&gt;Q (next)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;Q — hold&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1 — set&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0 — reset&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Q̄ — toggle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;With J and K both high, each clock edge flips the output. That closes the one gap SR left open and makes a single flip-flop able to hold, set, reset, or toggle depending only on how its inputs are wired.&lt;/p&gt;</description></item><item><title>Metastability &amp; Synchronizers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/timing/metastability-and-synchronizers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/timing/metastability-and-synchronizers/</guid><description>&lt;h1 id="metastability--synchronizers"&gt;Metastability &amp;amp; Synchronizers&lt;a class="anchor" href="#metastability--synchronizers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;When a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/"&gt;flip-flop&lt;/a&gt;&amp;rsquo;s &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/timing/setup-and-hold/"&gt;setup or hold&lt;/a&gt; window is violated — its data changes right at the clock edge — it may not cleanly capture a 0 or a 1. Instead it can enter &lt;strong&gt;metastability&lt;/strong&gt;: an unstable in-between condition where the output hovers at an invalid level, or oscillates, before eventually settling to one value or the other. This is the sharpest way the digital abstraction breaks, and it cannot be designed away — only managed.&lt;/p&gt;</description></item><item><title>More Inputs</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/more-inputs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/more-inputs/</guid><description>&lt;h1 id="more-inputs"&gt;More Inputs&lt;a class="anchor" href="#more-inputs"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The mirror of the output problem: a design needs to read more switches, buttons, or digital sensors than there are pins to spare. The same shift-register trick works in reverse — sample many inputs, then clock them out over a few wires.&lt;/p&gt;
&lt;h2 id="the-part"&gt;The Part&lt;a class="anchor" href="#the-part"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The go-to is the &lt;strong&gt;74HC165&lt;/strong&gt;, an 8-bit parallel-in, serial-out &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/shift-registers/"&gt;shift register&lt;/a&gt;. A load pulse captures all eight inputs at once into the register; the controller then clocks those bits out serially on a single data line. Like the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/more-outputs/"&gt;74HC595&lt;/a&gt; it &lt;strong&gt;daisy-chains&lt;/strong&gt; — each &amp;lsquo;165&amp;rsquo;s serial output feeds the next&amp;rsquo;s input — so three pins can read 8, 16, or more inputs. The &amp;lsquo;595 for outputs and the &amp;lsquo;165 for inputs are the standard complementary pair.&lt;/p&gt;</description></item><item><title>NAND</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nand/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nand/</guid><description>&lt;h1 id="nand"&gt;NAND&lt;a class="anchor" href="#nand"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;NAND is AND followed by inversion: the output is low only when &lt;em&gt;all&lt;/em&gt; inputs are high, and high otherwise. That small change — putting a bubble on the AND — turns out to be one of the most important facts in digital logic, because NAND can build everything else.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;B&lt;/th&gt;
 &lt;th&gt;A NAND B&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="why-nand-is-universal"&gt;Why NAND Is Universal&lt;a class="anchor" href="#why-nand-is-universal"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;NAND is &lt;strong&gt;functionally complete&lt;/strong&gt;: any Boolean function whatsoever can be built from NAND gates alone. An inverter is a NAND with its inputs tied together; an AND is a NAND followed by that inverter; an OR is a NAND with both inputs inverted — which, by &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/demorgans-theorems/"&gt;De Morgan&amp;rsquo;s theorems&lt;/a&gt;, a NAND &lt;em&gt;already is&lt;/em&gt; when its inputs are read as inverted. From those, every other gate and every larger function follows. A designer given nothing but NAND gates is not missing anything.&lt;/p&gt;</description></item><item><title>Op-Amps (Briefly)</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/op-amps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/op-amps/</guid><description>&lt;h1 id="op-amps-briefly"&gt;Op-Amps (Briefly)&lt;a class="anchor" href="#op-amps-briefly"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The operational amplifier is the general-purpose gain block of analog electronics, and it earns a place in a digital notebook only for what it does at the boundary: conditioning a real-world signal so the digital side can use it. This page stays deliberately brief — the full treatment of op-amps belongs to the &lt;em&gt;EE Notebook&lt;/em&gt;&amp;rsquo;s analog sections.&lt;/p&gt;
&lt;h2 id="what-it-is"&gt;What It Is&lt;a class="anchor" href="#what-it-is"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An op-amp is a high-gain differential amplifier. On its own that open-loop gain is unusably large, but wrapped in feedback it becomes precise and versatile: amplify, attenuate, buffer, filter, sum, or offset a signal, with the behavior set by a handful of external resistors and capacitors. It is the analog equivalent of a Swiss-army knife, and a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/comparators/"&gt;comparator&lt;/a&gt; is essentially the same device run without feedback so its output swings fully to the rails.&lt;/p&gt;</description></item><item><title>Parity &amp; Error Detection</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/parity-and-error-detection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/parity-and-error-detection/</guid><description>&lt;h1 id="parity--error-detection"&gt;Parity &amp;amp; Error Detection&lt;a class="anchor" href="#parity--error-detection"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Parity is the cheapest integrity check in digital logic: a single extra bit that reveals whether data has been corrupted in the simplest way. It costs almost nothing to compute, which is exactly why it has been used everywhere from memory to serial links for decades.&lt;/p&gt;
&lt;h2 id="one-xor-tree"&gt;One XOR Tree&lt;a class="anchor" href="#one-xor-tree"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The parity of a group of bits is whether the count of 1s among them is odd — and that is precisely what an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xor/"&gt;XOR&lt;/a&gt; of all the bits computes. A &lt;strong&gt;parity generator&lt;/strong&gt; is therefore just an XOR tree across the data. A parity bit is appended so that the total number of 1s is always even (&lt;strong&gt;even parity&lt;/strong&gt;) or always odd (&lt;strong&gt;odd parity&lt;/strong&gt;), as agreed in advance.&lt;/p&gt;</description></item><item><title>Ring &amp; Johnson Counters</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ring-and-johnson-counters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ring-and-johnson-counters/</guid><description>&lt;h1 id="ring--johnson-counters"&gt;Ring &amp;amp; Johnson Counters&lt;a class="anchor" href="#ring--johnson-counters"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Ring and Johnson counters count differently from a binary counter: instead of incrementing a number, they &lt;strong&gt;circulate a pattern&lt;/strong&gt; around a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/moving-data/shift-registers/"&gt;shift register&lt;/a&gt;. They trade code efficiency for something valuable — outputs that are already decoded and free of glitches.&lt;/p&gt;
&lt;h2 id="ring-counter"&gt;Ring Counter&lt;a class="anchor" href="#ring-counter"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A ring counter is a shift register with its last output fed straight back to its first input. Seed it with a single &lt;code&gt;1&lt;/code&gt; and that one bit walks around the loop: &lt;code&gt;1000 → 0100 → 0010 → 0001 → 1000&lt;/code&gt;. With N flip-flops it has N states, and exactly &lt;strong&gt;one output is active at a time&lt;/strong&gt; — a &lt;strong&gt;one-hot&lt;/strong&gt; sequence. Because each output &lt;em&gt;is&lt;/em&gt; a decoded state, no decoding logic is needed and there are none of the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/"&gt;ripple-counter&lt;/a&gt; decoding glitches: the outputs are already clean, one-per-step control signals. That makes ring counters ideal for sequencers, stepper-motor phase drives, and LED chasers.&lt;/p&gt;</description></item><item><title>State Encoding</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/state-encoding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/state-encoding/</guid><description>&lt;h1 id="state-encoding"&gt;State Encoding&lt;a class="anchor" href="#state-encoding"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Once a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/fsm-concepts/"&gt;state machine&lt;/a&gt;&amp;rsquo;s behavior is captured, each state has to be assigned a bit pattern in the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/registers/"&gt;state register&lt;/a&gt;. The behavior is identical whatever the assignment, but the &lt;em&gt;encoding&lt;/em&gt; strongly affects how much logic the machine costs, how fast it runs, and how safely it fails — so it is a real design choice, not a formality.&lt;/p&gt;
&lt;h2 id="three-common-schemes"&gt;Three Common Schemes&lt;a class="anchor" href="#three-common-schemes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Binary (sequential)&lt;/strong&gt; — number the states 0, 1, 2, … and store the number in ⌈log₂ N⌉ flip-flops. This uses the &lt;strong&gt;fewest flip-flops&lt;/strong&gt;, which mattered when flip-flops were expensive discrete parts. The cost is more complex next-state and output logic, and several bits can change on one transition — a source of decoding glitches.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gray code&lt;/strong&gt; — order the state codes so that &lt;strong&gt;adjacent states differ by a single bit&lt;/strong&gt;. Only one flip-flop changes per step, which reduces simultaneous switching and makes decoded outputs cleaner. It is most useful for machines that march through states in order, and for values that cross clock domains.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-hot&lt;/strong&gt; — give &lt;strong&gt;each state its own flip-flop&lt;/strong&gt;, with exactly one set at a time. It spends the most flip-flops (N of them for N states) but makes the next-state and output logic trivial and fast: &amp;ldquo;am I in state X&amp;rdquo; is just one flip-flop&amp;rsquo;s output, with no decoding. A one-hot machine is essentially a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ring-and-johnson-counters/"&gt;ring counter&lt;/a&gt; following the state diagram.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="choosing-one"&gt;Choosing One&lt;a class="anchor" href="#choosing-one"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The trade is flip-flops against logic. In the discrete and early-integrated eras, flip-flops were the scarce resource, so &lt;strong&gt;binary&lt;/strong&gt; encoding dominated. In an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/fpgas/"&gt;FPGA&lt;/a&gt;, flip-flops come essentially free with every logic block while wide combinational logic is what&amp;rsquo;s precious — so &lt;strong&gt;one-hot&lt;/strong&gt; is frequently the default, trading spare flip-flops for smaller, faster logic and glitch-free decoding.&lt;/p&gt;</description></item><item><title>Why Integrated Circuits Happened</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/why-ics-happened/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/why-ics-happened/</guid><description>&lt;h1 id="why-integrated-circuits-happened"&gt;Why Integrated Circuits Happened&lt;a class="anchor" href="#why-integrated-circuits-happened"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/transistors/"&gt;transistor&lt;/a&gt; made a single switch cheap, small, and reliable. That solved the &lt;em&gt;device&lt;/em&gt; problem — but it exposed a new one. As designs grew from dozens of transistors to thousands, the limiting factor stopped being the transistors and became the wiring between them. The integrated circuit exists to solve that second problem, and understanding which problem it solved is the key to why every later chapter looks the way it does.&lt;/p&gt;</description></item><item><title>ALU</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/alu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/arithmetic/alu/</guid><description>&lt;h1 id="alu"&gt;ALU&lt;a class="anchor" href="#alu"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Arithmetic Logic Unit is where the building blocks converge. It is a single combinational block that performs a &lt;em&gt;selected&lt;/em&gt; operation — add, subtract, AND, OR, XOR, compare, shift — on its two operands, with function-select inputs choosing which. It is the computational core of a processor&amp;rsquo;s datapath, and it is assembled almost entirely from the primitives covered elsewhere in this section.&lt;/p&gt;
&lt;h2 id="what-it-combines"&gt;What It Combines&lt;a class="anchor" href="#what-it-combines"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An ALU is less an invention than an arrangement:&lt;/p&gt;</description></item><item><title>ASICs</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/asics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/asics/</guid><description>&lt;h1 id="asics"&gt;ASICs&lt;a class="anchor" href="#asics"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;An Application-Specific Integrated Circuit is custom silicon: the logic of a design fixed permanently into a chip made for one purpose. It is the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/"&gt;building blocks&lt;/a&gt; of this book laid out in silicon at scale — millions or billions of gates and flip-flops, placed once and never changed.&lt;/p&gt;
&lt;h2 id="the-primitives-fixed-in-silicon"&gt;The Primitives, Fixed in Silicon&lt;a class="anchor" href="#the-primitives-fixed-in-silicon"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most ASICs are built from a &lt;strong&gt;standard-cell library&lt;/strong&gt;: a catalog of pre-designed, pre-characterized layouts for each primitive — a NAND cell, a NOR cell, a D &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/"&gt;flip-flop&lt;/a&gt; cell, a full-adder cell, and so on. That library is nothing more than the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/"&gt;gates&lt;/a&gt; of Part II rendered as physical geometry. A designer writes the logic in an &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/hdl-concepts/"&gt;HDL&lt;/a&gt;, synthesis maps it onto those cells, and place-and-route tools arrange and wire millions of them across the die. (Gate arrays and full-custom design are the other, less common points on the spectrum, trading flexibility for effort.)&lt;/p&gt;</description></item><item><title>Clock Domain Crossing</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/timing/clock-domain-crossing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/timing/clock-domain-crossing/</guid><description>&lt;h1 id="clock-domain-crossing"&gt;Clock Domain Crossing&lt;a class="anchor" href="#clock-domain-crossing"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A modern chip does not run on one clock. A processor core, a memory interface, a radio, and a USB port each have their own, and signals constantly have to pass between them. Whenever a signal generated in one clock domain is sampled by another whose clock is unrelated, it is a &lt;strong&gt;clock domain crossing (CDC)&lt;/strong&gt; — and it is where &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/timing/metastability-and-synchronizers/"&gt;metastability&lt;/a&gt; stops being a curiosity and becomes a design discipline.&lt;/p&gt;</description></item><item><title>HC / HCT Families</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/hc-hct/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/hc-hct/</guid><description>&lt;h1 id="hc--hct-families"&gt;HC / HCT Families&lt;a class="anchor" href="#hc--hct-families"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The 74HC and 74HCT families are where &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/"&gt;CMOS&lt;/a&gt; became the &lt;em&gt;practical default&lt;/em&gt; for board-level logic. They pair CMOS power consumption with speed comparable to the popular &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/ttl/"&gt;74LS TTL&lt;/a&gt; of their day, wrapped in the familiar 74xx part numbers — which is why, for a great deal of discrete digital design, &amp;ldquo;HC&amp;rdquo; is simply the logic reached for first.&lt;/p&gt;
&lt;h2 id="high-speed-cmos"&gt;High-Speed CMOS&lt;a class="anchor" href="#high-speed-cmos"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;74&lt;strong&gt;HC&lt;/strong&gt; (&amp;ldquo;High-speed CMOS&amp;rdquo;) is silicon-gate CMOS built to be fast enough to replace LS-TTL while keeping CMOS&amp;rsquo;s near-zero static power, its wide 2–6 V supply range, and its high, rail-to-rail noise margin (thresholds near half the supply). Functionally it carries the entire 74xx catalog forward: a 74HC00 is the CMOS quad NAND, a 74HC595 the CMOS shift register, and so on.&lt;/p&gt;</description></item><item><title>Karnaugh Maps</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/karnaugh-maps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/karnaugh-maps/</guid><description>&lt;h1 id="karnaugh-maps"&gt;Karnaugh Maps&lt;a class="anchor" href="#karnaugh-maps"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A Karnaugh map is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/truth-tables/"&gt;truth table&lt;/a&gt; rearranged so that simplification becomes something the eye can do. The rows and columns are ordered in &lt;strong&gt;Gray code&lt;/strong&gt; — each cell differs from its neighbors by exactly one variable — so that physically adjacent 1s can always be combined into a simpler term. It turns the algebra of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/boolean-algebra/"&gt;minimization&lt;/a&gt; into pattern-spotting.&lt;/p&gt;
&lt;h2 id="reading-the-grid"&gt;Reading the Grid&lt;a class="anchor" href="#reading-the-grid"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here is a three-variable function, F(A, B, C), with the columns in Gray order (00, 01, 11, 10):&lt;/p&gt;</description></item><item><title>NOR</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nor/</guid><description>&lt;h1 id="nor"&gt;NOR&lt;a class="anchor" href="#nor"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;NOR is OR followed by inversion: the output is high only when &lt;em&gt;all&lt;/em&gt; inputs are low, and low if any input is high. Like &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/nand/"&gt;NAND&lt;/a&gt;, it is a universal gate — and it holds a special place in the history of the field.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;B&lt;/th&gt;
 &lt;th&gt;A NOR B&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="universal-and-the-mirror-of-nand"&gt;Universal, and the Mirror of NAND&lt;a class="anchor" href="#universal-and-the-mirror-of-nand"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;NOR is &lt;strong&gt;functionally complete&lt;/strong&gt;: an inverter is a NOR with its inputs tied together, and every other gate follows. It is the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/demorgans-theorems/"&gt;De Morgan&lt;/a&gt; dual of NAND — a NOR behaves as an AND with inverted inputs — so a design can be built entirely from NOR just as it can be built entirely from NAND. In &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/"&gt;CMOS&lt;/a&gt; it is equally native and cheap: four transistors for a two-input gate, where a true &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/or/"&gt;OR&lt;/a&gt; needs six.&lt;/p&gt;</description></item><item><title>Sequencers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/sequencers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/sequencers/</guid><description>&lt;h1 id="sequencers"&gt;Sequencers&lt;a class="anchor" href="#sequencers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A sequencer is a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/state-machines/fsm-concepts/"&gt;state machine&lt;/a&gt; in its most restricted, most common form: one that steps through a &lt;strong&gt;fixed sequence of states&lt;/strong&gt;, mostly marching forward rather than branching on inputs. Where a general FSM asks &amp;ldquo;given where I am and what just happened, where do I go?&amp;rdquo;, a sequencer mostly just asks &amp;ldquo;what is the next step?&amp;rdquo; That narrower job has simple, efficient realizations.&lt;/p&gt;
&lt;h2 id="how-theyre-built"&gt;How They&amp;rsquo;re Built&lt;a class="anchor" href="#how-theyre-built"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Counter plus decoder&lt;/strong&gt; — a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/synchronous-counters/"&gt;synchronous counter&lt;/a&gt; advances through binary states and a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/decoder/"&gt;decoder&lt;/a&gt; turns the current count into one active &amp;ldquo;step&amp;rdquo; line. Compact, and the count is also directly available.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ring or Johnson counter&lt;/strong&gt; — a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ring-and-johnson-counters/"&gt;ring counter&lt;/a&gt; is the simplest sequencer of all: the single circulating one-hot bit &lt;em&gt;is&lt;/em&gt; the current step, already decoded and glitch-free, with no separate decoder needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A small FSM&lt;/strong&gt; — when a few input-dependent decisions are needed (wait here until ready, skip a step under some condition), a general state machine handles the branches the pure counter forms cannot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="where-theyre-used"&gt;Where They&amp;rsquo;re Used&lt;a class="anchor" href="#where-theyre-used"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Sequencers run the parts of a system that must happen in a fixed order: multi-phase clock generation, memory and bus access cycles, stepper-motor phase drive, display and keypad scanning, and pattern or waveform generation. Their most consequential use is the &lt;strong&gt;control unit of a processor&lt;/strong&gt; — a microsequencer that steps an address counter through a ROM whose contents are the control signals for each step (microcode) and the address of the next step. That is how a great many CPUs turn an instruction into an ordered series of register-transfer operations: a sequencer, a memory, and the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/registers/"&gt;datapath registers&lt;/a&gt; it steers. The counting family&amp;rsquo;s pattern circulators and the state-machine family&amp;rsquo;s controllers meet exactly here.&lt;/p&gt;</description></item><item><title>SSI, MSI, LSI &amp; VLSI</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/integration-scales/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/integration-scales/</guid><description>&lt;h1 id="ssi-msi-lsi--vlsi"&gt;SSI, MSI, LSI &amp;amp; VLSI&lt;a class="anchor" href="#ssi-msi-lsi--vlsi"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Once whole circuits could be &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/before-the-ic/why-ics-happened/"&gt;fabricated at once&lt;/a&gt;, the only open question was how many devices to put on a single die. The answer grew by orders of magnitude over two decades, and the industry named the rungs of that climb: small-, medium-, large-, and very-large-scale integration. The names are worth knowing not as trivia but because each rung sold a &lt;em&gt;different level of abstraction&lt;/em&gt; as a product — and that progression is exactly how the rest of this notebook is organized.&lt;/p&gt;</description></item><item><title>Switch Analog Signals</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/switch-analog-signals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/switch-analog-signals/</guid><description>&lt;h1 id="switch-analog-signals"&gt;Switch Analog Signals&lt;a class="anchor" href="#switch-analog-signals"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A logic gate cannot pass an analog signal, and a relay is bulky and slow for routing a small voltage. The need here is to steer an analog signal — an audio line, a sensor voltage, a reference — on and off, or from one path to another, under &lt;em&gt;digital&lt;/em&gt; control.&lt;/p&gt;
&lt;h2 id="the-part"&gt;The Part&lt;a class="anchor" href="#the-part"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The classic answer is the &lt;strong&gt;4066&lt;/strong&gt;, a quad bilateral (analog) switch. Each switch is a CMOS &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/analog-switches/"&gt;transmission gate&lt;/a&gt; — an NMOS and a PMOS transistor in parallel — that, when its control input is high, conducts in &lt;em&gt;either&lt;/em&gt; direction and passes whatever analog voltage sits between the supply rails. When the control is low, the path is open. It is a genuine switch for signals, controlled by a logic level.&lt;/p&gt;</description></item><item><title>T Flip-Flop</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/t-flip-flop/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/t-flip-flop/</guid><description>&lt;h1 id="t-flip-flop"&gt;T Flip-Flop&lt;a class="anchor" href="#t-flip-flop"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The T (toggle) flip-flop does one thing: when its T input is high, it flips state on every clock edge; when T is low, it holds. That single behavior makes it the building block of counters and frequency dividers.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;T&lt;/th&gt;
 &lt;th&gt;Q (next)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;Q — hold&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Q̄ — toggle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="divide-by-two"&gt;Divide by Two&lt;a class="anchor" href="#divide-by-two"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A flip-flop that toggles on each clock edge produces an output that changes half as often as its clock — a &lt;strong&gt;divide-by-two&lt;/strong&gt;. Feed that output into the clock of a second toggle stage and it divides by two again; chain &lt;em&gt;n&lt;/em&gt; stages and the result counts in binary and divides the input frequency by 2ⁿ. That is precisely how a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/ripple-counters/"&gt;ripple counter&lt;/a&gt; works, and why the T flip-flop lives at the root of the &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/counting/"&gt;counting&lt;/a&gt; primitives.&lt;/p&gt;</description></item><item><title>Hazards &amp; Glitches</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/hazards-and-glitches/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/hazards-and-glitches/</guid><description>&lt;h1 id="hazards--glitches"&gt;Hazards &amp;amp; Glitches&lt;a class="anchor" href="#hazards--glitches"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/boolean-foundations/truth-tables/"&gt;truth table&lt;/a&gt; describes what a function settles to, not the momentary values it passes through on the way. Real gates take time to switch, and different signal paths through a circuit take &lt;em&gt;different&lt;/em&gt; amounts of time — so when an input changes, the output can briefly show a wrong value before settling to the right one. That transient is a &lt;strong&gt;glitch&lt;/strong&gt;, and the circuit property that permits it is a &lt;strong&gt;hazard&lt;/strong&gt;. The logic is correct; the timing is not.&lt;/p&gt;</description></item><item><title>LVC / AHC</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/lvc-ahc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/lvc-ahc/</guid><description>&lt;h1 id="lvc--ahc"&gt;LVC / AHC&lt;a class="anchor" href="#lvc--ahc"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;As supply voltages fell — 5 V giving way to 3.3 V, then 1.8 V and below, for both power savings and speed — logic families followed them down. LVC, AHC, and their many siblings are &lt;strong&gt;today&amp;rsquo;s&lt;/strong&gt; discrete logic: the parts actually specified in current designs, where &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/hc-hct/"&gt;HC/HCT&lt;/a&gt; is increasingly the legacy 5 V choice.&lt;/p&gt;
&lt;h2 id="todays-low-voltage-cmos"&gt;Today&amp;rsquo;s Low-Voltage CMOS&lt;a class="anchor" href="#todays-low-voltage-cmos"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These are all &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/implementation/cmos/"&gt;CMOS&lt;/a&gt;, refined for lower voltages, higher speed, and mixed-voltage systems:&lt;/p&gt;</description></item><item><title>One of Eight Sensors</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/one-of-eight-sensors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/one-of-eight-sensors/</guid><description>&lt;h1 id="one-of-eight-sensors"&gt;One of Eight Sensors&lt;a class="anchor" href="#one-of-eight-sensors"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A design has one ADC input but eight analog sensors to read (or one signal path that must select among eight sources). Rather than eight converters, route each sensor to the single ADC in turn.&lt;/p&gt;
&lt;h2 id="the-part"&gt;The Part&lt;a class="anchor" href="#the-part"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The standard part is the &lt;strong&gt;4051&lt;/strong&gt;, an 8-channel analog &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/selection/multiplexer/"&gt;multiplexer&lt;/a&gt;/demultiplexer. Three address lines select which of the eight channels connects to the common pin, and because it is built from &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/analog-helpers/analog-switches/"&gt;transmission gates&lt;/a&gt; it passes analog voltages in either direction — so the same part can gather eight inputs to one ADC or fan one source out to eight destinations. Its relatives cover other groupings: the &lt;strong&gt;4052&lt;/strong&gt; is a dual 4-channel mux, the &lt;strong&gt;4053&lt;/strong&gt; a triple 2-channel. The 74HC4051 is the faster high-speed-CMOS version.&lt;/p&gt;</description></item><item><title>Registers</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/registers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/registers/</guid><description>&lt;h1 id="registers"&gt;Registers&lt;a class="anchor" href="#registers"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A register is simply a row of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/storage/d-flip-flop/"&gt;D flip-flops&lt;/a&gt; sharing one clock, storing an N-bit word instead of a single bit. Where a flip-flop remembers a bit, a register remembers a &lt;em&gt;number&lt;/em&gt; — and that makes it the basic unit of storage in any datapath.&lt;/p&gt;
&lt;h2 id="a-word-captured-on-a-clock"&gt;A Word, Captured on a Clock&lt;a class="anchor" href="#a-word-captured-on-a-clock"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Present a word at the register&amp;rsquo;s inputs, pulse the clock, and all N bits are captured together and held until the next clock — the same edge-triggered capture as a single flip-flop, widened. Because every bit latches on the same edge, the stored word is always internally consistent; there is no moment where half the bits are old and half are new. The classic octal parts are the 74HC574 and 74HC377 (eight D flip-flops with a shared clock, the latter with a load enable).&lt;/p&gt;</description></item><item><title>SoCs</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/socs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/socs/</guid><description>&lt;h1 id="socs"&gt;SoCs&lt;a class="anchor" href="#socs"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A System on a Chip is integration taken to its conclusion: not just logic, and not just a processor, but a whole system on one die. Where a &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/modern-world/microcontrollers/"&gt;microcontroller&lt;/a&gt; put a CPU, memory, and simple peripherals together, an SoC adds everything else a product needs — multiple CPU cores, a GPU, a neural accelerator, memory controllers, high-speed I/O, radios, image and signal processors — onto a single piece of silicon.&lt;/p&gt;</description></item><item><title>XOR</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xor/</guid><description>&lt;h1 id="xor"&gt;XOR&lt;a class="anchor" href="#xor"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The exclusive-OR gate outputs high when its inputs &lt;em&gt;differ&lt;/em&gt; and low when they match. Where OR asks &amp;ldquo;is any input high?&amp;rdquo;, XOR asks &amp;ldquo;is exactly an odd number of inputs high?&amp;rdquo; — for two inputs, &amp;ldquo;are they different?&amp;rdquo;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;B&lt;/th&gt;
 &lt;th&gt;A XOR B&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="the-difference-detector"&gt;The Difference Detector&lt;a class="anchor" href="#the-difference-detector"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;XOR is fundamentally a &lt;strong&gt;difference detector&lt;/strong&gt;, and two identities make it far more useful than that description suggests:&lt;/p&gt;</description></item><item><title>Level Shifting</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/level-shifting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/level-shifting/</guid><description>&lt;h1 id="level-shifting"&gt;Level Shifting&lt;a class="anchor" href="#level-shifting"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Modern boards are rarely a single voltage. A 3.3 V microcontroller must talk to a 5 V sensor, a 1.8 V memory, or an I²C bus shared across domains, and connecting mismatched levels directly either fails to register a logic high or over-volts an input. Level shifting moves a signal safely from one voltage domain to another — and the right part depends entirely on the &lt;em&gt;direction&lt;/em&gt; and the &lt;em&gt;drive type&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Tiny Logic (74LVC1Gxx)</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/tiny-logic/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/implementation/tiny-logic/</guid><description>&lt;h1 id="tiny-logic-74lvc1gxx"&gt;Tiny Logic (74LVC1Gxx)&lt;a class="anchor" href="#tiny-logic-74lvc1gxx"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Tiny logic is the endpoint of discrete-logic miniaturization: &lt;strong&gt;one gate per package&lt;/strong&gt;. Where the classic 7400 put four NAND gates in a 14-pin package, a part like the 74LVC1G00 is a single two-input NAND in a five-pin package smaller than a grain of rice. It is the most modern link in this chapter, and it exists because of what happened to logic everywhere else in the notebook.&lt;/p&gt;</description></item><item><title>XNOR</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xnor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xnor/</guid><description>&lt;h1 id="xnor"&gt;XNOR&lt;a class="anchor" href="#xnor"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;XNOR is the complement of &lt;a href="https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/xor/"&gt;XOR&lt;/a&gt;: its output is high when its inputs &lt;em&gt;match&lt;/em&gt; and low when they differ. If XOR is the difference detector, XNOR is the &lt;strong&gt;equality detector&lt;/strong&gt;.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;A&lt;/th&gt;
 &lt;th&gt;B&lt;/th&gt;
 &lt;th&gt;A XNOR B&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="equality-in-one-gate"&gt;Equality in One Gate&lt;a class="anchor" href="#equality-in-one-gate"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;XNOR answers &amp;ldquo;are these two bits the same?&amp;rdquo; directly — a single gate that is high precisely when A equals B. Because it is XOR inverted, it shares XOR&amp;rsquo;s cost and its complementary identities: &lt;strong&gt;A XNOR 0 = NOT A&lt;/strong&gt; and &lt;strong&gt;A XNOR 1 = A&lt;/strong&gt;, so it too can act as a controlled inverter, just with the opposite sense to XOR.&lt;/p&gt;</description></item><item><title>Reset Delay</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/reset-delay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/glue-logic-toolbox/reset-delay/</guid><description>&lt;h1 id="reset-delay"&gt;Reset Delay&lt;a class="anchor" href="#reset-delay"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;At power-up, a chip must be held in reset until its supply is stable, then released cleanly. Do this wrong and the device wakes into a garbage state, latches up, or resets erratically as the rail sags. The need is a reset that asserts while power is coming up and releases only once the supply is good — ideally with a defined delay.&lt;/p&gt;
&lt;h2 id="the-right-answer-a-supervisor-ic"&gt;The Right Answer: a Supervisor IC&lt;a class="anchor" href="#the-right-answer-a-supervisor-ic"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A dedicated &lt;strong&gt;reset supervisor&lt;/strong&gt; (MAX809, MCP100/MCP809, TPS3839, and many others) is the proper part. It watches the supply voltage against a precise threshold, holds reset asserted whenever the rail is below it, and releases after a fixed delay once the rail is good — and, crucially, re-asserts on a &lt;strong&gt;brown-out&lt;/strong&gt; if the supply dips later. Many include a watchdog input as well. This is what production designs use, because it handles the cases a naïve delay cannot.&lt;/p&gt;</description></item><item><title>Schmitt Trigger</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/schmitt-trigger/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://applied-ee.github.io/digital-logic-notebook/docs/building-blocks/gates/schmitt-trigger/</guid><description>&lt;h1 id="schmitt-trigger"&gt;Schmitt Trigger&lt;a class="anchor" href="#schmitt-trigger"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A Schmitt trigger is not a new logic function — it is usually just an inverter or buffer — but a special &lt;em&gt;input characteristic&lt;/em&gt;: &lt;strong&gt;hysteresis&lt;/strong&gt;. Instead of one switching threshold, it has two, and which one is active depends on which way the input is currently moving. That small change is what lets logic accept slow, noisy, or sloppy signals and still produce clean edges.&lt;/p&gt;
&lt;h2 id="two-thresholds-instead-of-one"&gt;Two Thresholds Instead of One&lt;a class="anchor" href="#two-thresholds-instead-of-one"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An ordinary gate has a single threshold, and any wobble of the input around that level produces a burst of output transitions. A Schmitt-trigger input has an &lt;strong&gt;upper threshold&lt;/strong&gt; (V&lt;sub&gt;T+&lt;/sub&gt;) and a &lt;strong&gt;lower threshold&lt;/strong&gt; (V&lt;sub&gt;T−&lt;/sub&gt;), with a gap between them:&lt;/p&gt;</description></item></channel></rss>