通用寄存器和系统寄存器

本文围绕TriCore体系结构的内核寄存器展开,介绍了通用寄存器、程序状态信息寄存器等多种类型寄存器。阐述了各寄存器的组成、功能及使用方法,如通用寄存器由数据和地址寄存器组成,支持64位值;还提及了ENDINIT保护机制,增强关键CSFR的安全性。

内核寄存器有两种类型:

                                                通用寄存器(GPR)

                                                核心特殊功能寄存器(CSFRs)。

GPRs由16个通用数据寄存器和16个通用地址寄存器组成。

CSFRs控制内核的运行并提供内核的状态信息。

                                        通用寄存器

                                        系统寄存器(PSW, PC, PCXI)

                                        堆栈管理寄存器是(A[10]和ISP)

                                        SYSCON和CPU_ID寄存器

                                        Trap寄存器

                                        上下文管理寄存器

                                        内存保护寄存器

                                        内存管理寄存器

                                        调试寄存器

                                        浮点寄存器

                                        核心相关的特殊函数寄存器

重置值

需要注意的是,由于本文描述的是TriCore体系结构,而不是该体系结构的实现,因此没有给出一些重置值。如果没有给出,则这些值是特定于实现的。

ENDINIT保护

该体系结构支持初始化状态先于操作状态的概念。当处于初始化状态时,可以使用MTCR指令修改所有核心特殊函数寄存器。在运行状态下,只能以这种方式修改CSFR的子集。

所有其他函数在这些状态之间保持相同。仅在初始化状态下可写的CSFR被描述为ENDINIT保护。

初始化状态和操作状态之间的转换由系统实现控制。此功能仅允许在初始化状态下更改关键CSFR,从而为它们增加了额外的保护级别。

以下寄存器受ENDINIT保护:

BTV, BIV, ISP, PMAO, PMA1, PMA2, PCONO, DCONO, SEGEN

提供了一个安全特定版本的ENDINIT保护。

以下寄存器是受SAFETY_ENDINIT保护的:

SMACON、SYSCON、COMPAT、TPS_EXTIM_ENTRY_LVAL、 TPS_EXTIM_EXIT_LVAL


1、 通用寄存器

General Purpose Registers (GPRs) 

通用寄存器(GPR)平均分为:

                                        16个数据寄存器(DGPR), D[0] ~ D[15]

                                        16 个地址寄存器(AGPR), A[0] ~ A[15]

数据和地址寄存器的分离促进了算术和内存操作并行执行的高效实现。有几个指令允许在数据和地址寄存器之间交换信息(例如,用于创建或派生表索引)。为了支持64位值,可以将两个连续的奇偶数据寄存器连接起来,形成8个扩展寄存器(E[0]、E[2]、E[4]、E[6]、E[8]、E[10]、E[12]和E[14])。地址寄存器(P[O]、P[2]、P[4]、P[6]、P[8]、P[10]、P[12]和P[14])也可以以同样的方式使用。

寄存器A[0]、A[1]、A[8]、A[9]定义为系统全局寄存器。它们的内容不会在调用、陷阱或中断之间被保存或恢复。寄存器[10]被用作SP (Stack Pointer)。

寄存器[11]用于存储调用和链接跳转的返回地址(RA),以及存储中断和陷阱的返回程序计数器(PC)值。

虽然32位指令可以无限制地使用GPRs,但许多16位指令隐式地使用A[15]作为地址寄存器,D[15]作为数据寄存器。这种隐式使用简化了将这些指令编码为16位的过程。

通过使用奇数/偶数寄存器对,提供了对64位数据值的支持。在汇编程序语法中,这些寄存器对要么被称为一对32位寄存器(例如D[9]/D[8]),要么被称为扩展的64位寄存器。例如,E[8]是D[9]和D[8]的串接,其中D[8]是E[8]中最不重要的字。为了支持扩展寻址模式,偶数/奇数地址寄存器对将扩展地址引用保存为一对32位地址寄存器(例如[8]/[9])。

没有单独的浮点寄存器。数据寄存器用于执行浮点运算。使用快速上下文切换支持自动保存和恢复浮点数据。

GPRs是任务上下文的重要组成部分。当在内存中保存或恢复一个任务的上下文时

上下文被分为上层和下层上下文:

                                寄存器A[2]到A[7]和D[0]到D[7]是下层上下文的一部分

                                寄存器A[10] ~ A[15]和D[8] ~ D[15]是上层上下文的一部分

2 、程序状态信息寄存器

Program State Information Registers   

PC、PSW和PCXI寄存器保存和反映程序状态信息。当内容在这个过程中被存储、恢复或修改时,这些寄存器是存储和恢复任务上下文的重要部分。

                        PC:程序计数器

                        PSW:程序状态字

                        PCXI:以前的上下文信息程序计数器

32位程序计数器(PC)

保存着当前正在运行的指令的地址。程序计数器是任务状态信息的一部分。PC应该只在内核停止时写入。如果核心没有处于半状态,则写操作将不起作用。

程序状态字寄存器(PSW)是一个32位寄存器,它包含在通用寄存器值中没有捕获的特定于任务的体系结构状态。

下半部保存与保护系统相关的控制值和参数,包括:

                                                        保护寄存器设置(PRS)

                                                        I/O特权级别(IO)

                                                        中断堆栈标志(IS)

                                                        全局寄存器写权限标志(GW)

                                                        调用深度计数器(CDC)

                                                        调用深度计数使能字段(CDE)

PSW用户状态位

PSW的八个最高有效位被指定为用户状态位。这些位可以作为用户指令的执行副作用设置或清除,通常记录结果状态。单个比特也可以用来约束特定指令的操作。例如ADDX (Add Extended)和ADDC (Add with Carry)指令使用31位记录Add操作的执行,该位的预执行值反映在ADDC指令的结果中。

有两类指令使用用户状态位:

PSW的位[23:16]是保留位,在当前版本的架构中没有明确的用途。当PSW在系统复位后通过MFCR(从核心寄存器移动)指令读取时,它们读为0。

在通过MTCR(移动到核心寄存器)指令写入PSW后,它们的值在架构上是未定义的,应该写为0。

                可能产生进位和溢出结果的算术指令。

                特定于实现的协处理器指令,它可以以完全特定于实现的方式使用任何8位或全部8位。

访问权限级别控制(I/O权限)

软件管理任务(SMTs)是通过实时内核或操作系统的服务创建的,并在调度软件的控制下进行调度。中断服务例程(ISRs)是由硬件响应中断而分派的。ISR是处理器在接收到中断时直接调用的代码。SMTs有时被称为用户任务,假设它们在用户模式下执行。

根据任务的功能,为每个任务分配了自己的模式:

User-0模式:用于不访问外设的任务。此模式不能启用或禁用中断。

User-1模式:用于访问普通、未受保护的外设的任务。通常,这将是对串行端口的读或写访问、对定时器的读访问和大多数I/O状态寄存器。该模式下的任务可能会禁用中断。(此模式的默认行为可能被系统控制寄存器覆盖)。

Supervisor模式:允许对系统寄存器和所有外围设备进行读写访问。该模式下的任务可能会禁用中断。

一组状态元素与任何任务相关联,这些元素统称为任务的上下文。上下文是处理器定义关联任务的状态并允许其继续执行所需的一切。这包括任务使用的CPU通用寄存器、任务的程序计数器(PC)及其程序状态信息(PCXI和PSW)。该体系结构通过硬件有效地管理和维护任务的上下文。

先前上下文信息和指针寄存器(PCXI)

前一个上下文信息寄存器(PCXI)包含到前一个执行上下文的链接信息,支持中断和自动上下文切换。PCXI是任务状态信息的一部分。前一个上下文指针(PCX)保存前一个任务的CSA的地址。

3、 栈管理寄存器

Stack Management Registers  

体系结构中的堆栈管理支持用户堆栈和中断堆栈。地址寄存器A[10]、中断堆栈指针(ISP)和PSW位用于堆栈的管理。

A[10]被用作堆栈指针。这个寄存器的初始内容通常由RTOS在创建任务时设置,它允许将私有堆栈区域分配给各个任务。

ISP有助于防止中断服务例程(isr)访问私有堆栈区域并可能干扰软件管理任务的上下文。在该体系结构中实现了使用ISP而不是私有堆栈指针的自动切换。PSW.IS位表示哪个堆栈指针有效。当中断发生时,被中断的任务正在使用它的私有堆栈(PSW.IS == 0),则以中断任务的上层上下文保存内容,并将ISP的当前内容加载到A[10](SP)中。当发生中断或陷阱时,被中断的任务已经在使用中断堆栈(PSW.IS == 1),则不预加载A[10](SP)。中断服务程序(ISR)继续在被中断的程序离开的地方使用中断堆栈。

通常在初始化例程中只需要初始化ISP一次。但是,根据应用程序的需要,可以在执行期间修改ISP。

        注:没有什么可以阻止ISR或系统服务例程在私有堆栈上执行。在ISR中使

               A[10](SP)由应用程序程序员自行决定。

系统控制寄存器(SYSCON)

系统配置寄存器提供以下功能。

时间保护系统使能位

内存保护系统使能位

为在中断处理中被定义为PSW.S位的初始状态位设置位 

为在Trap处理中被定义为PSW.S位的初始状态位设置位              

使能user - I0模式外设访问。

Disable for User-1 I0模式启用和禁用中断

启动停止状态和释放位。

空闲上下文列表耗尽条件的状态指示器。

                注:除了FCDSF位之外,这个寄存器是SAFETY_ENDINIT保护的。

CPU标识寄存器(CPU_ID)

标识寄存器标识所使用的处理器类型和版本。这里只描述CPU核心ID寄存器。所有其他ID寄存器在产品文档中都有描述。CPU标识寄存器标识CPU类型和版本。

核心识别寄存器(CORE_ID)

在多处理器系统中,每个逻辑处理器核心被赋予一个唯一的标识号。核心标识寄存器保存这个号码。


4 、兼容模式寄存器

Compatibility Mode Register (COMPAT) 

COMPAT寄存器允许实现选择性地强制功能与以前版本的兼容性。


5 、访问控制寄存器

Access Control Registers 

SIST模式访问控制寄存器(SMACON)

实现可以使用SMACON寄存器控制系统测试软件(SIST)系统的操作。这个寄存器的内容是特定于实现的。

 
6 、中断寄存器

Interrupt Registers 

体系结构中典型的服务请求控制寄存器保存单个控制位,以启用或禁用请求,分配优先级号码,并将请求定向到其中一个服务提供者。


7 、内存保护寄存器

Memory Protection Registers 

内存保护寄存器集的数量是特定于体系结构的每个实现的。最多可以有8个集合(一个集合包括数据集和代码集)。每个寄存器集由几个范围寄存器(也称为范围表项)组成。每个范围表项由一个段保护寄存器对和一个公共模式寄存器内的位域组成。寄存器对指定内存范围的下限和上限地址。

  
8、 陷阱寄存器

Trap Registers 

控制陷阱寄存器的核心特殊功能寄存器(CSFR)

  
9、 内存设置寄存器

Memory Configuration Registers 

内存配置寄存器是在体系结构中定义的,但是寄存器的内容是特定于实现的。

  
10 、内核Debug控制寄存器

Core Debug Controller Registers   

支持调试的TriCore寄存器


11、 浮点单元寄存器

Floating Point Registers

可选的TriCore浮点单元的寄存器

    
12、 访问内核特殊功能寄存器

Accessing Core Special Function Registers (CSFRs) 

核心特殊功能寄存器用MFCR(从核心寄存器移动)指令读取,用MTCR(移动到核心寄存器)指令写入。通常很少需要对csfr进行软件更新。因此,实现不需要实现硬件结构,以避免csfr更新可能导致的危险情况。通过在CSFR的MTCR更新之后立即插入ISYNC指令,可以避免这种危险情况。ISYNC指令确保所有后续指令都能正确看到CSFR更新的效果。访问未定义寄存器位置的MTCR指令将不起作用。访问未定义的寄存器位置的MFCR指令将返回未定义的数据。

  

<think> 首先,用户的问题是基于提供的引用信息,询问通用寄存器与浮点寄存器的区别。我将基于引用内容来构建回答。 关键引用点: - 引用[1]:寄存器分为通用寄存器(GPR)浮点寄存器(FPR)。通用寄存器用于执行指令、整型数据逻辑运算,而浮点寄存器用于运算具有小数点的数据。 - 引用[2]:提到了IA32x86-64寄存器,包括通用寄存器其他特殊寄存器,但没有直接针对浮点寄存器的细节对比。 - 引用[3]:讨论了寄存器、累加器、暂存器的区别,强调寄存器作为软硬件接口。 - 引用[4]:涉及寄存器栈的使用,强调寄存器访问效率高。 用户的具体问题是:“我想了解通用寄存器浮点寄存器的区别”,所以我需要聚焦在通用寄存器浮点寄存器的区别上。 回答结构: - 根据系统级指令,我需要使用中文回答。 - 回答结构清晰,逐步解决问题。 - 在行内数学表达式使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 格式并单独成段。 - 末尾自然地添加引用标识,如 [^1]、[^2] 等。 - 生成相关问题。 核心区别: 1. **功能目的**:通用寄存器主要用于处理整数数据、逻辑运算控制流程;浮点寄存器专门用于浮点数运算(如小数)。 2. **数据类型**:通用寄存器处理整型数据;浮点寄存器处理浮点型数据(如单精度、双精度浮点数)。 3. **硬件实现**:浮点寄存器可能支持更宽的位宽(如80位)来处理浮点精度。 4. **在CPU架构中的位置**:引用[1]明确指出它们是两类不同的寄存器。 5. **效率应用**:引用[4]强调了寄存器的访问效率高,浮点寄存器优化了浮点计算。 基于引用[1],我可以直接引用:“通用寄存器的作用包括执行指令、进行整型数据逻辑运算,而浮点寄存器则用于运算具有小数点的数据。” [^1] 扩展区别: - 通用寄存器:在大多数指令集中,如x86,通用寄存器包括AX、BX、CX、DX等,用于各种通用计算。 - 浮点寄存器:特定于浮点单元(FPU),如x86中的XMM寄存器用于SSE扩展或AVX。 数学表达式:如果需要,可以添加一些数学公式来举例。 - 例如,整型运算:$a + b$ 可能使用通用寄存器。 - 浮点运算:$c + d$ 其中cd是浮点数,使用浮点寄存器。 - 但用户问题不强制需要数学公式;如果相关,添加。 生成相关问题: - 最后,添加相关问题,如系统指令所示。 - 示例相关问题:"1. 通用寄存器在哪些场景中使用最多?2. 浮点寄存器如何影响计算性能?3. 现代CPU如何优化浮点运算?" 完整的回答结构: 1. **引言**:简要介绍通用寄存器浮点寄存器。 2. **主要区别**:列出关键区别点。 3. **细节解释**:基于引用扩展。 4. **总结**:重申区别。 5. **相关问题**:生成2-3个相关问题。 确保引用正确: - 在相关部分末尾添加引用标识,例如:[^1] - 引用[1] 是主要的来源。 最终回答: - 语言:中文。 - 清晰、可靠。 </think> ### 通用寄存器与浮点寄存器的区别 在计算机体系结构中,寄存器是CPU中的高速存储单元,用于临时存储数据指令执行过程中的中间结果。根据功能用途,寄存器主要分为通用寄存器浮点寄存器两大类。它们的核心区别体现在功能目的、数据类型支持、硬件实现效率优化等方面。我将基于您的引用内容,逐步解释这些区别。 #### 1. **功能目的** - **通用寄存器 (General Purpose Register, GPR)**:主要用于执行指令、处理整型数据(如整数运算)逻辑运算(如布尔操作)。它们支持CPU的核心控制流程,包括地址计算、分支跳转数据传输。例如,在加法运算 $a + b$(其中 $a$ $b$ 是整数)中,通用寄存器会存储操作数结果[^1]。 - **浮点寄存器 (Floating Point Register, FPR)**:专门用于处理浮点型数据(即具有小数点的数据),如科学计算、图形处理中的单精度或双精度浮点数运算。例如,在浮点乘法 $c \times d$(其中 $c$ $d$ 是浮点数)中,浮点寄存器会高效执行计算[^1]。 #### 2. **数据类型支持** - **通用寄存器**:处理整型数据(如16位、32位或64位整数)逻辑值(true/false)。它们不支持小数运算,整数运算如位移操作 $x \ll 2$ 或比较操作 $a > b$ 都依赖这些寄存器[^1][^3]。 - **浮点寄存器**:专为浮点数据类型设计,支持IEEE 754标准的单精度(32位)、双精度(64位)或扩展精度(如80位)浮点数。这使它们能精确处理小数值运算,例如在物理仿真中的积分计算 $\int f(x)dx$[^1][^2]。 #### 3. **硬件实现位宽** - **通用寄存器**:通常在CPU的整数单元中实现,位宽与架构相关(如x86-64中的64位通用寄存器)。它们数量较多(如x86-64有16个通用寄存器),便于频繁访问复用[^2][^4]。 - **浮点寄存器**:位于浮点单元(FPU)中,位宽可能更大以支持高精度浮点运算(如IA32架构的80位浮点寄存器)。由于浮点运算更复杂,这些寄存器通常设计为支持SIMD(单指令多数据)扩展,如x86中的XMM寄存器,能并行处理多个浮点数[^2]。 #### 4. **效率应用场景** - **访问效率**:通用寄存器浮点寄存器都提供高速访问(纳秒级),远优于内存访问(如栈操作)。但浮点寄存器针对浮点运算优化,减少了数据转换开销。例如,在密集浮点计算(如矩阵乘法)中,使用浮点寄存器可提升数倍性能[^4]。 - **应用场景**: - 通用寄存器:常见于操作系统内核、整型数据处理(如加密算法)、控制逻辑(如函数调用时的参数传递)[^1][^4]。 - 浮点寄存器:用于科学计算(如数值模拟)、图形渲染(如3D变换),以及AI模型中的浮点密集型任务[^1]。 #### 总结 通用寄存器专注于整型数据通用指令执行,支持CPU的核心逻辑;浮点寄存器则专门处理浮点数据,提供高精度小数运算能力。这种分工优化了CPU性能:通用寄存器确保指令流高效,浮点寄存器加速数学计算[^1][^2][^4]。在现代架构(如x86-64)中,两者协同工作,但浮点寄存器往往通过专用硬件单元进一步优化[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值