tricore architecture overview
Tricore 1.6.2 架构概览
1.1 Feature Summary
Tricore 的主要特点:
- 32位架构
- 4G 地址空间
- 支持16位 和 32位指令,以减小程序大小
- 大部分指令在一个CPU时钟周期内执行完成
- 分支指令(使用分支预测)
- 中断低延迟,使用快速上下文切换
- 专用于特定应用协处理器的专用接口,允许添加定制指令
- 零开销循环功能
- 双路、单时钟周期、16x16 位乘法累加单元(带可选饱和度,限制数据溢出)
- 可选的浮点运算单元和内存管理单元
- 广泛的位处理能力
- 支持单指令多数据(SIMD)的数据打包运算,支持2个16位数据的运算或4个8位数据的运算
- 灵活的中断优先级方案
- 支持字节和位寻址
- 数据内存和CPU寄存器按小端排序
- 支持内存保护
- 支持调试
1.2 Architectural Registers
包含寄存器:
- 32个通用寄存器
- 程序计数器
- 两个 32 位寄存器,包含状态标志、先前执行信息和保护信息(PCXI - 先前上下文信息寄存器,以及 PSW - 程序状态字)
PCXI、PSW 和 PC 寄存器对于存储和恢复任务上下文的过程至关重要。
32个通用寄存器被分为 16 个 32位数据寄存器(D[0]-D[15])和 16个 32位地址寄存器(A[0]-A[15])
其中,4个通用寄存器有特殊功能:
- D[15] 被用作隐式数据寄存器 (一些指令会默认使用 D[15]作为数据源或目标)
- A[10] 为栈指针寄存器
- A[11] 为返回地址寄存器
- A[15] 为隐式地址寄存器(一些寻址模式下,会被自动引用)
寄存器 [0H - 7H] 称为“低位寄存器”,寄存器 [8H - FH] 称为“高位寄存器”。
寄存器 A[0]、A[1]、A[8] 和 A[9] 被定义为系统全局寄存器。这些寄存器不包含在高位或低位上下文中,并且不会在调用或中断之间保存和恢复。它们通常由操作系统使用,可以利用它们存储关键的系统信息,避免频繁存取内存,提高性能。
例如:(1)存储调度器(Scheduler)所需的全局变量。(2)在不同任务或不同CPU核心之间传递关键数据,而不会因为上下文切换丢失。(3)由于这些寄存器不受任务切换影响,因此可以用于存储频繁访问的系统数据,减少RAM访问,提高整体计算速度
1.3 Data Types
指令集支持以下数据类型的操作:
- Boolean
- Bit String
- Byte
- Signed Fraction
- Address
- Signed / Unsigned Integer
- IEEE-754 Single-Precision Floating-Point (仅支持单精度,编写程序应该注意,非必要使用双精度的场景,应该主动声明使用单精度)
1.4 Memory Model
地址位宽为 32 位,可以访问 4GBytes 的统一程序和 I/O 内存。
地址空间被划分位 16 个段,每个段 256MBytes,地址的高 4 位用于选择具体的段。
1.5 Addressing Modes
寻址模式允许加载(Load)和存储(Store)指令高效地访问数据结构中的 简单数据元素,例如:
- 记录(Records)
- 随机访问或顺序访问的数组(Randomly and Sequentially Accessed Arrays)
- 栈(Stacks)
- 环形缓冲区(Circular Buffers)
TriCore 体系结构支持七种寻址模式,这些模式可以访问 8 位、16 位、32 位和 64 位宽的简单数据元素。
这些地址模式的设计:
- 支持高效编译 C/C++ 程序,优化指令执行;
- 便捷访问外设寄存器(Peripheral Registers);
- 优化典型 DSP 数据结构的实现:
- 滤波器 中的 环形缓冲区(Circular Buffers)
- 快速傅里叶变换(FFT) 中的 位反转索引(Bit-Reversed Indexing)
对于硬件不直接支持的寻址模式,可以通过短指令序列(Short Instruction Sequences)进行合成。
1.6 Tasks and Contexts
在Tricore架构中,任务分为两类:软件管理任务(Software Managed Tasks (SMTs))和中断服务程序(Interrupt Service Routines (ISRs))。
SMT由实时内核或操作系统的服务创建,并在调度软件的控制下进行调度。ISR由硬件调度以响应中断。
根据任务的功能,每个任务都会分配自己的模式:
- User-0 Mode:用于那些不访问外设的任务,该模式下不可以打开/关闭中断。
- User-1 Mode:用于那些访问普通,不受保护的外设的任务。通常,包括对串口的读写访问、对定时器的读访问以及大多数 I/O 状态寄存器的读访问。此模式下的任务可能会短时间禁用中断。(此模式的默认行为可能会被系统控制寄存器覆盖。)
- Supervisor Mode: 允许读写系统寄存器和所有外设。使用该模式的任务可以关闭中断。
各个模式主要通过处理器状态字 (PSW) 中的 I/O 模式位启用或禁用。
任何任务都关联有一组状态元素,这些元素统称为任务的上下文。上下文是处理器定义相关任务状态并使其能够继续执行所需的一切。这包括任务使用的 CPU 通用寄存器、任务的程序计数器 (PC) 及其程序状态信息(PCXI 和 PSW)。该架构通过硬件高效地管理和维护任务的上下文。上下文细分为上层上下文和下层上下文。
上下文保存区:
该架构使用固定大小的上下文保存区 (CSA) 链表。CSA 由 16 个字的内存存储组成,并按 16 字边界对齐。每个 CSA 只能保存一个上层上下文或一个下层上下文。CSA 通过链接字链接在一起。
该架构比传统的微处理器和微控制器更快地保存和恢复上下文。独特的内存子系统设计和宽数据路径使该架构能够在处理器寄存器和片上存储器之间进行快速数据传输。当事件或指令导致程序执行中断时,就会发生上下文切换。导致程序执行中断的事件和指令包括:
- 中断或服务请求(系统调用)
- 陷阱
- 函数调用
1.7 Interrupt System
中断系统是围绕 可编程服务请求节点(srn)构建的。
服务请求被定义为中断请求或DMA(直接内存访问)请求。 服务请求可能来自片上外设、外部硬件软件。
1.7.1 Interrupt Priority
服务请求的优先级管理:服务请求采用优先级机制,并允许嵌套中断。优先级规则如下:
- 高优先级的服务请求可以中断低优先级中断的处理过程。
- 具有相同优先级的中断源无法相互打断。
- 中断控制单元(ICU) 根据优先级号进行仲裁,决定哪一个中断源获胜。
所有 服务请求 都会分配 优先级号(SRPN,Service Request Priority Number),每个中断服务程序(ISR)都有独立的优先级号。
1.8 Trap System
陷阱(Trap)由不可屏蔽中断(Non-Maskable Interrupt, NMI)、指令异常或非法访问等事件触发。TriCore架构定义了八种陷阱类,并进一步将其分为同步/异步、硬件/软件类型。每类trap分配一个陷阱标识号(Trap Identification Number, TIN),用于标识该类trap的具体触发原因。
trap处理程序的入口代码由代码块向量组成,每个代码块为单个trap提供入口。当陷阱触发时,TIN会被存入数据寄存器D[15]。
陷阱类列表
- MMU(内存管理单元)
- 内部保护(Internal Protection)
- 指令错误(Instruction Error)
- 上下文管理(Context Management)
- 系统总线与外围设备(System Bus and Peripherals)
- 断言陷阱(Assertion Trap)
- 系统调用(System Call)
- 不可屏蔽中断(Non-Maskable Interrupt, NMI)
1.9 Protection System
TriCore架构支持安全关键型嵌入式应用场景,其保护系统旨在保护核心系统功能免受非关键应用任务中软件错误的影响,并防止未授权任务访问关键系统外设。
整体保护系统由以下四个主要子系统构成:
- 陷阱(trap)系统
- I/O特权级别,TriCore支持三种I/O模式:
- User-0模式
- User-1模式
- 监管模式(Supervisor Mode)
User-1模式允许应用任务直接访问非关键系统外设,从而在无需将全部任务运行于监管模式(避免安全性风险)的前提下,实现高效的嵌入式系统设计。(User-1模式的默认行为可通过系统控制寄存器覆盖。)
- 内存保护系统:
该系统控制任务可访问的内存区域及允许的访问类型(如读、写、执行)。 - 时间保护系统:该系统提供对运行时超限(Run-Time Overrun)的防护。
虚拟内存与内存保护模型
需虚拟内存的应用:
可选内存管理单元(MMU)支持基于页面的内存保护模型,为每个内存页分配独立的访问权限。此设计与传统MMU架构兼容,便于移植依赖此类模型的标准操作系统。
无需虚拟内存的应用:
提供基于地址范围的内存保护系统,其与外设访问的I/O特权级别协同工作机制详见“内存保护系统”章节。
1.10 内存管理单元(MMU)
TriCore 处理器可以选择使用 可选的内存管理单元(MMU,Memory Management Unit)。当配置了 MMU 时,内存空间分为 物理地址空间 和 虚拟地址空间 两个区域。每个地址空间的大小均为 4GB,并且这 4GB 被划分为 16 个 256MB 的段。
上半部分段 [8H-FH]:
- 绕过虚拟映射,直接作为物理地址使用。
下半部分段 [0H-7H]:
- 如果 MMU 存在且启用,则这些段会被 虚拟映射。
- 如果 MMU 不存在或被禁用,则这些段会被 物理映射。
虚拟地址到物理地址的转换
在访问内存之前,虚拟地址始终会被转换为物理地址。这种转换方式取决于 MMU 模式 和 虚拟地址区域,主要有两种方式:
直接转换(Direct Translation):
- 如果虚拟地址属于 虚拟地址空间的上半部分,则该虚拟地址 直接作为物理地址使用。
- 如果虚拟地址属于 地址空间的下半部分,且处理器处于 物理模式(Physical Mode),则该虚拟地址 间接作为物理地址使用。
页表项(PTE,Page Table Entry)转换:
- 如果处理器处于 虚拟模式(Virtual Mode),且虚拟地址属于 地址空间的下半部分,则该虚拟地址会通过 PTE 转换。
- PTE 转换 通过 将虚拟页号(VPN,Virtual Page Number)替换为物理页号(PPN,Physical Page Number) 来获得物理地址。
1.11 核心调试控制器(CDC)
核心调试控制器(CDC,Core Debug Controller)旨在支持为实时系统(Real-Time Systems)提供非侵入式调试(Non-Intrusive Debugging)。
CPU核心(CPU Core)及片上存储器(On-Chip Memories)的大部分架构状态可以通过系统地址映射(System Address Map)访问。
调试功能是架构(Architecture)、实现(Implementation) 和 软件工具(Software Tools) 之间的接口。
对CDC的访问通常通过包含CPU的系统的片上调试支持(OCDS)提供。