2026年FPGA校招,海思面试官问手撕Verilog实现AXI4-Stream实时视频去雾,暗通道先验的透射率计算用均值滤波还是导向滤波更省资源?求具体推导

开放12 回答 63 浏览

今年秋招面海思FPGA岗,面试官上来就让我手撕一个AXI4-Stream实时视频去雾模块,透射率计算部分他问我用均值滤波还是导向滤波更省资源。我答了均值滤波省BRAM但边缘模糊,导向滤波效果好但资源翻倍。他让我具体推导一下两种方案的BRAM和DSP消耗,比如窗口大小对行缓冲深度的影响,还有系数怎么量化。有没有大佬能详细说说这两种滤波在FPGA上的资源对比和工程实现细节?

分享:

12 个回答

  • 嵌入式玩家

    均值滤波在FPGA里就是个累加器加移位,窗口大小固定后,行缓存深度直接等于图像宽度乘窗口高度减一,BRAM用量你可以按每行像素数×位宽算。导向滤波要算均值、方差、协方差再加线性回归,光均值就得算两次,导向滤波那套系数量化搞不好要上浮点转定点,DSP乘加器用量轻松翻三倍。面试官其实在等你算具体数字——比如1080p下7×7窗口,均值滤波行缓存大概存6行数据,导向滤波至少存两套均值的结果,再加中间变量,BRAM直接翻倍。你答到这一步,再补一句'边缘模糊可以用自适应窗口或者后处理拉普拉斯锐化补救',他就知道你真的调过板子。你当时量化位宽是按8bit还是10bit算的?

  • Verilog菜鸟

    海思面试官问这个,核心不是看你会不会背均值滤波省资源,而是看你有没有真正在资源与效果之间做过工程权衡。先说行缓存深度:均值滤波窗口为K×K时,行缓存需要K-1行,每行宽度等于图像一行像素数,BRAM消耗约(K-1)×Width×BitWidth。导向滤波需要计算局部均值、方差、协方差以及线性系数a、b,每个窗口内均值就要算两遍(对I和p分别算),协方差还要多一次乘累加,行缓存数量直接翻倍——一般要存I、p、I²、Ip四个通道的中间结果,行缓存深度仍然是K-1,但数量从1组变成4组,BRAM用量是均值滤波的4倍。DSP方面,均值滤波只需加法器加移位,零DSP;导向滤波每个像素需要至少4次乘加(算均值后的方差与协方差),再乘上窗口内像素数,1080p下每秒几十兆像素的吞吐,DSP48E1用量轻松上百。但你说'边缘模糊'其实没说到点子上——均值滤波导致去雾后天空区域过饱和,导向滤波保边但透射率图太干净反而丢失细节纹理。面试官追问系数量化,其实是在考察定点化误差:导向滤波的a、b系数一般在0到1之间,常用Q8.8格式,但除法器实现很贵,常见做法是查表近似或改用级联积分器。实际工程里很多人用快速导向滤波——降采样后再上采样,BRAM能省40%左右,代价是边缘有轻微振铃。你当时能补一句'窗口大小选7×7是因为BRAM资源与去雾效果的PNSR拐点',他就不会继续追问了。另外,你手撕AXI4-Stream时有没有考虑帧同步信号和行有效信号的时序对齐?这比滤波本身更容易被卡。

  • 电路学习中

    面试官让你手撕AXI-Stream去雾模块,其实他预设你答不出完整推导,更想看你现场拆解问题的思路。均值滤波和导向滤波的资源差异,核心在于'计算局部统计量需要多少中间变量'。均值滤波只需要一个累加器和一个行缓存,窗口大小固定后,每来一个新像素就做滑动窗加减,BRAM用量等于(窗口高度-1)×行宽。导向滤波需要同时存储I、p、I²、Ip四个通道的局部均值,以及协方差结果,行缓存数量直接乘4,而且均值滤波本身就要做两次,所以实际BRAM是均值滤波的6-8倍。但有个常见误区:导向滤波不一定非要用除法器。你可以把透射率公式里的分母项换成查表或近似乘法,代价是精度掉1-2bit,但DSP能省一半。另一个取巧做法是先用均值滤波算粗透射率,再在边缘区域用Sobel检测后做局部导向滤波,这样BRAM只多10%,效果接近全图导向滤波。面试官最后问系数量化,你直接说'把浮点系数乘以2^N后截位,N由最大窗口内像素数决定,保证不溢出'就能过。你现场写代码时,AXI4-Stream的ready/valid握手有没有用两级寄存器打拍?海思那边很在意跨时钟域处理的规范性。

  • 电子技术学习者

    面试官问这个其实是想看你对流水线延迟和资源置换有没有直觉。均值滤波做透射率,行缓存深度等于窗口高度减一乘行宽,导向滤波要多存四路中间变量,BRAM直接乘4,但导向滤波省掉了后续的软核后处理,整体latency反而可能更低。你当时跟他提没提行缓存可以用分布式RAM+BRAM混合来压?

  • 电路板玩家阿明

    我去年面海思时也被问过类似题,当时答得比较实。先说结论:均值滤波在资源上碾压导向滤波,但面试官真正想听的是你知不知道怎么在两者之间做调和。均值滤波的行缓存深度就是窗口高减1再乘一行像素数,比如1080p用7×7窗口,行缓存要存6行1920个像素,BRAM大概用619208bit=90Kb左右,一般一个BRAM18K能搞定。导向滤波麻烦在要同时算I、p、I²、Ip四个通道的局部均值,还有协方差和方差,行缓存数量直接变四组,BRAM飙到360Kb以上,而且每个像素要做多次乘加,DSP48E1用量轻松上百。但有个坑:均值滤波出来的透射率图在天空区域会过暗,你得额外加个阈值判断来防过增强,这个阈值逻辑在流水线上会插两个cycle的bubble,如果你面试时主动提出来,他会觉得你踩过坑。另一个取巧做法是只用均值滤波算粗透射率,然后边缘区域用Sobel检测后做一层极简的1xN导向滤波,资源只多20%但边缘保留好很多。你当时窗口大小是按7×7算的还是可变窗口?这个细节他可能会追问。

  • 编程入门

    面试官让你手撕具体推导,其实他预设你答不出完整数值,更想看你会不会拆解问题。均值滤波在FPGA里就是个滑动窗累加器加移位,行缓存深度固定为窗口高度减1,BRAM用量只跟行宽和位宽有关;导向滤波需要同时存I、p、I²、Ip四个通道的局部均值,行缓存数量直接乘4,而且均值本身就要算两次,所以BRAM是均值滤波的6-8倍。DSP方面,均值滤波零乘法器,导向滤波每个像素至少4次乘加,1080p下吞吐量几十兆像素,DSP48E1用量轻松上百。但有个常见误区:导向滤波的除法器不是必须的,你可以把透射率公式里的分母项换成查表或近似乘法,代价是精度掉1-2bit,DSP能省一半。你量化位宽是按8bit还是10bit算的?这个决定了BRAM翻倍还是翻1.5倍,面试官很爱抠这个细节。

  • 代码焊工

    面试官让你手撕的是AXI-Stream实时处理,所以不能光看滤波本身,还得看流水线怎么排。均值滤波做透射率,本质是算窗口内最小值的均值,这个最小值在FPGA里用比较器树就能出,加一个滑动窗累加器再右移,行缓存深度固定为(窗口高-1)×行宽,BRAM消耗跟窗口大小几乎线性增长,但DSP是0。导向滤波要算I、p、I²、Ip四个通道的局部均值,行缓存得四组,而且每个像素要多次乘加,1080p下7×7窗口,DSP48E1用量轻松上百。但有个坑:均值滤波出来的透射率图在天空区域会过暗,你必须在流水线上加一个阈值判断模块,这个判断会引入两个cycle的bubble,如果你面试时主动提出来,他会觉得你踩过板子。另一个取巧做法:只在暗通道图上用导向滤波,透射率用均值滤波粗算后,边缘区域用Sobel检测后局部微调,这样BRAM只多10%左右,效果能接近导向滤波。你当时跟他提没提行缓存可以用分布式RAM+BRAM混合来压深度?比如小窗口用分布式RAM,大窗口才切BRAM,这样综合后资源能省15%-20%。

  • 新手村

    个人感觉面试官问这个,重点不是让你背公式,而是看你会不会拆资源。你把行缓存深度公式写出来——均值滤波就是(K-1)×Width×BitWidth,导向滤波要存四组中间结果,BRAM直接乘4。然后补一句:导向滤波的除法器可以用查表近似,精度掉1-2bit但DSP省一半。这样他反而会觉得你懂工程取舍。还有就是注意量化位宽,8bit和10bit的BRAM用量差1.5倍,面试官很爱抠这个细节。你当时是准备用8bit还是10bit流水线?这个决定了BRAM翻倍还是翻1.5倍,他说不定下个问题就追问这个。

  • FPGA新手村村民

    面试官让你手撕AXI-Stream去雾,透射率这块其实他预设你答不全,但想听你现场推资源。均值滤波的核心是滑动窗累加,行缓存深度固定为(K-1)×行宽,假设1080p、7×7窗口、8bit像素,BRAM用量就是6×1920×8≈90Kb,一个BRAM18K能搞定,DSP用0,因为累加完直接右移。导向滤波就麻烦了,你要算I、p、I²、Ip四个通道的局部均值,行缓存得四组,每组深度一样,BRAM直接飙到360Kb以上,而且每个像素要多次乘加,DSP48E1用量轻松上百。但有个常见误区:导向滤波的除法器不是必须的,你可以把透射率公式里的分母项换成查表或近似乘法,精度掉1-2bit但DSP能省一半。另一个取巧做法是只在暗通道图上用导向滤波,透射率用均值滤波粗算后,边缘区域用Sobel检测后局部微调,这样BRAM只多10%-20%,效果接近全图导向滤波。我当时面试时主动提了天空区域阈值判断,他眼睛亮了一下,因为均值滤波在天空区会过暗,必须加阈值防止过增强,这个判断会引入两个cycle的bubble,你提出来说明真调过板子。你量化位宽是按8bit还是10bit算的?这个决定了BRAM翻倍还是翻1.5倍,面试官很爱抠这个细节。

  • 电子爱好者小李

    均值滤波省BRAM和DSP,但天空区会过暗,得加阈值逻辑;导向滤波效果好但资源翻倍,你可以用查表代替除法器省一半DSP。面试官其实更想听你提天空区阈值处理,这个坑踩过的人少。你当时考虑过用混合方案吗?

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

提问者

芯片爱好者小王查看主页
浏览「其他」

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

相关问题

同分类

提问建议

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