<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Module 7: Advanced RTL Design Techniques on Circuit Quest</title>
    <link>https://circuit.quest/courses/digital-design-verilog/module-07/</link>
    <description>Recent content in Module 7: Advanced RTL Design Techniques on Circuit Quest</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 20 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://circuit.quest/courses/digital-design-verilog/module-07/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Why Parameterize Everything</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/01-why-parameterize-everything/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/01-why-parameterize-everything/</guid>
      <description>You met parameter in Module 4. This article is about the discipline that makes a module reusable across projects instead of copy-pasted between them.</description>
    </item>
    <item>
      <title>generate if and generate case</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/02-generate-if-and-generate-case/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/02-generate-if-and-generate-case/</guid>
      <description>generate for repeats a structure. generate if and generate case choose between different structures at elaboration time, based on a parameter, and the branch not taken never becomes hardware.</description>
    </item>
    <item>
      <title>A Parameterized Memory Model</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/03-parameterized-memory-model/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/03-parameterized-memory-model/</guid>
      <description>One parameterized RAM model, built properly once, is going to sit inside the FIFO in Section 7.4, the SRAM controller later on, and a good number of the testbenches you write after this course.</description>
    </item>
    <item>
      <title>A Width-Configurable ALU</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/04-parameterized-arithmetic-unit/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-01-parameterized-modules/04-parameterized-arithmetic-unit/</guid>
      <description>One worked example that pulls together parameter, localparam, $clog2 and generate into a single width-configurable ALU you could drop into a project.</description>
    </item>
    <item>
      <title>Signed Arithmetic Pitfalls</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/01-signed-arithmetic-pitfalls/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/01-signed-arithmetic-pitfalls/</guid>
      <description>Adding the signed keyword to a wire looks harmless. It changes how comparisons, shifts and mixed expressions evaluate, and each of those changes is a bug waiting for the test case you did not write.</description>
    </item>
    <item>
      <title>Saturating Arithmetic</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/02-saturating-arithmetic/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/02-saturating-arithmetic/</guid>
      <description>Ordinary binary addition wraps silently on overflow. In audio, video and control paths a wraparound turns a loud sample into a click or a stable controller into an oscillating one. Saturating arithmetic clamps instead.</description>
    </item>
    <item>
      <title>Pipelining a Wide Adder</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/03-pipelining-an-adder/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/03-pipelining-an-adder/</guid>
      <description>You know the general pipelining idea from Module 5. This is the specific case that comes up constantly: a wide adder whose carry chain is too long for one clock period, split across two stages without losing the carry.</description>
    </item>
    <item>
      <title>Pipelining a Multiplier</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/04-pipelining-a-multiplier/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-02-arithmetic-circuits/04-pipelining-a-multiplier/</guid>
      <description>A multiplier&amp;rsquo;s critical path is far longer than an adder&amp;rsquo;s, which makes it the block that gains most from pipelining. Here is how to cut one across stages at a boundary that actually shortens the path.</description>
    </item>
    <item>
      <title>Balancing an N-Stage Pipeline</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/01-throughput-vs-latency-revisited/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/01-throughput-vs-latency-revisited/</guid>
      <description>We have pipelined an adder and a multiplier one at a time. This article steps back to the real question: how many stages, and where exactly to cut, once you are looking at a whole datapath instead of one operator.</description>
    </item>
    <item>
      <title>Inserting a Pipeline Stage into Existing Logic</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/02-inserting-pipeline-stages/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/02-inserting-pipeline-stages/</guid>
      <description>The previous article decided the stages on paper. This one is the mechanics: taking a working combinational block and cutting a register into it without silently changing its behaviour.</description>
    </item>
    <item>
      <title>Stalls and Bubbles</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/03-stalls-and-bubbles/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/03-stalls-and-bubbles/</guid>
      <description>Every pipeline so far assumed data can move every cycle. Real pipelines feed into things that are not always ready, and a pipeline with no way to pause corrupts data the first time that happens.</description>
    </item>
    <item>
      <title>A Pipelined Multiply-Accumulate Unit</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/04-pipelined-mac-unit-worked-example/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-03-pipeline-design/04-pipelined-mac-unit-worked-example/</guid>
      <description>Everything from Section 7.3 in one design: a pipelined MAC unit, the most repeated operation in every digital filter and neural network accelerator.</description>
    </item>
    <item>
      <title>Why Every Design Has a FIFO in It</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/01-why-fifos-exist/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/01-why-fifos-exist/</guid>
      <description>A FIFO is not a data structure borrowed from software. It is the hardware answer to one of the most common problems in digital design: two things that produce and consume data at rates that do not quite match.</description>
    </item>
    <item>
      <title>The Synchronous FIFO and the Full/Empty Problem</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/02-synchronous-fifo-full-empty/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/02-synchronous-fifo-full-empty/</guid>
      <description>Equal read and write pointers mean either completely empty or completely full, and the two look identical unless you add one extra bit. Here is the trick, and a complete synchronous FIFO built on the memory model from Section 7.1.</description>
    </item>
    <item>
      <title>Gray Code Pointers</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/03-gray-code-pointers/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/03-gray-code-pointers/</guid>
      <description>Synchronizing a single bit across clock domains is a solved problem. Synchronizing a multi-bit pointer is not, unless adjacent values differ in exactly one bit. That is Gray code, and it is why asynchronous FIFOs are possible at all.</description>
    </item>
    <item>
      <title>The Asynchronous FIFO</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/04-asynchronous-fifo-and-cdc/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/04-asynchronous-fifo-and-cdc/</guid>
      <description>The most common clock-domain-crossing structure in real chips. Two independent clocks, one shared memory, and Gray-coded pointers synchronized across the boundary in both directions.</description>
    </item>
    <item>
      <title>Verifying an Asynchronous FIFO</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/05-fifo-worked-example-and-testbench/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-04-fifos/05-fifo-worked-example-and-testbench/</guid>
      <description>Testing a design with two independent clocks is different from anything in Module 6: there is no single clock edge to synchronize your checks to. Here is how to do it on the async FIFO from the previous article.</description>
    </item>
    <item>
      <title>Metastability and MTBF</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/01-metastability-and-mtbf-recap/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/01-metastability-and-mtbf-recap/</guid>
      <description>Module 3 showed that metastability exists and cannot be eliminated. This article gives the formula design teams use to decide whether a synchronizer is safe enough to ship, and what changes that number.</description>
    </item>
    <item>
      <title>The Two-Flop Synchronizer as a Module</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/02-two-flop-synchronizer/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/02-two-flop-synchronizer/</guid>
      <description>We have built a two-flop synchronizer twice already, once for reset in Module 5 and once for FIFO pointers in this module. Time to build it once, properly, with the synthesis attribute it needs.</description>
    </item>
    <item>
      <title>The Request/Acknowledge Handshake</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/03-multi-bit-cdc-and-handshake/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/03-multi-bit-cdc-and-handshake/</guid>
      <description>Gray code solves multi-bit CDC for values that only ever increment. For an arbitrary data word that jumps around, you need the request/acknowledge handshake.</description>
    </item>
    <item>
      <title>CDC Lint and the Mistakes It Catches</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/04-cdc-lint-and-common-mistakes/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-05-clock-domain-crossing/04-cdc-lint-and-common-mistakes/</guid>
      <description>Metastability does not exist in RTL simulation. A simulator resolves every signal to a clean 0 or 1, instantly. So every CDC bug in this section is invisible to the tool you would normally trust to find bugs.</description>
    </item>
    <item>
      <title>Clock Gating and the ICG Cell</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/01-clock-gating-in-rtl/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/01-clock-gating-in-rtl/</guid>
      <description>You already know never to gate a clock with a bare AND gate. This article explains what a real integrated clock gating cell does differently: a latch, not a gate, and one specific reason the latch has to be there.</description>
    </item>
    <item>
      <title>Power Gating</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/02-power-gating-overview/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/02-power-gating-overview/</guid>
      <description>Clock gating stops a block from switching. Power gating disconnects it from the supply, which removes the leakage that clock gating cannot touch, and brings a set of problems clock gating never had.</description>
    </item>
    <item>
      <title>Operand Isolation</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/03-operand-isolation/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/03-operand-isolation/</guid>
      <description>A multiplier whose result nobody will use is still burning power on every switching input, this cycle. Operand isolation is the small, RTL-visible fix, and unlike the last two techniques it is something you can write yourself.</description>
    </item>
    <item>
      <title>Activity-Aware Design</title>
      <link>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/04-activity-aware-design-principles/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://circuit.quest/courses/digital-design-verilog/module-07/07-06-low-power-design/04-activity-aware-design-principles/</guid>
      <description>Three power techniques, three different problems. This closing article is the decision framework that ties clock gating, power gating and operand isolation together, and a look back over Module 7.</description>
    </item>
  </channel>
</rss>
