P128 keeps P127’s scheduler ready-mask counters and adds a second
shadow model: tiny per-class queues for integer, memory, and control
work. Each queue has capacity 4. The real core still runs the same
in-order FSM.
check
result
Verilator build
PASS
BusyBox shell workload reaches P128-FILE-OK
PASS
Queue-lifetime counters emitted
PASS
Hardened layout
NOT RUN
queue counter
integer
memory
control
enqueues
9,815,302
3,250,159
6,287,452
drains
9,815,302
3,250,096
6,287,452
full drops
0
0
0
max occupancy
1
1
1
queue ready-mask counter
value
samples
43,664,857
single ready
43,664,857
dual ready
0
triple ready
0
integer ready
21,102,727
memory ready
9,987,226
control ready
12,574,904
two-issue opportunity cycles
0
three-issue opportunity cycles
0
trap flush clears
62
metric
P127
P128
post-load cycles
218,572,787
218,746,401
shell window cycles
64,621,346
64,776,985
retired instructions
86,294,693
86,351,273
CPI
2.5329
2.5332
S_FETCH cycles
7,625,156
7,627,087
S_MEM cycles
27,732,094
27,750,591
This is a sharper negative result than P127. The queues accept and
drain millions of records, but every class reaches only occupancy 1 and
no sampled cycle has two classes ready. Adding capacity did not create
coexistence because modeled arrival and one-lane backend service are
still coupled to the serialized backend.
P129 should therefore model scheduler arrival and service as separate
contracts before any real multi-issue selector.