CARES senior project · weekly report · 2026-10-31 to 2026-11-06

CARES Weekly Report, Nov 6

Goal of the project: run the ReXNet-150 audio classifier on the FINALE accelerator chip design, on the DE10-Pro FPGA board. This week the old 2022 demo ran on the board for the first time, the chip simulation became about 470 times faster, and the first 26 ReXNet operations (the stem and blocks f0 to f3) were tested one by one. Ten bugs were found and fixed; six problems remain.

This week in numbers

32.5 fps
2022 MobileNetV2-SSD demo on the FPGA board, 500 images
78 min10 s
simulating the stem convolution, before and after
716 / 26
ReXNet operations within ±1 of the correct output: 7 before this week's fixes, 16 after (8 of them need this week's chip-design fixes)
10 fixed
bugs: 6 in our firmware and scripts, 4 in the chip design

What was done

The 26 operations today

Stage 1: tested (26 operations) Not tested yet (135 operations) Input audio image Stem f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 f16 Pool Class. Output channels Image size Squeeze-excite Shortcut add 48 24 41 58 75 92 108 125 142 159 179 193 210 226 243 260 277 1920 1920 2 224×224 112×112 56×56 28×28 14×14 7×7 1×1 2 classes
Where the tested operations sit in the whole network: each small square is one of ReXNet-150's 161 chip operations, left to right in data-flow order. Grey squares are not tested yet. The order inside each tested block, with the side paths, is drawn in the ReXNet-150 Datapath Map.

Why stage 1 stops at block f3

The stem and blocks f0 to f3 already contain every kind of operation in the network and its largest images (112×112, 56×56). Later blocks only repeat these kinds at smaller sizes, and their firmware wraps each block in one call that must be split before testing.

1 · Passed before this week's fixes 2 · Passes after firmware/script fixes 3 · Passes after the multiply fix 4 · Passes after the sigmoid fix 5 · Not solved Not tested yet
ClassWhat it needsOperationsShare of 26
1 · passed beforeWithin ±1 with the inherited chip design plus the October memory-transfer patch. This week's faster test-bench memory changed no result, only the speed.00 05 10 16 21 22 25 (7)26.9 %
2 · firmware/script fixOur firmware/script fix alone (bug 2, average scale and offset). No chip-design change.20 (1)3.8 %
3 · multiply fixClass-2 fixes (bug 1 multiply settings, bug 5 block spacing) plus chip fixes 7–9. Errors 192 / 2,733 / 1,052 / 695 bytes, all ±1.02 07 12 18 (4)15.4 %
4 · sigmoid fixClass-2 fixes (bug 3 send each block twice, bug 4 table switch) plus chip fix 10. Real channels ±1; padding channels show 128 instead of 0 by design (the input padding is sigmoid(0)) and are discarded.06 11 17 23 (4)15.4 %
5 · not solvedBugs 11–13, 15 and 16 below. Depthwise (03 08 13 19) and wide 1×1 conv (04 09 14) are parked after two debug rounds.01 03 04 08 09 13 14 15 19 24 (10)38.5 %
not tested yetOutside stage 1. Never simulated.blocks f4 to f16, pool, classifier (135)—

Classes 3 and 4 were each tested with only their own chip fix; the multiply and sigmoid fixes have not yet been tested together in one design.

All results are from simulation. No ReXNet operation has run on the FPGA board yet.

stem
00
conv
01
sigmoid
02
multiply
f0
03
depthwise
04
1×1 conv
f1
05
conv
06
sigmoid
07
multiply
08
depthwise
09
1×1 conv
f2
10
conv
11
sigmoid
12
multiply
13
depthwise
14
1×1 conv
15
add
f3
16
conv
17
sigmoid
18
multiply
19
depthwise
20
average
21
conv
22
conv
23
sigmoid
24
multiply
25
1×1 conv

An operation is one step the chip runs on its own. One ReXNet layer can need several: the stem is a convolution (00) followed by a SiLU activation, which the model file stores as a sigmoid (01) and a multiply (02). An operation passes when every output byte is within ±1 of the correct answer, which is the original model run on a PC (±1 is normal rounding). Each operation is tested alone, starting from the correct input; errors adding up across operations are not tested yet.

Bugs found this week

#BugEffectStatus
In our firmware and test scripts
1Multiply settings written one slot off (02 07 12 18)Output scale was 0; every output the same valuefixed
2Average operation: wrong scale and offset formulaOutputs wrong by up to 255fixed operation 20 passes
3Sigmoid unit waits for two inputs (copied from the two-input units)Simulation frozeworked around firmware sends each block twice
4Sigmoid table exists only with a compile switch that is offUndefined outputsfixed in sim must also be on in the FPGA build
5Data blocks placed 1 MB apart, some are 2 MBBlocks overwrote each otherfixed overlap now checked automatically
6First convolution of block f3 (16) read the wrong memory addressRead old data. Only in the whole-network program, not in these one-operation testsfixed
In the chip design, each proven with a Python copy of the circuit that reproduces the simulator's output byte for byte
7Multiply unit: each channel's result written over all 32 channels4 multiply operations 45–86 % wrong; after the fix at most 0.14 % wrong, all ±1fixed
8Multiply unit: negative numbers shifted as if positivefixed
9Multiply unit: 20-bit register too small (needs 25)fixed
10Sigmoid unit: "too large" check reads one bit, not the whole numberLarge inputs wrapped around; after the fix 4 sigmoid operations within ±1fixed
Not solved
11Depthwise convolution run alone outputs only its bias (03, 08, 13, 19)Likely addresses its input buffer past 256 slots; the 2022 demo never ran it aloneparked
121×1 convolution writes nothing when output is 56 or 112 wide (04, 09, 14)Undefined values in the multiply-add circuit above width 28parked
13Stem sigmoid needs an input scale above 1 (01)The chip's scale format only holds values below 1open
14Sigmoid unit: proper chip fix so one input is enough (removes the bug 3 workaround)One attempt moved the freeze, did not remove itopen
15Add operation (15): errors up to 8, 21,504 bytes unwrittenThe errors: our correct answer is taken after the next step (a concatenation), which uses a different scale. The missing bytes: not explainedopen
16Second multiply in f3 (24) freezesControl processor stops at the third data loadopen

Decisions needed

  1. When to rebuild the FPGA image with all chip fixes (bugs 7–10 and the sigmoid table switch of bug 4). A rebuild takes about 6 h on the lab PC. The Nov 5 rebuild has only the October memory-transfer fix.
  2. Ask the previous student how standalone depthwise convolution was meant to work (bug 11, parked)?

Plan for next week (proposed)