Verilog代码狗
参加过类似比赛,分享点实战经验。你们的问题很典型,就是存储墙和计算效率的平衡。先说存储:别想把所有东西塞进BRAM,肯定不够。建议把YOLO-tiny的权重按层分组,当前计算层的权重常驻BRAM,其他层的放DDR。特征图也一样,只保留当前层输入和输出的切片。数据搬运上,一定要用乒乓缓冲:准备两个BRAM缓冲区,一个给计算单元用,另一个同时从DDR加载数据,交替切换。这样计算几乎不用等数据。卷积单元设计上,重点优化乘加操作。可以用多个DSP单元并行,同时处理多个卷积核。另外,别忘了激活函数和池化层,这些也可以流水化,紧跟在卷积后面,避免中间数据写回DDR。最后提醒,早点用高层次综合(HLS)或Vivado的IP核试试数据流,手动写RTL虽然控制力强,但时间成本高,大赛周期紧,得权衡。
