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
    • Designing the Address Map
    • Implementing Address Decode
    • Decode Errors and Default Slaves
    • Register Maps and Banks
      • Designing a Register Block
      • Checking the Register Specification
      • A Working Register Block and Its Bugs
    • Security and Privilege Regions
    • The Software View and the Hardware-Software Contract
    • IP-XACT and Automated Assembly
    • Memory-Map Verification
  • Interconnect and Bus Fabrics26
  • Clock and Reset Architecture24
  • 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

←Memory Maps and Address Decode
  1. Topics
  2. SoC Design
  3. Memory Maps and Address Decode
  4. Register Maps and Banks

Part 3 of 14Part 3 of 14/Memory Maps and Address DecodeAll levels

Register Maps and Banks

Designing register blocks: offsets, widths, access types, reset values, banking, reserved bits and the classic bugs.

  • 3topics
  • 3lessons

Inside every 4 KB slot lives a register block, and its table is a second, smaller contract stacked on the address map: which offset, how wide, who may write it, and what it holds after reset. NanoSoC carries seven of these tables, from the DMA's five registers to the reset controller's eight, and they already contain the three register bugs every integrator meets: a control write that silently clears an interrupt enable, status bits that ignore writes for the wrong reason, and writes that vanish while the block is busy. This topic designs the block properly, checks the specification with a script, and builds a small working register file in SystemVerilog. For the block-level view see CSR Contract and Address Map and The Firmware Side: a C Driver.

Lesson

After it you can...

Designing a Register Block

Lay out offsets, widths, access types and reset values for any NanoSoC block.

Checking the Register Specification

Run a checker over a register table and catch a bad row before RTL exists.

A Working Register Block and Its Bugs

Build a DMA-style register block and name its three classic failure modes.

Suggested order: top to bottom. Design first, because the checker only enforces what the design rules state; then check the table; then watch the same rules become gates. The verification topic at the end of this section tests these blocks from software.

Check yourself The DMA STATUS register mixes a read-only BUSY bit with two write-1-to-clear bits. Why is that safe in one register?

Because the access types are defined per bit field, not per register. BUSY ignores writes, DONE and ERR clear on a written one and ignore a written zero, so software can clear status without disturbing the busy indication.

Expect to be handed a register table and asked what is wrong with it. The three tells are in lesson three: access-type mix-ups, a control write with a hidden side effect, and writes ignored while busy.

PreviousNext: Designing a Register Block

Up next

Up nextDesigning a Register Block

Sign in to save progress

Practice this lessonPrevious lessonReport an error

See also

  • Designing the Address Map
  • Implementing Address Decode
  • Decode Errors and Default Slaves