Hi everyone,
I've been working on a side project to learn FPGA architecture design by building a small image-processing accelerator entirely in Verilog.
The idea is a Local Interaction Processor (LIP), where every pixel is assigned its own processing element and operations are performed using only local neighbourhood interactions.
Current architecture:
8×8 image
↓
8×8 processing element array (64 PEs)
↓
Each PE receives a 3×3 neighbourhood
↓
Min/Max engine + Threshold engine
↓
Output image
Implemented operations:
- Pass-through
- Erosion
- Dilation
- Opening
- Closing
- Uniformity
- Roughness
The processing fabric is parameterized and supports programmable 3×3 structuring element masks.
I also wrote several testbenches to visualize the behavior of the various operations.
I ran Yosys synthesis and then ECP5 FPGA synthesis.
One thing that surprised me was the resource profile.
Resource utilization:
- Total LUT4: 54298 / 83640 (64%)
- Logic LUT: 35034 / 83640 (41%)
- Carry LUT: 19264 / 83640 (23%)
- DFF: 2048 / 83640 (2%)
- BRAM: 0%
This architecture seems extremely LUT-heavy and almost memory-free, which I suppose is expected since it is basically a giant neighbourhood-comparison engine.
I eventually discovered that directly targeting nextpnr also exposed another issue: my current top-level exports the entire image bus, resulting in more than 2000 external IO pins, which obviously isn't realistic for an actual board deployment.
I'm now trying to decide what direction to take next.
Some possibilities:
- Add BRAM and streaming interfaces
- AXI integration
- Cloud FPGA deployment
- OpenLane ASIC flow
- Larger image fabrics
I'd appreciate feedback from people with more FPGA experience.
Questions:
1) Is this a sensible architecture for morphological image processing?
2) Is LUT-heavy / memory-light expected for this kind of accelerator?
3) If this were to evolve into a practical accelerator, what would you change first?
GitHub:
https://github.com/abhi15-bose-max/LIPalso my zenodo link( IDK if its working , first time posting on zenodo) :https://zenodo.org/records/20822134