来历:知乎

时隔一年,总算有时机再攒一颗芯片。这一次,是热门中的轿车芯片。

记住两年前,在我国找不出几家做前装轿车芯片的公司。而两年后的今日,忽然如漫山遍野般的涌现出十多家,其规模涵盖了辅佐驾驭,中控,仪表盘,T-Box,网关,车身操控,电池办理,硬件加解密,激光雷达,毫米波雷达,图画传感器和图画信号处理器等,八仙过海各显神通。

全球规模内,轿车芯片一年销售额大致是400亿刀,其间数字芯片100亿刀:信息文娱(中控)芯片约25亿刀,均价在25刀;MCU约60亿刀,30亿片,均价2刀;辅佐驾驭约17亿刀。全球一年大约卖一亿辆车,每辆车均匀100刀的数字芯片。其间辅佐驾驭芯片处于快速增长阶段。轿车芯片的首要供货商,恩智浦,瑞萨数字部分较多,英飞凌,德州仪器模仿部分较多。轿车芯片是仅存的几个赢利还不错的商场,技能门槛也并非不行逾越,更不存在肯定的生态闭环。只是量没有消费电子那么大,一年出个几百万片就不错了。在这个范畴里,新造车实力方兴未已,传统造车实力寻求差异化,又赶上5G,主动驾驭与人工智能的热门,所以轿车芯片成了继虚拟现实,矿机,NB-IOT,人工智能之后新的出资方向。


上图是一个典型的轿车电子体系结构。这个体系分为几个域,车身,动力总成,底盘,信息文娱,辅佐驾驭,网关和T-Box。每个域有着各自的域操控器,经过车载以太网和Can总线互联。咱们就以架构上最杂乱的中控和辅佐驾驭芯片为例,翻开评论其规划思路与方法。

新一代的中控芯片的架构如下图,首要由处理器,图形处理器,多媒体,图画处理,安全(Security)办理,功用安全(Safety),片上调试和总线等子体系构成。它和一般的运用途理器差异首要在于虚拟化,功用安全,实时性和车规级电气规范。


先说虚拟化。虚拟化其实是从服务器来的概念,为什么轿车也会有这个需求?两点原因:现在的中控芯片有一个趋势,集成仪表盘,下降本钱。曾经的仪表盘一般是用微操控器做的,图形界面也较简略。而现在的体系越来越炫,乃至需求图形处理器来参加。很天然的,这就使得中控和仪表盘合到单颗芯片内。它们跑的是不同的操作体系,虚拟化能更好的完结软件阻隔。当然,有些厂商以为虚拟化还不行,需求靠物理阻隔才定心,这是后话,稍后翻开。另一个趋势是中控自身需求一同支撑多个屏幕,每个屏幕分归于不同的虚拟机和操作体系,这样能简化软件规划,进步软件的牢靠性。

虚拟化在硬件上有什么详细要求?这并没有清晰界说。能够依托处理器自带的二阶内存办理单元(s2MMU),完结软件虚拟机;也能够在内存操控器前放一个硬件防火墙,对拜访内存的地址进行查看和过滤,不做地址重映射;还能够运用体系内存办理单元SMMU完结完好的硬件虚拟化,这是咱们要要点介绍的。


如上图黄色框所示,每个主设备和总线之间,都加了一个MMU600。为什么每个主设备后都要加?很简略,假如不加,那必定存在安全漏洞,和软件虚拟化无异。那为何不必防火墙?防火墙的的完结方法,一般是用一个片上内存来寄存过滤表项。假如做到4K字节的颗粒度,那4G字节内存就需求1百万项,每项8位,一共1MB的片上内存,这是个不小的本钱。别的一个原因是,防火墙计划的物理地址空间对软件是不通明的,选用体系内存办理器SMMU600对上层软件通明,更靠近虚拟化的需求。


当处理器建议一次地址真假转化恳求,内存办理单元会在内部的TLB缓存和Table Walk缓存查找终究页表项和中心表项。假如在内部缓存没找到,那就需求去体系缓存或许内存读取。在最差状况下,每一阶的4层中心表或许都是未射中,4x4+4=20,终究会需求20次内存读取。关于体系内存办理器,状况或许更糟。如上图所示,因为SMMU自身还需引进多级描述符来映射多个页表,最极点状况需求36次的访存才干找到终究页表项。假如一切拜访都是这个推迟,显着无法接受。

Arm传统的规划是增加满意大的多级TLB缓存和table walk缓存,作用如下:


这是启用2阶地址映射后的实测成果,其各项缓存巨细均装备成较大,然后把两个主设备连到接口,进行地址较为随机的拜访。能够看到,主设备的5万次拜访,在经过SMMU后,发作了近5万次未射中。这意味着拜访的均匀推迟等于访存推迟,150ns以上。另一方面,处理器开了虚拟机后,它的随机访存功率,和未开虚拟机比,却能做到80%以上,这是为什么呢?答案很简略,处理器内部的MMU,会把中心页表的物理地址持续发到二级或许三级缓存,运用缓存来削减均匀推迟。而SMMU就没有这么走运,在Arm早年的手机处理器参阅规划中,并没有体系缓存。这种状况下,即便关于推迟不太灵敏的主设备,比方图形处理器,翻开虚拟化也会构成功用丢失,或许高达9%,这不是一个小数目。

怎样处理这个问题?在Arm服务器以及下一代手机芯片参阅规划中,会引进网状结构总线,而不是之前的crossbar结构的共同性总线。网状结构总线的长处,首要是提升了频率和带宽,而且,在供给多核共同性的一同,也能够把体系缓存交给各个主设备运用。不需求缓存的主设备仍是能够和曾经相同宣布非缓存的的数据传输,防止额定占用缓存,引起频频的缓存替换;一同,SMMU能够把页表和中心页表项放在缓存,然后缩短推迟。

Arm的SMMU600还做了一点改进,能够把TLB缓存靠近各个主设备做布局,在射中的状况下,一个时钟周期就能够完结翻译;一同,把table walk缓寄存到另一个当地,TLB缓存和table walk缓存经过内部总线互联。几个主设备能够一同运用一个table walk缓存,削减面积,便于布线的一同,又不失功率。其结构如下图:


假如咱们读一下Arm的SMMU3.x协议,会发现它是支撑双向页表维护信息播送的,这意味着除了缓存数据共同性外,一切的主设备,只需遵从SMMU3.x协议,能够和处理器一同运用一张页表。在辅佐驾驭芯片规划时,假如需求,把重要的加快器参加同一张页表,能够防止软件页表更新操作,进一步进步异构核算的功率。不过就SMU600而言,它只是支撑单向的播送,接了SMU600的主设备,自身的缓存和页表操作并不能播送到处理器,反过来是能够的。

关于当时的轿车芯片,假如没有体系缓存,那怎样削减设备虚拟化推迟呢?方法也是有的。轿车的虚拟机运用较为特别,现在8个虚拟机满意敷衍一切的分屏和多体系需求,而且一旦分配,运转阶段无需重复删去和生成。咱们彻底能够运用这点,把二阶段的SMMU页表变大,比方1GB,固定分配给某个虚拟机。这样,设备在进行二阶段地址映射时,只需少量几项TLB表项,就能够做到一向射中,极大下降推迟。需求留意的是,一旦把二阶映射的物理空间分配给某设备,就不能再收回并分给其他设备。不然,屡次收回后,就会呈现物理地址离散化,无法找到接连的大物理地址了。

SMMU接受的是从主设备发过来的物理地址,那它是怎样来区别虚拟机呢?靠的是相同从主设备发送过来的vmid/streamid。假如主设备自身并不支撑虚拟化,那就需求对它进行时分复用,让软件来写入vmid/streamid。当然,这个软件有必要运转在hypervisor或许是secure monitor,不然会有安全漏洞。详细的做法,是在虚拟机切换的时分,hypervisor修正寄存器化的vmid/streamid,供给输入给SMMU即可。假如拜访时的id和预设的不符,SMMU会报反常给hypervisor。

假如主设备要完结硬件的方法支撑虚拟化,那自身需求依据多组寄存器设置,主动宣布不同的vmid/streamid。为了对软件兼容,能够把不同组依照4KB鸿沟分隔,这样在二阶地址映射时,能够让相同的实地址拜访不同组的寄存器,而对驱动通明。一同,关于内部的资源也要做区别,不能让数据相互影响。假如用到缓存,那缓存还有必要对vmid灵敏,相同地址不同vmid的状况,有必要识别为未射中。

假如主设备自身不支撑虚拟化,而且自身特别杂乱,那还需求定制驱动。以Arm的图形处理器为例,到现在为止,硬件上还没有正式支撑虚拟化,假如软件要支撑,或许会有以下几种计划:

假定咱们用的Hypervisor是Xen,它运转于Arm处理器的EL2,虚拟机运转于EL0/1。正常的图形处理器驱动会分红用户空间与中心空间两部分。要完结虚拟化,时分复用图形处理器,Xen上自身不或许跑驱动,因为现在驱动只支撑Linux。所以就只能让虚拟机来跑原先的驱动,而没有方法在hypervisor上再运转一个驱动来进行拜访操控。一同,重映射图形处理器在CPU上的二阶段地址,让寄存器拜访和数据通路处于‘穿透’的形式,不引起反常,进步功率。相应的,让虚拟机直接拜访寄存器,那拜访操控就完结不了了。为了完结多虚拟机的调度,咱们能够在hypervisor里边完结一个调度器,而且在中心态的驱动部分隔放接口,让hypervisor能够主动调度。示意图如下:


这个完结的长处很显着,改动较少,完结简略,无论是Xen和KVM都能够适配。缺陷是主动权并不把握在hypervisor,假如某个虚拟机上烘托使命过于深重,一向不把操控权交给调度器,那只需强制重启。另一个显着的缺陷是,无法在图形处理器一同运转两个虚拟机上的使命。这就需求另一种虚拟机的完结方法,如下图:


在这种完结下,虚拟机里只跑驱动的用户空间,一切触及中心空间的调用全都扔到Hypervisor。这要求hypervisor自身是Linux,只需KVM契合这个要求。Arm的Mali图形处理器,硬件上是支撑指定某个烘托中心跑特定使命的,也便是能够把某个虚拟机的使命运转在特定烘托中心的。这样,假如有实时性的操作体系要跑,比方仪表盘,能够保存出一个核来,不被其他虚拟机抢占,来完结必定程度的QoS。此刻,图形处理器是实在一同跑两个虚拟机使命的,而不是时分复用。至于输出的frame buffer,不同的使命是能够放到不同物理地址的,只是无法区别SteamID,无法做阻隔。

Arm支撑硬件虚拟化的图形处理器估量还要一年才会出来。详细到细节,虚拟化除了需求寄存器分组,缓存对vmid灵敏之外,通用的一些单元也需求支撑分组。

关于虚拟机的功率,还有两点需求留意:


Arm现有的中止操控器GIC600,受限于GICv3.x协议,是没有方法绕过hypervisor,直接把虚拟中止送到Guest OS的。外部中止送进来,仍是得经由hypervisor权限设置寄存器,发作一个虚拟中止到Guest OS。中止直接送到Guest OS要到GICv4才会改进。

Armv8.1及之后的CPU,都支撑一个叫VHE的机制,能够加快2型虚拟机的切换。详细原理是,KVM等2型虚拟机,Hypervisor就在Linux中心里边,而Linux需求完好的2阶3/4层页表。别的一方面,Armv8.1之前的处理器EL2没有对应的页表。假如没有VHE,那这个Hypervisor有必要把一部分驻留在EL2做高权限操作,而Host Linux仍是运转在EL1。这样,许多操作需求从EL1堕入EL2,改完再回到EL1的Linux中心,多了一层跳转。有了VHE,那么Host Linux中心直接运转在EL2,能够操作EL1的4层页表的页表寄存器,软件上不必做修正。硬件上,这些拜访会被重定向到EL2,以确保权限。

关于1型虚拟机,比方Xen,这个改动没有影响。这儿咱们要提一下QNX的虚拟机,它是1型虚拟机。QNX是现在仅有一个能到达Asil-D等级的操作体系(包含Hypervisor)。假如需求完结Asil-D等级的体系,有必要把现有的软件从Linux体系移植到QNX。所幸的是,QNX也是契合Posix规范的,尤其是图形处理器的驱动,移植起来会省劲一些。QNX不是一切的模块都是Asil-D级,移植曩昔的驱动,其实是没有安全等级的。QNX依托Asil-D级的中心软件模块和Hypervisor,确保99%以上的失效掩盖率。假如子模块出了问题,那只能重启子模块。

前面说到,有些厂商以为虚拟化还不行,有些场景要物理阻隔。虚拟化的时分,硬件资源仍是同享的,只不过对软件是通明。这样其实并不能彻底防止硬件的抵触和确保优先级。请留意,硬件阻隔是separation,而不是分区partition,Partition是用MPU来做的。在中控的体系结构图内,咱们把选用物理阻隔的赤色部分独自列出来,如下图:


此刻的处理器A55和图形处理器G31,独立于作为信息文娱域的处理器A76/A55和图形处理器G76之外,具有自己的电源,时钟和电压。作为优化,赤色部分能够和其他的处理器用共同性总线连接起来,在不作为仪表盘运用的时分,作为SMP的一部分来运用。而需求阻隔的时分,用多路挑选连接到NoC或许内存操控器。这样既节省了面积,又完结了阻隔。

相同的,图形处理器也有物理阻隔的需求。完结其实并不杂乱,比支撑硬件虚拟化要直接,如下图:


因为图形处理器面积最大的是烘托中心SC,这部分不动。其他的硬件模块,每组核都仿制一份,组和组之间用内部总线ASN互联。当拆成多个图形处理器的时分,每个冗余模块别离操控自己的资源。此刻,每组GPU需求独立运转一个驱动。而把一切资源交融运转的时分,冗余的部分主动封闭,由一个模块会集调度。此刻,某些共用资源或许会遇到功用瓶颈,但轿车一般只会要求物理阻隔两个组,别离给仪表盘和信息文娱,而且仪表盘所需资源较少,交融的时分,能够启用信息文娱的同享单元,然后防止瓶颈。关于体系中其他的主设备,也能够运用相似的规划思路来完结阻隔。

有了一同支撑虚拟化和硬件阻隔的图形处理器,咱们的中控芯片构架会有如下改动:


此刻图形处理器的物理阻隔和硬件虚拟化能够一同启用,跑多份驱动,满意前文的需求。

至此,虚拟化和阻隔结束,开端评论车规。

现在咱们说的车规分两个,功用安全和电气规范。前者由ISO26262界说,后者由AEC-Q100界说。

功用安全在芯片上的规划准则是要尽或许多的找出芯片上的失效场景并纠正。失效又分为体系和随机两种,前者依托规划时的流程规范来确保,后者依赖于芯片规划上采纳的种种失效勘探机制来确保。咱们在这首要谈后者。

简略来说,芯片的失功率,是依据单个晶体管在某个工艺节点的失效概率,推导出片上逻辑或许内存的失效概率。面积越大,晶体管越多,相应的失功率越大。ISO26262把安全等级做了区分,常见的有ASIL-B和ASIL-D级。ASIL-B要求芯片能够掩盖90%的单点失效场景,而ASIL-D则是99%。这其实是个十分高的要求。一个晶体管的失效概率虽低,可是一般一个杂乱芯片是上亿个晶体管组成的,假如不采纳任何方法,那任何一点的过错都或许构成功用失效,失功率很高。

ISO26262手册第五篇的附件D,详细描述了硬件失效的勘探手法。在这部分,硬件体系被分为几个模块:输入端有传感器,连接件,中继,数模接口;处理部分包含处理单元,各类内存闪存。体系层面有总线,电源和时钟。体系结构如下图:


针对每一单元,ISO26262手册界说了一些方法,来检测这些单元是否失效,并给出每一种方法的牢靠度。比方传输线,能够有校验码,超时,计数器,发送测验向量等。再比方处理单元,能够运用软硬件自检,冗余加比较,额定硬件模块监测等方法。这些方法并不能简略的运用于芯片功用安全规划。那芯片上怎样办?咱们选用自底向上的方法,先从晶体管开端剖析,再到IP模块级,然后到芯片体系级,再评论几个典型场景,终究自顶向下剖析。

在芯片的随机过错中,有一类是永久过错,比方逻辑或许片上内存的某一位一向粘在0或许1,或许爽性短路及断路。关于这一类过错,在芯片封测的时分,咱们能够运用鸿沟扫描和MBIST来发现坏掉的晶体管。这样,问题就转化为怎样进步DFT的掩盖率。这一块,业界现已有老练的方法了。

只是有出厂测验是不行的,晶体管会在运用进程中渐渐老化损坏。因而,咱们需求在每次开机的时分都进行自检,提早发现问题,削减在体系运转状况下犯错的或许。此刻,咱们需求运用LBIST和MBIST。其原理和出厂测验很像,也是运用扫描链,不同的是芯片里需求LBIST/MBIST操控器,用来运转测验向量和模板。天然,这会引进额定的本钱。掩盖率越高,本钱相应越大。

有了LBIST/MBIST也还不行,咱们需求在晶体管失效发作后几个时钟周期就勘探到过错,而不是开机时分发现。关于逻辑来说,为了做到这点,最直接的方法莫过于选用冗余规划,也便是把逻辑仿制一份,然后用硬件比较器比较输出。一般这被称为锁步规划(Lock-Step)。理论上,关于有限状况机,只需输入共同,时钟周期共同,输出必定共同。一般数字部分不存在真随机单元,哪怕是缓存替换算法,也是伪随机的,所以上述条件能够满意。冗余的成果是逻辑面积增加一倍,比较器也会引进一些额定的面积开支和时序影响。

这么简略就完结了功用安全?并没有,有几个问题需求处理:


第一个问题是,比较器究竟比哪些信号?以处理器为例,假如咱们只是在对总线的接口上增加比较器,芯片内部的许多模块,比方写缓冲,并不能在较短且确认的时刻内把影响传递到对外接口,被比较器发现。此刻,处理器或许是处于失效状况而并没有被勘探出来。那咱们就不能说当时冗余机制能掩盖此类失效。为此,咱们需求把比较器连到内部子模块接口处,而且剖析是不是能在较短时刻内看到影响。这需求在规划阶段就考虑,详细做法如下图:


关于任何一个寄存器,必定能够找到影响它的组合逻辑和上一级寄存器。在这条通路上任何一位出了问题,那么在一个时钟周期后,咱们就能够看到寄存器输出与其冗余的模块发作不共同。把这个节点记为1,然后再以1的输入寄存器为新起点,找到节点2。顺次类推,咱们能够往前找出一条没有循环的通路,这条通路上的任何一点发作问题,在确认的较短时刻内,必定会在终究输出上反响出来。咱们把这个通路记为模块X。经过必定的EDA东西,咱们能够在芯片内找出若干个模块X,如下图的比方:


这儿,IP模块被划为存取单元(A门),标志单元(B门),核算单元(C门)和寄存器组(D门)。从输出端看,于上一级寄存器间连线所掩盖的组合逻辑为门数,一个寄存器算10个门。如上图,存取单元的地址寄存器输出受24个组合逻辑门外加2个寄存器的影响,那共存在44种单点过错会引起失效。依此类推,寄存器组的1号输出,受28个门影响,而2号受49个门影响。加起来一共121种或许。简略核算可知,存取单元失功率44/121=36.4%,寄存器组算计77/121=63.6%。是其间有些门被核算了屡次,比方图中的G1,这一点会反映在总的概率里边。

依据上述的思维,咱们来看处理器是怎样做的。在EDA东西的协助下,咱们将它区分为几个大模块:内存办理单元,写缓冲,取指单元,数据处理单元,程序追寻缓冲, 数据/指令缓存,总线接口单元, 时钟和重置操控单元, ECC/奇偶校验操控单元, 中止接口, 监听操控单元。此处,咱们没有把片上内存包含进去,即便是评论缓存,也指的是操控逻辑部分。

每一个单元内,又能够细分红许多子模块。以数据处理单元为例, 又分为通用寄存器组,存取单元,浮点单元,浮点寄存器组,解码单元,调试单元,操控信号单元,体系寄存器组,分支履行单元等。每一个子单元又能够再一次细分。细分的意图是判别在晶体管失效时,受其影响的寄存器是不是会失效,而且这个失效能被外部比较器勘探到。这就需求把内部信号拉到外面。那究竟怎样决议哪些信号拉出去哪些不拉?掩盖率是不是满意?东西给的节点和模块信息只能作为参阅,规划人员仍是要一个个查看来做终究决议。一般会有许多信号被拉出来,比方Cortex-R5,20多万门的逻辑,终究送到比较器的信号数达2000多个,均匀每100门就有一个信号。

在芯片过认证的时分,假如IP自身没有过经过认证,或许曾经没有被广泛选用,认证组织或许会需求一条条的和芯片公司评论,看看连出来的的管脚是不是能供给满意的失效检测掩盖率。一般这些规划相关的信息,IP公司并不会供给给芯片公司,所以认证公司或许会要和IP规划公司拿这些信息,导致更长的认证时刻。相应的,假如是广泛运用的IP模块,这个时刻能够缩短。

处理了冗余规划掩盖率的问题,还有第二个问题。假如遭受电磁冲击或许射线影响,即运用了冗余规划,也或许两个模块同一时刻发作相同的过错。这个比较简略处理,只需把两个相同的逻辑,输入错开几拍就能够。在输出的时分,错开相同的拍数,使得比较器仍是看到相同的成果。

第三个问题,仿制了一份逻辑,而且比较器发现了过错,能把他纠正过来吗?很可惜,不能。除非仿制两分逻辑,三个一同比较。这样的价值便是再增加原先100%的逻辑部分面积,关于大的处理器规划,根本没人这么做。假如是小的处理逻辑,比方看门狗电路,却是能够。

第四,逻辑比较器自身,也是或许犯错的。这类过错现已被ISO26262界说,也便是所谓的潜藏过错Latent Fault。假如发现比较器自身的失效掩盖率不行,那相同能够对比较器选用冗余规划,做比较器的比较器,进步它的掩盖率。关于Asil-D来说,潜藏过错掩盖率需求到达90%,而Asil-B是60%。

以上都是关于逻辑过错的剖析。还有一类是内存过错。这儿内存指的是片上内存,也包含嵌入式闪存。内存的过错比较简略发现,一般ECC就能够做到99%掩盖率,1位纠正多位报错。有些内存,比方一级指令缓存,只支撑奇偶校验,不支撑纠正。

关于逻辑的冗余和内存的ECC,为了验证勘探机制自身是不是能到达规划的要求,芯片里边需求参加过错注入。请留意,过错注入机制自身并不是为了验证芯片里单点过错失效和多点过错失功率,只是为了验证过错勘探机制。

综上所述,逻辑冗余和内存ECC是协助咱们到达Asil-B/D等级的必要手法。没有冗余规划的时分,把一个程序在一个核上运转两遍,然后比较成果,也是一种通向高等级安全的方法,但只是适用于简略的,实时性要求不高的运算。假如存在永久过错,这个方法就会失效。相同,用两个非冗余处理器一同做相同运算,也是一种方法。但假如核算很杂乱,这样做不但会增加体系推迟和带宽,本钱也并不低。

上述两种方法并不能从本质上改进安全等级,假如终究安全等级需求Asil-D,这两种方法会要求拆解后也得到达Asil-B。而Asil-B的单点90%掩盖率,不必冗余机制相同很难到达。还有一种方法,单路核算,另一路判别其成果是不是合理。作为监测的这一路进步到Asil-D。这只需在特定场景才有或许运用,咱们后边会评论到。

综上所述,要做通用的Asil-B/D,最好从规划开端就运用逻辑冗余和内存ECC。


实践规划中,特别是关于处理器,在冗余规划之外,还有一套过错发现和纠正机制。Arm把它称作RAS (Reliability,Availability,Serviceability)。RAS并不能替代冗余规划来完结Asilb-B/D,究竟它的掩盖率太低。但有些场景,比方ECC报错,指令报错,这套机制能够在不重启中心的状况下纠正过错,或许阻挠过错在纠正前被分散(Data Poisoning),又或许记载下过错时的上下文。这是它的长处,在没有冗余规划的芯片里也是有一些用途的。

让咱们结合ISO26262文档,来看看Arm的面向轿车运用的IP是怎样完结高等级功用安全的。


上面是A76AE装备图,也便是面向轿车的A76,它引进了Split-Lock的规划。正常状况下,能够当4核SMP用,在冗余形式下,中心内一切的逻辑和内存都仿制两份,互为备份。这两种形式需求重启来进行切换,不能动态切换,关于轿车运用来说满意。中心内部增加的比较器,约占5%的面积,频率也会有5%左右的丢失。


新的A76AE是Armv8.2架构,如上图所示,一个处理器组之内,包含了DSU做三级缓存和内部互联。和中心部分不同,这儿选用的是传统的锁步形式,只仿制逻辑,内存仍是一份。省了大面积的缓存开支。一般DSU里边逻辑只占很小一部分,而且面积运用率还很低,所以终究额定的面积并不大,15%左右。

Arm还有一个支撑轿车Asil-D等级的处理器A65AE,能够作为小核,放在不同的处理器组,并和大核经过CMN600AE总线互联,供给高能效比的异构核算。A65AE支撑单核双线程,经过增加一个寄存器组,使得两个软件线程能够在一个物理核上同享流水线,而且对软件通明。这其实开端来自于网络处理器的需求,履行单元常常等候高推迟的读传输。为了进步流水线运用率,A65AE增加了5%左右的硬件寄存器,进步了20%左右的总功用。

下图是辅佐驾驭芯片里A76AE和A65AE的各种组合。在轿车上,尤其是在辅佐驾驭的范畴,相同存在一同需求巨细核的场景:大核跑决议计划,单线程功用要求高;小核跑核算,能效比要求高。


接下来看看Arm新的实时处理器Cortex-R52,一般它被当作安全岛来运用,是整个芯片的安全规划柱石。在R52上,各种安全机制均有所表现,包含锁步,实时虚拟化,地址阻隔,内存ECC,总线ECC,在线MBIST,LBIST,在线软件测验库,RAS,如下图所示:


R52的一同支撑锁步和Split-Lock形式。锁步形式下,只需一个核,冗余部分只是仿制逻辑,不仿制内存,逻辑便是额定的本钱,无法省掉。Split-Lock形式,装备完好的两套核,包含逻辑与内存,平常作为Split形式运用,相当于两个AMP,在进入Lock形式时,其间一套的内存不起作用。此外,因为选用的是MPU的虚拟化,地址并没有重映射,只是多了一层拜访查看。这也就意味着地址对软件不通明,不同的虚拟机能够看到他人的地址,只不过无法拜访。

R52的最大亮点是完结了实时虚拟化,这是为了软件到达更高的安全等级而预备的。和A系列依据MMU的虚拟化不同,它是在本来的EL1 MPU基础上,增加了EL2 2MPU。一同,为了确保R系列的实时性,防止咱们前文说到的SMMU访内推迟极大增加的问题,R52没有选用内存映射,也不转化地址,而是用片上内存,做两层的权限查看。用户能够指定几十个区域,颗粒度能够不同,可是无法做到页表那么多的条数。在R52上,因为没有A系列的EL3,安全发动就需求先进入EL2,然后再树立信赖链,流程和A系列相似。

另一个重要的安全规划是支撑在线的MBIST和SBIST。在线MBIST原理并不杂乱,它在片上内存接口前增加操控逻辑,不断勘探是不是有处理器那儿发过来的传输。假如没有,那就趁闲暇时刻读写内存并做测验。SBIST便是针对处理器IP的在线软件测验。咱们能够把这个测验运转在某个虚拟机上,经过中止来周期性的切换,花5%的时刻来不断检测硬件。当然,有必要把虚拟机切软硬件换时刻确保在较小规模内,不影响实时使命的调度。

这两种在线测验,能够作为开机自检的弥补,也能够作为在锁步/ECC机制但点过错掩盖率不行时的弥补,更能够作为发现潜藏过错的弥补。可是在高等级的安全规划中,尤其是在安全岛的规划里,只是靠这两种在线测验发现单点过错仍是不行的,也只能作为弥补。

其他方面,R52还对MPU编程做了优化,不是像曾经需求针对一个CP15寄存器填,填完再用内存壁垒指令确保写入次第。现在选用多组寄存器方法,根本20-30时钟周期就能够完结虚拟机切换的寄存器编程。此外中止寄存器放到了cluster内部,不必再经过AXI口出去,削减一些推迟。

再来看看中止操控器GIC600AE。以AE结束的IP表明在原有的基础上做了功用安全规划,能够支撑到Asil-D。GIC600AE结构如下图:


和处理器相同,GIC600AE的逻辑部分是靠锁步来支撑Asil-B/D,内存部分是ECC。不同的是,不像处理器是一个单一硬核,GIC600AE是一个分布式的结构,布局布线能够分隔,只是在中心有个分配器(Distributor)。每个处理器邻近的子分配器(Redistributor)和分配器之间,就需求安全总线协议规划,这便是新的AMBA点对点功用安全扩展:


能够看到的是,各类AMBA的地址和数据线,接口上均增加了奇偶校验,这也是ISO26262所要求的传输线安全方法之一;关于重置和时钟,P/Q通道等信号,大多选用仿制的方法来维护;而关于AXIS端口,则选用负载加上CRC的方法,免除增加管脚。因为中止操控器不像处理器,能够有中止体系来处理各类过错和失效,因而GIC600AE在分配器中增加了一个过错办理单元,能够把咱们所提及的各类过错做会集办理,记载并上报。此外,在分配器与子分配器之间,GIC600AE还增加了看门狗,防止超时未呼应。

因为现在GIC600AE还比较新,关于一些老的规划,或许并没有与之匹配的中止操控器可用。这种状况下,就只能把和安全相关的工作用轮询来完结,防止走中止通道。轮询的目标能够是一段ECC维护的内存,也能够是有冗余规划的硬件锁或许外置exclusive monitor。

MMU600AE也是相似的安全规划,在此咱们不深化评论。关于Coresight这样的片上调试体系,因为自身并不触及安全,它的过错被称作safe fault,不计入考虑规模。 咱们接下去看看CMN600AE。

CMN600是Arm服务器总线IP,它最大的特点是网状拓扑结构,对外支撑AMBA CHI接口,内部改用路由结构转发数据,并供给硬件共同性和体系缓存,还支撑多芯片互联。CMN600在T16FFC上能够做到2Ghz,极大的拓宽了带宽,十分适宜ADAS这类有许多异构核算的运用。


CMN600AE做了功用安全规划,引进了完好的端到端的失效勘探机制。如上图,整个总线被分红三类模块,主设备,总线,从设备。主设备与总线,总线与从设备之间,总线内部,会有过错勘探编码,也便是EDC。遍地的EDC战略能够是不同的。


这是主设备与总线,总线与从设备接口处的EDC,和GCI600AE的有些相似,只不过更全。关于一些操控类信号,选用仿制的方法,有时分把两根线正负回转;关于数据线和地址线,采纳增加奇偶位的做法。

在总线内部,因为网状总线的特点是把传输转成管脚更少的包FLIT传输,所以在每个包后边,加了CRC-8数据作为校验,而不是增加管脚。关于总线处理模块,依旧选用逻辑锁步和内存ECC来做安全规划。此外,CMN600在传输上加了计数器,假如从设备端超时不呼应,那就报反常。

除了锁步,ECC和传输线维护,有一类IP模块规划,能够运用简略一些的方法,来到达必定的安全等级。下图是一个简略的图画信号处理单元,早年到后,流水别离是Raw域,RGB域,YUV域,每个域都包含了各自的子模块。模块之间,包含到DDR的传输,运用传输线安全规划。而子模块内部,假如输出成果是单调递加,单调递减或许在某一区域内的,就能够用带冗余的简略逻辑做硬件监控,来完结Asil-B/D等级。


咱们取RGB域上的Local Tome Mapping为例。Local Tome Mapping的原意是,关于高动态HDR或许规范动态规模SDR的图,能够把部分的亮度调整到一个适宜规模内,作用如下图。依据这个假定,咱们能够写简略逻辑,看某个区域的像素是不是色彩坚持不变,而亮度和本来比有合理进步。这个简略的逻辑,能够运用锁步来确保高等级功用安全。依据功用安全的功用分化准则,Asil-D能够分化为Asil-D的监控模块和QM的功用模块,这样,仍是能确保整个Local Tome Mapping子模块的高安全等级。


以上是IP模块等级关于安全规划的考量,接下来咱们谈下模块级实时性规划。

所谓实时性,是在一个确认的,比较小的时刻内处理完使命。许多时分,咱们其实并不是真的需求实时性,而只是需求一个比较高的均匀功用。Arm的R系列专门为严厉的实时性规划:确认的几十ns的中止呼应时刻;紧耦合内存确保流水线在一个时钟周期就能拜访指令和数据;内部总线具有QoS确保优先级;不存在页表,MPU做在中心内部,无需外部拜访。实在的运用场景或许并不需求纳秒级的呼应时刻,哪怕是马达操控,体系呼应在毫秒级也满意了。而毫秒与纳秒差了1百万倍。这就给了Arm的A系列时机。

A系列最大的不确认性来自于拜访外部内存时的推迟。咱们前面在评论虚拟机的时分剖析过,最差状况下,一次页表读取,或许需求20倍的访存时刻,差不多是3us。为了使A系列有或许用于实时性使命,软件上的优化是有必要的,包含虚拟机上下文切换等。硬件上,能够缩短特权级切换时刻,也能够采纳固定分配来进步页表查找射中率,还能够固定分配某块缓存或许片上内存给某处理器。方法许多,纷歧一列出。

以上的优化能够削减单个处理单元的推迟。可是杂乱体系里有许多主设备,它们之间同享内存和其他从设备,是有或许发作堵塞和死锁的。死锁能够在规划流程进程中经过充沛的验证来发现,而堵塞就得靠优先级QoS规划来防止了。下面咱们看看CMN600AE是怎样处理的。

实时处理最简略的计划是给传输分优先级。芯片中的总线和从设备依据优先级来决议先后处理。可是只是选用优先级会有个问题,便是某些内部资源,比方缓冲,表项现已被低优先级的传输占用了。此刻假如来一个高优先级的传输,因为之前的还没有完结,就会呈现高优先级被低优先级堵塞的状况。怎样办?能够预先保存相应的资源给高优先级。


如上图,在每个与主设备的接口处,都有一个QoS模块,里边包含了一个优先级界说,能够被软件编程。这个优先级会跟着传输到总线的每一个部分,每个部分都依据优先级来给它相应的资源。有时分,相同高优先级的恳求过多,超过了体系资源的接受规模。这时分,CMN600AE的内部模块,会通知恳求传输的模块重传,并给它一个筹码。每恳求一次,筹码加一。下次这个筹码就会跟着新的恳求一同传过来,只需资源有闲暇,那么具有最高筹码的恳求将被答应。QoS模块还担任核算它所办理的传输,看看均匀推迟是多少,传输距离是多少,然后动态调整其优先级。

CMN600AE另一个很重要的特性是支撑片间硬件共同性互联。关于辅佐驾驭芯片,当面积大到必定程度,比方400mm^2@16nm,良率会敏捷跌落。这时分,进一步增加面积不是一个好的挑选。应对的方法是完结片间互联,削减单个die的面积。当然,完结高速的PHY自身也会引进相当大的面积,TSMC16FFC上一个支撑PCIe Gen4x16的PHY就要6个平方毫米,相当于四核A55加DSU,这儿需求做好取舍。片间互联也会引进额定的片间推迟,或许会到达50ns。


如上图,有了CMN600AE和片间互联协议CML,咱们就能够把MMU600AE和GIC600AE悉数串联起来,完结片间虚拟化和中止体系,对软件彻底通明。其间,MMU600AE访存的实时性靠固定分配虚拟机,以及运用大页表来确保,意图是消除页表项的未射中。关于中止体系的实时性,片内的话运用传统的SPI/PPI,问题不大,片外的话,只能运用PCIe的音讯中止机制MSI了。支撑音讯中止需求ITS表,相似于页表,也寄存在内存中,也有相似缓存的规划。只需确保ITS缓存条目满意多,映射的设备数量不太多,也是能够消除未射中,进步实时性的。

以上是关于确保实时性的一些考量。接着来看看AEC-Q100,和芯片规划相关的是温度和电压。

温度规划相对简略,只需工艺答应,规范库和内存单元支撑,那只需在做后端时参加温度约束条件即可。现在新的中控和辅佐驾驭多用TSMC16FFC,能够支撑-40C~150C的节温,相当于环境-40C~125C,其价值是献身必定的频率和面积。

ESD测验是对接口的要求,包含2000V+的HBM和6A+的CDM。和封装相关,也和芯片IO规划相关。和数字部分IP相同,PHY和GPIO也需求运用IP来支撑AEC-Q100。此处的GPIO指的是200Mhz以下的低速IO,包含但并不限于SPI/PWM/I2C等接口协议。

以GPIO为例,车载设备一般需求支撑3.3V和1.8V。为了契合AEC-Q100,GPIO在规划时就能接受额定的电流,并剖析各种状况,看看是不是每一条电路分支都能被掩盖到。一般关于车用GPIO,只是用仿真来确保规划的牢靠度还不行,还有必要实在流片,用测验芯片做HTOL/LTOL测验,不断改变温度,做满2600小时。不然,会发作仿真经过可是测验芯片过不了测验的问题。一旦测验失效,那有必要做失效剖析,看看是哪里的电流承载不了,然后修bug从头流片测验。

一同,GPIO自身相同需求支撑功用安全,也便是要参加勘探电路,对各类或许发作的失效报警。相对来说,模仿电路失效品种较少,比较简略做到Asil-D。相应的,IP还得供给FMEA和FMEDA陈述,供芯片公司过认证。


上图是集成在芯片内部的GPIO,集成时,除了要刺进一些特别的单元来完结不同电压的IO模块阻隔,还需求留意必定的IO上电次第。

至此,IP模块剖析结束。接下去咱们从芯片体系层面开端剖析中控和辅佐驾驭芯片。


让咱们回头看看上面的中控芯片结构图。最重要的是赤色框内的安全岛,由R52和紧耦合内存,中止操控器,总线,内存操控器,以及DMA操控器,硬件锁,SRAM等组成。抱负状况下,每一个模块都需求是Asil-B/D的。假如做不到,那么至少R52,紧耦合内存和硬件锁做到。由它们构成安全的柱石,用来轮询其他模块是否发作毛病。一同,这个安全岛还能够作为体系操控器,来操控其他模块的电源,电压和时钟状况;不然,还需求一个Asil-B/D的电源办理的有限状况机来做这件工作,详细能够参阅CMN600AE里时钟,P/Q通道和重置信号的规划。

作为信息文娱域的处理器,多媒体,加解密,总线,中止操控器,调试体系等均无需安全等级,犯错不影响驾驭。需求安全等级的是仪表盘,Asil-B级。因为咱们这儿现已做了阻隔规划,所以不需求考虑信息文娱域的巨细核以及其他主设备对其发作的影响。内存操控器虽然是同享的,但只需做好了相似CMN600AE的QoS,保存出相应的资源,也不必忧虑被低优先级堵塞。

黄色框内作为仪表盘处理器的A55,很难被替换成R52,因为图形处理器一般需求支撑MMU的操作体系。此处的操作体系,能够是Asil-B/D级的QNX等,也能够是Asil-B/D级虚拟机之上树立的实时操作体系。另一方面,A55虽然有ECC和RAS机制,但并不支撑锁步,很难做到通用场景下的Asil-B等级。至于相同被阻隔的图形处理器G31,更没有安全规划。那怎样把仪表盘做到Asil-B?一旦发作毛病,比方仪表盘画不出正确的图层,或许爽性不呼应,咱们能够把A55和G31扫除在安全状况之外,让R52驱动外置LED灯奉告驾驭员过错信息。这样,就把问题归到了怎样用Asil-D级的安全岛勘探过错。这个就相对要简略多了。能够核算每一帧r的CRC,看看是不是接连几帧不变;也能够定时让A55呼应中止或许喂狗,又或许一同选用。

在这儿,咱们引进了一个概念,犯错处理。在失效发作后,体系需求在失效忍受时刻距离(FTTI)内进入安全状况。所谓的安全状况,能够是之前的正常运转状况,也能够是应急的处理状况。之前仪表盘的过错正告LED便是一种应急处理的安全状况。

关于锁步规划,最简略的做法便是重置整个逻辑。假如是处理器,那就需求重启相应的处理器中心。而这个重启,有必要在失效忍受时刻距离内完结,不然,仍是要被视作失效。一般,这个最短忍受时刻是10毫秒到100毫秒,和体系运用场景有关。

关于简略的微操控器,100毫秒乃至10毫秒重启并不困难。但关于一个杂乱的处理器,重启便是麻烦事了。假如依照传统的开机流程,那几秒钟是需求的,无法契合要求。那咱们就只剩余两条路,第一个是运用虚拟机。假如发作失效的并不是Hypervisor所运转的处理器核,能够只重启某个虚拟机来完结加快。关于重要的高实时使命,还能够两个虚拟机跑同一个事务,互为备份,一个出问题那马上切别的一路;也能够用一个虚拟机待机,看其他哪个虚拟机重启,马上开端接手那个虚拟机的事务。假如是Hypervisor所运转的处理器核重启,那优化重启进程,保存当时上下文环境至内存,而且尽量调整驱动发动进程,做到最早运用的主设备优先初始化。能够参阅手机上的Suspend To Ram机制,手机根本上能够做到休眠时全芯片下电,数据保存在DDR,唤醒时处理器起来调用显现模块,先显现之前保存的图层,再发动图形处理器烘托新的帧,做到无显着感觉。运用这种机制,关于仪表盘失效,能够先告警,然后在毫秒级的时刻内完结相应子体系重启。


再来看看媒体部分的安全规划问题。上图中是倒车后视的子体系,图画信号处理是C71(Asil-B),R52(Asil-D),总线NIC450(QM),DMA330(QM),SRAM(带ECC),显现模块D71(QM)。子体系要求做到Asil-B等级。因为并不是一切模块都做到了Asil-B,咱们需求对其做失效树剖析。实在呈现失效的场景,在于显现画面冻结在某一帧。瞬时过错引起的一些问题,比方某帧画面有坏点,并不构成失效。因而,咱们要做的工作就变成两件:先用R52从显现模块获取每一帧的CRC,看看是不是接连多帧都不变,假如犯错,马上亮灯告警,这个核算有必要在失效忍受时刻距离内完结;其次,开机或许周期性运转LBIST/MBIST,看看是不是存在永久过错,有的话也需求告警。只需图画的源头C71有Asil-B,R52高于Asil-B,我i们能够放松对其他几个模块勘探瞬时过错的要求。

接下来咱们看辅佐驾驭的芯片结构图,和中控不同,辅佐驾驭需求感知和决议计划,是一个杂乱的实时运算进程,没有方法经过安全岛监测来到达高等级安全,只能经过处理器自身来确保。所以这儿的处理器悉数换成了带冗余规划的A76AE和A65AE。虚拟化在这个体系里并不是有必要,MMU600AE只是是为了真假地址转化。因为没有选用虚拟机,各个处理单元之间的数据阻隔能够靠CMN600AE的MPU来完结。没有经过CMN600AE的设备,需求在和总线之间增加MPU来实施地址维护,而且一切的MPU装备要坚持共同。另一方面,运用MPU也约束了分区不能太多,不然就需求映射到内存。究竟运用虚拟机仍是MPU进行阻隔需求看运用来决议。别的,假如需求片间互联,那一切主设备都应该经过NoC AE构成子网连到CMN600AE。


这个结构的核算流是这样的:C71(Asil-B)把数据从传感器搜集,做固定的图画信号处理,把成果放到DDR;A65AE读取数据,进行车道检测等传统的矢量运算。相关于大核,A65AE供给了高能效比的运算才能,适宜多路并行核算。也能够把使命丢到图形处理器来运算,推迟稍大,能效比也很高。假如触及神经网络运算,那A76AE会把使命调度到AI加快器上,一同在算子缺乏的状况下担任部分核算。也能够调度到图形处理器,不存在算子不支撑的问题。当然,关于神经网络核算,能效比仍是赶不上专用加快器。A76AE作为大核,具有很高的单线程功用,能够用来做决议计划。

CMN600AE作为桥梁,连接了一切设备,并供给高带宽,硬件共同性以及体系缓存。受布局布线的约束,仍是需求NoC把带宽和推迟需求不高的设备经过子网连到CMN600AE。

终究齐截下要点。轿车芯片的关键是实时性,功用安全,电气,虚拟化。功用安全最杂乱,需求IP级就开端支撑。假如不契合,那需求场景剖析做分化,用最少的价值完结安全。

推荐阅读