嵌入式爱好者小王
我们去年做过类似的项目,也是Zynq双目深度估计。直接说结论:用HLS做代价计算单元效率很高,但架构设计是关键。
首先回答你的问题:
1. HLS实现代价计算(如Census变换或AD-Census)非常适合,能获得10倍以上的加速比。但要注意,HLS代码需要精心优化(比如用pipeline、dataflow、调整循环展开因子),否则可能还不如PS跑得快。建议先用HLS仿真评估latency和资源消耗。
2. 数据搬运绝对是瓶颈!两路1080p图像,一帧就是6MB左右(灰度),实时30fps的话数据率高达360MB/s。必须用HP(High Performance)端口,ACP端口虽然缓存一致但对PS负担大,且带宽通常不如HP。强烈建议用VDMA(Video DMA)配合AXI Stream,让数据在PL内部流动,尽量减少PS干预。可以设计成:摄像头→PL预处理→代价计算→结果帧缓存→PS读取做SGM优化。
3. 精度和资源的权衡:从8位定点开始试,逐步增加小数位。通常代价计算用8~10位,累积代价用16位就够了。用HLS的任意精度类型(ap_int<宽度>)很方便做量化实验。
额外建议:
- 在PL里实现SGM的一部分(如路径聚合)能进一步减轻PS负担。
- 参考开源项目:UG1233(Xilinx SGM示例)、GitHub上的“Stereo Vision on Zynq”项目,虽然老但架构值得学习。
- 功耗方面,PL全速运行可能比PS高,但总体性能功耗比仍优于纯软件方案。用Power Estimator工具早期评估。
最后提醒:竞赛时间有限,先搭一个最小可行系统(比如640x480分辨率),再逐步优化到高清。
