2026年FPGA大赛用高云FPGA做实时视频降噪,双边滤波在PL端实现时BRAM和DSP不够,怎么用分块处理和定点化优化?

开放6 回答 15 浏览

我们队今年FPGA大赛选了高云的国产FPGA做实时视频降噪,用的双边滤波算法,但PL端的BRAM和DSP资源根本不够用,1080P@30fps都跑不满。查了资料说可以用分块处理和定点化来优化,但具体怎么操作?分块大小怎么选?定点化时权重计算怎么保证精度?求有经验的大佬给个详细方案,最好能贴代码思路。

分享:
  • 电子系小白

    首先你要搞清楚瓶颈到底在BRAM还是DSP,高云低端系列的DSP slice确实少,双边滤波的权重计算如果用乘法器太多就炸了。分块大小建议从32×32开始试,太小了块间重叠浪费逻辑,太大又塞不进BRAM。定点化别搞浮点转定点那种全精度保留,直接试12bit量化,权重查表代替实时计算,能省很多DSP。

  • 栈溢出新手

    分块处理的关键是块间重叠区域怎么算。做双边滤波时每个像素依赖邻域,分块后边界像素算不准,必须把每个块多扩一圈邻域半径的数据进来,这个重叠区会吃掉你省下来的BRAM。我建议你先算一下,如果用7×7窗口,每个32×32块实际要加载46×46的数据,BRAM消耗反而可能比不分块还大。更实用的做法是行流水线加行缓存,只缓存N行数据,配合乒乓操作,这样BRAM只占一个行缓存深度,比分块省得多。定点化方面,权重计算用协处理器做指数近似,用查找表+线性插值,DSP只用最后一步乘累加,能压到每个像素几个DSP。你用的高云具体哪款芯片?不同系列BRAM分布差异很大。

  • 逻辑芯片爱好者

    分块大小不是拍脑袋定的,得拿你芯片的BRAM容量反推。比如高云GW2A系列,单块BRAM通常18Kb,1080P一行1920像素,如果用8bit灰度,行缓存至少得存两行才能做流水线,这就是192082=30Kb,再加些控制逻辑,一块BRAM勉强够。如果做分块,每个块要独立缓存,BRAM数量会随块数线性增长,反而更浪费。我建议你换个思路:别用标准双边滤波,试试guided filter的硬件友好版本,或者用框式双边滤波(box bilateral),可以把权重计算简化成几个均值滤波器的组合,完全不用DSP,BRAM只存中间结果。定点化精度问题,仿真时用MATLAB先量化对比PSNR,通常10bit空间域权重+8bit值域权重就能维持30dB以上,肉眼基本看不出。另外注意高云的工具链对VHDL支持比Verilog好一些,综合时多用流水线寄存器插入,时序能跑更高。你们现在综合频率能到多少?如果低于100MHz,先查时序约束和管脚分配,别急着改算法。

  • 焊板子的小明

    先别急着上分块,你得先算一笔账:高云GW2A系列BRAM单块18Kb,1080P一行1920像素,8bit灰度行缓存至少两行才够做流水线,这就是30Kb。分块后每个块要独立缓存,块数一多BRAM反而线性增长。我建议你先用行流水线+乒乓操作试跑,BRAM只占一个行缓存深度,比分块省得多。定点化权重用查找表加线性插值,DSP留到最后一步乘累加用。你具体用高云哪款芯片?不同系列BRAM分布差很多,先确认型号再定方案。

  • 电子萌新

    分块处理在双边滤波里有个常见坑叫重叠区浪费。每个像素依赖邻域,分块后边界像素算不准,必须每块多扩一圈邻域半径的数据。比如7×7窗口,32×32的块实际要加载46×46,这多出来的数据量可能吃掉你省下的BRAM。我去年做类似项目试过,32×32块在GW2A-18上BRAM刚好够,但DSP又炸了——因为每个像素的权重计算要用乘法器做高斯核。后来换了个思路:把双边滤波改成框式双边滤波(box bilateral),权重计算简化成几个均值滤波器的组合,完全不用DSP,BRAM只存中间结果。定点化精度方面,空间域权重用10bit量化、值域权重用8bit量化,MATLAB仿真PSNR能到32dB,肉眼看不出区别。代码思路其实不复杂:先用行缓存做三行数据流,每来一个新像素就更新3×3邻域的均值,再结合值域权重做查表融合。你如果坚持标准双边滤波,可以试试把指数运算换成CORDIC近似,能省一半DSP。不过说到底,大赛时间紧,建议先跑通简化版保底,再考虑优化精度。追问一句:你们用的视频源是HDMI输入还是内部测试图?源端噪声特征会影响算法选型。

  • 嵌入式开发小白

    我提供一个风险视角:分块处理在实时视频流中容易引入行间断帧,因为块间边界需要额外时钟周期做数据对齐,搞不好时序就违例了。高云的低端系列PLL资源少,时钟域跨不好处理。你不如先放弃分块,改用降分辨率处理:把1080P先缩放到720P,做双边滤波后再用简单插值放大,这样BRAM和DSP压力直接减半。定点化权重计算有个小技巧:用移位代替除法,把小数权重转成整数乘加再右移。比如权重0.25直接写成>>2,既不耗DSP也不耗BRAM。个人感觉大赛评委更看重系统完整性,降分辨率后PSNR掉2-3dB但帧率能稳30fps,比硬撑1080P卡成幻灯片得分高。你们目前仿真时序裕量还有多少?先跑个综合报告看看最差路径在哪个模块。

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

提问者

FPGA萌新上路查看主页

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

浏览「其他」

相关问题

同分类问答

提问建议

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

技术问答

问完之后的闭环

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

探索全站