Skip to content

UCIe · Module 26

Intel Meteor Lake Case Study

Disaggregation by function rather than replication — how four dissimilar tiles sit on a base die, why 3D packaging changes what a die boundary costs and therefore where you cut, what a low-power island demands of every boundary it touches, and why the hardest contracts here are power-state contracts rather than data contracts.

26.1 read an architecture that disaggregates by replication. This one disaggregates by function — and almost every conclusion changes.

1. The One-Sentence Model

Meteor Lake splits a client SoC into four dissimilar tiles — compute, graphics, SoC and I/O — stacked on a base die by 3D packaging, so each function can sit on the process that suits it and the parts that must stay awake can be separated from the parts that should sleep.

Two things make this a different chapter from 26.1. The dies are not alike, so there is no "add another one" scaling knob — the partition is a functional decision. And the packaging is 3D rather than side-by-side, which changes the cost of a die boundary and therefore changes which boundaries are worth having at all (25.2 §7).

2. What This Chapter Owns

QuestionWhere
Intel's public position on UCIe; Pike Creek22.1
Hub-and-spoke; disaggregation by replication26.1
Why chiplets at all — yield, reuse, process affinity25.2
Partition quality, dependency depth, scorecard24.3 §8 · 25.7 §6
Evidence levels and claim discipline22.1 §5
The full integration contract across an organisation25.10

22.1 covered Intel's relationship with the standard. This chapter covers one architecture — and it owns four things the curriculum has not yet examined in a real product:

Functional partition (§6–§7) — what happens when the dies are all different, and what that costs.

3D packaging as an architectural input (§8) — why the base die changes the calculus rather than merely the assembly.

Power-state contracts (§9–§12) — the hardest boundary contracts here are not about data at all, and this is the chapter that says so.

And the two-architecture synthesis (§16) — 26.1 and this chapter as two answers to different pressures, which is Module 26's actual point.

3. Sourcing

4. Claim-vs-Evidence

ClaimEvidenceLevelEstablishesDoes not establish
Four tiles: Compute, Graphics, SoC, I/OIntel architecture materialC/Dthe functional partition — §6any interface detail
Tiles sit on a base tile via FoverosIntel packaging materialC/D3D, not side-by-side — §8packaging parameters
Compute tile on Intel 4Intel statementsC/Dper-tile process choice — §7other tiles' nodes
NPU, media, display on the SoC tileIntel architecture materialC/Dthe SoC tile is a functional aggregate — §9its internal structure
Thunderbolt 4 and PCIe Gen 5 on the I/O tileIntel architecture materialC/DI/O is separated out — §7lane counts or rates
Xe-LPG on the graphics tileIntel statementsC/Dgraphics is its own tileperformance
The SoC tile enables low-power operation with compute idleIntel-described architectural intentD§9's central ideaany implementation detail
Foveros bump pitch ≈ 36 µmsecondary technical reportingDa reported figure, attributednot an Intel-verified number here
Foveros energy < 0.3 pJ/bitsecondary technical reportingDa reported figure, attributed
Specific tiles fabricated externallywidely reportedDreported, not verified here
Tile-to-tile protocol internalsnot public at this level
Meteor Lake tile links are UCIenot established22.1 §4

Four readings.

Rows 1–6 are the architecture, and they are solid enough to reason from. The decomposition and the packaging approach are Intel-stated; that is all §6–§9's analysis needs.

Row 7 is the most architecturally interesting and the weakest-evidenced. Intel describes the intent — an SoC tile that lets the machine do useful low-power work while the compute tile idles. I take the intent as stated and treat every mechanism as unknown (§3), because the intent alone is enough to derive §10's contract.

Rows 8–10 stay attributed. A secondary number repeated without its source becomes a fact by erosion, which is exactly what 23.1 §13's comparison conditions exist to prevent. §8's argument is written so it does not depend on the specific figures.

And the last row stays empty on purpose. 22.1 §4 established Pike Creek as an interoperability test chip — a genuine, dated, Intel-described milestone, and not a production deployment.

5. The Arrangement

A block diagram of the Meteor Lake tile arrangement. Four dissimilar tiles are shown in a row: a compute tile containing performance and efficiency cores on Intel 4, a graphics tile with Xe-LPG, an SoC tile containing the NPU plus media and display engines, and an I O tile carrying Thunderbolt 4 and PCIe Gen 5. All four sit on a base tile below them, connected by Foveros 3D packaging. A note beside the SoC tile says it enables low-power operation while the compute tile idles, and a note beside the base tile says 3D stacking changes what a die boundary costs.Compute tileP + E cores · Intel4Graphics tileXe-LPGSoC tileNPU · media ·displayI/O tileTB4 · PCIe Gen 5Base tileFoveros 3DLow-poweruseful work,compute idle3D changescostwhich boundariesare worth it (§8)12
Disaggregation by function: four dissimilar tiles on a base tile. Nothing is replicated, so there is no 'add another one' scaling knob — each boundary was drawn where a specific function ends. The base tile is drawn as the substrate every tile sits on rather than as a peer, because 3D stacking is what changes the cost of these boundaries (§8).

Four things to read.

No two tiles are the same kind of thing. Compare 26.1 §5, where the compute dies are identical. Here every boundary was drawn where one specific function ends — so each boundary needs its own justification, and §7 is that audit.

Everything sits on the base tile. It is drawn as a substrate rather than a peer, because that is the architectural point: the boundaries exist in three dimensions, which changes what they cost (§8).

The SoC tile is the odd one. It is not a single function — it is an aggregate of NPU, media and display, and §9 argues that the aggregation is deliberate and is the most interesting decision in the whole partition.

And there is no scaling knob. You cannot add a fifth compute tile the way 26.1 §6 adds a spoke. Functional disaggregation buys different things, and §6 is the trade.

6. Replication vs Function

Replication (26.1)Function (this chapter)
dies alike?identical compute diesall different
scaling knobadd a spokenone — repartition instead
reuse storyone die across many SKUsone tile across generations
process affinitytwo nodes: compute, hubper-function, potentially four
boundary countone contract per compute dieone contract per function pair that talks
what it optimisescore-count scaling and yieldpower, node fit, and independent evolution
the riskthe hub is a shared resourcethe partition is baked into the product

Three readings.

Row 3 is where the reuse arguments diverge, and it is subtle. Replication reuses a die across products in one generation — one CCD, many SKUs. Functional partition reuses a tile across generations — an I/O tile whose interfaces are stable can survive a compute-tile node transition unchanged. Both are 25.2 §8's reuse argument, on different axes.

Row 4 is the stronger claim for functional partition. 26.1 gets two process choices; functional partition can in principle get one per function — and analogue-heavy I/O, dense cache, and leading-edge logic have genuinely different node preferences (25.2 §5).

And row 7 is the cost nobody puts on a slide. A functional partition is a product-defining decision. Changing it means redrawing boundaries, renegotiating contracts and respinning multiple tiles — so a wrong functional split is far more expensive than a wrong die count (25.10 §5's irreversible rows).

7. Auditing the Partition

Run 25.7 §6's scorecard on each boundary. This is what the framework is for.

BoundaryWhy it is a good place to cutWhat it costs
compute ↔ everythingthe only tile that needs the newest logic node (25.2 §5)every cache miss crosses a boundary (26.1 §11)
I/O ↔ everythinganalogue-heavy, mature node, slow-changing standardslatency on I/O paths, which tolerate it
graphics ↔ computedifferent area/power profile; separable workloadshared-memory traffic crosses — deep coupling
SoC aggregate ↔ computeenables the low-power island (§9)a power-state contract, not just a data one (§10)

Three readings.

Rows 1 and 2 are the textbook-good cuts. Leading-edge logic on one side, mature analogue on the other — that is process affinity doing exactly what 25.2 §5's argument predicts, and it is why "separate the I/O" appears in almost every chiplet architecture including 26.1's hub.

Row 3 is the questionable one, and saying so is the analysis. Graphics and compute share memory, so this boundary carries traffic with real coupling — 25.7 §10's dependency-depth test applies, and this is the boundary where a 3D package's low per-bit cost (§8) matters most.

And row 4 is the one that changes the kind of contract. The other three boundaries are about moving data. This one is about who is awake — which is a class of contract this curriculum has not yet examined, and §10–§12 are it.

8. Why 3D Packaging Changes the Argument

Every chiplet argument in this curriculum has an implicit cost term: what a die crossing costs in energy, latency and bandwidth (25.2 §7). Change that term and the conclusions move.

If a crossing is expensiveIf a crossing is cheap
cut only where traffic is thincut where the function boundary is
tightly coupled blocks must share a diecoupled blocks can be separated
few boundariesmore boundaries become affordable
the partition is dominated by bandwidththe partition is dominated by node fit and power

Three readings.

This is the whole reason Meteor Lake's partition can be functional rather than traffic-driven. A side-by-side organic-substrate boundary makes you cut where traffic is thin. A dense 3D boundary lets you cut where the architecture wants to cut — which is what makes a graphics/compute split (§7 row 3) thinkable at all.

The figures stay attributed (§4 rows 8–9). Secondary reporting gives a bump pitch and a per-bit energy for Foveros; I quote them as reported, and this section's argument holds for any sufficiently dense 3D boundary rather than depending on either number.

And the caution is 24.4 §11's. Cheap crossings do not make partitioning free. Every boundary still needs a contract, an owner, a reset scope, a recovery model and a verification story (25.10 §6) — the physics gets cheaper; the engineering does not.

9. The Low-Power Island

Intel describes the SoC tile as enabling useful low-power operation while the compute tile idles (§4 row 7, Level D — intent as stated, mechanisms unknown). That single architectural intent explains the partition better than any bandwidth argument.

ConsequenceWhy
the SoC tile must be able to run with compute powered downthat is the whole point
so it needs its own path to memory and I/Ootherwise waking compute is required to do anything
so display and media belong on itthey are exactly the "screen on, cores idle" workloads
and the NPU plausibly belongs with themsustained low-power inference is the same shape of workload
so every boundary it touches needs a power-state contract§10
and waking a neighbour becomes a protocol§11–§12

Three readings, and this is the chapter's central idea.

The aggregation is not miscellany — it is a power domain. NPU, media and display look unrelated by function and are tightly related by duty cycle: all three do sustained work while cores should be asleep. That is a partition criterion this curriculum has not used before, and it is a good one.

It also explains a boundary that bandwidth cannot. Nothing about traffic volume says "put the NPU with the display engine". Power state does (25.7 §6's scorecard is broader than its bandwidth row).

And it raises the hard question. If a tile can be powered down while its neighbours run, then "is my peer awake?" becomes a question every transaction implicitly asks — and §10 is what that demands.

10. Power-State Contracts

This is where the framework meets something new. Every contract in Modules 21–25 assumed both sides were powered.

RequirementFailure if absent
an unambiguous shared power state per boundarya request issued into a sleeping tile
who may initiate a wake, and who may refusetwo tiles each waiting for the other
a bounded wake latency, and a timeout with a named erroran unbounded stall indistinguishable from a hang (25.9 §5)
what state survives the sleep25.3 §14's retention question, in the power domain
whether outstanding obligations block entry to sleepan orphaned transaction, and the requester waits forever
an observable record of the last transition and its cause21.7 §16 — otherwise the bug is unobservable

Three readings.

Row 5 is the one that produces silent hangs. If a tile can enter a low-power state while it still owes a response, the requester waits indefinitely and the link looks perfectly healthy — exactly 25.9 §5's pattern where a trained link proves nothing about traffic, with power state as the new hiding place.

Row 4 is 25.3 §14's question in a new domain. Link recovery asked "does my obligation survive?" Power transition asks the same thing about a deeper state change — and the answer must be a stated contract rather than an implementation accident.

And row 3 is the debug requirement. A wake with no timeout and no named error is the worst possible failure mode: it looks like a performance problem for as long as anyone is willing to look. A bounded wake with E_WAKE_TIMEOUT is a five-minute diagnosis (25.9 §11).

11. Wrong RTL — Wake as an Assumption

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
// WRONG. ILLUSTRATIVE. A plausible mistake: the requester asserts a wake
// request and then issues, trusting that a wake "obviously" completes before
// the transaction arrives. Written by someone whose previous SoC had a single
// always-on power domain, where this was true.
always_ff @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    wake_req_q <= 1'b0;
    issue_q    <= 1'b0;
  end else begin
    if (need_peer && !wake_req_q) wake_req_q <= 1'b1;
 
    // BUG 1: issues on the REQUEST, never on an acknowledgement of readiness.
    // BUG 2: no timeout — if the peer never becomes ready, this waits forever
    //        with no error and no evidence.
    // BUG 3: nothing prevents the LOCAL side from dropping wake_req while a
    //        transaction is still outstanding at the peer.
    issue_q <= wake_req_q && txn_pending;
 
    if (!need_peer) wake_req_q <= 1'b0;   // BUG 3, concretely
  end
end

Architecture. A wake request and an issue, with no acknowledgement between them — a request-and-hope boundary.

State. Two flops. The missing state is the whole problem: there is no record of the peer's readiness, so the design cannot distinguish "asked" from "ready".

Event. issue_q rises one cycle after wake_req_q regardless of the peer.

Contract. It violates §10 rows 1, 3 and 5 simultaneously: no shared state, no bounded wake, no obligation guard.

Failure — the timeline.

CycleRequesterPeer tileObservable
0need_peer risesin low-power state
1wake_req_q = 1beginning to wakewake asserted
2issue_q = 1 — issuesstill wakinga transaction into a sleeping tile
3–40waits for a responsewakes, sees nothing pendinglink healthy, no error
41still waitingidlethe request was consumed by nothing
400still waitingidlea hang, with no error bit anywhere
need_peer clears elsewherewake_req_q drops with a transaction outstanding
peer re-enters low powerthe response can now never be produced

Root cause. A power-state boundary was treated as a data-flow boundary. valid && ready handshakes protect against a busy peer; they do not protect against an absent one (25.6 §9) — readiness to accept and being powered are different facts, and this RTL has only one signal for both.

DV/debug. The symptom is the worst kind: a hang with a healthy link, no error bit, and a peer that is idle and looks innocent. A 25.9 §12 counter walk finds it immediately — requests issued by the requester will exceed requests observed at the peer, and the first divergence is the cycle the peer was still waking.

12. Corrected — an Explicit Power Handshake

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
// CORRECT. ILLUSTRATIVE (§11). The power state becomes an explicit, bounded,
// observable protocol: request -> acknowledged-ready -> issue, with a timeout
// that produces a NAMED error, and an obligation guard that prevents sleep
// while anything is owed.
typedef enum logic [2:0] {
  PS_OFF, PS_WAKE_REQ, PS_READY, PS_ACTIVE, PS_SLEEP_REQ, PS_WAKE_FAIL
} pstate_e;
 
pstate_e     pstate_q;
logic [15:0] wake_timer_q;
logic [15:0] owed_q;            // outstanding obligations AT THE PEER
logic [2:0]  last_fail_cause_q;
logic        last_fail_valid_q;
 
always_ff @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    pstate_q          <= PS_OFF;
    wake_timer_q      <= '0;
    owed_q            <= '0;
    last_fail_valid_q <= 1'b0;
    last_fail_cause_q <= '0;
  end else begin
    // ONE signed next-state expression, so an issue and a completion in the
    // same cycle net correctly (25.6 §10, 26.1 §12).
    owed_q <= owed_q + 16'(issue_fire) - 16'(complete_fire);
 
    unique case (pstate_q)
      PS_OFF:      if (need_peer) begin
                     pstate_q     <= PS_WAKE_REQ;
                     wake_timer_q <= '0;
                   end
 
      // Bounded, and failure is NAMED rather than silent (§10 row 3).
      PS_WAKE_REQ: if (peer_ready) begin
                     pstate_q <= PS_READY;
                   end else if (wake_timer_q == WAKE_TIMEOUT) begin
                     pstate_q <= PS_WAKE_FAIL;
                     if (!last_fail_valid_q) begin      // sticky FIRST (21.7)
                       last_fail_valid_q <= 1'b1;
                       last_fail_cause_q <= CAUSE_WAKE_TIMEOUT;
                     end
                   end else begin
                     wake_timer_q <= wake_timer_q + 16'd1;
                   end
 
      PS_READY:    pstate_q <= PS_ACTIVE;                // issue permitted here
      PS_ACTIVE:   if (want_sleep) pstate_q <= PS_SLEEP_REQ;
 
      // The obligation guard. Sleep is NOT entered while anything is owed —
      // this is the row-5 failure of §10, made structurally impossible.
      PS_SLEEP_REQ: if (owed_q == '0)      pstate_q <= PS_OFF;
                    else if (!want_sleep)  pstate_q <= PS_ACTIVE;
 
      PS_WAKE_FAIL: if (diag_clear)        pstate_q <= PS_OFF;
      default:                             pstate_q <= PS_WAKE_FAIL;
    endcase
  end
end
 
// Issue is permitted ONLY from an acknowledged-ready state. This is the fix
// for §11's BUG 1, expressed as a property rather than as a comment.
// MANDATORY. English: no transaction is issued unless the peer has
// acknowledged readiness this cycle.
a_no_issue_unless_ready: assert property (
  @(posedge clk) disable iff (!rst_n)
    issue_fire |-> (pstate_q inside {PS_READY, PS_ACTIVE})
);
 
// MANDATORY. English: the boundary never enters a powered-down state while an
// obligation is outstanding at the peer. Catches §11's orphaned response.
a_no_sleep_while_owed: assert property (
  @(posedge clk) disable iff (!rst_n)
    (pstate_q == PS_OFF) |-> (owed_q == '0)
);
 
// MANDATORY. English: a wake attempt always terminates — either the peer
// becomes ready, or a NAMED failure is recorded. Catches the unbounded stall
// that §11's timeline ends in.
a_wake_terminates: assert property (
  @(posedge clk) disable iff (!rst_n)
    (pstate_q == PS_WAKE_REQ) |-> ##[1:WAKE_TIMEOUT+1]
      (pstate_q inside {PS_READY, PS_WAKE_FAIL})
);

Architecture. Six states, one timer, one obligation counter, one sticky first-failure record — the smallest structure that satisfies all six rows of §10.

State. pstate_q is the shared power state; owed_q is the obligation count at the peer, which is the number that makes row 5 enforceable rather than aspirational.

Event. Issue is permitted only from PS_READY/PS_ACTIVE. PS_SLEEP_REQ is a waiting state, not a transition — it is where the obligation guard lives.

Contract. WAKE_TIMEOUT must come from the peer's stated worst-case wake time (25.10 §6's versioned contract), not from measurement. A timeout tuned until it stops firing is a timeout that cannot detect the bug it exists for (21.6 §29).

Failure. The remaining risk is a mutual wake dependency: two tiles each in PS_WAKE_REQ waiting for the other. The timeout bounds it and names it — which is why §10 row 2 asks who may initiate, and why an architecture needs a wake ordering rather than a symmetric one.

DV/debug. last_fail_cause_q sticky-first (21.7 §14) and owed_q readable are the two facts that turn §11's 400-cycle mystery into a register read. CAUSE_WAKE_TIMEOUT plus a non-zero owed_q names both the failure and the boundary.

13. Illustrative — Making the Duty Cycle Observable

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
// ILLUSTRATIVE (§11). If the whole point of the partition is that compute can
// sleep while the SoC tile works (§9), then the architecture's PRIMARY success
// metric is a duty cycle — and it must be measurable in silicon, not inferred
// from a power meter.
localparam int N_DOMAIN = 4;                    // compute, gfx, soc, io
 
logic [47:0] awake_cycles_q  [N_DOMAIN];
logic [47:0] wake_events_q   [N_DOMAIN];
logic [31:0] wake_lat_max_q  [N_DOMAIN];
logic [47:0] blocked_sleep_q [N_DOMAIN];        // cycles held awake by owed_q
 
always_ff @(posedge clk or negedge rst_n) begin
  for (int d = 0; d < N_DOMAIN; d++) begin
    if (!rst_n || diag_clear) begin
      awake_cycles_q[d]  <= '0;
      wake_events_q[d]   <= '0;
      wake_lat_max_q[d]  <= '0;
      blocked_sleep_q[d] <= '0;
    end else begin
      if (domain_awake[d])   awake_cycles_q[d] <= awake_cycles_q[d] + 48'd1;
      if (wake_edge[d])      wake_events_q[d]  <= wake_events_q[d]  + 48'd1;
      if (wake_done[d] && (wake_latency[d] > wake_lat_max_q[d]))
        wake_lat_max_q[d] <= wake_latency[d];
      // The diagnostic that names §12's guard as the cause of lost sleep.
      if (want_sleep_d[d] && !domain_asleep[d]) blocked_sleep_q[d] <= blocked_sleep_q[d] + 48'd1;
    end
  end
end

Architecture. Four numbers per power domain: time awake, wake count, worst wake latency, and cycles that wanted sleep but could not have it.

State. Sixteen counters. Cheap, and they answer the only question this architecture's premise raises.

Event. blocked_sleep_q counts while sleep is requested and not achieved — which distinguishes "nothing wanted to sleep" from "something prevented it".

Contract. wake_lat_max is the number that validates or refutes WAKE_TIMEOUT (§12). A measured maximum near the timeout is a contract that is about to be violated in the field.

Failure. Without blocked_sleep_q, a residency regression looks like a software problem. With it, §12's obligation guard becomes visible as the cause — and then the question becomes why is something always owed, which is answerable.

DV/debug. wake_events high with awake_cycles low is thrash: waking and sleeping repeatedly, paying wake energy without doing work. That is a real product bug that no functional test fails, and it is invisible without these counters.

14. Why This Is Not a UCIe Deployment

Three statements, each bounded.

Meteor Lake's tile-to-tile interfaces are not established as UCIe (§3, §4). Intel's UCIe interoperability milestone is Pike Creek, described by Intel as the world's first UCIe interoperability test chip — Intel UCIe IP on Intel 3 with Synopsys UCIe IP on TSMC N3, at Intel Innovation 2023 (22.1 §4). A test chip and a proof point, with no production claim.

A chiplet product is not evidence of UCIe (22.1 §12). This architecture is a strong demonstration of disaggregation, and disaggregation predates the standard by years.

And Pike Creek is worth more than a product claim would be (22.1 §31). What UCIe promises is interoperability across vendors and process nodes (23.2 §9). Two independent IP implementations on two different companies' processes interoperating is a direct test of exactly that promise — which is a more meaningful data point about the standard than one vendor's internal tile boundary would be.

And the honest position on internal boundaries (23.2 §8): tiles designed together, by one company, on one schedule, in one package are precisely where co-design wins and a standard's decisive advantages are absent. A candidate who says that has understood the trade.

15. What the Public Record Cannot Tell You

Not knowable from what I reviewedFraming
the tile-to-tile protocol, format or credit scheme§3 — not public at this level
per-boundary latency and bandwidth26.1 §11's dependency-depth test needs it
how coherence is maintained across tiles26.1 §9's question, unanswered here
the actual wake latencies and residency behaviour§13 is what you would measure
which state survives a tile power transition§10 row 4 — the question to ask
the power-management firmware's ownership model25.10 §14
DFT and debug structures across the 3D boundary21.7
verified packaging parameters§4 rows 8–9 — secondary only

And the point stands from 26.1 §19: the framework tells you what to ask even where the answer is not public. Naming the state-retention question about a power boundary in a documented architecture is understanding the documentation does not contain.

16. Two Architectures, One Framework

Question26.1 — EPYCThis chapter — Meteor Lake
partition criterionreplicate compute; centralise I/Osplit by function and duty cycle
dies alike?identical CCDsall four differ
topologyhub-and-spoke, one hoptiles on a base die
packagingside-by-side3D
the hardest contractcoherent traffic across a spoke (26.1 §10)power state across a boundary (§10)
what it optimisescore scaling, yield, latency uniformitypower, node fit, independent evolution
scaling knobadd a spokenone
the standing riskthe hub is a shared resourcethe partition is product-defining
is it UCIe?no — Infinity Fabric / GMIno — Pike Creek is a test chip

Four readings, and this is Module 26's actual thesis.

There is no general chiplet architecture. Two of the industry's most sophisticated products reached opposite partitions — and both are right, because the pressures differ. A server part optimises core count and memory uniformity; a client part optimises power and battery. 25.7 §6's scorecard is the same; the inputs are not.

Row 5 is the most useful row in the table. The hardest contract is not the same in both. Coherent traffic on one; who is awake on the other. An engineer who assumes the hard problem is always bandwidth will miss the actual risk in half the architectures they see.

Row 9 is the row to keep saying out loud. Neither is established as a UCIe deployment — and that has not made either one less instructive. The framework reads architectures; it does not require them to use a particular link.

And the framework survived contact with both. Boundary contracts, ownership, dependency depth, retention across state change, observability, first-divergence debug — every one applied to both architectures without modification, which is the only real test a framework gets.

17. Common Misconceptions

"Meteor Lake uses UCIe." §3, §14: not established. Intel's UCIe interoperability milestone is Pike Creek, an interoperability test chip (22.1 §4).

"Chiplets means one design pattern." §16: EPYC replicates and centralises; Meteor Lake splits by function and duty cycle. Opposite partitions, both sound.

"Disaggregation is mainly about yield." §7, §9: yield is real (25.2 §4), but here the decisive criteria are process affinity per function and power.

"The SoC tile is where the leftovers went." §9: NPU, media and display share a duty cycle — sustained work while cores sleep. The aggregation is a power domain, not a junk drawer.

"3D packaging just makes assembly denser." §8: it changes what a crossing costs, which changes where you are willing to cut — a partitioning input, not an assembly detail.

"A valid && ready handshake protects the boundary." §11: it protects against a busy peer, not an absent one. Readiness to accept and being powered are different facts.

"Power management is a firmware concern." §10, §12: obligation-survival across a power transition is a hardware contractowed_q is why sleep is refusable at all.

"The secondary bump-pitch and pJ/bit numbers are established." §3, §4: Level D, attributed — and §8's argument is written not to depend on them.

18. Understanding Check

19. Summary

Five things.

Four dissimilar tiles on a base die (§5): compute, graphics, SoC, I/O — disaggregation by function, not replication, so there is no scaling knob and the partition is product-defining.

3D packaging is an architectural input (§8). Cheaper crossings let you cut where the function boundary is rather than where traffic is thin — and every boundary still needs a contract, an owner and a recovery model.

The SoC tile is a power domain, not a miscellany (§9). NPU, media and display share a duty cycle: sustained work while cores sleep.

Which makes the hardest contract here a power-state contract (§10–§12) — bounded wake, named timeout, and no sleep while an obligation is owed. 26.1's hardest contract was coherent traffic. They are not the same problem.

And neither architecture is established as a UCIe deployment (§14, §16) — which has not made either less instructive, because the framework reads architectures rather than links.