test: certify runtime width early-termination (C.2), document BUG-003/004

n_inputs_real/n_neurons_real early termination for valid values is
certified real: a "poison" region (data that would saturate the result
if read past the claimed limit) confirms no over-read, cycle counts
scale proportionally. n_inputs_real non-multiple-of-PARALLEL at runtime
matches the documented silent-truncation risk exactly.

n_inputs_real=0 / n_neurons_real=0 (BUG-003/004): confirmed incorrect
behavior in every repetition, but the exact triggering mechanism was
NOT fully isolated -- nearly-identical repeated tests produced
different symptoms (clean hang vs. silently processing the full build
width vs. a third cycle count matching neither). Reported in full,
including the inconsistency itself, rather than picking the cleanest
result. The two new permanent testbenches reflect this honestly: the
solid early-termination checks are hard assertions, the n_*_real=0
probe is deliberately observe-only given the non-deterministic result.

Full regression: 38/38 real tests pass.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
This commit is contained in:
2026-09-04 14:27:14 +02:00
co-authored by Claude Sonnet 5
parent 20b0b1f4c0
commit 14c8d87194
22 changed files with 537 additions and 17 deletions
+34
View File
@@ -1236,3 +1236,37 @@ integrazione nel top level (F5), verifica consolidata e misure reali (F6).
l'header di `neuron_parallel.v` dichiara esplicitamente che `n_inputs_real=0` riproduce lo
stesso rischio di BUG-002 "per responsabilità del chiamante" — da verificare se questo
claim tiene, con lo stesso rigore.
## Campagna di ri-certificazione — C.2: Larghezza runtime (2026-09-04)
- **Terminazione anticipata `n_inputs_real`/`n_neurons_real` per valori validi: CERTIFICATA**
con tecnica "regione veleno" (dati che saturerebbero il risultato se letti oltre il limite
reale) — nessun over-read confermato, cicli scalano proporzionalmente in entrambi i casi.
- **`n_inputs_real` non multiplo di PARALLEL a runtime: CERTIFICATO** — tronca
silenziosamente come documentato (`y=16` invece di 17 elementi), non un hang. Un primo
tentativo con uno script diverso da quello già provato aveva mostrato un falso hang,
corretto riproducendo con lo schema affidabile prima di fidarmene.
- **`n_inputs_real=0` a runtime (BUG-003) e `n_neurons_real=0` (BUG-004): comportamento
scorretto confermato ma NON pienamente caratterizzato** — la parte più impegnativa di
questa fase. Ripetizioni quasi identiche dello stesso test hanno prodotto risultati
DIVERSI (a volte hang, a volte limite ignorato con esito "processa tutto", a volte un
terzo valore di cicli che non corrisponde né a zero né al totale) — non ho isolato la
condizione esatta che decide l'esito entro un tempo ragionevole, ed è stato riportato per
intero invece di scegliere il risultato più pulito o nascondere l'incoerenza.
Analisi aritmetica (non confermata come spiegazione completa): la larghezza del contatore
di loop (`GROUP_INDEX_WIDTH`/`NEURON_INDEX_WIDTH`, dimensionata a compile-time sul massimo
di build) determina se il valore di avvolgimento per "reale=0" è raggiungibile dal
contatore (nessun hang, ma limite ignorato) o irraggiungibile (hang) — coerente con
l'osservazione ma non root-caused bit-per-bit come per BUG-002. **Importante**: in ogni
singola ripetizione osservata, il risultato era comunque SBAGLIATO in un modo o nell'altro
— non è mai stato "corretto per caso".
- **4 nuovi testbench permanenti**: `sim/neuron_parallel_bug003_n_inputs_real_zero_tb.v`
(TESTS 1-3 certificano la terminazione anticipata, TEST 4 è deliberatamente
observe-only, non un'asserzione, dato il comportamento non deterministico riscontrato),
`sim/neuron_memory_bug004_n_neurons_real_zero_tb.v` (stesso schema).
- **Regressione completa**: 38/38 test reali PASS (36 precedenti + 2 nuovi), 0 regressioni.
- **Deliverable**: `docs/validation/02-runtime-width.md` (con la registrazione completa e
non filtrata di ogni tentativo per BUG-003, non solo il verdetto finale),
`docs/validation/bugs.md` aggiornato con BUG-003 e BUG-004.
- **Prossimo passo**: C.3 (sottosistema memoria — `int8_memory_access`, `memory_interface`,
`psram_controller`).