Files
FPGA-Neural/hardware/v2/logs/timing.log
T
micheleandClaude Sonnet 5 77baa8fc16 feat(v2): M7 Dataflow Core - full M1-M6 integration, wake-up loop closed end-to-end
dataflow_core.v integrates dependency_manager (M6) -> neural_director
(M5) -> N_SLOTS x (memory_manager (M4) + neural_processor (M1)) for
the first time. A slot's completion (via neural_director's new
slot_node_id tracking, an additive port) feeds back as a
producer_done event to dependency_manager, waking up any node that
depended on it - closing the dataflow loop without external glue.

Verified end-to-end (Verilator) on a 3-node DAG: two independent
nodes plus a third depending on both, confirmed to dispatch only
after both genuinely complete via real neural_processor computation.
4/4 PASS.

Real synthesis + nextpnr-ecp5 P&R via a synthesis-only timing harness
(bare per-slot backend ports exceed the LFE5U-45F's TRELLIS_IO
budget, same pattern as ERR-0005): N_SLOTS=2 -> 165.15 MHz,
N_SLOTS=4 -> 133.19 MHz, both PASS at 80MHz, 0 synthesis problems.

Scope explicitly deferred to M8 (DEC-0009): M3's BRAM buffers not
wired in yet, per-slot Memory Backend Interface ports not arbitrated
to one shared PSRAM master yet - both need real measured data before
committing to a design, not guessed at here.

Logged: simulation/synthesis/timing/benchmark/decisions (DEC-0009)/
experiments (EXP-0008)/errors (ERR-0007, a Yosys chparam-ordering
build quirk, not an RTL bug)/development.log, ROADMAP.md updated.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013xXuuRUWZScuo1DeYJxs3v
2026-09-05 15:05:28 +02:00

68 lines
3.5 KiB
Plaintext

# V2 timing log -- solo append, mai troncato/sovrascritto (vedi README.md)
# Nessuna entry ancora -- popolato incrementalmente man mano che avanza lo sviluppo V2.
[2026-09-05] EXP-0001 -- neural_processor (P_IN=8, ACC_WIDTH=32)
nextpnr-ecp5 --45k --package CABGA381 --speed 8 --freq 80
--lpf-allow-unconstrained
Fmax: 183.12 MHz -- PASS at 80 MHz (real place&route measurement)
Critical path: job_ready -> TRELLIS_IO output pad (i.e. the design's
own logic is NOT the bottleneck at this Fmax -- an unconstrained
output pin dominates; a real system-level Fmax will differ once
this signal is consumed on-chip instead of driven to a pad in
isolation). Log: hardware/v2/synthesis/neural_processor_p8/nextpnr.log
WNS/TNS: not reported by this nextpnr version in this invocation.
[2026-09-05] EXP-0002 -- neural_processor (P_IN=8, ACC_WIDTH=24)
Same command as above, ACC_WIDTH=24 build.
Fmax: 176.21 MHz -- PASS at 80 MHz (real place&route measurement)
Delta vs ACC_WIDTH=32: -6.91 MHz (-3.8%) despite FEWER resources --
attributed to placement noise, not a real architectural effect
(no seed sweep run to confirm either way -- see experiments.log
EXP-0002 and benchmark.log). Log: hardware/v2/synthesis/
neural_processor_p8_acc24/nextpnr.log
[2026-09-05] EXP-0003 -- N_PROCESSORS sweep (P_IN=8), real nextpnr-ecp5
--45k --package CABGA381 --speed 8 --freq 80 --lpf-allow-unconstrained
N=1: Fmax=159.11 MHz PASS MULT18X18D 8/72 (11%)
N=2: Fmax=149.59 MHz PASS MULT18X18D 16/72 (22%)
N=4: Fmax=151.01 MHz PASS MULT18X18D 32/72 (44%)
N=8: Fmax=134.70 MHz PASS MULT18X18D 64/72 (88%)
TRELLIS_IO stays at 18/245 (7%) throughout (harness has only
clk/rst/seed/checksum as real pins, by design -- see ERR-0005).
See decisions.log DEC-0005: DSP, not Fmax or LUT/FF, is the resource
that will first prevent scaling N_PROCESSORS further at P_IN=8.
[2026-09-05] EXP-0004 -- default-depth buffer configs, real nextpnr-ecp5
activation_buffer (D=4096): Fmax=325.20 MHz PASS
weight_buffer (D=512): Fmax=339.67 MHz PASS
result_buffer (D=4096): Fmax=325.20 MHz PASS
All far above the 80MHz target -- buffers are not a timing concern in
isolation at these depths.
[2026-09-05] EXP-0005 -- memory_manager + prefetch_engine (via
harness_memory_manager.v, see errors.log ERR-0005 for why a harness
was needed), real nextpnr-ecp5 --45k --package CABGA381 --speed 8
--freq 80 --lpf-allow-unconstrained
Fmax: 165.86 MHz -- PASS at 80MHz (real place&route measurement)
[2026-09-05] EXP-0006 -- neural_director (via harness_neural_director.v,
see errors.log ERR-0005 for why), real nextpnr-ecp5 --45k --package
CABGA381 --speed 8 --freq 80 --lpf-allow-unconstrained
Fmax: 250.50 MHz -- PASS at 80MHz (real place&route measurement)
[2026-09-05] EXP-0007 -- dependency_manager (N_NODES=16, standalone,
no harness needed), real nextpnr-ecp5 --45k --package CABGA381
--speed 8 --freq 80 --lpf-allow-unconstrained
Fmax: 155.30 MHz -- PASS at 80MHz (real place&route measurement)
[2026-09-05] EXP-0008 -- dataflow_core (via harness_dataflow_core.v,
see errors.log ERR-0005 for why a harness was needed), real
nextpnr-ecp5 --45k --package CABGA381 --speed 8 --freq 80
--lpf-allow-unconstrained
N_SLOTS=2: Fmax = 165.15 MHz -- PASS at 80MHz (real place&route)
N_SLOTS=4: Fmax = 133.19 MHz -- PASS at 80MHz (real place&route)
Fmax drops as N_SLOTS grows (more concurrent memory_manager+
neural_processor instances competing for the same routing fabric
around the shared neural_director/dependency_manager hub) -- both
configs still clear the 80MHz target with real margin.