2026年FPGA大赛用国产高云FPGA做实时视频去雾,暗通道先验算法BRAM不够用,有没有现成的IP核或开源方案可以替代?

开放4 回答 24 浏览

我们团队在准备2026年的FPGA大赛,选的是高云FPGA做实时视频去雾,用的暗通道先验算法。在PL侧实现时BRAM资源爆了,想问问有没有现成的IP核或者开源方案能替代?比如用移位寄存器或者外部DDR来缓解?另外高云的开发环境跟Vivado差别大吗,从Xilinx转过来有什么坑?求有经验的大佬指点,急!

分享:
  • 数字电路入门生

    BRAM不够用是暗通道先验做高分辨率视频去雾的常见瓶颈,不用慌。你的直觉是对的——外部DDR是正解。高云IDE(Gowin YunYuan)跟Vivado确实有差距,但IP核生成流程类似:在IP Core Generator里找DDR3/4 Controller,按你的板子型号配好参数就行。透射率图和导向滤波的中间结果全塞DDR,PL侧只留必要的line buffer和窗口缓存,BRAM占用能降一大半。开源方案的话,GitHub上有不少基于OpenCL移植的去雾项目,但高云对OpenCL支持有限,建议直接参考HLS写法手动调RTL。你用的是什么分辨率和帧率?DDR带宽够不够得先算一下。

  • 芯片验证新人

    从Xilinx转高云,最大的坑不是IDE本身,而是你习惯的Xilinx IP和原语直接没法用。高云的IP库比Vivado小很多,像DDR控制器、PLL、Serdes这些都得重新熟悉。好在它们家文档现在比以前全了,去官网下Application Note,重点看时序约束那几份——高云的时序分析器叫Timing Analyzer,界面和Tcl命令跟Quartus II更像,setup/hold检查的默认设置可能比你预想的严格。回到BRAM不够的问题,我的建议是分三步走:第一步,把暗通道先验里最占BRAM的导向滤波拆开,用行缓冲+外部DDR的乒乓操作代替整帧缓存,这个在Xilinx的XAPP1202里有思路,高云可以照着改;第二步,透射率图不用存整帧,算一行传一行,配合去雾模块流水线处理;第三步,如果还爆,考虑降低暗通道窗口大小——从15×15降到7×7对去雾效果影响不大,但BRAM用量能减到原来的四分之一。开源方面,有个叫'Vivado-HLS-Dehazing'的项目,虽然针对Xilinx,但核心算法是C写的,你可以拿来做参考,手动翻译成高云能综合的Verilog。最后提醒一点:大赛文档里如果允许用软核,可以考虑在高云里搭一个Cortex-M1软核,把透射率修正这种控制密集的计算挪到软件里做,PL只做像素级流水。你现在的目标帧率和分辨率是多少?这直接决定DDR带宽够不够。

  • 嵌入式学习ing

    说个你们可能没注意到的点:高云的BRAM有硬核移位寄存器模式,在IP Core Generator里配成SRL16/32,能省不少资源。暗通道先验里求最小值滤波那部分,窗口内比较器链特别吃BRAM,换成SRL实现的shift register加组合逻辑,面积能降但时序会紧张。建议先跑一下综合后的时序报告,如果最差路径slack小于0.3ns,就别折腾了,老老实实上DDR。另外,导向滤波的均值计算可以用积分图代替box filter,积分图只存一行的累加值,BRAM消耗从O(N)降到O(1)——不过积分图位宽要算好防止溢出,高云乘法器资源少的话得用移位近似。开源方案里有个叫'ai-dehaze'的项目用Python写了完整流程,但FPGA移植需要自己处理定点化和流水线。你们如果赶大赛,别在算法优化上钻太久,先拿DDR方案跑通基础版本,效果不够再用积分图迭代。现在板子上DDR的型号和频率定了吗?这会影响控制器配置。

  • EE学生一枚

    看到你说BRAM爆了,我第一反应是检查算法里最占存储的那个模块——导向滤波。暗通道先验里做精细化透射率的导向滤波,很多人直接搬论文里的box filter实现,窗口一开就是NN的累加和,BRAM全砸在行缓存上了。我觉得你可以先别急着上DDR,试试把导向滤波改成递归方式,比如用O(1)复杂度的moving average代替box filter,配合行缓冲只存两行数据,BRAM消耗能从几十个块降到个位数。代价是滤波精度会差一点点,但视频去雾肉眼基本看不出区别。高云的BRAM还有个特性,每个块可以拆成两个独立的8Kb小块,如果你的数据位宽只有8bit或16bit,手动做双端口拆分能挤出不少容量,这点在Gowin的用户手册里写得比较隐晦,可以翻翻BRAM那章。你们现在用的暗通道窗口大小和帧率是多少?这个直接影响BRAM估算,如果窗口超过15×15或者分辨率到1080p,那确实得走外部DDR。高云的DDR控制器IP在IDE里配起来不算难,但要注意它默认的地址映射可能跟你的数据流不匹配,调试时记得先写个简单的读写测试环验证吞吐。开源方案的话,GitHub上有个'verilog-dehaze'项目写得比较基础,适合改流水线,但它的导向滤波用的是原始版,BRAM效率不高,建议你参考OpenCL思路自己重写积分图模块。追问一句:你们板子上的DDR是跟高云FPGA走AXI还是直接接的硬核接口?这个会影响IP选型和延迟。

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

提问者

CodeNewbie查看主页

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

浏览「其他」

相关问题

同分类问答

提问建议

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

技术问答

问完之后的闭环

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

探索全站