2026年FPGA大赛备赛,用国产高云FPGA做实时视频去雾,暗通道先验算法模块LUT和BRAM不够用,怎么通过行缓存和流水线重构硬挤进去?求具体架构设计

开放3 回答 69 浏览

我们组今年FPGA大赛选了实时视频去雾这个题,用的高云GW2A系列,模型跑的是暗通道先验算法。现在综合后LUT占用92%、BRAM也爆了,根本跑不了1080P@30fps。我查了下行缓存和流水线重构的思路,但不知道具体怎么切分模块,比如暗通道求最小值那块的窗口缓存怎么设计才能省BRAM?导向滤波那部分能不能拆成多级流水线?求大佬给个具体的架构设计思路和资源对比,我们还有两周时间,急!

分享:

3 个回答

  • 嵌入式入门生

    先别急着重构,两周时间最怕的是改完又冒出时序问题。我建议按这个顺序排查:第一步,看看综合报告里LUT到底被哪块吃了,很多时候是导向滤波里那个除法器或开方运算被综合成了大查找表,试试把除法改成移位近似,倍数用常数就能省不少;第二步,暗通道窗口别用传统二维滑窗,改成行缓存+列缓存两级,行缓存用双端口BRAM只存两行,列缓存用移位寄存器组,这样窗口内取最小值时能并行比较,大概能把BRAM从整帧降到几十KB;第三步,导向滤波确实能拆,均值滤波用两级流水,先算横向再算纵向,方差用累加器复用同一套均值滤波的加法树,别单独建模块。最后提醒一句,高云那个IDE的BRAM有硬核模式,你试试把缓存设置成simple dual port,别用true dual port,能省一半位宽。你们现在综合占用92%,按这个改完理论上能压到60%左右。对了,你们现在用的窗口是15×15还是9×9?这个对资源影响特别大。

  • 电子入门生

    说实话,两周时间做暗通道先验的1080P实时去雾,LUT和BRAM爆了是必然的,这算法本来就不是给入门级国产FPGA准备的。但既然选了题,我给你一条能走通的路:核心思路是放弃整帧思维,改成分块行流水。具体做法是把1080P拆成每块128行的条带,条带之间用双行缓存乒乓切换,这样BRAM只缓存当前块需要的行,而不是整帧。暗通道窗口改成滑动复用,用移位寄存器组做横向扫描,每个时钟沿移进一个新像素,同时移出旧像素,窗口内最小值用树形比较器,9×9窗口的话两级比较器就能出结果,比每来一帧重新算一遍省太多。导向滤波别想一次算完,拆成三级流水:第一级做均值滤波(横向+纵向各一个移位寄存器链),第二级做方差计算(复用第一级的均值结果,加一个乘法累加器),第三级做系数计算和输出,每级之间用双口RAM做握手缓冲,深度不用深,16行就够了。这样改完大概BRAM能降到原来的四分之一,LUT能省出一半给求最小值那块的比较器。我去年用类似思路在Cyclone IV上跑过720P的,能到45帧,1080P主要瓶颈在时钟频率,高云GW2A的PLL锁相环你得好好调,尽量上到150MHz以上。最后给你个心理预期:别指望一次改完就能跑通,留三天做调试和回退,如果改完还爆,果断把暗通道窗口缩到7×7,视觉上差别不大,资源能再省30%。你现在综合报告里是哪个模块占LUT最多?先看那个再动手。

  • 电子爱好者初级

    暗通道窗口用行缓存加移位寄存器组,BRAM只存两行,别整帧缓存。导向滤波拆成横竖两个均值滤波串行,方差复用同一套加法树。两周够改,先跑仿真看时序,别直接上板。

登录后可在本页底部提交回答

提问者

数字逻辑小白查看主页
浏览「其他」

描述场景与已尝试方案,更容易获得有效解答

相关问题

同分类

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位