2. Jacinto硬件架构解析
Jacinto 系列(以 TDA4VM / DRA829 为代表)之所以能同时承担多路摄像头接入、实时视觉预处理、深度学习推理和显示输出,核心在于它并非一颗"通用 SoC",而是一套围绕车载视觉数据流组织起来的异构计算平台。理解它的关键,不是记住模块名字,而是搞清楚"一帧图像从摄像头进来,到最终显示或推理结果输出,中间经过了哪些硬件单元、由谁搬运、在哪里被处理"。本节就沿着这条数据通路,把 CPU、DSP、GPU、VPAC、VISS、DSS 等模块的职责和相互关系讲清楚。
一、异构计算的整体分工
Jacinto 的算力被有意拆分成多种"专用单元",各自处理最擅长的任务:
- 主 CPU 集群(Arm Cortex-A72):运行 Linux/QNX 等富操作系统,负责系统调度、网络协议栈、应用逻辑、摄像头管理框架(如 GStreamer/OpenVX 上层)、文件与显示控制。它不擅长逐像素运算,但负责"指挥"。
- 实时 MCU 域(Cortex-R5F):承担安全岛、实时控制、CAN/以太网通信、部分传感器同步与看门狗任务,保证功能安全与低延迟响应。
- C7x DSP / MMA 矩阵加速器:C7x 是向量 DSP,配合 MMA(Matrix Multiply Accelerator)承担深度学习推理、点云处理、雷达/视觉融合等重计算任务。
- GPU(PowerVR 系列):负责 3D 渲染、图形合成、部分 OpenCL 通用计算,以及把多路画面合成到显示图层。
- VPAC(Vision Pre-processing Accelerator):视觉预处理加速器,是摄像头数据进入 SoC 后的第一道"加工车间"。
- VISS(Vision Imaging SubSystem):图像信号处理子系统,完成从 RAW 到 YUV/RGB 的 ISP 处理。
- DSS(Display SubSystem):显示子系统,负责多图层叠加、缩放、色彩空间转换并驱动显示接口。
这些单元通过片上互连(NoC / 交换机)和共享内存(DDR + 片上 SRAM)协同工作。数据通路的效率,很大程度上取决于"谁搬数据、搬到哪、是否经过 DDR"。
二、多摄像头数据通路:从 CSI-2 到显示
以 4 路 200 万像素、30fps 的摄像头为例,典型通路如下:
- 摄像头 → CSI-2 接收:每路摄像头通过 MIPI CSI-2 差分信号进入 SoC 的 CSI-RX 控制器。Jacinto 通常提供多路 CSI-2 端口,可支持 4 路以上独立输入。
- CSI-RX → VISS:RAW Bayer 数据被送入 VISS。VISS 内部完成黑电平校正、镜头阴影校正、去马赛克、白平衡、色彩校正、Gamma 等 ISP 处理,输出 YUV 或 RGB。VISS 支持多路虚拟通道,可同时处理多摄像头。
- VISS → VPAC:VPAC 进一步做缩放、金字塔生成、光流、直方图、畸变校正等视觉预处理,为后续算法准备多尺度图像。
- VPAC → 内存 / DSP / GPU:处理后的图像写入 DDR 或片上缓存,供 C7x DSP 做推理、GPU 做渲染,或由 CPU 做业务逻辑。
- 结果 → DSS:需要显示的画面(原始视频、叠加框、HUD 图层)送入 DSS,DSS 完成图层混合、缩放、色彩空间转换,输出到 MIPI DSI 或 LVDS 显示屏。
这条通路中,VISS 和 VPAC 是"硬实时"环节,通常由硬件流水线完成,CPU 只做配置和中断响应;DSP/GPU 是"计算"环节,负责算法;DSS 是"输出"环节。理解这条链路,就能判断某个功能应该放在哪个单元上实现。
三、各模块的职责边界与协作要点
把上面的通路拆开看,每个模块都有明确的"该做"和"不该做":
| 模块 | 核心职责 | 典型输入 | 典型输出 | 不擅长/不应承担 |
|---|---|---|---|---|
| CSI-2 RX | 接收 MIPI 差分信号,解包虚拟通道 | 摄像头串行数据 | RAW 像素流 | 图像处理、算法 |
| VISS | ISP 处理:去马赛克、白平衡、Gamma | RAW Bayer | YUV/RGB | 深度学习、3D 渲染 |
| VPAC | 缩放、金字塔、光流、畸变校正 | YUV/RGB | 多尺度图像、特征 | 高层语义推理 |
| C7x DSP + MMA | 推理、点云、融合计算 | 预处理图像/张量 | 检测框、分类结果 | 操作系统调度 |
| GPU | 3D 渲染、图层合成、OpenCL | 顶点/纹理/图层 | 合成画面 | 硬实时 ISP |
| Cortex-A72 | 系统调度、应用逻辑、框架管理 | 中断/任务 | 控制命令、业务结果 | 逐像素运算 |
| Cortex-R5F | 安全岛、实时控制、通信同步 | 传感器/CAN 事件 | 控制信号、安全响应 | 富操作系统应用 |
| DSS | 多图层混合、缩放、显示时序 | 视频/图形图层 | DSI/LVDS 显示信号 | 图像算法处理 |
四、数据通路中的关键工程约束
理解了模块分工,还要注意几个实际设计中的约束:
- 带宽是瓶颈:4 路 2MP@30fps 的 RAW 数据量约为 4 × 1920 × 1080 × 30 × 1.5B ≈ 373 MB/s(按 12bit 打包估算),经过 ISP 后变成 YUV 还会增加。若每级都写回 DDR,带宽压力会迅速上升。因此 VISS/VPAC 常采用"直通"或片上缓存方式减少 DDR 往返。
- 延迟与实时性:安全相关功能(如 AEB 前向感知)要求端到端延迟可控,通常把关键路径放在 VISS→VPAC→DSP 的硬件流水线上,避免经过 Linux 调度。
- 同步与时间戳:多摄像头必须同步曝光或至少对齐时间戳,否则融合算法会失效。Jacinto 提供硬件触发和全局时间戳机制,由 R5F 或专用同步模块管理。
- 内存布局:DSP 和 GPU 访问同一块帧缓冲时,需要统一的内存映射和缓存一致性策略,否则会出现"看到旧帧"的问题。
在实际项目中,判断一个功能该放在哪个模块,可以问三个问题:它是逐像素运算还是高层逻辑?它需要硬实时还是可以容忍调度延迟?它的数据量是否值得经过 DDR?答案通常就能把功能定位到 VISS/VPAC、DSP/GPU 或 CPU 上。
五、一个可参考的配置示例
假设要做一个 4 路环视 + 1 路前向感知的系统,一种合理的模块分配如下(参数为示例假设,非实测):
摄像头配置:
环视 4 路:1280×720 @30fps,RAW10,CSI-2 虚拟通道 0~3
前向 1 路:1920×1080 @30fps,RAW12,CSI-2 虚拟通道 4
处理分配:
VISS:5 路并行 ISP,输出 YUV422
VPAC:环视做畸变校正 + 金字塔;前向做缩放
C7x DSP:前向目标检测(输入 512×512 张量)
GPU:环视 3D 拼接渲染 + 图层合成
A72:GStreamer 管线管理、结果上报
R5F:摄像头触发同步、CAN 输出
DSS:输出 1920×1080 到中控屏,叠加检测框图层
这个示例说明:同一颗 SoC 上,不同摄像头可以走不同的处理路径,最终在 DSS 汇合。设计者的工作,就是根据每路摄像头的用途、分辨率和实时性要求,把任务分配到最合适的硬件单元,并保证数据通路不成为瓶颈。