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
    • Partitioning and Hierarchy
    • Area Budgets
      • Area Roll-Up
      • Utilisation and Margin
      • How Area Budgets Move
    • Timing Budgets Across Hierarchy
    • Power Budgets
    • Bandwidth Budgets
    • Budget Governance
    • Multi-Die and Chiplet View
  • Memory Maps and Address Decode26
  • 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

←Area Budgets
  1. Topics
  2. SoC Design
  3. Architecture and Budgets
  4. Area Budgets
  5. Area Roll-Up
On this page

    Part 2 of 14, lesson 4 of 21Part 2 of 14/Architecture and Budgets/Lesson 4 of 21All levels

    Area Roll-Up

    Adding the NanoSoC block table to the core total: every number, every sum, checked by script.

    Why it matters

    Who signs the die size? Nobody can, until the area adds up. The integrator receives numbers for sixteen blocks (fifteen modules plus the PLL macro) from different owners, each measured differently; the area table splits them into eighteen rows because the CPU core and its cache, and the power switches with their isolation cells, get rows of their own. From those rows the integrator must produce one total the project can sign. The NanoSoC specification gives the full table, and the script below re-adds it independently: block subtotal 0.585 mm2, overhead 0.070 mm2, core 0.655 mm2, budget 0.940 mm2, utilisation 69.7%. If your addition disagrees, the sheet is right and your copy is stale.

    The core idea

    A roll-up has four rungs. Blocks report standard-cell plus macro area per block; on NanoSoC the two SRAMs, the I-cache and the ROM together are 40.5% of the block total, which is normal for a memory-heavy small chip. An overhead line covers the clock tree, routing and fill at 12% of the block area. The core total is blocks plus overhead. Utilisation is core total divided by the die budget. Each rung has one owner and one formula, shown beside the table so a reviewer can recompute any line in seconds.

    Rung

    NanoSoC value

    Formula

    Block subtotal

    0.585 mm2 (PD_SW 0.372, PD_AON 0.213)

    Sum of the 18 block rows

    Clock tree, routing, fill

    0.070 mm2

    0.585 x 0.12, rounded

    Core area

    0.655 mm2

    0.585 + 0.070

    Die budget and utilisation

    0.940 mm2, 69.7%

    0.655 / 0.940

    Memory share of blocks

    40.5%

    (0.100 + 0.100 + 0.025 + 0.012) / 0.585

    The calculator

    The script below re-adds the per-block areas and checks every rung, including the per-domain split and the memory share. It is the standing regression check for the area table: run it whenever any block number changes.

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    areas = [0.150, 0.025, 0.015, 0.040, 0.012, 0.010, 0.006, 0.004,
        0.100, 0.010, 0.100, 0.012, 0.008, 0.008, 0.006, 0.004, 0.015, 0.060]
    assert len(areas) == 18
    subtotal = round(sum(areas), 3)
    assert subtotal == 0.585, subtotal
    overhead = round(subtotal * 0.12, 3)
    assert overhead == 0.070, overhead
    core = round(subtotal + overhead, 3)
    assert core == 0.655, core
    util = core / 0.940
    assert abs(util - 0.697) < 0.001, util
    pd_sw = 0.150 + 0.025 + 0.015 + 0.040 + 0.012 + 0.010 + 0.006 + 0.004 + 0.100 + 0.010
    pd_aon = round(subtotal - pd_sw, 3)
    assert pd_sw == 0.372 and pd_aon == 0.213, (pd_sw, pd_aon)
    mem_share = (0.100 + 0.100 + 0.025 + 0.012) / subtotal
    assert abs(mem_share - 0.405) < 0.002, mem_share
    print(f"PASS: subtotal 0.585, overhead 0.070, core 0.655, util {util*100:.1f}%")

    What the review looks for

    • The four rungs with formulas, quoted against the same specification version as the RTL.

    • The per-domain split (0.372 versus 0.213) because power and layout consume it downstream.

    • The largest block named: the CPU core at 0.150 mm2, about a quarter of the block total.

    Verify and debug

    Re-run the script after every block update; a mismatch means the table and the script disagree about which rows exist. The usual cause is a new row — power switches and isolation cells at 0.010 mm2 were once that row — added to the table but not to the checker, or rounded in the wrong place. Fix the checker first, then the table, then the consumers.

    An overhead line copied from a previous project without recomputing. Twelve percent covers NanoSoC's tree and fill; a block-heavy or routing-heavy design needs its own number. Recompute the allowance from the floorplan estimate and record the reasoning beside the line.

    If asked where area goes on a small SoC, answer memories first: on NanoSoC the SRAMs, I-cache and ROM are two-fifths of the block area. Then name the CPU core as the largest single item.

    Two consumers read the roll-up next, and each needs a different cut. Power multiplies area by leakage density per domain, so the PD_SW and PD_AON subtotals feed the power roll-up directly; a misclassified block corrupts both budgets at once. Layout reads the macro share: at 40.5% memory the floorplan is macro-dominated, so SRAM placement leads and logic fills around it, not the reverse. When a block estimate changes, update all three consumers from the same edit or the section's budgets will disagree with each other by review time.

    Check yourself The SBR grows from 0.010 to 0.016 mm2. What moves?

    The subtotal becomes 0.591, overhead 0.071, core 0.662, utilisation 70.4%. The script catches it; the margin lesson decides whether that is acceptable.

    Related topics

    • Next: Utilisation and Margin

    • PD: Die Size and Utilisation Targets

    • Arch: PPA Budget Ledger

    Previous

    21 / 289

    Next: Utilisation and Margin

    Up next

    Up nextUtilisation and Margin

    Sign in to save progress

    Practice this lessonPrevious lessonReport an error

    See also

    • How Area Budgets Move