Files
FPGA-Neural/sim/memory_interface.vcd
T
micheleandClaude Sonnet 5 14c8d87194 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
2026-09-04 14:27:14 +02:00

1158 lines
8.8 KiB
Plaintext

$date
Fri Sep 4 14:26:02 2026
$end
$version
Icarus Verilog
$end
$timescale
1ps
$end
$scope module memory_interface_tb $end
$var wire 1 ! ready $end
$var wire 16 " rdata [15:0] $end
$var wire 1 # mem_wr $end
$var wire 16 $ mem_wdata [15:0] $end
$var wire 1 % mem_req $end
$var wire 1 & mem_ready $end
$var wire 16 ' mem_rdata [15:0] $end
$var wire 23 ( mem_addr [22:0] $end
$var parameter 32 ) ADDR_WIDTH $end
$var parameter 32 * DATA_WIDTH $end
$var reg 23 + addr [22:0] $end
$var reg 1 , clk $end
$var reg 1 - req $end
$var reg 1 . rst $end
$var reg 16 / wdata [15:0] $end
$var reg 1 0 wr $end
$scope module dut $end
$var wire 23 1 addr [22:0] $end
$var wire 1 , clk $end
$var wire 1 2 lb_n $end
$var wire 1 - req $end
$var wire 1 . rst $end
$var wire 1 3 ub_n $end
$var wire 16 4 wdata [15:0] $end
$var wire 1 0 wr $end
$var wire 1 & mem_ready $end
$var wire 16 5 mem_rdata [15:0] $end
$var parameter 32 6 ADDR_WIDTH $end
$var parameter 32 7 DATA_WIDTH $end
$var parameter 2 8 STATE_IDLE $end
$var parameter 2 9 STATE_WAIT $end
$var reg 23 : mem_addr [22:0] $end
$var reg 1 ; mem_lb_n $end
$var reg 1 % mem_req $end
$var reg 1 < mem_ub_n $end
$var reg 16 = mem_wdata [15:0] $end
$var reg 1 # mem_wr $end
$var reg 16 > rdata [15:0] $end
$var reg 1 ! ready $end
$var reg 2 ? state [1:0] $end
$upscope $end
$scope module memory $end
$var wire 23 @ addr [22:0] $end
$var wire 1 , clk $end
$var wire 1 % req $end
$var wire 1 . rst $end
$var wire 16 A wdata [15:0] $end
$var wire 1 # wr $end
$var parameter 32 B ADDR_WIDTH $end
$var parameter 32 C DATA_WIDTH $end
$var parameter 32 D DEPTH $end
$var parameter 32 E READ_LATENCY $end
$var reg 1 F busy $end
$var reg 23 G pending_addr [22:0] $end
$var reg 16 H pending_wdata [15:0] $end
$var reg 1 I pending_wr $end
$var reg 16 J rdata [15:0] $end
$var reg 1 & ready $end
$var integer 32 K delay_count [31:0] $end
$var integer 32 L i [31:0] $end
$upscope $end
$scope task read_mem $end
$var reg 23 M address [22:0] $end
$var reg 16 N expected [15:0] $end
$var reg 16 O received [15:0] $end
$upscope $end
$scope task write_mem $end
$var reg 23 P address [22:0] $end
$var reg 16 Q data [15:0] $end
$upscope $end
$upscope $end
$enddefinitions $end
$comment Show the parameter values. $end
$dumpall
b10 E
b1000000000000 D
b10000 C
b10111 B
b1 9
b0 8
b10000 7
b10111 6
b10000 *
b10111 )
$end
#0
$dumpvars
bx Q
bx P
bx O
bx N
bx M
bx L
bx K
bx J
xI
bx H
bx G
xF
bx A
bx @
bx ?
bx >
bx =
x<
x;
bx :
bx 5
b0 4
z3
z2
b0 1
00
b0 /
1.
0-
0,
b0 +
bx (
bx '
x&
x%
bx $
x#
bx "
x!
$end
#5000
b0 $
b0 =
b0 A
b0 (
b0 :
b0 @
0#
0%
1<
1;
0!
b0 "
b0 >
b0 ?
b0 K
b0 H
b0 G
0I
0F
0&
b0 '
b0 5
b0 J
b1000000000000 L
1,
#10000
0,
#15000
b1000000000000 L
1,
#20000
0,
#25000
b1001000110100 Q
b1 P
0.
1,
#30000
0,
#35000
1-
10
b1001000110100 /
b1001000110100 4
b1 +
b1 1
1,
#40000
0,
#45000
0-
b1 ?
1%
z<
z;
b1001000110100 $
b1001000110100 =
b1001000110100 A
b1 (
b1 :
b1 @
1#
1,
#50000
0,
#55000
b10 K
b1001000110100 H
b1 G
1I
1F
0%
1,
#60000
0,
#65000
b1 K
1,
#70000
0,
#75000
b0 K
1,
#80000
0,
#85000
0F
1&
1,
#90000
0,
#95000
0&
b0 ?
1!
1,
#100000
0,
#105000
0!
b1001000110100 N
b1 M
1,
#110000
0,
#115000
1-
00
1,
#120000
0,
#125000
0-
b1 ?
1%
0#
1,
#130000
0,
#135000
b10 K
0I
1F
0%
1,
#140000
0,
#145000
b1 K
1,
#150000
0,
#155000
b0 K
1,
#160000
0,
#165000
0F
1&
b1001000110100 '
b1001000110100 5
b1001000110100 J
1,
#170000
0,
#175000
b1001000110100 O
0&
b0 ?
1!
b1001000110100 "
b1001000110100 >
1,
#180000
0,
#185000
0!
b1010101111001101 Q
b10000 P
1,
#190000
0,
#195000
1-
10
b1010101111001101 /
b1010101111001101 4
b10000 +
b10000 1
1,
#200000
0,
#205000
0-
b1 ?
1%
b1010101111001101 $
b1010101111001101 =
b1010101111001101 A
b10000 (
b10000 :
b10000 @
1#
1,
#210000
0,
#215000
b10 K
b1010101111001101 H
b10000 G
1I
1F
0%
1,
#220000
0,
#225000
b1 K
1,
#230000
0,
#235000
b0 K
1,
#240000
0,
#245000
0F
1&
1,
#250000
0,
#255000
0&
b0 ?
1!
1,
#260000
0,
#265000
0!
b1010101111001101 N
b10000 M
1,
#270000
0,
#275000
1-
00
1,
#280000
0,
#285000
0-
b1 ?
1%
0#
1,
#290000
0,
#295000
b10 K
0I
1F
0%
1,
#300000
0,
#305000
b1 K
1,
#310000
0,
#315000
b0 K
1,
#320000
0,
#325000
0F
1&
b1010101111001101 '
b1010101111001101 5
b1010101111001101 J
1,
#330000
0,
#335000
b1010101111001101 O
0&
b0 ?
1!
b1010101111001101 "
b1010101111001101 >
1,
#340000
0,
#345000
0!
b101010110101010 Q
b100000000 P
1,
#350000
0,
#355000
1-
10
b101010110101010 /
b101010110101010 4
b100000000 +
b100000000 1
1,
#360000
0,
#365000
0-
b1 ?
1%
b101010110101010 $
b101010110101010 =
b101010110101010 A
b100000000 (
b100000000 :
b100000000 @
1#
1,
#370000
0,
#375000
b10 K
b101010110101010 H
b100000000 G
1I
1F
0%
1,
#380000
0,
#385000
b1 K
1,
#390000
0,
#395000
b0 K
1,
#400000
0,
#405000
0F
1&
1,
#410000
0,
#415000
0&
b0 ?
1!
1,
#420000
0,
#425000
0!
b101010110101010 N
b100000000 M
1,
#430000
0,
#435000
1-
00
1,
#440000
0,
#445000
0-
b1 ?
1%
0#
1,
#450000
0,
#455000
b10 K
0I
1F
0%
1,
#460000
0,
#465000
b1 K
1,
#470000
0,
#475000
b0 K
1,
#480000
0,
#485000
0F
1&
b101010110101010 '
b101010110101010 5
b101010110101010 J
1,
#490000
0,
#495000
b101010110101010 O
0&
b0 ?
1!
b101010110101010 "
b101010110101010 >
1,
#500000
0,
#505000
0!
b1 Q
b1000000000 P
1,
#510000
0,
#515000
1-
10
b1 /
b1 4
b1000000000 +
b1000000000 1
1,
#520000
0,
#525000
0-
b1 ?
1%
b1 $
b1 =
b1 A
b1000000000 (
b1000000000 :
b1000000000 @
1#
1,
#530000
0,
#535000
b10 K
b1 H
b1000000000 G
1I
1F
0%
1,
#540000
0,
#545000
b1 K
1,
#550000
0,
#555000
b0 K
1,
#560000
0,
#565000
0F
1&
1,
#570000
0,
#575000
0&
b0 ?
1!
1,
#580000
0,
#585000
0!
b10 Q
b1000000001 P
1,
#590000
0,
#595000
1-
b10 /
b10 4
b1000000001 +
b1000000001 1
1,
#600000
0,
#605000
0-
b1 ?
1%
b10 $
b10 =
b10 A
b1000000001 (
b1000000001 :
b1000000001 @
1,
#610000
0,
#615000
b10 K
b10 H
b1000000001 G
1F
0%
1,
#620000
0,
#625000
b1 K
1,
#630000
0,
#635000
b0 K
1,
#640000
0,
#645000
0F
1&
1,
#650000
0,
#655000
0&
b0 ?
1!
1,
#660000
0,
#665000
0!
b11 Q
b1000000010 P
1,
#670000
0,
#675000
1-
b11 /
b11 4
b1000000010 +
b1000000010 1
1,
#680000
0,
#685000
0-
b1 ?
1%
b11 $
b11 =
b11 A
b1000000010 (
b1000000010 :
b1000000010 @
1,
#690000
0,
#695000
b10 K
b11 H
b1000000010 G
1F
0%
1,
#700000
0,
#705000
b1 K
1,
#710000
0,
#715000
b0 K
1,
#720000
0,
#725000
0F
1&
1,
#730000
0,
#735000
0&
b0 ?
1!
1,
#740000
0,
#745000
0!
b1 N
b1000000000 M
1,
#750000
0,
#755000
1-
00
b1000000000 +
b1000000000 1
1,
#760000
0,
#765000
0-
b1 ?
1%
b1000000000 (
b1000000000 :
b1000000000 @
0#
1,
#770000
0,
#775000
b10 K
b1000000000 G
0I
1F
0%
1,
#780000
0,
#785000
b1 K
1,
#790000
0,
#795000
b0 K
1,
#800000
0,
#805000
0F
1&
b1 '
b1 5
b1 J
1,
#810000
0,
#815000
b1 O
0&
b0 ?
1!
b1 "
b1 >
1,
#820000
0,
#825000
0!
b10 N
b1000000001 M
1,
#830000
0,
#835000
1-
b1000000001 +
b1000000001 1
1,
#840000
0,
#845000
0-
b1 ?
1%
b1000000001 (
b1000000001 :
b1000000001 @
1,
#850000
0,
#855000
b10 K
b1000000001 G
1F
0%
1,
#860000
0,
#865000
b1 K
1,
#870000
0,
#875000
b0 K
1,
#880000
0,
#885000
0F
1&
b10 '
b10 5
b10 J
1,
#890000
0,
#895000
b10 O
0&
b0 ?
1!
b10 "
b10 >
1,
#900000
0,
#905000
0!
b11 N
b1000000010 M
1,
#910000
0,
#915000
1-
b1000000010 +
b1000000010 1
1,
#920000
0,
#925000
0-
b1 ?
1%
b1000000010 (
b1000000010 :
b1000000010 @
1,
#930000
0,
#935000
b10 K
b1000000010 G
1F
0%
1,
#940000
0,
#945000
b1 K
1,
#950000
0,
#955000
b0 K
1,
#960000
0,
#965000
0F
1&
b11 '
b11 5
b11 J
1,
#970000
0,
#975000
b11 O
0&
b0 ?
1!
b11 "
b11 >
1,
#980000
0,
#985000
0!
b0 Q
b1100000000 P
1,
#990000
0,
#995000
1-
10
b0 /
b0 4
b1100000000 +
b1100000000 1
1,
#1000000
0,
#1005000
0-
b1 ?
1%
b0 $
b0 =
b0 A
b1100000000 (
b1100000000 :
b1100000000 @
1#
1,
#1010000
0,
#1015000
b10 K
b0 H
b1100000000 G
1I
1F
0%
1,
#1020000
0,
#1025000
b1 K
1,
#1030000
0,
#1035000
b0 K
1,
#1040000
0,
#1045000
0F
1&
1,
#1050000
0,
#1055000
0&
b0 ?
1!
1,
#1060000
0,
#1065000
0!
b0 N
b1100000000 M
1,
#1070000
0,
#1075000
1-
00
1,
#1080000
0,
#1085000
0-
b1 ?
1%
0#
1,
#1090000
0,
#1095000
b10 K
0I
1F
0%
1,
#1100000
0,
#1105000
b1 K
1,
#1110000
0,
#1115000
b0 K
1,
#1120000
0,
#1125000
0F
1&
b0 '
b0 5
b0 J
1,
#1130000
0,
#1135000
b0 O
0&
b0 ?
1!
b0 "
b0 >
1,
#1140000
0,
#1145000
0!
b1111111111111111 Q
b1100000001 P
1,
#1150000
0,
#1155000
1-
10
b1111111111111111 /
b1111111111111111 4
b1100000001 +
b1100000001 1
1,
#1160000
0,
#1165000
0-
b1 ?
1%
b1111111111111111 $
b1111111111111111 =
b1111111111111111 A
b1100000001 (
b1100000001 :
b1100000001 @
1#
1,
#1170000
0,
#1175000
b10 K
b1111111111111111 H
b1100000001 G
1I
1F
0%
1,
#1180000
0,
#1185000
b1 K
1,
#1190000
0,
#1195000
b0 K
1,
#1200000
0,
#1205000
0F
1&
1,
#1210000
0,
#1215000
0&
b0 ?
1!
1,
#1220000
0,
#1225000
0!
b1111111111111111 N
b1100000001 M
1,
#1230000
0,
#1235000
1-
00
1,
#1240000
0,
#1245000
0-
b1 ?
1%
0#
1,
#1250000
0,
#1255000
b10 K
0I
1F
0%
1,
#1260000
0,
#1265000
b1 K
1,
#1270000
0,
#1275000
b0 K
1,
#1280000
0,
#1285000
0F
1&
b1111111111111111 '
b1111111111111111 5
b1111111111111111 J
1,
#1290000
0,
#1295000
b1111111111111111 O
0&
b0 ?
1!
b1111111111111111 "
b1111111111111111 >
1,
#1300000
0,
#1305000
0!
1,