Renesas-RH850 CPU System - Usage Notes

Renesas学习笔记
CPU System : Usage Notes


1 存储指令完成和后续指令生成的同步

当通过存储指令更新控制寄存器时,从 CPU 执行存储指令到实际更新控制寄存器之间存在时间延迟。因此,需要适当的同步处理以确保控制寄存器在执行后续指令之前反映更新的值。同步处理如下所示。

有关使用 LDSR 指令更新系统寄存器和与后续指令同步的详细过程,请参见第 3.2.7.3 节,系统寄存器更新后的危害管理。

1.1 当控制寄存器或内存中的更新结果在后续指令的实现中反映时:

示例 1:在通过访问 INTC2 和外围电路中的控制寄存器清除中断请求后,通过实现 EI 指令可以启用中断。在这种情况下,请按以下步骤进行。

  • 存储指令更新控制寄存器(ST.W 等)
  • 对上述控制寄存器进行虚读(LD.W 等)*1
  • 执行 SYNCP
  • 执行后续指令(EI 等)

示例 2:即使在等待以确保给定控制寄存器(寄存器 A)的更新后访问另一个控制寄存器(寄存器 B)时,也要执行相同的处理。这包括以下情况:不同外围模块的联动操作和在进行外围模块设置后释放 INTC 中的中断掩码。但是,如果控制寄存器 A 和 B 在同一 P-Bus 组中,则不需要此处理。有关 P-Bus 组与外围模块/寄存器之间的对应关系,请参见各节。

  • 存储指令更新控制寄存器 A(ST.W 等)
  • 对上述控制寄存器进行虚读(LD.W 等)*1
  • 执行 SYNCP
  • 存储/加载指令访问控制寄存器 B(ST.W, LD.W 等)

在等待完成内存保护、ECC 检查等安全功能设置后开始访问控制寄存器和内存时,也需要相同的处理。此外,当确保对内存的存储访问完成时,也需要相同的处理。

注意 *1:也可以使用同一 P-Bus 组的任何寄存器进行虚读。

1.2当控制寄存器和内存中的更新结果在后续指令的指令获取中反映时:

如果希望将指令写入 RAM,然后分支到 RAM 以执行写入的指令,请按以下步骤进行。

  • 存储指令更新内存(ST.W 等)
  • 对上述内存进行虚读(LD.W 等)
  • 执行 SYNCI
  • 执行后续指令(分支指令等)

在等待完成内存保护和 ECC 的控制寄存器更新后分支到目标内存时,请按以下步骤进行。

  • 存储指令更新控制寄存器(ST.W 等)
  • 对控制寄存器进行虚读(LD.W 等)
  • 执行 SYNCI
  • 执行后续指令(分支指令等)
1.3 SYNCM 产品信息

下表显示了表 3.136 中给出的模块名称与本产品信息文档中的模块名称之间的对应关系。

表 3.136 中的模块名称 本产品信息文档中的模块名称
L1RAM(指定 CPU) Local RAM(自己核心)
L1RAM(其他 CPU) Local RAM(其它核心)
L2RAM Cluster 0/1/2/3 RAM
INTC1 INTC1
1.4 存储完成等待产品信息

表 3.203 使用虚读进行等待有效的总线从属设备

Bus Slaves 描述
L1RAM(指定 CPU) Local RAM(自己核心)
L1RAM(其他 CPU) Local RAM(其它核心)
L2RAM Cluster 0/1/2/3 RAM
INTC1 INTC1
其它 所有外设模块
2 同步加载指令完成和后续指令生成

当通过加载指令访问控制寄存器和内存时,数据访问的顺序不保证与程序的顺序相同。因此,需要适当的同步处理以确保后续数据访问指令的加载指令完成。然而,对于某些目标数据空间的访问,不需要同步处理。有关目标数据空间的详细信息,请参见第 4.2.2 节,CPU 可访问的数据空间。加载同步处理如下所示:

示例:在访问其他地址 B 之前,需要等待地址 A 的加载访问完成,在这种情况下,请按以下步骤进行。

  • (1)加载指令参考地址 A(LD.W 等*1)
  • (2)执行 SYNCP
  • (3)存储/加载指令访问地址 B(ST.W,LD.W 等*1)

注意 *1:

  • 加载指令:LD.,SLD.,LDV.,TST1,SET1,CLR1,NOT1,POPSP,RESBANK,DISPOSE,SWITCH,CALLT,SYSCALL,CAXI,LDL
  • 存储指令:ST.,SST.,STV.,SET1,CLR1,NOT1,PUSHSP,PREPARE,CAXI,STC
3 通过位操作指令访问寄存器

位操作指令的处理以 8 位单元的原子读取、修改和写入形式进行。因此,位操作指令只能访问可以以 8 位单元读取和写入的寄存器。然而,对于包含多个标志位的寄存器,应注意读-改-写周期可能会清除除清除标志以外的标志。

通过位操作指令对 H-Bus 组寄存器进行写访问不是原子的。其他主设备的访问可能会中断这些指令的读-改-写处理。

4 代码闪存编程后的一致性保证

对于 PE0 和 PE1,请参见第 3.2.9 节,代码闪存编程后的一致性保证。 对于 ICUMHA,请参阅《RH850/U2A-EVA 组安全用户手册:硬件》。

5 确认多个异常时的上下文覆盖

无论 PSW 寄存器的 ID 或 NP 位的状态如何,异常都可以被确认。这取决于异常的类型。当发生多个异常时,保存上下文信息的系统寄存器的内容会被覆盖。有关确认每个源异常的条件以及返回和恢复的可能性,请参见第 3.2.4 节,异常和中断。

6 预取的使用注意事项

CPU 执行从程序计数器当前值之后的位置进行推测性指令提取,以保持指令提取的吞吐量。由于这种预取,从内存读取甚至可能从未分配指令代码的位置进行(见图 3.62 中的注意 1)。请注意以下几点,并记住在这种情况下 CPU 不执行读取的值。

以下注意事项适用于一般从内存进行的指令提取:

  • 由于内存中的值未定义而导致的 ECC 错误:在代码闪存擦除后或在本地 RAM 或集群 RAM 初始化之前,从这些内存中读取可能会导致 ECC 错误。当指令代码分配给内存时,用所需的值初始化该区域(见图 3.62 中的注意 1)。

  • 从属保护装置(CRG,PEG 等)检测非法访问: 从属保护装置可能会将这种预取检测为非法访问。为防止预取被检测为非法访问,不允许任何区域与这些区域(见图 3.62 中的注意 1)和从属保护装置禁止访问的区域重叠。从受 MPU 保护的区域进行预取不会导致内存保护异常。

  • 访问禁止访问区域: 预取也可能导致访问未实现的区域。这一注意事项也适用于 RAM 指令提取。将指令代码分配给内存时,不允许该区域(见图 3.62 中的注意 1)与禁止访问区域重叠。

  • 预取的推测性读操作: 根据预取指令的解码结果,CPU 可能会向本地 RAM(自身核心)、本地 RAM(其他核心)、集群 RAM 或代码闪存发出推测性读请求。第 44.4.5 节的使用注意事项中描述的同步错误可能由推测性读请求引起。如果由于分支指令而不需要,数据将被丢弃。

7 Product information of SYSERR factor

与产品相关的 SYSERR 原因如下所示。请参阅第 3.2.4 节,异常和中断。

异常原因代码*1 原因
11H 当指令提取中发生以下任何错误时
本地 RAM、集群 RAM 和代码闪存中的地址 ECC 错误
PEG、CRG 和安全保护中的保护错误*2
LRAM 和集群 RAM 中的地址反馈错误
访问未实现的区域进行提取访问
13H 当指令提取中发生以下任何错误时
本地 RAM、集群 RAM 和代码闪存中无法纠正的数据 ECC 错误(包括禁止 1 位纠正的情况)
- 代码闪存中的地址奇偶校验错误
注意
  • *1:有关其他异常原因代码(不包括 11H 和 13H)的详细信息,请参见第 3.2.4 节,异常和中断。
  • *2:由于安全设置导致的保护错误。有关安全保护的详细信息,请参阅《RH850/U2A-EVA 组安全用户手册:硬件》。

如果通过写操作访问系统寄存器 SR16, 13,可能会出现与表 3.103 中与 SYSERR 异常相关的异常原因代码的低 16 位不同的 SYSERR 异常代码。因此,禁止对 SR16,13 进行写访问。

当在缓存未命中或缓存无效时指令提取发生错误时,以下 ECM 错误源可能不会被通知,以下错误信息寄存器可能不会更新:

< ECM 错误源 >

  • 编号 80:代码闪存 - 地址奇偶校验错误
  • 编号 81:代码闪存 - 数据 ECC 2 位错误
  • 编号 82:代码闪存 - 数据 ECC 1 位错误
  • 编号 83:代码闪存 - ECC 溢出错误

< 错误信息寄存器 >

  • ECMmESSTR2
  • CF_DERSTR
  • CF_SERINF
  • CF_SERSTR
  • CF_OVFSTR
  • CF_nSEADR
  • CF_00DEADR

然而,通过在 SYSERR 异常处理程序中执行以下顺序,可以进行上述通知和更新。在这种情况下,请注意访问信息将记录为加载,因为它不是提取访问。

  • 清除(0)RDBCR.RDBEN
  • 使用 LD.H 指令从 FEPC 到 FEPC+7 读取内存区域
8 缓存结构的产品信息

与产品相关的缓存结构如下所示。

缓存结构 RH850/U2A-EVA RH850/U2A16 RH850/U2A8 RH850/U2A6
总大小 16 KB 16 KB 16 KB 16 KB
路数 4 ways 4 ways 4 ways 4 ways
行数 128 lines 128 lines 128 lines 128 lines
9 Product Information of Fetch Size

这些产品的 CPU (RH850G4MH2) 的提取大小为 64 位。

10 寄存器初始化

本产品中的 CPU 具有通用寄存器和系统寄存器,其复位后的值未定义。如果是同步核心,复位后的主核心和校验核心的初始值可能不同。因此,这些寄存器必须首先初始化。需要初始化的寄存器如下表 3.207 所示。

关于同步错误的使用,请参见第 44 节,功能安全。

类型 寄存器
通用寄存器 r1 到 r31
基本系统寄存器 EIPC, FEPC, CTPC, EIWR, FEWR, EBASE, INTBP, MEA, MEI, RBIP
FPU 系统寄存器 *1 FPSR, FPEPC, FPST, FPCC
MPU 功能寄存器 MCA, MCS, MCR, MPLA*3, MPUA*3, MPAT*3, MPIDn, MCI
缓存操作功能寄存器 ICTAGL, ICTAGH, ICDATL, ICDATH, ICERR
虚拟化支持功能系统寄存器 *2 HVSB
客户上下文寄存器 *2 GMEIPC, GMFEPC, GMEBASE, GMINTBP, GMEIWR, GMFEWR, GMMEA, GMMEI

注意

  • *1:当 FPU 有效时,这些寄存器的未定义位必须初始化为 0。
  • *2:当虚拟化支持功能有效时,这些寄存器的未定义位必须初始化为 0。有关这些寄存器的详细信息,请参阅《RH850G4MH 虚拟化用户手册:硬件》。
  • *3:所有 32 个 MPU 项目的寄存器都应初始化。将索引寄存器 MPIDX 从 0 设置到 31,并初始化相应的 MPLA、MPUA、MPAT 寄存器。
11 错误通知

此模块的错误通知如下表所示。

表 3.208 错误通知
markdown

错误通知 描述 ECM 错误编号 对总线主控器的错误响应
多次命中错误 (PE0) 指令缓存多次命中错误 — √
路错误 (PE0) 指令缓存路错误 — √
多次命中错误 (PE1) 指令缓存多次命中错误 — √
路错误 (PE1) 指令缓存路错误 — √
多次命中错误 (PE2) 指令缓存多次命中错误 — √
路错误 (PE2) 指令缓存路错误 — √
多次命中错误 (PE3) 指令缓存多次命中错误 — √
路错误 (PE3) 指令缓存路错误 — √
数据访问错误 (PE0) *1 PE0 数据访问错误 255 —
数据访问错误 (PE1) *1 PE1 数据访问错误 287 —
数据访问错误 (PE2) *1 PE2 数据访问错误 319 —
数据访问错误 (PE3) *1 PE3 数据访问错误 351 —

注意 1:此错误由于某些错误引起的错误响应而产生。有关由某些错误引起的错误响应的详细信息,请参见各节错误通知表中的对总线主控器的错误响应列。

12 LDL、STC 和 CAXI 指令的目标

LDL、STC 和 CAXI 指令仅针对本地 RAM 和集群 RAM。