ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

自动驾驶SoC从架构到流片:如何突破Mobileye与英伟达的护城河

自动驾驶SoC从架构到流片:如何突破Mobileye与英伟达的护城河 自动驾驶芯片这个赛道过去几年我一直在关注也跟不少做SoC前端设计、验证和底层软件的朋友聊过。大家有个共识Mobileye和英伟达看似是两座翻不过去的大山但它们的护城河并没有想象中那么不可逾越。Mobileye强在算法与芯片的深度耦合英伟达强在通用算力和生态但两者的软肋同样明显——一个太封闭一个太贵太耗电。这就给后来者留出了空间。这篇文章我想从一颗自动驾驶SoC从零定义到流片前验证的完整视角把架构选型、算力分配、功能安全、工具链这些环节拆开来讲既讲清楚为什么这么设计也把实际工程中容易踩的坑摆出来。不管你是刚入行的数字IC工程师还是想了解车载芯片底层逻辑的软件开发者应该都能从中找到能直接参考的东西。1. 先想清楚这颗芯片到底要打谁1.1 Mobileye的EyeQ系列凭什么能效比这么高很多人一上来就说Mobileye算法好其实更准确的说法是它的芯片架构和算法是同一拨人设计的。EyeQ系列从EyeQ3到EyeQ6一直走的是ASIP专用指令集处理器路线内部有大量的专用加速单元比如用于光流计算的矢量引擎、用于特征提取的卷积加速器。这些单元不是通用可编程的而是针对自家算法做了指令级优化。结果就是跑同样的感知任务EyeQ的功耗可以做到个位数瓦而英伟达的方案往往要几十瓦。但代价也很明显客户想改算法基本不可能。你只能用Mobileye提供的感知结果想自己训练网络部署上去门都没有。这种封闭模式在早期L2阶段还能接受到了L2以上主机厂和Tier1都想掌握差异化Mobileye的份额就开始被侵蚀。1.2 英伟达Orin和Thor的通用性代价英伟达走的是另一条路用GPU做通用并行计算配合ARM CPU核做调度再堆上大容量内存带宽。Orin单颗254 TOPSThor直接干到2000 TOPS纸面参数很吓人。但你要知道这些算力不是白来的。Orin的功耗在60W到70W量级Thor更高散热设计稍微不到位就降频。而且GPU的利用率是个玄学实际跑Transformer类模型有效算力可能只有标称的30%到50%。英伟达真正的护城河是CUDA和TensorRT这套软件栈。主机厂和算法公司已经在上面投了大量人力迁移成本极高。但这也意味着如果你做一颗新芯片光有硬件不够还得让客户能把现有模型相对容易地搬过来。1.3 后来者的切入点在哪里我的判断是新芯片的机会在中间地带比Mobileye开放比英伟达省电。具体来说就是提供一套可编程的NPU架构支持主流框架PyTorch、TensorFlow的模型导入同时在能效比上做到Orin的两倍以上。另外功能安全必须做到ASIL-D这是上车的前置条件。Mobileye和英伟达在功能安全上都有布局但新玩家如果能在架构层面就把安全机制做进去而不是事后打补丁反而可能成为优势。2. 架构设计ARM核、NPU和内存子系统怎么配2.1 ARM CPU集群的选型逻辑自动驾驶SoC里ARM核主要干三件事跑操作系统和调度、处理控制逻辑、做安全岛。选型上Cortex-A78AE是目前比较主流的选择它支持Split-Lock模式可以把两个核锁步运行做ASIL-D也可以分开跑做高性能。A78AE之上还有X系列但功耗太高一般不会全用X核。我的建议是主计算集群用4到8个A78AE安全岛用双核锁步的A55或R52。为什么不用最新的A710AE因为车载芯片的生命周期很长从设计到量产要三到四年选一个已经经过市场验证的核更稳妥。另外ARM的CMN互联总线在核数多的时候优势明显但核数少的时候用CCI或CCN就够了没必要上CMN增加面积和功耗。2.2 NPU架构SIMD还是脉动阵列NPU是这颗芯片的核心竞争力。目前主流路线有两种一种是SIMD单指令多数据架构像CEVA的XM系列灵活度高适合多种算子另一种是脉动阵列像Google TPU那种矩阵乘效率极高但对非矩阵算子不友好。自动驾驶感知模型里卷积和矩阵乘占大头但也有很多元素级操作、归一化、激活函数。纯脉动阵列跑这些会浪费周期。我的做法是混合架构主阵列用脉动阵列做矩阵乘配一个SIMD向量单元处理元素级操作再用一个标量单元做控制流。这样在跑BEVTransformer这类模型时有效利用率能到70%以上。算力目标怎么定如果对标Orin的254 TOPS考虑到能效比要翻倍INT8算力定在256 TOPS左右功耗控制在30W以内。这个目标有挑战但通过架构优化和先进制程比如5nm或4nm是可以做到的。2.3 内存带宽被低估的瓶颈很多人算力堆得很高结果内存带宽跟不上NPU大部分时间在等数据。自动驾驶模型对带宽的需求很大尤其是BEV这类需要多摄像头特征融合的。我的经验是每100 TOPS算力至少配100 GB/s的带宽否则利用率上不去。LPDDR5是目前比较现实的选择速率6400 Mbps位宽256-bit的话带宽就是204.8 GB/s。如果要更高得上LPDDR5X或者HBM但HBM成本太高车载一般用不起。缓存设计上NPU内部要有足够的SRAM做权重和激活值的缓冲减少对DDR的访问。一般每TOPS配1MB到2MB的SRAM比较合理。3. 功能安全不是贴标签得从架构里长出来3.1 ASIL-D对芯片设计的具体约束ASIL-D是ISO 26262里最高的安全等级对芯片的要求非常具体。首先是诊断覆盖率单点故障度量要超过99%潜伏故障度量要超过90%。这意味着芯片里要有大量的自检逻辑、ECC、锁步核、看门狗。其次是失效模式要可分析每个模块的失效都要有对应的安全机制。举个例子NPU里的MAC阵列如果某个乘法器出错结果可能完全错误。所以要么做冗余计算要么做结果校验。我的做法是在关键路径上加ECC对权重和激活值做奇偶校验同时用双核锁步的R52做安全监控定期检查NPU的状态寄存器。3.2 安全岛的设计细节安全岛是ASIL-D芯片的标配它独立于主计算集群负责监控、故障处理和降级控制。安全岛里一般放双核锁步的MCU配独立的电源域和时钟源。即使主芯片挂了安全岛还能让车安全靠边。设计安全岛时要注意几点第一安全岛的电源和时钟必须独立不能和主域共用第二安全岛和主域的通信要有超时机制主域不响应就触发降级第三安全岛的软件要足够简单最好是裸机或RTOS不要上Linux减少失效风险。3.3 信息安全与功能安全的交叉功能安全管的是随机失效信息安全管的是恶意攻击。两者在芯片层面有交叉比如安全启动、加密引擎、真随机数发生器。自动驾驶芯片必须支持安全启动确保固件没被篡改。加密引擎要支持AES-256、SHA-256这些算法用于车云通信和数据保护。我的建议是在芯片里单独划一个安全子系统包含HSM硬件安全模块、TRNG、安全存储。HSM独立于主CPU有自己的核和存储即使主系统被攻破HSM还能保护密钥。这个子系统也要过ASIL-D因为如果它失效可能导致安全机制被绕过。4. 工具链和软件栈决定客户愿不愿意用4.1 编译器从PyTorch到NPU指令芯片做得再好如果客户不能方便地把模型部署上去就是白搭。编译器是连接框架和硬件的桥梁。主流做法是做一个中间表示IR把PyTorch或TensorFlow的模型转成IR再做图优化、算子融合、量化最后生成NPU指令。这里有个坑很多算子NPU不支持需要回退到CPU。回退多了性能就崩了。所以编译器要能自动识别不支持的算子并且有高效的CPU实现。另外量化是必须的FP32模型直接跑太慢要转成INT8。量化会掉精度所以编译器要支持量化感知训练QAT和训练后量化PTQ让客户能调。4.2 仿真和验证环境客户在芯片流片前就要开始开发所以需要仿真环境。一般提供两种一种是功能仿真用SystemC或QEMU跑得慢但能看到所有细节另一种是FPGA原型跑得快但调试难。我的经验是QEMU做早期软件开发够用了但性能评估必须用FPGA或Emulator否则数据不准。验证环境还要包括性能分析工具让客户能看到NPU利用率、内存带宽占用、各模块功耗。这些数据对优化模型很重要。工具链的成熟度直接决定客户的学习曲线Mobileye和英伟达在这方面积累很深新玩家必须投入足够资源。4.3 参考模型和算子库为了降低客户迁移成本要提供参考模型和算子库。参考模型是用Python或C写的功能上和硬件一致但性能差很多用于功能验证。算子库是优化过的客户可以直接调用。算子库要覆盖常见的卷积、池化、归一化、激活、矩阵乘等还要支持自定义算子。我的做法是算子库分两层底层是硬件指令封装上层是框架适配。这样客户用PyTorch写的模型经过编译器就能映射到算子库上。算子库的覆盖率和性能是客户选型时的重要考量。5. 流片前的验证怎么保证一次成功5.1 验证策略从模块到系统芯片验证占整个设计周期的60%以上自动驾驶芯片更复杂因为要过功能安全。验证策略一般是分层的模块级验证、子系统级验证、系统级验证。模块级用UVM覆盖率要冲到100%子系统级用C测试用例跑真实场景系统级用FPGA原型跑操作系统和完整模型。功能安全验证是额外的要注入故障看安全机制能不能检测到并响应。比如在NPU的SRAM里注入位翻转看ECC能不能纠正纠正不了能不能报错。这些故障注入用例要覆盖所有安全机制。5.2 原型验证的坑FPGA原型是流片前最接近真实的验证手段但坑很多。首先是时序FPGA跑不到芯片的目标频率一般只能到10MHz到20MHz所以性能数据要按比例换算。其次是容量大芯片的FPGA原型要分多片片间互联会引入延迟影响性能评估。我的经验是FPGA原型主要用来跑功能性能评估用Emulator。Emulator贵但时序准确能跑真实软件栈。另外原型上的内存模型和真实芯片有差异DDR的延迟和带宽要仔细建模否则性能数据会偏乐观。5.3 硅后调试的准备流片回来不代表万事大吉硅后调试往往要几个月。要在芯片里预留足够的调试接口比如JTAG、Trace、性能计数器。Trace能记录NPU的执行历史出问题时可以回放。性能计数器能实时监控各模块的利用率帮助定位瓶颈。还要准备硅后验证板包括电源、时钟、DDR、外设。板子设计要和芯片的电源域匹配支持动态调压调频。硅后调试的另一个重点是温度自动驾驶芯片在车里环境恶劣要在高低温下都验证一遍。6. 一些实操中的经验和教训6.1 IP选型自研还是外购不是所有模块都要自研。CPU核、DDR控制器、PCIe、USB这些标准IP外购更划算ARM、Synopsys、Cadence都有成熟方案。但NPU、ISP、安全岛这些差异化模块建议自研。自研NPU能更好地和算法协同自研ISP能针对车载摄像头优化。外购IP要注意集成问题。比如ARM的CMN互联配置不对会导致死锁。DDR控制器的参数要仔细调否则带宽上不去。我的建议是外购IP要选有硅验证的最好有参考设计能减少集成风险。6.2 功耗管理别等到流片后才想功耗是自动驾驶芯片的硬指标必须从架构阶段就考虑。主要手段有动态电压频率调节DVFS、电源门控、时钟门控。DVFS要根据负载实时调NPU忙的时候升频闲的时候降频。电源门控要把不用的模块彻底断电减少漏电。但DVFS和电源门控会影响功能安全因为状态切换时可能出错。所以安全机制要能覆盖这些场景比如切换时先保存状态切换后校验。另外功耗管理策略要可配置不同车厂的需求不一样有的看重性能有的看重功耗。6.3 和算法团队的协作芯片团队和算法团队往往分开这容易出问题。算法团队想要更大的模型芯片团队想要更低的功耗。我的经验是从项目一开始就要让算法团队参与架构定义明确哪些算子要硬件加速哪些可以软件跑。芯片出来后算法团队要尽早拿到仿真环境开始移植和优化。还有一个坑是模型迭代。算法半年就更新一版芯片要三年怎么保证芯片不过时答案是架构要有前瞻性支持可编程同时编译器要能快速适配新算子。另外可以预留一些可配置的加速单元流片后通过固件更新支持新算子。6.4 成本控制别只盯着算力自动驾驶芯片的成本不只是晶圆还有封装、测试、内存、电源。5nm晶圆很贵但封装和测试也不便宜。大芯片的良率是个问题面积越大良率越低。所以要在算力和面积之间找平衡不是越大越好。内存成本也容易被忽略。LPDDR5比LPDDR4贵不少但带宽高。如果算力不高用LPDDR4就够了。另外芯片的引脚数影响封装成本引脚越多封装越贵。设计时要优化引脚复用减少不必要的接口。6.5 生态建设比芯片本身更难芯片做出来只是第一步生态建设才是长期挑战。要让客户用你的芯片得有开发板、SDK、文档、技术支持。开发板要便宜好用SDK要稳定文档要详细技术支持要响应快。这些投入不比芯片研发少。我的观察是新玩家往往低估了生态的难度。Mobileye和英伟达的生态是十几年积累的新玩家不可能一夜追上。但可以从细分市场切入比如先做某个特定场景的芯片把生态做深再逐步扩展。另外开源是个好策略把驱动和部分工具开源能吸引开发者加快生态建设。说到底做自动驾驶芯片是场马拉松不是短跑。架构、安全、工具链、生态每个环节都不能有短板。Mobileye和英伟达也不是不可战胜的它们的软肋就是后来者的机会。但机会只留给那些把细节做到位的团队。我在这个领域见过太多PPT芯片参数漂亮但流片回来跑不起来。真正能成的都是那些在验证和软件上舍得投入的团队。如果你正在做类似的项目我的建议是把功能安全和工具链的优先级提到最高这两样决定了客户敢不敢用你的芯片。算力可以慢慢迭代但安全和工具链一旦有硬伤客户转身就走。
返回列表