158、Xilinx FPGA可编程ISP流水线设计——基于Vivado HLS的Bayer处理IP核与MIPI RX接口的时序收敛实战
从一块点不亮的板子说起
去年接了个车载环视项目,客户指定要用Xilinx MPSoC做ISP前端,理由很直接——他们想在后端跑自己的AI去雾算法,不想被黑盒ISP绑死。方案定下来是ZU7EV,MIPI RX接索尼IMX390,Bayer处理走PL侧可编程ISP,ARM侧跑Linux做控制。
第一版板卡回来,上电,MIPI信号用示波器看波形正常,但ISP输出图像全是花屏。不是那种雪花噪点,是那种有规律的水平条纹,每隔几行就错位一次。这种pattern我太熟了——不是sensor配置问题,是MIPI RX的像素打包和ISP输入接口的位宽没对齐。
查了三天,最后定位到问题:IMX390输出是10bit RAW,MIPI CSI-2协议里10bit是打包成5字节存4个像素的,但我在HLS写的Bayer处理IP核输入接口直接用了64bit AXI-Stream,一个clock传8个像素,10bit × 8 = 80bit,这根本塞不进64bit。Vivado HLS综合的时候不会报错,它自动给你做了位宽截断,但截断的时机和MIPI RX解包出来的数据排列完全对不上。
这个坑,说大不大,但足够让一个团队白干两周。所以这篇笔记,我想把FPGA上做可编程ISP流水线的几个关键决策点摊开来讲,尤其是Bayer处理IP核用HLS写的时候,那些综合工具不会告诉你的时序陷阱。
订阅专栏 解锁全文
5396




被折叠的 条评论
为什么被折叠?



