A product KPI such as battery life becomes per-class targets first. Classes used here are sustained compute, burst responsiveness and idle standby.
Each class splits into block budgets with an owner. The tables below are illustrative and use stated assumptions only.
Block | Power (mW) | Share |
|---|---|---|
CPU cluster | 1890 | 45% |
Accelerator | 1470 | 35% |
Fabric and memory | 840 | 20% |
Shares are exact: 1890, 1470 and 840 sum to 4200 mW. An 8% integration reserve sits outside the blocks for clock, power grid and fabric overhead.
Power budget (illustrative, TT corner, sustained mode)
block sum = 1890 + 1470 + 840 = 4200 mW
CPU share = 1890 / 4200 = 0.45 -> 45%
NPU share = 1470 / 4200 = 0.35 -> 35%
fabric+mem = 840 / 4200 = 0.20 -> 20%
shares sum = 45 + 35 + 20 = 100%
reserve = 0.08 x 4200 = 336 mW
allocated = 4200 + 336 = 4536 mW
top budget = 4600 mW
headroom = 4600 - 4536 = 64 mW (64 / 4600 = 1.4%)Block | Area (mm2) | Share |
|---|---|---|
CPU cluster | 65.7 | 45% |
Accelerator | 51.1 | 35% |
Fabric and memory | 29.2 | 20% |
Area shares match power shares by construction in this example. Real blocks rarely align, and the ledger records each column separately.
Area budget (illustrative)
block sum = 65.7 + 51.1 + 29.2 = 146.0 mm2
CPU share = 65.7 / 146.0 = 0.45 -> 45%
NPU share = 51.1 / 146.0 = 0.35 -> 35%
rest = 29.2 / 146.0 = 0.20 -> 20%
shares sum = 45 + 35 + 20 = 100%Every budget binds to a mode and a corner. Nominal-only budgets miss at the hot, low-voltage corner that actually ships.
Mode | Chip power (mW) | Binding |
|---|---|---|
Peak burst | 4536 | TT corner, 0.80 V, 25 C |
Sustained | 3200 | SS corner, 0.80 V, 105 C junction |
Idle standby | 420 | FF leakage check, 0.72 V retention |
Margin has an owner and an escalation path. When a block crosses its tolerance band, the ledger names who approves the next step.
The ledger below is the contract format, with illustrative numbers. Each release tags the baseline so deltas compare against the same reference.
SOC PPA LEDGER (illustrative format, release arch_r3)
perf_target_geomean .... 1.18x (worked in the next lesson)
power_budget_total_mw .. 4200 + 336 reserve = 4536 allocated of 4600
area_budget_total_mm2 .. 146.0
timing_guardband_ps .... 80 (stacked in the next lesson)
unresolved_high_risks ... 3 (each with owner and due date)The sum is 4200 mW, the reserve is 336 mW, and the allocated total is 4536 mW.
Deltas without a tagged baseline cannot be compared across releases, so nobody can tell drift from redefinition.
The model below adds block budgets plus one delta and flags threshold crossings. It checks arithmetic and ownership bands, not physics.
module budget_ledger #(
parameter int N = 3,
parameter int TOP_MW = 4200,
parameter int GUARD_MW = 210
) (
input logic [N*32-1:0] blk_mw,
input logic [31:0] delta_mw,
output logic [31:0] total_mw,
output logic over_top,
output logic in_guard
);
logic [31:0] acc;
always_comb begin
acc = delta_mw;
for (int i = 0; i < N; i = i + 1) acc = acc + blk_mw[i*32 +: 32];
total_mw = acc;
over_top = (acc > TOP_MW);
in_guard = (acc > TOP_MW) && (acc <= TOP_MW + GUARD_MW);
end
endmodule