Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutRoadmapCareersInternshipsFAQContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • The NanoSoC Tour
  • Reading Path
  • SoC Glossary10
  • SoC Metrics Reference
  • SoC Cheatsheet
  • What SoC Integration Is12
  • Architecture and Budgets21
  • Memory Maps and Address Decode26
  • Interconnect and Bus Fabrics26
  • Clock and Reset Architecture24
    • Clock Sources and PLLs
    • Dividers, Muxes and Glitch-Free Switching
    • Clock Gating Architecture
    • Clock Domain Planning
    • Top-Level Crossings
    • Always-On Domain, Wake Policy and a Timer Extension
    • Reset Sources and Reset Tree
      • Reset Sources
      • The Reset Tree per Domain
      • Reset Controller Registers and Software View
    • Reset Sequencing and Release
  • Power Architecture21
  • Interrupts, DMA and Peripherals15
  • Memories, Boot and Security21
  • IP Integration and Handoff21
  • Top-Level Verification and Bring-up21
  • Package, Pads and I/O18
  • Chip Signoff and Tapeout18
  • SoC Interview Prep16
  • Capstone: Integrate NanoSoC14
Loading lesson

←Reset Sources and Reset Tree
  1. Topics
  2. SoC Design
  3. Clock and Reset Architecture
  4. Reset Sources and Reset Tree
  5. The Reset Tree per Domain
On this page

    Part 5 of 14, lesson 20 of 24Part 5 of 14/Clock and Reset Architecture/Lesson 20 of 24All levels

    The Reset Tree per Domain

    From four sources to three nets: the NanoSoC reset tree, per-domain synchronised release, and bridges reset together.

    Why it matters

    A reset tree is a clock tree that runs rarely and must be perfect the few times it runs: every flop it reaches must assert together and release in its own domain's time. The NanoSoC tree fans four sources into three active-low nets, one per clock domain, each released through its own synchroniser. This lesson draws the whole tree and states the two rules that keep multi-clock blocks coherent through reset. Its one job is the tree; release timing is the next topic.

    The core idea

    The controller in nano_rstpwr on clk_per combines the four sources and drives three nets. rst_per_n releases in clk_per and reaches the UART, SPI, GPIO, interrupt controller, the controller's own registers and the peripheral side of the APB bridge. rst_sys_n releases in clk_sys and reaches the fabric, DMA, stream bridge, the SRAM and ROM wrappers, the AXI-to-APB bridge and the system sides of both CDC bridges; the ROM array itself has no reset. rst_cpu_n releases in clk_cpu and reaches the CPU, its cache and the CPU side of the AXI bridge. All three assert asynchronously and release synchronously through two-flop synchronisers in their own domain, the nano_rst_sync cells taught in the next topic.

    Block diagram of the NanoSoC reset tree from sources through the controller to three reset nets.
    The NanoSoC reset tree: four sources into one controller, three per-domain nets out.

    Three rules cover the blocks that straddle domains. First, the asynchronous FIFOs in the AXI bridge and the request-and-acknowledge flops in the APB bridge must never be left half reset, so no pointer or handshake bit stays live while its partner resets. Second, this has to hold for every source, and the sources differ in scope: power-on and pad reset assert all three nets, but a software or wake reset asserts only rst_sys_n and rst_cpu_n and leaves rst_per_n deasserted. The integrator's rule that closes the gap is that the clk_per half of nano_apb_cdc takes its reset from rst_per_n and from rst_sys_n together, asserting asynchronously from either, with release synchronised in clk_per. Its two toggle and acknowledge flops are then cleared on every system reset, and any APB access in flight to a peripheral is abandoned rather than left as a stale toggle. In the AXI bridge the CPU side takes rst_cpu_n and the system side rst_sys_n; NanoSoC has no source that resets the CPU alone, and a derivative that added one would have to flush both sides of each FIFO, so the system side would take that reset as well. Third, the DMA's reset is rst_sys_n, matching the bench where reset is the only reset and is held for 4 clock edges; NanoSoC holds every release for 16 cycles, which is strictly stronger. SRAM contents survive every reset except supply loss.

    What the review looks for

    • The tree diagram above, current, with every endpoint named; no flop takes a reset from off the page.

    • Both halves of every multi-clock block cleared for every source, including the software and wake resets that leave rst_per_n alone, proven in the sequence simulation.

    • The DMA reset matched to its bench: same net, longer hold, stated as stronger rather than different.

    Verify and debug

    Assert each source and confirm every endpoint in its scope asserts within the same cycle of its domain, then release and confirm each domain's synchronised release separately. Run a software reset with a peripheral access in flight, and confirm the clk_per half of the APB bridge comes out clean; reset one side of a bridge while the other runs, and confirm the design either resets both or flushes: a bus stuck waiting on a half-reset partner is the partial-reset hang, carried into the next topic as a failure. For the reset-domain view see Reset Domain Crossing.

    Partial reset hang: one side of an interface resets mid-transaction while the other waits for a response that never comes. Symptom: bus stuck after a software reset. Caught by reset-domain analysis and directed tests. Fixed with a drain and quiesce handshake before reset, or by clearing both halves of every bridge together with a flush, the rule above.

    If asked to draw the reset tree, draw the sources, the controller, the three nets and two bridge straddles, and say what a software reset does to the APB bridge's clk_per half. Then say which net the DMA takes and why the hold is 16 cycles when the bench used 4.

    Check yourself Why must both halves of a CDC bridge be cleared at the same time, and how does a software reset manage it when rst_per_n stays released?

    The bridge holds state shared across the boundary: FIFO pointers on both sides, handshake flops on both sides. Resetting one side leaves the other holding half a transaction, so the first transfer after release starts from an inconsistent state and hangs. A software reset does not assert rst_per_n, so the clk_per half of the APB bridge takes rst_sys_n as well as rst_per_n and is cleared with the system side.

    Related topics

    • Reset Sources

    • Next: Reset Controller Registers and Software View

    • CDC and RDC: IP Integration Resets

    Previous

    113 / 289

    Next: Reset Controller Registers and Software View

    Up next

    Up nextReset Controller Registers and Software View

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error