基于CEVA DSP BX2的架构分析(三)-寄存器介绍(三)

目录

​​​​​​

4.6 程序控制和状态寄存器

4.6.1 程序计数器寄存器

4.6.2 retreg/retreg_p1寄存器

4.6.3 函数表基址寄存器

​​​​​​​4.6.4 辅助循环计数器寄存器

​​​​​​​4.6.5 中断向量基址寄存器

​​​​​​​4.6.6 全局配置寄存器

​​​​​​​4.6.7.全局状态寄存器

​​​​​​​4.6.7 核心状态寄存器

4.6.8 卷影CSR寄存器

​​​​​​​4.6.9 retregi/retregn/retregb寄存器

​​​​​​​4.7 PC寄存器错误

​​​​​​​4.8 BTBDATA寄存器

​​​​​​​4.9 版本寄存器


​​​​​​

4.6 程序控制和状态寄存器

以下各节描述了与程序控制和程序状态相关的寄存器。主要与PCU操作相关。

4.6.1 程序计数器寄存器

程序计数器(PC)寄存器保存当前执行分组的开始的程序地址。由于数据包与程序存储器中的偶数地址对齐,因此PC寄存器只能保存偶数地址。

PC寄存器是只读的,并且在执行连续数据包时自动更新。它是由于分支类型指令和中断条件而间接更新的。

PC寄存器的重置值(重置后首次执行的PC)由来自SoC的专用输入确定。

​​​​​​​4.6.2 retreg/retreg_p1寄存器

retreg/retreg_p132位寄存器,它们一起构成子程序返回PC的多级retreg堆栈。

在调用指令(或其任何变体)时,返回PC(即,调用后分组的PC)存储在retreg寄存器中。

ret指令下,PC用来自retreg的值更新。在push指令(或其任何变体)中,会发生以下情况:

  • retreg的值被复制到retreg_p1寄存器中。
  • retreg_p1的上一个值被推送到堆栈中。

在弹出指令(或其任何变体)上,会发生以下情况:

  • retreg值从堆栈中弹出,并复制到retreg_p1寄存器中。
  • retreg_p1的上一个值被复制到retreg寄存器中。

​​​​​​​4.6.3 函数表基址寄存器

函数表基址(FBA)寄存器在数据存储器中保存指向函数起始地址表的指针。它由calls指令用于分支到函数。其功能类似于调用指令;然而,它可以使用较少的比特进行编码。

calls指令首先使用FBA寄存器的偏移量访问数据存储器,然后加载目标函数的32位地址。然后,它执行到所需函数的分支。

有关调用指令及其对FBA的使用的更多详细信息,请参阅第7.4.5.1节,函数公共符号表。

FBA寄存器的重置值为0

​​​​​​​4.6.4 辅助循环计数器寄存器

辅助循环计数器(ALC)寄存器具有以下功能:

  • 用作短回路的回路计数器。
  • 除了用于管理循环的循环计数器外,还充当使用部分执行(PE)为正常循环(基于brrcmplp作为跳回指令)维护的辅助循环计数器。

在这种循环期间,ALC通过应在循环体的最后一个数据包上执行的专用指令(pedec)进行更新。

​​​​​​​4.6.5 中断向量基址寄存器

中断向量基址寄存器(IVBR)在非安全模式下或未启用安全时保存中断表的基址。该寄存器只能在Supervisor模式下访问。

IVBR寄存器的重置值为0

4-8.IVBR寄存器位/字段描述

字段

位/位置

描述

Reserved

[9:0]

表示地址的10个LSB;由于地址必须与1KB对齐,因此它们始终为0。

intbase

[31:10]

中断目标基址。

该字段用作中断目标地址的基址。根据中断类型,它用恒定偏移量求和。

该字段在内核重置时被清除,并且可以通过使用movp指令写入该寄存器来修改。

注:只有地址空间的位31:10是可配置的。

​​​​​​​4.6.6 全局配置寄存器

全局配置寄存器(GCR)保存通常不是保存和恢复的上下文的一部分的全局配置字段。它只能在Supervisor模式下访问。

GCR寄存器的重置值为0

4-9.GCR寄存器位/字段描述

字段

位/位置

描述

GHR

【1:0】

BTB全局历史寄存器。

它充当以前分支的移位寄存器。其用法由GHRen和DBPDis字段定义;当未设置GHRen或设置DBPDis时,该字段设置为0,并且不会由GHR逻辑更新。

该字段重置为0。

DBPD

【24】

动态分支预测禁用:

0 = Dynamic branch prediction is enabled.

1 = Dynamic branch prediction is disabled.

该字段只能由专用序列设置,如第12.7.9节“限制CBT.2”所述。

该字段的重置值为0。

CMONDis

【25】

流量变化(COF)监视器禁用:

0 = COF monitor is enabled.

1 = COF monitor is disabled.

该字段只能由专用序列设置,如第12.7.9节“限制CBT.2”所述。

仅当DBPDis被清除时,才能激活COF监视器。

GHRen

【31】

GHR启用。

设置此字段并清除DBPDis时,GHR功能启用。BTB条目将使用GHR寄存器插入和读取。

该字段只能由专用序列设置,如第12.7.9节“限制CBT.2”所述。

该字段在核心重置时被清除,并且可以通过使用movp或lbf指令写入该寄存器来修改。

​​​​​​​4.6.7.全局状态寄存器

全局状态寄存器(GSR)保存不特定于上下文的全局状态字段,这意味着它通常不是保存和恢复的上下文的一部分。

GSR寄存器只能在Supervisor模式下访问。GSR寄存器的重置值为0

3-10.GSR寄存器位/字段描述

字段

位/位置

类型

安全性

描述

MS

[0]

RW

NS

监视器状态。此字段确定外部访问同步期间的成功或失败。

监视器{on}指令清除此字段,监视器{off}指令使外部监视器机制在同步成功(监视器成功)时清除此字段;或者在同步失败(监视器失败)时设置此字段。

该字段可以通过使用movp指令写入该寄存器进行修改。

NIP

[4]

RO

NS

正常中断挂起。

该字段反映来自ICU的正常中断输入的状态,而与CSR寄存器中DIE、DIS、CIS或DIS字段的状态无关。

0=ICU没有挂起正常中断。

1=ICU的正常中断挂起。

CIP

[5]

RO

NS

关键中断挂起。

该字段反映来自ICU的关键中断输入的状态,而与CSR寄存器中CIS或DIS字段的状态无关。

0=ICU没有未决的严重中断。

1=ICU出现严重中断。

PPVE

[9]

RW

NS

程序权限冲突错误。

当由于试图执行从程序内存中提取的数据包而没有正确的权限而导致Fetch and Dispatch Error中断(偏移量0x30)得到服务时,会设置此字段。

此字段只能由硬件设置,并由movp指令清除。

PECCE

[11]

RW

NS

程序未更正ECC错误。

当由于试图执行从程序存储器中读取的数据包,而ECC错误未被纠正,因此服务于提取和调度错误中断(偏移量0x30)时,设置该字段。该字段只能为支持程序ECC检测的系统设置。

注意:硬件更正的ECC错误,或最终未用于执行的获取行中的错误(例如,由于管道刷新)不会导致这种类型的错误,并且不会设置该字段。

该字段只能由硬件设置,并由movp指令清除。

ILPE

[12]

RW

NS

非法数据包编码错误。

当由于试图执行具有数据包级别非法编码的数据包而服务于提取和调度错误中断(偏移量0x30)时,设置此字段。

错误示例包括过长的数据包、不支持的执行单元、保留的系统位等。

该字段只能由硬件设置,并由movp指令清除。

ILIPVE

[17]

RW

NS

非法指令特权冲突错误。

当内核处于用户模式时,当内核试图执行特权指令或访问特权寄存器时,会设置此字段。由此产生的中断被接收为来自ICU的严重中断。

该字段只能由硬件设置,并由movp指令清除。

ILIEE

[18]

RW

NS

非法指令编码错误。

当核心试图执行具有非法或保留编码的指令时,设置此字段。由此产生的中断被接收为来自ICU的严重中断。

在尝试执行以下操作时也会设置:

-设置CSR中的NTIS CEIS或DIS字段时为trap或wfint。

-设置CSR中的DIS字段时为trap/trape。

-设置CSR中的CEIS或DIS字段时为trapi。

该字段只能由硬件设置,并由movp指令清除

IRRE

[30]

RW

NS

不可恢复的错误。

当发生精确错误中断时(当设置CSR寄存器中的CEIS或DIS字段时),设置该字段。设置后,只要设置了该字段,就会向SoC发送液位指示。

该字段只能由硬件设置,并由movp指令清除。

​​​​​​​4.6.7 核心状态寄存器

核心状态寄存器(CSR)是一个只读寄存器,它保存核心控制状态,该状态应在服务中断时保存,并在返回时恢复。在正常操作中,CSR寄存器通常在维护和从中断返回期间从相应的卷影寄存器自动保存和恢复。

特定字段可以通过专用指令(如dinteint)直接更新。该寄存器不能由ldpopmov等指令全局写入。

无法通过复制阴影寄存器来写入调试模式(DM)字段。CSR寄存器的重置值为0x00000000。

3-11.CSR寄存器位/字段描述

字段

位/位置

类型

描述

NTIS

[0]个

RO

服务中的正常或陷阱中断。

屏蔽接受其他正常中断。设置此字段时,陷阱指令会导致非法中断。

当维修相应的中断时设置;在reti、retn、retb或rstp编写期间恢复时清除。

CEIS

[1]

RO

服务中的严重或错误中断。

接受其他正常或严重中断的掩码。

当提供关键或错误中断时设置;在reti、retn、retb或rstp编写期间恢复时清除。

DIS

[2]个

RO

调试服务中断。

接受正常、关键或调试中断的掩码。设置此字段时,trape/trap指令会导致非法中断。

当维修相应的中断时设置;执行retb指令时清除。位的状态不受从影子CSR恢复的值的影响。

该字段绑定到卷影CSR寄存器中的0。

NIE

[3]

RO

正常中断启用。

设置后,启用正常中断。用于保护代码段免受中断(关键代码)的影响。

由eint设置;通过力量清除。从中断返回时也会恢复状态。

PIIS

[7:4]

RO

服务中断的优先级。

从ICU接口采样,并反映服务中断的优先级。当服务错误、调试或跟踪中断时,优先级设置为0xF。维修陷阱时,优先级设置为0xE。

OM

[8]

RO

操作模式:

0 = Supervisor mode

1=用户模式在复位和中断发生时,该字段被清除。从中断返回时,它也从相应的影子CSR寄存器恢复。

只能由reti、retn或retb指令更新。不能通过lbf、mov、ld或pop更新;在CSR寄存器上使用这些指令不会修改字段。

在调试模式期间,调试器可以修改此字段的状态。

DM

[10]

RO

调试模式:

0 = Non-debug mode

1 = Debug mode

该字段在内核进入调试模式时设置,并在通过retb退出调试模式时清除。

将卷影CSR寄存器复制到CSR时,不会修改该字段。该字段绑定到卷影CSR寄存器中的0。

SLAT

[13:12]

RO

短回路激活型;反映了短回路激活的类型:

00 = Short loop not active

01 = rep active

保留其他值。

该字段在执行rep指令时设置为相应的值,并在中断时清除。

如果从中断返回时恢复的值不为零,则与rep指令并行的指令将作为nop执行。

SLIOF

[18:14]

RO

短路中断偏移。

保存在短循环(rep)期间跳转到中断时执行的数据包数。从中断返回时,该字段指定从循环顶部作为nop执行的数据包数。

在中断时清除(在NTCSR、CECSR、DCSR中设置SLIOF),并在中断服务时从它们恢复。REP指令定期终止后,SLIOF被清除;

IID

[31:24]

RO

中断ID。

当接受来自ICU的中断时,从ICU采样IID,反映中断输入。

当响应内部中断时,该字段设置为0xFF。

4.6.8 卷影CSR寄存器

NTCSRCECSRDCSR寄存器是32位寄存器,它们在接受中断期间采样CSR状态,以便以后恢复CSR寄存器。它们统称为影子CSR寄存器:

        • 当正常或陷阱中断被服务时,NTCSR寄存器对CSR进行采样。在执行reti指令时,CSR从该寄存器还原。
        • 当服务严重或错误中断时,CECSR寄存器对CSR进行采样。在执行retn指令时,CSR从该寄存器还原。
        • 当为调试中断提供服务时,DCSR寄存器对CSR进行采样。在retb指令时,CSR从该寄存器恢复,并且CSR寄存器中的DM字段被清除。

在跳到中断时,大多数CSR字段都会在它们到达各自的卷影CSR时进行采样,从而可以更改它们在CSR寄存器中的状态。CSR寄存器中的SLIOF字段是一个例外;其值仅在中断被服务时确定,因此写入相应卷影CSR的值被认为是新的,如中所述。3.7.8节,核心状态寄存器

卷影CSR寄存器的字段结构与主CSR寄存器相同,如中所述。只有调试模式(DM)字段在卷影CSR寄存器中没有对应项。这些寄存器中DMDIS字段各自位置的位被保留,不能写入,并且始终读取为0第节 3.7.8、, 核心 /自治区 注册

卷影CSR寄存器只能在Supervisor模式下访问。

字段名具有前缀,以将它们与主CSR寄存器的字段名区分开来,如下所示:

  • NTCSR字段的前缀是NT_ 例如,CSR寄存器中的IID字段为NT_IID
  • CECSR字段的前缀是CE_例如,CSR寄存器中的IID字段是CE_IID
  • DCSR字段的前缀是D_例如,CSR寄存器中的IID字段为D_IID。卷影CSR寄存器的重置值为0

​​​​​​​4.6.9 retregi/retregn/retregb寄存器

retregi/retregn/retregb寄存器是32位寄存器,对各自中断的返回PC进行采样:

  • retregi寄存器存储正常中断和陷阱中断的返回PC
  • retregn寄存器存储关键中断和错误中断的返回PC
  • retregb寄存器存储调试中断的返回PC,包括trape当它导致中断时。

注意:由于需要合法PC值的对齐,这些寄存器的LSB绑定到0。中断返回寄存器只能在监督模式下访问。retregi/retregn/retregb寄存器的重置值为0

​​​​​​​4.7 PC寄存器错误

错误PCEPC)寄存器对导致精确或不精确错误中断的数据包的PC进行采样,如第9.9精确核心错误条件和第9.10不可执行指令不精确错误中所述。它用于调试和诊断目的。

EPC只能在Supervisor模式下访问。EPC寄存器的重置值为0

​​​​​​​4.8 BTBDATA寄存器

BTBDATA寄存器保存btbrd请求的BTB存储器的读取数据指令。BTBDATA寄存器的重置值为0

3-12.BTBDATA寄存器位/字段描述

字段

位/位置

描述

BTB RD Data

[31:0]

读取BTB存储器的数据

​​​​​​​4.9 版本寄存器

版本寄存器是一个只读寄存器,保存有关核心版本的信息。

3-13.版本寄存器位/字段描述

字段

位/位置

类型

描述

DSP_RTL_REVISION

[3:0]

RO

该字段保存RTL修订,该修订标记了实现。

初步修订包含升序值:初步修订0包含值0x0,初步修订1包含值0x1,初步修订2包含值0x2,依此类推。最终修订包含值0xF。

DSP_RTL_VERSION

[15:4]

RO

该字段保存RTL版本,该版本标记与该版本关联的功能列表。例如,对于版本2.0.0,该字段包含值0x200

DSP_CORE_TYPE

[31:16]

RO

该字段标记了核心架构类型:2022

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值