我们已在上篇文章中介绍了基于Cortex-R52架构的MCU虚拟化特性,本文将继续针对MCU上的虚拟化特性,研究下新一代Aurix芯片TC4xxx是如何设计的。
关于TC4xx
Aurix TC4xx系列是英飞凌为车载实时应用所设计生产的第三代多核微控制器平台,28nm规格,采用增强型TriCore v1.8架构,最多支持6核,频率可高达500MHz。[1]
TC4系列芯片最高支持25MB片上存储,支持低延时Nvm访问。链接方面,支持5Gbps以太网,PCIe,10Mbit T1S以太网和CanXL,同时拥有硬件级的数据路由引擎加速器。安全方面,支持ASIL-D功能安全等级且遵循ISO21434信息安全要求。

TC4系列另外一大亮点是,配置了PPU(parallel processing unit)以支持AI特性,满足传感器融合,IDPS,模型预测控制等车载AI应用场景。


除此之外,由于引入了新的执行模式以及指令,TC4系列支持虚拟机应用场景,至多支持8个VM,和R52类似,拥有两级MPU。

基于TC4xx的虚拟机
虚拟机编号
TriCore v1.8所支持的8个VM中,一个为hypervisor,一个为实时VM,其他均为普通虚拟机。
Hypervisor编号为VM0,实时VM为VM1,其他为VM2-7。
TC4上的硬件资源也被分为三类:HRHV,HRA,HRB。HRHV是hypervisor使用的硬件资源,HRA则是给实时VM用的,其他VM则可使用HRB的硬件资源。每个硬件资源都有一组CSFR寄存器,例如HRHV_FCX,HRA_FCX,HRB_FCX,运行在HRHV的软件可以访问所有这些寄存器,运行在HRA/HRB的软件则只能访问对应的HRA/HRB寄存器。
如果只使用两个VM(VM0/VM1),那么两个VM的状态分别存留在HRA和HRB中,hypervisor负责切换HRA/HRB。如果多于两个普通VM被使用到,那么hypervisor需要在HRB和存储之间切换虚拟机状态。如果没有开启hypervisor,那么仅有HRA被使用到。
用户可由VCON0.VEN位设置是否启用Hypervisor,此bit位在下次复位之前仅支持写入一次,写入结束之后随即锁住 ,无法继续修改。
通过VCON1.CVMN位,用户可以了解此时是哪个VM正在运行。

运行模式
程序执行分为4种模式:
User-0:用于不需要访问外设的任务,无法在此模式下打开或关闭中断
User-1:用于需要访问未保护外设的任务,例如串口的读写,读取timer/大多数IO状态寄存器等,在这个模式下,任务可能会短时间地关闭中断
Supervisor:在这个模式下,能够读写系统寄存器和所有外设,任务可以关闭中断或者更改CPU中断优先级
Hypervisor:在这个模式下,运行读写虚拟化相关寄存器
中断系统
当使能虚拟化时,中断系统负责识别中断请求需要如何路由到某个CPU,或其他中断服务提供者(DMA等)。
调试与跟踪
当开启虚拟化时,通过修改调试配置寄存器(DBGCFG)/跟踪配置寄存器(TRCCFG),可以指定调试/跟踪整个CPU还是某个特定的虚拟机。
上下文切换
TriCore有专门的CSA提高上下文切换的效率,支持虚拟化的场景下同样需要用到CSA。(注:本文不对CSA作详细介绍)
假设使用HRA的VM1正在运行,HRA_FCX包含两个空闲CSA(A3/A4),PCX包含当前VM1运行状态的两个CSA(A2/A1),hypervisor则拥有三个空闲CSA。

当VM1切换到Hypervisor(VM0)后,Hypervisor的空闲CSA HV3将被使用,PCX指向CSA HV3,包含HRA状态。

当再从hypervisor切换回VM1时,CSA HV3数据被读出,恢复VM1状态。

现在,我们引入另外一个VM(VM2 in HRB),当前CSA使用状况为:

当从VM1需要切换到VM2时,Hypervisor首先需要介入,类似于上面举例,CSA使用状态为:

由于PCX指向了HRA的状态,无法用于恢复HRB,这个PCX的内容需要由hypervisor软件保存到一个变量当中,然后PCX载入指向HRB状态的CSA。

这时,hypervisor就可以开始切换到VM2了,从PCX恢复HRB状态,切换完毕后CSA使用状态为:

两级MPU
TC4包含两级MPU,无论虚拟化是否开启,一级MPU都是可以工作的,只有当开启虚拟化的状态下,二级MPU专为guest VM所用。Guest VM访问存储时,需要同时通过一级和二级MPU的判定。
EB tresos Embeded Hypervisor
在英飞凌的官方介绍中[2],提及到了演示程序使用到的是EB的MCU虚拟化产品。在介绍材料中,我们能看到,基于TriCore提供的核心上,产品可以支持separation kernel以及hypervisor,通过这样的方式可以做到硬件隔离不同的程序,以及基于同样核心可以同时运行不同的VM。

另外,基于EB的产品配置界面,我们还能看到VM调度选项,可以选择为固定优先级调度或者基于时间片调度。






参考
^Welcome to the next generation AURIX™ TC4x https://www.infineon.com/dgdl/Infineon_AURIX_TC4x.pdf?fileId=8ac78c8b7e4b5364017e4e1a407c0001
^Learn more about the new Hypervisor Virtualization features in AURIX™ TC4x https://www.infineon.com/cms/en/product/microcontroller/32-bit-tricore-microcontroller/32-bit-tricore-aurix-tc4x/#!?videoId=9-cK3rukMa8M3_3vcZcZG2