P131 takes the first real step toward breaking up top.sv: a new
p131_dispatch_queue_module3 owns the shadow queue state internally and
exports the same valid / ready / fire observations that P130
computed around local core registers.
check
result
Verilator build
PASS
BusyBox shell workload reaches P131-FILE-OK
PASS
Dispatch queue module counters emitted
PASS
Hardened layout
NOT RUN
module counter
value
samples
64,676,692
arrival-fire cycles
22,634,431
service-fire cycles
22,634,358
backpressure cycles
0
dual-ready cycles
0
triple-ready cycles
0
flush clears
72
per-class counter
integer
memory
control
arrival fires
13,086,378
3,242,636
6,305,417
service fires
13,086,378
3,242,563
6,305,417
max occupancy
1
1
1
count at end
0
1
0
metric
P130
P131
post-load cycles
218,446,005
218,215,879
shell window cycles
64,551,556
64,299,031
retired instructions
86,248,132
86,172,041
CPI
2.5328
2.5323
S_FETCH cycles
7,620,558
7,618,031
S_MEM cycles
27,709,660
27,681,021
This is not a speedup claim because the new queue is shadow-only. The
useful result is structural: the module-owned state exactly agrees with
the P130-style contract helper on fire counts and backpressure in the
same shell run.
That gives us a repeatable top.sv refactor rule: move one state
cluster into one small module, keep the older counters for one rung, run
BusyBox, compare, then decide whether to delete the old local state or
make the module active.