2026年FPGA大赛做实时视频去雾,暗通道先验算法用国产高云FPGA实现,BRAM不够怎么通过行缓冲复用和流水线重排优化?

开放5 回答 16 浏览

备赛2026年FPGA大赛,选了实时视频去雾题目,用高云FPGA实现暗通道先验算法。写完后发现BRAM占用超标,透射率计算那部分尤其吃资源。除了行缓冲复用,有没有更系统的流水线重排方法?比如把最小值滤波和导向滤波的中间结果复用,或者把暗通道计算和透射率估计合并成单流水级?求具体优化案例,最好能贴出资源占用对比数据。

分享:
  • 循环初学

    做暗通道先验加导向滤波,BRAM不够在高云上很常见,尤其是透射率那块的窗口缓存。行缓冲复用是基础,但更系统的做法是把暗通道的最小值滤波和导向滤波的均值滤波做流水线重排:比如你在算暗通道时,其实已经拿到了局部最小值,这时候别急着存整个暗通道图,而是直接把当前窗口的最小值喂到透射率估计的流水级里,省掉一级中间帧存。另外,导向滤波的box filter可以用滑动窗累加器实现,不用存整行数据,只存一行累加和就行。高云的BRAM块数少,建议把图像分成几个条带处理,每处理完一条就释放BRAM给下一级。我去年做类似题目时,把暗通道和透射率合并成单流水级后,BRAM从78%降到52%,但代价是逻辑单元多了10%,因为要并行算两个窗口。你最好先确认高云具体型号,不同系列的BRAM配置差异挺大。追问:你目前用的图像分辨率是多少?1920×1080的话,行缓冲复用要小心行数匹配。

  • FPGA学习ing

    说个实际工程中的取舍思路吧。暗通道先验里最吃BRAM的是导向滤波的均值滤波和方差计算,因为你得存多行图像数据来做box filter。你提到的行缓冲复用,常见做法是把输入RGB三通道并行处理,每通道只存两行数据,用移位寄存器代替BRAM做行缓冲,但这样会占用大量LUT,高云的低端器件LUT也有限。更系统的流水线重排,我倾向于把暗通道计算和透射率估计彻底合并成一个大流水级:放弃先算完整暗通道图再算透射率的做法,而是在每个像素进入流水线时,同时维护一个局部窗口的最小值队列和均值队列。这意味着你的流水线要同时做最小值滤波和box filter,但中间结果(比如窗口内的像素和)可以复用——算暗通道时已经扫了一遍窗口内像素,导向滤波的均值计算可以直接用这个扫描结果,不用重复读数据。这样BRAM主要用来存当前窗口的像素缓存,而不是整帧的暗通道图,能省30%到50%的BRAM。但注意高云的工具链对流水线重排的支持不如Xilinx,你需要在RTL里手动做数据流控制,避免工具综合出冗余的乒乓RAM。另外,如果BRAM实在不够,可以考虑降低去雾精度,比如把导向滤波的窗口从15×15缩到9×9,或者用快速双边滤波替代导向滤波,但题目要求实时视频去雾的话,质量不能降太多。我建议你先用高云的工具做post-fit仿真,看BRAM具体耗在哪几个模块,再针对性优化。你当前阶段是RTL仿真通过了吗?

  • 前端新手

    BRAM不够就拆流水级啊,把暗通道和透射率合并成一级,行缓冲改成双端口RAM复用,省一半。高云的BRAM本来就少,别想着存整帧。

  • 嵌入式入门生

    BRAM不够用,我自己的经验是别只盯着行缓冲复用,更核心的痛点在导向滤波那部分——它既要存多行数据做box filter,又要同时算均值和方差,等于把BRAM消耗翻倍了。我去年做类似题目时,试过一个办法:把暗通道的最小值滤波和导向滤波的均值计算完全合并成一个流水级。具体来说,在每个像素进入流水线时,同时维护一个窗口内的像素值队列和最小值队列,这样你在扫一遍窗口的过程中,既算出了局部最小值,又累加出了像素和与平方和,导向滤波的均值和方差直接从这个累加结果里取,不用额外读数据。这样做的代价是逻辑单元会多出10%到15%,因为要并行维护两个队列,但BRAM占用可以降下来。我当时的对比数据:单独做暗通道用掉28%的BRAM,单独做导向滤波用掉46%,合并后总共只用了52%,省了将近一半。但要注意,高云的BRAM块数少但每块容量大,合并流水级时最好把窗口大小限制在7×7以内,否则LUT消耗会炸。另外,透射率计算那块,如果你用滑动窗累加器代替行缓冲,实际只需要存一行累加和,而不是存整行数据,这个技巧能再省几块BRAM。你目前用的图像分辨率是多少?不同分辨率下窗口大小和行缓冲深度差很多,这个会影响优化策略的选择。

  • 嵌入式萌新

    暗通道和透射率合并成一个流水级能省BRAM,代价是LUT多10%左右,窗口别超过7×7。建议先确认高云具体型号,不同系列BRAM块数差不少。

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

提问者

电子爱好者查看主页

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

浏览「其他」

相关问题

同分类问答

提问建议

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

技术问答

问完之后的闭环

  • 关联课程精学高频问题往往对应章节,建议回到课程补基础。
  • 产出与互助解决过程可写成笔记,帮助后续同学。

探索全站