A student measured the following after integrating the accelerator:
Conv2D SW: 3,200,000 cycles
Conv2D HW: 960,000 cycles (predicted: 820,000)
FC SW: 185,000 cycles
FC HW: 185,000 cycles (not accelerated)
Total SW: 3,501,000 cycles
Total HW: 1,261,000 cycles
Questions (10 min):
Expected: (1) 3200K/960K ≈ 3.3× (below 4× — due to weight-loading overhead + arbiter conflicts). (2) 3501K/1261K ≈ 2.8× system speedup. (3) Bus transactions for weight loading; DMEM arbiter stalls during CPU outer-loop access. (4) FC: 185K/3.3× ≈ 56K → total ≈ 1,016K + 56K = 1,072K → ~3.3× system speedup.
If act3_sw[i] != act3_hw[i], debug systematically:
done assert?The bit-exact match requirement has no tolerance. Even one misclassified keyword means the requantization is wrong.
After integration, run make load on the full system:
Info: Device utilisation:
SLICE: 1891/4608 (41%) ← was 27% in Project 2
LUT4: 3102/9216 (34%)
DFF: 718/6480 (11%)
BRAM: 6/26 (23%) ← +2 for weight buffer + act buffer
DSP: 5/20 (25%) ← +4 for the 4-wide MAC array
Info: Max frequency: 31.4 MHz ← meets 27 MHz with margin
Key checks:
Roofline, Arithmetic Intensity & Off-the-Shelf Alternatives: situating your measured speedup on the roofline model, understanding why 3.5× and not 7× system-wide, and comparing your design to the Arm Ethos-U55 — what production systems do that this course does not.