Kernel ROM chiplet
The kernel ROM enables executing predefined kernel procedures.
These procedures are always executed in the root context and can only be accessed by a SYSCALL operation.
The chiplet tracks and enforces correctness of all kernel procedure calls as well as maintaining a list of all the procedures defined for the kernel, whether they are executed or not.
More background about Miden VM execution contexts can be found here.
Kernel ROM trace
The kernel ROM table consists of five columns, with exactly one row per declared kernel procedure. The following example table shows the execution trace for three procedures with digests , called 1, 2, and 0 times respectively.
| 1 | ||||
| 2 | ||||
| 0 |
Column meanings:
- is the CALL-label multiplicity — the number of times the procedure was invoked by a
SYSCALL. It may be zero for procedures declared in the kernel but never called. - contain the digest of the kernel procedure.
Main-trace constraints
The kernel ROM chiplet has no main-trace shape constraints under the all-LogUp layout. Earlier designs carried a binary "first-row-of-block" selector, a digest-contiguity rule, and an entry-row anchor to shape the trace for a permutation argument. LogUp replaces those with multiset equality under a random challenge , so any prover assignment to that balances the chiplets bus is sound; no extra shape constraints are required.
Chiplets bus constraints
The kernel ROM chiplet emits two fractions on the chiplets bus per active row, gated by the selector flag . Let
denote the two encoded bus messages for a row's digest. Here and are the unique operation labels, and are challenges received from the verifier.
The chiplet contributes to via
- The INIT term removes exactly one fraction per declared procedure. It is balanced by the public-input boundary term the verifier injects on (one add per kernel procedure digest read from public inputs). This anchors every chiplet row to a declared procedure: a forged row would leave an unmatched INIT remove.
- The CALL term contributes fractions. Each
SYSCALLin the decoder emits one matching remove on . Bus balance forces to equal the true syscall count for that procedure.
The full set of constraints applied to (including the public-input boundary term for INIT) is described in the chiplets bus constraints.
By using the bus this way, the verifier only learns which procedures can be invoked, not how often they were called — the multiplicity is a private witness that only reaches the verifier through the bus balance.