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 的摄像头为例,典型通路如下:

  1. 摄像头 → CSI-2 接收:每路摄像头通过 MIPI CSI-2 差分信号进入 SoC 的 CSI-RX 控制器。Jacinto 通常提供多路 CSI-2 端口,可支持 4 路以上独立输入。
  2. CSI-RX → VISS:RAW Bayer 数据被送入 VISS。VISS 内部完成黑电平校正、镜头阴影校正、去马赛克、白平衡、色彩校正、Gamma 等 ISP 处理,输出 YUV 或 RGB。VISS 支持多路虚拟通道,可同时处理多摄像头。
  3. VISS → VPAC:VPAC 进一步做缩放、金字塔生成、光流、直方图、畸变校正等视觉预处理,为后续算法准备多尺度图像。
  4. VPAC → 内存 / DSP / GPU:处理后的图像写入 DDR 或片上缓存,供 C7x DSP 做推理、GPU 做渲染,或由 CPU 做业务逻辑。
  5. 结果 → DSS:需要显示的画面(原始视频、叠加框、HUD 图层)送入 DSS,DSS 完成图层混合、缩放、色彩空间转换,输出到 MIPI DSI 或 LVDS 显示屏。

这条通路中,VISS 和 VPAC 是"硬实时"环节,通常由硬件流水线完成,CPU 只做配置和中断响应;DSP/GPU 是"计算"环节,负责算法;DSS 是"输出"环节。理解这条链路,就能判断某个功能应该放在哪个单元上实现。

Jacinto 多摄像头数据通路与异构模块分工 摄像头 ×4 2MP @30fps RAW Bayer CSI-2 RX MIPI 差分接收 多虚拟通道 VISS (ISP) 去马赛克/白平衡 RAW → YUV/RGB VPAC 缩放/金字塔/光流 畸变校正 共享内存 / DDR + 片上 SRAM 帧缓冲、中间结果、推理输入输出 C7x DSP + MMA 深度学习推理 点云/融合计算 GPU (PowerVR) 3D 渲染 / 图层合成 OpenCL 通用计算 Cortex-A72 Linux/QNX 调度 应用逻辑/框架 Cortex-R5F 安全岛/实时控制 CAN/以太网同步 DSS 显示子系统 多图层混合 / 缩放 / 色彩空间转换 MIPI DSI / LVDS 仪表 / HUD / 中控屏 输入 ISP/显示 视觉预处理 计算单元 共享内存

三、各模块的职责边界与协作要点

把上面的通路拆开看,每个模块都有明确的"该做"和"不该做":

模块核心职责典型输入典型输出不擅长/不应承担
CSI-2 RX接收 MIPI 差分信号,解包虚拟通道摄像头串行数据RAW 像素流图像处理、算法
VISSISP 处理:去马赛克、白平衡、GammaRAW BayerYUV/RGB深度学习、3D 渲染
VPAC缩放、金字塔、光流、畸变校正YUV/RGB多尺度图像、特征高层语义推理
C7x DSP + MMA推理、点云、融合计算预处理图像/张量检测框、分类结果操作系统调度
GPU3D 渲染、图层合成、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 汇合。设计者的工作,就是根据每路摄像头的用途、分辨率和实时性要求,把任务分配到最合适的硬件单元,并保证数据通路不成为瓶颈。