英飞凌Aurix2G TC3XX 芯片内核详解(一)——TriCore内核及寄存器介绍

英飞凌Aurix2G TC3XX 芯片内核详解(一)——TriCore内核及寄存器介绍

从本文开始,我们将分若干章节介绍TriCore内核架构。本文是该系列文章的第一篇,主要介绍Infineon Aurix2G TC3XX系列芯片内核简介及相关寄存器。


1. 芯片及内核介绍

计算机内核是指操作系统内核的设计和组织方式,它决定了内核如何管理计算机硬件资源、执行任务调度、处理中断等核心功能。不同的内核使用不同的内核指令集,内核架构也成为指令集架构,比如我们日常使用的计算机(Intel或AMD芯片),使用的就是X86指令集,内核就属于X86架构。常见的还有ARM架构、DSP架构和RISC-V架构。当我们想要掌握某款芯片,基于该芯片进行系统搭建时,就必须要了解该芯片的内核。

嵌入式领域的芯片一般都是精简指令集内核,比如RISC-V、ARM等, **精简指令集(RISC,Reduced Instruction Set Computing)是一种计算机处理器架构设计理念,其核心思想是将处理器的指令集设计得相对较小和简单,以提高执行效率。相对于复杂指令集计算机(CISC)**架构而言,RISC架构强调用更少、更基本的指令来完成操作,并且这些指令的执行时间相对较短。

英飞凌Aurix2G TC3XX系列芯片的内核架构是一种混合架构,同时结合了精简指令集计算机(RISC)和复杂指令集计算机(CISC)的特征,称为TriCore内核架构(以下简称TriCore)它是一款专门为实时性进行了优化的32位的单核(这里的单核并非指芯片的单核,而是系统架构只涉及一个核,多核之间相互独立,区别于多核架构)嵌入式系统架构。之所以命名为TriCore,是因为其集成了RISC架构、DSP架构和实时系统的技术于一体,形成了兼具三方优势的内核架构。
在这里插入图片描述

TriCore架构采用了RISC-V的高性能load/store数据处理模式,同时具有DSP的数据处理能力。TriCore是32位计算机系统,因此采用32位地址空间,支持可选的虚拟地址空间。下面是TriCore架构的特性:

  • 32位架构

  • 4GB的地址空间

  • 同时支持16位和32位指令,减少代码大小

  • 大多数指令在一个周期内执行

  • 分支指令(使用分支预测)

  • 使用并行数据存储器,实现低中断延迟与快速自动上下文切换

  • 专用接口特定于应用程序的协处理器,以允许添加定制指令

  • 零开销回路功能

  • 双/单时钟周期,16x16位乘法累加单元(可选饱和)

  • 可选浮点单元(FPU)和内存管理单元(MMU)

  • 广泛的位处理能力

  • 单指令多数据(SIMD)打包数据操作(2x16位或4x 8位操作数)

  • 灵活的中断优先级方案

  • 字节和位寻址

  • 数据内存和CPU寄存器的小端字节排序

  • 内存保护

  • 调试支持

    本文主要介绍程序模型通用寄存器和系统寄存器等。中断系统我们已经在之前发布的文章介绍过,上下文保存机制、TRAP系统等我们后续也会专门出文章进行介绍。

2. 内核详解

2.1 程序模型(Programming Model)

该小节主要介绍内核的数据类型、数据格式、存储模式以及地址空间等内容,因为计算机的本质其实是对数据的处理和呈现,因此要理解一款内核,首先要理解其数据的处理模型。

2.1.1 数据及内存

首先我们来看TriCore的数据模型,注意,这里提到的数据模型,是指内核在处理数据时的视角,并非我们C语言中定义数据的视角。TriCore架构支持下面几种数据类型:

  • Boolean:布尔型,FALSE表示0,TRUE表示1
  • Bit String:布尔串,一段Bit段,用于移位操作
  • Byte:字节,一个字节是8Bit的数据
  • Signed Fraction:有符号的分数,TriCore支持16位、32位、64位的分数
  • Address:地址表示一段32位地址数据(TriCore有专门的地址寄存器,下文会介绍)
  • Signed and Unsigned Integers:又符合和无符号整型,表示32位有、无符号数据
  • IEEE-754 Single-Precision Floating-Point Number:浮点数

TriCore是32位架构,因此大多数指令都是基于32位数据进行处理的,与数据类型相对应,其指令支持的数据格式如下图:

在这里插入图片描述

程序对数据的读取、存储操作是有对齐要求的,见下表:

在这里插入图片描述

同样外设的地址访问也是有对齐要求的:

在这里插入图片描述
TriCore的数据存储使用的是小端对齐,低字节在低地址。

在这里插入图片描述

TriCore是32位内核,因此地址最多支持0xFFFF FFFF,也就是4GB空间大小。因此地址空间的定义被分为16个段(Segments)[0 - F],地址最高位的4个Bit表示段号,每个段256MBytes大小。其中F段被用于外设寄存器地址段。

2.1.2 寻址模式

我们知道,计算机在进行数据计算过程中,需要不断进行数据的读取和存储,这中间有一个重要的流程就是寻址。不同的内核支持不同的寻址模式,TriCore支持的寻址模式如下表:

在这里插入图片描述

  • Absolute:绝对地址寻址模式,用于外设和全局变量的寻址
  • Base+Offset:基地址加偏移寻址方式,一般用于结构体成员寻址和局部变量的栈寻址
  • Pre-Increment and Pre-Decrement Addressing:预加/预减寻址,一般用于栈的操作
  • Post-Increment and Post-Decrement Addressing:后加/后减寻址,一般用于数据数据的处理指令
  • Circular:循环寻址,一般用于循环操作中
  • Bit-reverse:位翻转寻址,用于FFT算法中

2.2 通用寄存器和系统寄存器(General Purpose and System Registers)

TriCore的内核寄存器包括通用寄存器和系统寄存器,系统寄存器包括程序状态寄存器等。其中系统寄存器的地址是16位内核地址,读写采用的是专用的指令,MTCR(Move To Core Register)和MFCR(Move From Core Register)。

2.2.1 通用寄存器

通用寄存器是计算机体系结构中的寄存器,其设计用途是存储通用数据,而不是特定的数据类型或用途。通用寄存器可以存储整数浮点数内存地址等各种数据类型,而不受限于特定的操作或指令。

在许多计算机架构中,通用寄存器用于执行各种操作,如算术运算、逻辑运算、数据移动等。程序员可以使用这些寄存器来存储临时变量、中间计算结果和其他通用数据。通用寄存器的优点在于其灵活性和通用性,允许程序员更自由地使用寄存器来执行各种任务,而不受到特定数据类型或操作的限制。这有助于提高程序的灵活性和性能。

相比于ARM内核,TriCore有两类通用寄存器,包括16个32位数据寄存器(D[0]D[15])和16个32位**地址寄存器**(A[0]A[15])。
在这里插入图片描述

其按照功能有如下几类:

  • 通用寄存器:D[0]D[14]、A[2]A[7]、A[12]~A[14]为真正意义上的通用寄存器
  • A[15]和D[15]为隐式寄存器,32位指令下与通用寄存器功能相同,16位指令下作为默认的寄存器使用
  • A[0]、A[1]、A[8]、A[9]为全局寄存器,在函数调用、中断、异常等场景都不会进行操作
  • A[10]为栈指针寄存器
  • A[11]为返回地址寄存器

数据和地址寄存器的分离促进了算术和内存操作并行执行的高效实现。同时,相邻的两个奇偶寄存器还可以成对进行访问,比如通过E[0]访问由D[0]和D[1]组成的64位数据(D[1]存放高8位),通过P[0]访问由A[0]和A[1]组成的64位地址。

众所周知,在操作系统调度或中断程序切换过程中,系统需要保存上下文,其中主要的内容是保存寄存器。TriCore的通用寄存器分为高上下文低上下文,高上下文包括A[10]A[15]、D[8]D[15],低上下文包括A[2]A[7]、D[0]D[7]以及A[11],其中仅有返回地址寄存器A[11]在两部分中都存在。A[0]、A[1]、A[8]、A[9]作为全局地址寄存器,不存储在上下文中。

2.2.2 程序状态信息寄存器(Program State Information Registers)

程序状态信息寄存器包含三个寄存器:程序计数器,也就是我们常说的PC指针;程序状态字PSW;前一个上下文信息PCXI。

在这里插入图片描述

PC寄存器为32位程序计数器,反映了程序执行的位置,始终指向下一条即将执行的指令。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序状态字PSW顾名思义,是用来反映程序执行过程中的状态信息。其中:

  • USB:用户状态位(User Status Bits),用来保存指令执行过程中的副作用位,如溢出信息等,用于后续指令作条件判断

    在这里插入图片描述

  • RES:预留

  • PRS[2](Bit15)& PRS[1:0](Bit12,Bit13):保护寄存器集切换位(Protection Register Set bit),内存保护寄存器有多套配置,PRS用来选择程序保护寄存器或数据保护寄存器的配置切换

  • S:安全任务标识符(Safety Task Identifier),标注当前任务是否为安全任务

  • IO:I/O访问权限级别控制位(Access Privilege Level Control),TriCore内核对于外设寄存器的访问是由权限级别的:

  • 0:User-0 Mode,无权访问外设,在此权限下访问会产生PSE和MPP异常,也无法进行开关中断

  • 1:User-1 Mode,常规访问权限,在此权限下能够访问大部分外设,包括Port口的读写、定时器的读取和大部分I/O状态读取,能够开关中断

  • 2:Supervisor Mode,具有完全的外设访问控制权限

  • 3:Reserved Value

  • IS:中断栈控制位(Interrupt Stack Control),TriCore内核是有独立的中断栈寄存器ISP的,当进入中断且IS位为0的时候,硬件会先将栈寄存器置为ISP的值,以使用中断的特有栈(当然,在此之前硬件会自动保存SP指针,中断返回后会自动加载回来,不用担心被覆盖),并将IS位置1 。因为是共享栈,如果发生中断嵌套,则不作任何操作,继续往下使用中断栈

  • GW:全局地址寄存器写权限位,决定是否可写入全局地址寄存器,1表示有权限;全局地址寄存器一般用来指向某个关键的地址区域或关键的数据结构体,比如OS的任务调度控制块等;另外通常A[0]被用于短数据的读取和写入,A[1]也一般为编译器操作预留,A[8]和A[9]未作为编译器预留,一般用于指向系统的关键数据

  • CDE:调用深度计数使能位(Call Depth Count Enable),TriCore内核是有调用深度检查的,每次调用计数器加1,最大6位计数器,也就是最多支持64层调用(每个Task或者中断具有独立的上下文,因此独立计数),当超过调用上限,会产生异常;将CDE置0,可暂时关闭调用计数,但是在下次Call指令执行时会自动再次打开

  • CDC:调用深度计数器(Call Depth Counter),调用深度计数器,7个Bit位宽,溢出时产生异常,也可修改CDC降低调用深度上限,比如改为1111100,则4次调度就会产生异常
    在这里插入图片描述

    前一个上下文信息PCXI用来进行程序的上下文加载,当程序需要返回时,或中断结束调用时,都需要从这个地方向前链接,因此PCXI也称为链接字(Link Word),它和CSA的配合使得TriCore能够实现一套高效的硬件上下文保存机制,下面我们会介绍,这里先看PCXI的内容:

  • RES:预留

  • PCPN:前一个CPU中断优先级(Previous CPU Priority Number),在之前关于中断的文章中我们提到过,中断的处理流程的一个步骤,是将ICR.CCPN,也就是当前的CPU中断优先级位,写入到PCPN,也就是本寄存器位中,用于中断环境的保存,中断执行完之后再进行恢复

  • PIE:先前中断使能位(Previous Interrupt Enable),同PCPN,在中断处理流程中将CPU中断使能状态位ICR.IE,保存到PIE中,用于中断环境保存,中断执行完之后再进行恢复

  • UL:高、低上下文标签(Upper or Lower Context Tag),1表示高上下文,0表示低上下文

  • PCXS,PCXO:CSA是存储在内存中的,PCXS和PCXO用于指示存储地址,物理地址有32位,但是实际的内存空间没有这么大的,且CSA是64字节对齐,地址末尾6个为0,所以只需要20位就能指示上下文存储位置,具体算法是Addr=(PCXS<<12)|(PCXO<<6)

TriCore的上下文机制是利用CSA建立链表,PCXI指示链表的首位,以此形成函数调用栈关系。

2.2.3 栈管理寄存器

栈管理包括用户栈和中断栈,用到前文提到的栈指针寄存器A[10]中断指针寄存器ISP(Interrupt Stack Pointer),以及前文提到的PSW中的IS位,来进行栈的管理。当运行非中断程序时,CPU正常根据栈指针寄存器使用普通程序栈,当从Task进入中断时,硬件会自动切换到中断栈。

在这里插入图片描述

栈指针寄存器通常是程序启动时进行初始化,根据链接脚本分配的栈空间,设置栈起始地址。

在这里插入图片描述

中断栈指针寄存器的使用,能够防止中断程序侵占Task程序的栈。在程序进入中断PSW.IS==0时,系统会从ISP中加载中断栈地址到栈指针中,以使用中断的栈;如果是中断的嵌套,PSW.IS==1,则不进行任何操作,继续使用中断栈。当中断执行完毕后,PSW和栈指针都会从上下文中恢复,因此Task程序得以继续使用原先的栈.

2.2.4 系统控制寄存器

在这里插入图片描述

系统控制寄存器SYSCON的主要功能是对所属核进行控制(该寄存器有外设32位地址,可进行跨核访问,比如主核通过控制从核的BHALT位设置启动),主要包括:

  • RES:预留
  • BHALT:启动冻结状态控制位(Boot halt status and release),当芯片启动后,除了主核以外,该位都会置1,代表该核处于冻结状态,主核通过对该位写0来启动该核,启动后写1无效
  • U1_IO:User-1 Peripheral access as supervisor,前面我们提到用户模式包括User-0、User-1和Supervisor三种模式,该位能够允许User-1获得对外设的全部访问,不改变模式的情况下提高权限
  • U1_IED:User-1 Instruction execution disable,禁止或使能User-1模式下开关中断
  • ESDIS:Emulator Space Disable,仿真地址禁用
  • TS:进入异常(Trap)后PSW.S的默认值
  • IS:进入中断后PSW.S的默认值
  • TPROTEN:Temporal Protection Enable,1表示使能,0表示关闭
  • PROTEN:内存保护使能,注意需要先设置好内存保护配置再使能
  • FCDSF:空闲上下文列表耗尽粘滞标志位(Free Context List Depleted Sticky Flag),该位表征是否发生过上下文列表耗尽,因为CSA的空间是RAM中设置的,如果任务或中断过多,且都调用过深会导致CSA耗尽,从而该位置位,知道清除
2.2.5 Core_ID寄存器

在这里插入图片描述

Core_ID寄存器用来获取当前核的ID,在多核系统中,共用代码尤其是OS,获取所在核是非常重要的。

中断、内存保护、Trap相关的寄存器我们将会在模块单独介绍时候进行说明,这里就不展开介绍了。

3. 小结

本文主要介绍了Aurix TC3XX系列芯片的内核原理,从内核结构和寄存器对TriCore内核进行了说明。TriCore是基于三种内核发展而来的,因此从它身上还是能看到其他内核如ARM、RISC-V等的影子的,同时也结合了精简指令集和复杂指令集的优势,不仅有着较高的数据处理速度,也有类似DSP内核的复杂数据处理能力。下一篇内容,我们将结合TriCore内核指令和硬件逻辑,来介绍其上下文切换流程,以及其核心设计框架——CSA,这也是TriCore实现高实时性的关键机制。

参考资料

  1. Infineon-AURIX_TC3xx_Architecture_vol1-UserManual-v01_00-EN.pdf
  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 英飞凌aurix tc1.61架构是一种高性能的汽车电子控制单元(ECU)。该架构采用高度集成的设计,集成了诸多功能和接口,用于实现对车辆系统的精确控制和管理。 首先,aurix tc1.61架构具有强大的处理能力和高效的数据处理能力。它搭载了一款高性能的处理器,能够实现快速的指令运算和数据处理,以满足车辆控制系统的高要求。同时,架构中还内置了丰富的存储器,用于存储程序代码和实时数据,确保系统的稳定性和可靠性。 其次,aurix tc1.61架构具备丰富的外部接口和通信能力。它集成了各种通信接口,如CAN总线、FlexRay、以太网等,以实现与其他车辆模块的高效通信和数据交换。此外,架构还支持多个传感器和执行器的接入,并能够实现对其进行精确控制和管理,以实现车辆高级驾驶辅助系统(ADAS)的功能。 再次,aurix tc1.61架构具备高度的安全性和可靠性。架构中集成了多重安全机制,如内存检查、故障检测、硬件监控等,以确保系统在运行过程中的稳定性和安全性。此外,架构还支持硬件加密和软件保护机制,以保护系统的代码和数据安全。 总的来说,英飞凌aurix tc1.61架构是一种高性能、高安全性的汽车电子控制单元架构。它具备强大的处理能力和丰富的外部接口,能够实现对车辆系统的精确控制和管理,以满足汽车领域对高级驾驶辅助系统的需求。 ### 回答2: 英飞凌AURIX TC1.61架构是一种高度可靠和安全的嵌入式系统架构,广泛应用于汽车电子和工业控制领域。该架构基于ARM Cortex-R5内核,并具有多个硬件安全功能。 AURIX TC1.61架构采用了三层内存保护机制,确保了系统的可靠性和安全性。第一层是主线程中的特权区,用于运行操作系统和驱动程序。第二层是中断线程,用于处理实时事件和中断请求。第三层则是应用程序代码区,用于运行用户自定义的应用程序。 AURIX TC1.61架构还支持数据保护和加密技术。它提供了多个硬件数据保护单元(DPU),用于保护核心内存和外部存储器。此外,该架构还提供了硬件加密引擎,可以对数据进行加密和解密操作,以提高系统的安全性。 该架构还具备高性能和低功耗的特点。它的核心内存集成了缓存和预取器,可以提高数据存取的速度,并减少功耗。此外,AURIX TC1.61架构还支持动态电压调节技术,可以根据处理器的工作负载动态调整供电电压,进一步减少功耗。 总之,英飞凌AURIX TC1.61架构是一种高可靠性、高安全性、高性能和低功耗的嵌入式系统架构。它在汽车电子和工业控制领域具有广泛的应用前景。 ### 回答3: 英飞凌AURIX TC1.61架构是一种用于汽车电子系统的嵌入式处理器架构。该架构采用了多核设计,具有高性能和强大的实时计算能力。 AURIX TC1.61架构由英飞凌公司开发,旨在满足汽车电子系统对高可靠性和实时计算的要求。该架构采用三核设计,包括两个高性能的TriCore™处理核心和一个Lockstep核心,以及丰富的外设接口和内存控制器。这些处理核心能够同时运行不同的应用程序,实现复杂的任务分配和并行处理,提高系统的效率和可靠性。 AURIX TC1.61架构具有强大的实时计算能力,适用于处理复杂的汽车控制算法和数据处理任务。该架构支持高速通信接口,如CAN和Ethernet,用于与其他汽车子系统进行实时通信。此外,该架构还具备硬实时性能,以确保数据的准确处理和实时响应。 AURIX TC1.61架构还具有高度的可靠性和安全性。它采用了自动纠错编码和故障诊断机制,以及专门的防护措施,以防止外部攻击和内部故障对系统的影响。这些特性使得AURIX TC1.61成为汽车电子系统的理想选择,能够提供可靠的性能和安全的数据处理。 总而言之,英飞凌AURIX TC1.61架构是一种适用于汽车电子系统的嵌入式处理器架构,具有高性能、强大的实时计算能力、高度可靠性和安全性的特点。它能够满足汽车电子系统对复杂算法的处理和实时通信的需求,是汽车领域的先进技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值