电路设计新人
哈,这题我实际项目里遇到过类似的,说点实战体会吧。面试官问这个,除了技术细节,更想看你有没有踩过坑、有没有权衡取舍的意识。
直接说我的设计思路:
数据流就用流水线,但别搞得太死。三个模块前后串联,每个模块内部自己管自己的行缓存。比如高斯滤波要3x3窗口,那就存两行数据,用移位寄存器实现滑动窗口,这样每个时钟都能输出一个结果像素给下游。Sobel类似,但要注意边界处理,要么补零要么复制边缘,提前想好。
模块间接口强烈推荐用valid/ready握手协议,这是保证不丢帧的关键。上游有数据就拉valid,下游能收就拉ready,不能收就等,自然形成反压。中间可以插一些小FIFO(比如深度几十个像素),吸收上下游瞬时速率差异,避免流水线气泡。
控制流其实很简单,整个流水线用一个全局使能(跟像素时钟同步)就够了,复位统一控制。二值化阈值可以通过寄存器配置,运行时能改。
保证实时性的核心是算力评估。高斯滤波的卷积核可以对称优化,乘法次数减半。Sobel的梯度计算两个方向可以并行。关键路径看时序报告,必要时插寄存器打拍。latency是固定的,从像素进到结果出,大概延迟十几行图像的时间,对实时视频来说没问题。
最后,这类问题回答时一定要自信,把设计选择的原因说出来。比如为什么选流接口而不是RAM缓存整帧?因为延迟低、资源省。体现出你有工程判断力。
