Justin Bell Status Report 2/21/26

This week was pretty much all about getting the convolution unit to actually do what it is supposed to do. A big chunk of the time went into debugging the hardware itself, making sure the FSM handles chunk-based MAC accumulation correctly, the pipeline latency between when the last MAC fires and when pixel_done asserts is actually valid, and that the buffer addressing is not silently truncating and causing aliasing issues. The whole chunked approach where you tile across K x K x C_in inputs spread across 64 MACs per cycle is solid in theory but has a lot of edge cases to shake out especially around accumulator clear timing and handoffs between output pixels.

On the software side you put together a numpy golden reference script that runs both 3×3 and 1×1 INT8 convolutions from scratch and dumps hex outputs you can feed directly into your testbench. The idea is to have a clean bit-accurate ground truth to compare against hardware readback so you can actually say these match instead of just eyeballing things. The plan is to eventually extend that into a full pytorch-backed reference flow where you can pull the actual YOLOv3-Tiny weight tensors and run them through the same pipeline so verification stays meaningful as the design matures.

The bigger picture goal tying all this together is getting every piece of the CONV2D pipeline working as a unit, not just the MAC array in isolation but the whole chain with bias add, requantization, leaky ReLU, and eventually maxpool feeding into the next layer.

Leave a Reply

Your email address will not be published. Required fields are marked *