<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>⏱️ Timing &amp; the Real World on Digital Logic Notebook</title><link>https://applied-ee.github.io/digital-logic-notebook/docs/timing/</link><description>Recent content in ⏱️ Timing &amp; the Real World on Digital Logic Notebook</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://applied-ee.github.io/digital-logic-notebook/docs/timing/index.xml" rel="self" type="application/rss+xml"/><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>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>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>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>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></channel></rss>