毕业论文
您现在的位置: 在线软件 >> 在线软件发展 >> 正文 >> 正文

自动驾驶技术之智能驾驶域控制器SOC选型

来源:在线软件 时间:2023/4/9
外伤会引起白癜风吗 https://m-mip.39.net/baidianfeng/mipso_4702352.html

随着智能驾驶行业的发展,智能驾驶功能日益复杂,领航高速辅助、领航城区辅助、跨层记忆泊车等功能逐渐落地。智能驾驶系统对传感器、算力需求日益旺盛。

所谓的自动驾驶域控制器,即承担了自动驾驶所需要的数据处理运算力,包括但不限于毫米波雷达、摄像头、激光雷达、GPS、惯导等设备的数据处理,也承担了自动驾驶下,底层核心数据、联网数据的安全。作为一个中枢,自动驾驶域控制器承上启下,很好的服务了汽车的智能化。

智能驾驶系统既需要大量的算力,也需要多种类型的计算资源,典型的智能驾驶系统处理流程如下。

它接收并处理原始传感器信号,对车周环境进行实时的在线感知,其中包括对道路结构、车道线等静态元素,以及车辆、行人等动态障碍物的检测识别。经过多传感器和时序信息融合,转化为环境的统一表示,然后经过运动预测和决策规划模块生成本车的行驶轨迹,并转换成车辆控制信号输出到车辆执行器,从而完成自主驾驶的行为。整个系统处理过程通常需要涉及以下几种类型的计算资源:

深度学习类:环境感知模块是深度学习算力使用的大户,包括常见的各类图像、激光点云检测算法,比如物体检测、车道线检测、红绿灯识别等,都会涉及大量的典型神经网络(NN)的运算。此类模块通常使用高度定制化的NN加速器来实现。

视觉处理类:此类属于计算密集型,但并非深度学习类的算法模块,比如图像信号处理(ISP)、图像金字塔(Pyramid)、畸变矫正(Rectify)、局部特征提取、光流跟踪、图像编解码(Codec)等运算。此类模块通常使用硬化的专用视觉加速器来实现低时延。

通用计算类:虽然定制化的深度学习、视觉处理加速器可以满足大部分常见的成熟的计算密集型运算,但仍然无法覆盖全部需求。随着前沿技术的快速发展和自研技术的深入,往往还会产生相当一部分自定义的运算模块。此类模块通常也是计算密集型的操作,无法使用CPU高效实现,因此还需要通用的计算密集型处理单元(比如DSP、GPU)来实现。

逻辑运算类:此类模块包含大量的逻辑运算,不适合使用计算密集型的处理器实现,一般使用通用的CPU处理器来实现。此类模块包括常见的多传感器感知融合算法(比如卡尔曼滤波KF)、基于优化的决策规划算法、车辆控制算法、系统层面的功能逻辑、诊断逻辑、影子模式数据挖掘功能等。

典型的智能驾驶系统算力部署参考如下图。

如何在众多的SoC中挑选一颗匹配自家产品的SoC是一门复杂的系统工程,不单需要考虑深度学习算力,还需要考虑CPU算力、安全、内存带宽、功耗、成本等。

大疆车载致力于提供最佳性价比的智能驾驶方案,在核心芯片的选型上积攒了一些经验,在此予以分享。

一颗典型SoC的主要组成

1.CPU

CPU的内部架构可以简化为如下模型。

包括负责逻辑运算的ALU、取指/分支预测/数据转发等的Control、Cache和RAM等存储单元。相对GPU等并行运算核心,CPU的Control单元和存储单元功能更加强大,适合做逻辑控制。

在车载SoC中,根据功能不同CPU又分为SafetyMCU和ACPU,前者性能较弱但实时性和安全性更强,后者多核心、高主频、性能强大但实时性和安全性有所降低。

1.1SafetyMCU

SafetyMCU有多种常见的CPU架构,如英飞凌的TriCore、瑞萨的G3KH、ARMCortexM7、ARMCortexR5F。既有外置的MCU方案,也有内置的MCU方案,如TITDA4内置CortexR5F,SoC一般会内置SafetyMCU来提高系统的集成度。

例如,CortexR5FMCU核心的内部架构复杂程度参考下图,主要特点如下:

8级流水线;

CPU主频可以支持到1.0Ghz,远超传统MCU;

DataProcessingUnit负责各种运算和逻辑控制;

FPU负责浮点运算;

L1Instruction/DataCache是一级缓存,参考容量16KB+16KB;

MemoryProtectionUnit用于内存保护,保护能力有限,一般只能支持十几个区域的保护;

引自《DDID_cortex_r5_r1p2_trm.pdf》

SafetyMCU的核心一般是成对出现的,如下图的“PrimaryCore”和“ShadowCore”,两者实现指令级别的锁步(lock-step),通过“Compare”进行比较:周期性比较两个核的输出结果是否相同;如果相同则继续运行,否则需要采取一定的安全措施。容易看出,锁步核虽然用了两个核心,但其实只有一个核的算力。锁步核是实现MCU核心高诊断覆盖度的一种传统方法,这种方法已经在微控制器和复杂度较低的微处理器领域经过多年的成功验证。

SafetyMCU除要求CPU核心达到ASILD外,往往会要求内部总线、外设接口、电源等跟MainDomain隔离。否则,可能因为低安全级别的MainDomain的异常,如错误操作外设寄存器,导致MCUDomain异常。

SafetyMCU的算力一般使用KDMIPS(KiloDhrystoneMillionInstructionsexecutedPerSecond)表示,如CortexR5F的算力约2KDMIPS。

因为MCU运算和内存资源比较有限,且不支持MMU(MemoryManagementUnit,比MPU强大的内存管理单元),一般只能运行如FreeRTOS之类的小型RTOS。车载行业一般要求RTOS达到ASILD级别,常用的MCURTOS主要有AUTOSAROS,SafeRTOS。一般没有配套的libc和STL库,对C++的支持不够友好,比较难开发维护复杂软件。因为SafetyMCU的软硬件的安全性和实时性都较高,一般用于运行整车的数据交互、诊断、控制算法等软件。

综上,我们在进行SafetyMCU选型时,除了

转载请注明:http://www.0431gb208.com/sjszyzl/4162.html