Xtensa处理器架构基础-架构简介与常见寄存器

1.架构简介

应用的发展对处理器的需求越来越多样化。与通用处理器架构相比,Xtensa架构的特色在于它是可配置可扩展的微处理器架构。通俗地讲,将其与常见的ARM架构相比,Xtensa架构的特色在于可以为不同种类的产品需求“定制化”SOC系统,快速生成专用的处理器。
每种处理器都有其相应的指令集,Xtensa也不例外。Xtensa指令集体系结构(Instruction Set Architecture,ISA)是一种新的后RISC指令集体系结构,面向嵌入式、通信和消费类产品。该ISA旨在提供:
1)高度的可扩展性
2)业界领先的代码密度
3)优化的低功耗实现
4)高性能
5)低成本实施。
Xtensa ISA可以使用多种管道来实现。如图所示,就是一种典型的架构实现方案:(图片来源于Xtensa官方)
Xtensa处理器架构基础-架构简介与常见寄存器_第1张图片

2.常用寄存器介绍:

1)PC 寄存器:program counter. 程序计数器(PC)保存下一条要执行的指令的地址。它在执行时由指令更新。非分支指令只是将其长度递增。执行分支指令时,用新值加载它。存在调用和返回指令,在PC和通用寄存器AR[0]之间移动值。循环选项等选项可通过其他有用的方式更改PC。
注:PC的更改和使用总是由硬件联锁的。它们不需要任何同步指令。

2)PS寄存器: Program State Register, 程序状态寄存器。主要用于中断和上下文切换,显示当前程序运行状态。

3)A0~A15寄存器:这些通用地址寄存器被命名为地址寄存器(Address Register,AR),以区别于可添加到指令集的许多不同类型的数据寄存器。尽管AR寄存器也可以用来保存数据,但它们与指令集和执行管道都有关系,因此它们非常适合包含地址和用于计算地址的信息。它们也非常适合于计算分支条件和目标,因此填补了Xtensa指令集中通用寄存器的角色。对AR寄存器文件的读写始终由硬件联锁。它们不需要任何同步指令。
这些寄存器常见的作用是:

寄存器 描述
A0 返回地址
A1 栈指针
A2~A7 参数
A7 被调用方的堆栈帧指针(可选)
A8 静态链接
A15 堆栈帧指针

注:复位后AR寄存器文件的内容未定义。
4)SAR 寄存器: Shifts and the Shift Amount Register,移位和移位量寄存器,取值范围是0~32.

5)EXCCAUSE 寄存器: Exception Cause Register,异常原因寄存器。

6)EXCVADDR 寄存器:Exception Virtual Address Register异常虚拟地址(EXCVADDR)寄存器包含导致最近的获取、加载或存储异常的虚拟字节地址。
处理器复位后,此寄存器未定义。因为EXCVADDR可能会因任何TLB未命中而改变,即使未命中完全由处理器硬件处理,依赖于它而不改变值的代码必须通过仅对指令和数据访问使用静态转换来保证没有TLB未命中。(这个寄存器在出现程序异常时,定位错误很有帮助,比如,若出错时该寄存器为0,则通常代表程序正在操作空指针)

8)循环特殊寄存器 LOOP Special Registers:共三个寄存器,用于控制零开销循环。当PC到达LEND时,它以LBEG代替执行,并递减LCOUNT。当LCOUNT为零时,便不在进入循环。
LBEG 寄存器:Loop begin,循环起始地址。
LEND 寄存器:Loop end,循环结束地址。
LCOUNT 寄存器: Loop count remaining,循环计数寄存器,当循环计数器达到0,循环就不会再发生了。

9)EPC寄存器:Exception Program Counter, (EPC)异常程序计数器(EPC)寄存器,包含指令的虚拟字节地址,在1级中断的情况下,该指令导致执行最近的异常或下一条指令。此指令尚未执行。在修复异常原因或处理并清除中断后,软件可以使用RFE指令在此地址重新启动执行。此寄存器在过程或重置后未定义,其值可能随时更改。

10)DPEC寄存器:Double Exception Program Counter,双异常程序计数器(DEPC)寄存器包含导致最近双异常的指令的虚拟字节地址。

(路漫漫其修远兮,学习硬件知识的道路是艰难滴,希望能和大家一起交流共勉,谢谢点赞或收藏)

你可能感兴趣的:(ESP,嵌入式,物联网,中央处理器)