2026年,FPGA大赛做实时视频去雾,暗通道先验算法在Zynq上BRAM不够用,用移位寄存器替代行缓存能行吗?

开放3 回答 24 浏览

我们团队在做FPGA大赛的实时视频去雾项目,用的Zynq-7020,暗通道先验算法需要多行缓存求最小值,BRAM直接爆了。看到网上有人说用移位寄存器(SRL)替代行缓存能省BRAM,但担心时序会崩。有没有大佬试过这种优化方案?SRL做行缓存最大能支持多少行?1080p分辨率下会不会导致时序不收敛?另外,暗通道求最小值用流水线树形比较器是不是比排序更省资源?求具体实现细节和资源对比数据。

分享:
  • 芯片小菜鸟

    SRL做行缓存,深度上限一般是32或者64,具体看器件型号。1080p一行1920像素,64深度差太远了,根本存不下一整行,所以拿SRL直接替代BRAM做1920深度的行缓存行不通。你真正缺的是BRAM数量,不是深度不够,而是多行缓存把BRAM吃光了。建议先算清楚暗通道窗口大小,如果窗口是15×15,那需要缓存15行,每行1920x8bit,一个BRAM大概能存18Kb,算下来要几十个BRAM,7020总共就140个,确实爆。与其折腾SRL,不如考虑降采样,先对1080p做2×2或4×4降采样,图像缩到540p或270p,行缓存深度就减半或减到四分之一,BRAM压力小很多。你们现在用的是什么窗口大小?

  • 电路板玩家2023

    别被网上那些用SRL炫技的帖子带偏了,他们通常是在低分辨率或者小窗口下演示,一到1080p立马翻车。SRL32E是Xilinx 7系列里默认的移位寄存器原语,深度32,你可以级联两个做成64深度,但再多级联时序会急剧恶化,因为每级组合逻辑延迟累加,而且布线资源吃紧。你拿它做1920深度的行缓存,需要级联30个SRL,每条路径的延迟将近一个时钟周期,7020跑150MHz以上基本必崩。再说资源,一个SRL32E只占半个slice,但30个级联要15个slice,还要加一堆mux做地址选择,最后面积比BRAM还大,得不偿失。暗通道求最小值确实用树形比较器比排序好,排序至少O(n log n),树形比较器只要log2(n)级流水,资源少一半。另外有个取巧思路:如果你们的暗通道窗口是矩形,可以拆成水平方向和垂直方向两次一维最小值滤波,先对每行做一维滑窗求最小值,缓存深度只要窗口宽度,然后对列再做一次一维滑窗,这样行缓存深度从窗口高度降到窗口宽度,BRAM用量直接下降一个数量级。7020上1080p跑30帧应该能撑住。你们现在窗口是正方形还是长方形?

  • 芯片设计预备役

    从工程妥协的角度看,与其死磕SRL行缓存,不如换算法。暗通道先验本身在FPGA上就不算友好,它假设户外无雾图像每个局部区域至少有一个颜色通道值很低,但室内或天空区域会失效,而且多行缓存和大量比较器是硬伤。2026年大赛,建议你们评估一下引导滤波或者透射率直接估计的简化版,引导滤波用盒式滤波加均值计算,只需要两行缓存加加法树,BRAM消耗不到暗通道的一半,而且边缘保持效果更好。如果非要保留暗通道,先降采样到720p或者540p,1080p对Zynq-7020来说带宽和BRAM都太极限了,大赛评委更看重系统完整性和实时性,分辨率略低但帧率稳定反而加分。另外时序收敛方面,把行缓存做成双口RAM用BRAM实现,读写独立时钟域,加上FIFO做跨时钟同步,比SRL级联可靠得多。你们有没有考虑过换用透射率估计的简化模型?比如直接用最小值滤波代替暗通道,省掉排序步骤。

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

提问者

Verilog萌新查看主页

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

浏览「其他」

相关问题

同分类问答

提问建议

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

技术问答

问完之后的闭环

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

探索全站