The map says what should happen; the decode makes it happen in one system clock. On NanoSoC that means four equality compares in the interconnect, a four-bit slot decoder behind the APB bridge, and a secure filter that watches both. This topic writes that logic out: the exact equations from the design specification, why the decode is split across two levels, how to generate the RTL and the headers from one table so they cannot drift apart, and what a pipelined select costs in latency. For the generic theory start at Address Maps and Decoding; for the RTL view of a decoder see Address Decode.
Lesson | After it you can... |
|---|---|
Write the NanoSoC select equations (windows, default and fault) and prove them against a truth table. | |
Split an address across decode levels and explain the DMA alias as a wiring choice. | |
Generate matching SystemVerilog and C headers from one table and assert they agree. | |
Cost a registered select in nanoseconds and say when it is worth paying. |
Suggested order: top to bottom. Write the equations by hand first so the generator lesson means something, then learn where each level lives before timing the whole path. The error topic that follows assumes you can already predict every select for any address.
The APB window select fires, because addr[31:16] is 0x4000. The hole only shows at the second level: the slot decoder finds slot 7 unmapped and its own default slave answers.