Microsoft Word - 第2章 CPU子系统

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "Microsoft Word - 第2章 CPU子系统"

Transcription

1 2 处理器集成了 TriCore CPU 本章将描述 CPU 的具体实现, 建议用户结合 TriCore 架构手册阅读, 该手册对 TriCore 架构有完整的描述 ( 包括寄存器和指令集 ) 2.1 处理器子系统 处理器子系统如下图 1 所示 图 1 处理器子系统框图 2-1 V1.0,

2 2.2 中央处理单元特性 133MHzTriCore CPU 包括 : 架构 位加载 / 存储 (load/store) 架构 4GB 的地址空间 (2 ) 16 位和 位指令, 用于减小代码规模 数据类型 : 布尔量 支持饱和操作的整数 位数组 有符号小数 字符 双字型整数 有符号整数 无符号整数 IEEE-754 单精度浮点数 数据格式 : 位 字节 (8 位 ) 半字 (16 位 ) 字 ( 位 ) 双字 (64 位 ) 支持字节和位寻址 数据 存储器和 CPU 寄存器均采用 Little-endian 字节顺序 乘累加 (MAC) 指令 : 双 16 16, 16, 饱和整数运算 数据打包 寻址模式 : 绝对寻址 循环寻址 位反转寻址 长 + 短寻址 基地址 + 偏移地址寻址 ( 前更新和后更新 ) 指令类型 : 算数运算 地址运算 比较 地址比较 逻辑 MAC 移位 协处理器 位逻辑 分支 位域 加载 / 存储 数据打包 系统 通用寄存器组 (GPRS): 16 个 位数据寄存器 16 个 位地址寄存器 3 个 位状态 程序计数寄存器 (PSW,PC,PCXI) 片上调试支持 (OCDS): 结合 CPS 模块支持 1 级调试 结合 MCDS 模块支持 3 级调试 ( 仅对仿真设备有效 ) 实现 大多数指令为单周期指令 分支指令占用 1 2 或 3 个时钟周期 ( 使用分支预测 ) 采用映射寄存器进行快速上下文切换 进入和退出子程序 中断或强制中断时自动进行上下文保存和恢复 四个存储器保护寄存器组 双指令发送 ( 整数流水线和加载 / 存储流水线并行工作 ) 第三条流水线仅用于循环指令 ( 零开销循环 ) 能实现可选择的浮点指令集 不能实现可选择的存储管理单元指令集 ( 存储管理配置寄存器读取结果始终为 MMU 不存在 ) 2-2 V1.0,

3 2.2.1 CPU 框图中央处理器单元 (CPU) 由取指单元 执行单元 通用寄存器文件 (GPR) CPU 从接口 (CPS) 以及浮点单元 (FPU) 组成 图 2 CPU 模块框图 2-3 V1.0,

4 2.2.2 指令取指单元取指单元从 64 位程序存储器接口 (PMI) 中预取并对齐指令 它包含了指令预取缓存, 该缓存含有高达 128 位指令, 以进行先于当前程序计数的线性预取 发送单元将指令送至相应的流水线 指令保护单元负责检查当前的 PMI 访问是否有效 是否产生了指令断点 程序计数单元 (PC) 负责更新程序计数器 图 3 指令取指单元 2-4 V1.0,

5 2.2.3 执行单元执行单元包含整数流水线 加载 / 存储流水线和循环流水线 整数流水线和加载 / 存储流水线分为四个阶段 : 取指 译码 执行和回写 当执行多周期操作 ( 如加载指令 ) 时, 执行时间可能会超过 1 个时钟周期 循环流水线分两个阶段 : 译码和回写 三条流水线并行工作, 一个时钟周期内最多可执行三条指令 图 4 执行单元 2-5 V1.0,

6 2.2.4 通用寄存器文件 CPU 中包含通用寄存器 (GPR) 文件, 分为地址寄存器文件 ( 寄存器 A0-A15) 和数据寄存器文件 ( 寄存器 D0-D15) 送至 Load/Store 流水线上的指令数据流通过地址寄存器文件中转 送至 / 来自整数流水线的指令数据流和送至 Load/Store 流水线的加载 / 存储指令数据流经过数据寄存器文件中转 图 5 通用寄存器文件 2-6 V1.0,

7 2.3 CPU 的具体实现 本节描述 CPU 的具体实现 所有寄存器完整描述参见 TriCore 架构手册 上下文保护区上下文存储区 (CSA) 位于 LDRAM 内 在执行函数调用 中断和强制中断时采用统一的上下文切换方式 所有情况下, 任务的高段上下文由硬件自动保存和恢复 ; 低段上下文可选择由软件保存和恢复 独特的存储器子系统的设计和映射寄存器在高段上下文上的使用, 提高了上下文的切换速度 当需要的和现存的这些寄存器对于软件而言可见时, 映射寄存器可自动在存储器中存储和恢复 上下文操作的实际时序取决于映射寄存器的状态 CSA 位于 LDRAM 内 : 映射寄存器未占满时, 保存高段上下文只需 2 个时钟周期 ; 映射寄存器被占满时, 保存高段上下文需要多达 5 个时钟周期 高段上下文的保存平均需要 2.7 个时钟周期 程序计数器寄存器 -PC 程序计数器 (PC) 中保存当前取出并送入 CPU 流水线的指令的地址 CPU 会自动更新 PC 值 软件可使用当前 PC 值来处理多种任务 ( 如代码地址计算 ) 软件只能使用 MFCR 指令读取 PC 值 ; 切忌使用 MTCR 指令显性改写 PC 值, 否则 CPU 会出现不可预知的操作 CPU 不能执行 PC 值映射到段 15 的加载 / 存储指令, 否则将产生 MEM 强制中断 PC 寄存器的位 0 只能读取, 可硬件拉低 2-7 V1.0,

8 2.3.3 中断系统片上外设单元或外部事件可触发中断请求 中断请求可送入 CPU 或外设控制处理器(PCP) 进行处理 中断系统根据中断服务请求的优先级, 决定 CPU( 或 PCP) 是否应该接收该中断请求 CPU( 或 PCP) 将执行具有最高优先级的服务请求 中断 通常由 CPU 来处理, 而 服务请求 由 CPU 或 PCP 来处理 强制中断系统以下是各强制中断的具体实现特性 UOPC 未实现的操作码 (TIN 2) 可选的 MMU 指令 协处理器 2 和协处理器 3 指令会产生 UOPC 强制中断 OPD 无效操作码 (TIN 3) CPU 不产生 OPD 强制中断 DSE 数据访问同步错误 (TIN2) 若 CPU 执行加载操作时出现某些特定错误 ( 如 LMB 总线错误 或访问超出 LDRAM 的地址范围 ),DMI 模块会产生数据访问同步总线错误 (DSE) 强制中断 产生 DSE 强制中断时, 可通过读取 DMI 同步强制中断标志寄存器 DMI_STR 的值, 确定错误原因 错误状况和 DMI_STR 中标志位的详细描述, 参见页 2-85 DMI 强制中断的产生 DAE 数据访问异步错误 (TIN 3) 若 CPU 执行存储操作时出现某些特定错误 ( 如 LMB 总线错误 或访问超出 LDRAM 的地址范围 ),DMI 模块会产生数据访问异步错误 (DAE) 强制中断 产生 DAE 强制中断时, 可通过读取 DMI 异步强制中断标志寄存器 DMI_ATR 的值, 确定错误原因 错误状况和 DMI_ATR 中标志位的详细描述, 参见页 2-85 DMI 强制中断的产生 2-8 V1.0,

9 PIE 程序存储器完整性错误 (TIN 5) 每当本地存储器的指令存取检测到不可修复的存储器完整性错误时, 产生 PIE 强制中断 该强制中断与错误指令是同步的 该强制中断为类 4 TIN5 基于半字操作保护程序存储器不受存储器完整性错误的影响 由于该错误源于某个特定指令, 当意图执行包含存储器完整性错误的指令时, 就会产生一个 PIE 强制中断 可通过对 PIEAR 和 PIETR 寄存器的询问, 更加精确的判断任意错误的来源 DIE 数据存储器完整性错误 (TIN 6) 对本地存储器进行数据访问的时候, 只要检测到一个不可修复的存储器完整性错误, 就产生 DIE 强制中断 这个强制中断为类 -4 TIN6 DIE 强制中断和发生错误的操作总是异步且独立的 如果由加载 / 存储操作发出的, 对存储器的半字访问含有一个不可修复的错误, 就产生 DIE 强制中断 通过对 DIEAR 和 DIETR 寄存器的询问, 可更加精确的判断任意错误的来源 存储器完整性错误的处理 TriCore1.3.1 拥有完善的对存储器完整性错误的检测和处理的能力 TriCore1.3.1 中各种类型存储器的存储器完整性错误处理如下 : 程序方面存储器 TriCore 内核中的程序方面存储器支持在高速暂存 RAM(SPRAM) 和指令 Cache (ICACHE) 之间进行可编程拆分 SPRAM 和 ICACHE 内部都有统一的单存储器结构, 被称为程序存储器 (PMEM) TriCore 基于半字操作保护 PMEM 不受存储器完整性错误的影响 从 LMB 接口对 SPRAM 任意字节写访问, 由 PMI 模块转换为半字读 修改 写的顺序操作 高速暂存 RAM(SPRAM) TriCore 基于半字操作保护高速暂存 RAM 不受存储器完整性错误的影响 SPRAM 受到 ECC 保护, 每半字的存储需要六个 ECC 位 设置 MIECON.PMIEE 为 1, 使能 SPRAM 的 ECC 保护 当 MIECON.PMIEE 为 0 时, 所有的不可修复的存储器完整性错误将被忽略 对从 TriCore CPU 到 SPRAM 的取指请求而言,ECC 位随着数据位而被读取, 且每半字产生一个错误信号 2-9 V1.0,

10 错误信号随着相应的半字指令被传到内核中 任何企图发出含有不可修复存储器完整性错误的指令的行为, 都会产生一个同步 PIE 强制中断 强制中断处理器负责修正存储器入口并且重新开始执行程序 通过 LMB 接口对 SPRAM 的读操作, 无论来自 DMI 模块还是其它 LMB 主介质, 访问过程中, 一旦在请求的半字数据中检测到不可修复的存储器完整性错误, 将产生总线错误, 该错误可通过总线处理返回 由于 TriCore CPU 可能没有参与该操作,, 另外标志一个单独的错误发送给 SCU 模块, 以选择性产生一个 NMI 强制中断返回到内核 只能执行总线接口对程序高速暂存存储器的写访问 对于半字大小或者更大的写入操作, ECC 位值基于 16 位间隔进行预计算, 且与数据同时写入暂存存储器 对字节写入操作, 存储器处理转换为 PMI 模块内部一次半字读 修正 写顺序操作 这样, 字节写入操作可能导致检测到不可修复存储器完整性错误, 该错误被当作标准读操作处理 指令 Cache(ICACHE) 由于 cache 指令和高速暂存 RAM 共用相同的物理存储器, 它同样配置有存储器完整性错误保护 : 每半字就有 6 个 ECC 位被存储 通过设置 MIECON.PMIEE 为 1, 使能 cache 指令 ECC 保护 当 MIECON.PMIEE 为 0, 所有不可修复存储器完整性错误被忽略 对于从 TriCore CPU 到 ICACHE 的取指指令请求来说,ECC 位随着两个 cache 通道数据位而被读取, 且对每个 cache 通道的每个半字产生一个不可修复的错误信号 在有一个标签符合的情况下, 相应 cache 通道上的不可修复错误信号随着它们相应的指令半字传送到内核中 由于相对应程序标记入口无效, 以致于下一个尝试从指令 cache 线上的取指导致一个回填 任何企图发出含有不可修复错误的指令的行为, 都会导致产生一个同步 PIE 强制中断 然后, 强制中断处理器负责检查存储器完整性错误的来源, 并且, 在有 cache 指令的情况下, 将立即返回并对目前无效的 Cache 线重新取指 程序标签 (PTag) 对两个 cache 通道一个组的的每一个组, 程序标签存储一个 22 位的标签地址和一个 1 位有效位域 这样, 程序标签以 23 位间隔写入且 6 个 ECC 位与其每个 23 位标记签通道相关联 通过设置 MIECON.PMIEE 为 1, 使能程序标签中的 ECC 保护 当 MIECON.PMIEE 为 0, 所有不可修复存储器完整性错误被忽略 2-10 V1.0,

11 对于从 TriCore CPU 到 ICACHE 的取指指令请求, 程序标记 ECC 位随同数据位被读取且计算一个错误标志 仅当标记地址比较成功 有效位置位 并且没有在相关标签通道中检测到 ECC 错误时, 标签符合被触发 ; 其他任何结果被看作缺失 在任何 cache 通道都没有检测到错误的情况下,cache 线被正常的填充 / 再填充 在检测到一个错误的情况下,cache 控制器代替算法强制通道指示一个错误需要被替代 另外, 由于这样的错误对 TriCore CPU 来说是可见的,CCPIE_R 计数器递增计数以统计此类错误修正次数 ( 如果需要 ) 在一个 cache 通道标志一个 cache 符合, 而其他 cache 通道上检测到一个不可修复的 ECC 错误的情况下, 错误情况被屏蔽并且对存储器完整性错误处理机制没有影响 数据方面存储器 TriCore 内核的数据方面存储器支持对本地数据 RAM(LDRAM) 和数据 cache (DCache) 之间的编程拆分 LDRAM 和 Dcache 两个统一于相同的存储器结构, 被称为数据存储器 (DMEM) TriCore 基于半字操作保护 DMEM 不受存储器完整性错误影响 任何对 LDRAM 或 Dcache 位的写访问都被转换为一个半字的读 修改 写顺序操作 这些字节访问到不可分序列的转换是在 DMI 内完成的, 而不是在 CPU 核内部 在正常操作中, 对数据存储器的单个字节写操作不会产生额外的停顿周期 本地数据 RAM(LDRAM) TriCore 基于半字操作保护本地数据 RAM 不受存储器完整性错误的影响 LDRAM 受 ECC 保护, 每半字存储需要 6 个 ECC 位 通过设置 MIECON.PMIEE 为 1, 使能 LDRAM 的 ECC 保护 当 MIECON.PMIEE 为 0 时, 忽略所有不可修复存储器完整性错误 对于从 TriCore CPU 到 LDRAM 的数据载入请求,ECC 位域随同数据位而读取且每半字产生一个不可修复错误信号 任意数据半字传送给内核时检测到一个错误, 内核都会产生一个错误标志 如果检测到此类错误情况, 将产生一个异步 DIE 强制中断 然后, 强制中断处理器负责修复存储器入口, 若不能修复数据则采取其它动作 ( 比如系统软件复位 ) 通过 LMB 接口对 LDRAM 的读操作, 无论来自 DMI 模块还是其它 LMB 主介质, 访问过程中, 一旦在请求的半字数据中检测到不可修复的存储器完整性错误, 将产生总线错误, 该错误可通过总线处理返回 由于 TriCore CPU 可能没有参与该操作, 另外标记一个单独的错误发送给 SCU 模块, 以选择性产生一个 NMI 强制中断返回到内核 2-11 V1.0,

12 对于半字大小或更大的对 LDRAM 的写入操作, 预计算 ECC 位且跟数据位同时写入存储器 对于字节的写入操作, 存储器处理转换为 DMI 内的一次半字读 修改 写顺序操作 这样, 字节写入操作可能导致检测到不可修复的存储器完整性错误, 该错误被当作标准读操作处理 数据 Cache (DCache) 由于 cache 数据跟本地数据 RAM 共用相同的物理存储器, 它同样配置了存储器完整性错误保护 : 每半字就有 6 个 ECC 位被存储 通过设置 MIECON.PMIEE 为 1, 使能 cache 数据中的 ECC 保护 当 MIECON.PMIEE 为 0, 忽略所有不可修复存储器完整性错误 对于从 TriCore CPU 到 DCache 的数据载入请求来说,ECC 位随着两个 cache 通道的数据位而被读取, 且为每个 cache 通道的每个半字计算不可修复错误标志 在有相应标记 hit 的 cache 通道中, 随着任意数据半字的请求而检测到数据错误的情况下, 给内核发送一个错误标志 如果检测到一个这样的错误情况, 则产生异步 DIE 强制中断 然后, 强制中断处理器负责修复储存器入口, 若数据不能被修复则采取其它动作 ( 比如系统软件复位 ) 对于半字大小或者更大的写入操作, 预计算检查位且跟数据位同时被写入到存储器 对于字节的写入操作, 存储器的处理转换为 DMI 模块内的一次半字读 修改 写顺序操作 这样, 字节写入操作可能导致检测到不可修复存储器完整性错误, 当做读操作处理 对于 cache 线的回写来说, 当 出错数据 传输到总线上时, 不可修复错误检测开始执行 所有在有效 cache 线上检测到错误条件的情况下 ( 正常 cache 线收回,cachex.xx 指令 ), 产生一个 DIE 强制中断 然后, 由于不能修复数据, 强制中断处理器负责采取纠正动作 ( 比如系统软件复位 ) 由于会检测到不可修复错误直到处理总线事务, 所以不能企图终止总线事务处理 数据标签 (DTag) 对每两个 cache 通道一组的每一组来说, 数据标签存储一个 22 位标签地址 这样, 数据标签以 22 位间隔写入且 6 个 ECC 位与每个 22 位标签地址相关联 通过设置 MIECON.PMIEE 为 1, 使能数据标签的 ECC 保护 当 MIECON.PMIEE 为 0, 忽略所有不可修复的存储器完整性错误 对于从 TriCore CPU 到 DCACHE 的数据载入或存储请求, 数据标签的 ECC 位随着数据位被读取, 且计算一个不可修复错误标志 仅当标签地址比较成功 标签位置有效且没有在相关标签通道中检测到不可修复错误的时候, 触发通道 hit, 其他结果当做丢失 2-12 V1.0,

13 在任何标记通道中都没有检测到错误的正常情况下, 那么 cache 线被正常填充 / 回填 在其 中一个标签通道中检测到一个错误并且 cache 线不包含 出错数据 的 cache 丢失情况下, 当返回 回填操作的时候,cache 控制器代替算法强制该通道指示一个将要被替代的通道 另外, 由于 这些错误对 TriCore CPU 可见,CCDIE_R 计数器递增, 以统计此类错误纠正次数 ( 如果需要 ) 在其中一个 cache 通道标志一个 cache hit, 且其他通道上检测到不可修复错误的情况下, 错误情 况被屏蔽并且对存储器完整性错误处理机制无影响 如果发生一个通道丢失错误, 随着在相关 数据标签通道上检测到不可修复错误且检测到 出错数据, 一个同步 DIE 强制中断发送给内核 且终止任何回写 / 回填序列 强制中断处理器负责使 cache 线失效, 且若可能, 处理任何相关 出 错数据, 或采取其他纠正动作 通过使用 cache 处理指令, 采取相似动作以强制 cache 回写 2-13 V1.0,

14 TriCore 1.3 兼容性为了对使用的基于 TriCore1.3 的设备直接进行代码写入, 而不需修改, 程序和数据方面存储器完整性错误处理包含一个兼容模式 该兼容模式通过设置 COMPAT.PIE/DIE 位为 1 来使能 当 COMPAT.PIE/DIE 位置位, 存储器完整性错误处理被修改 存储器完整性错误标志不直接传送给 TriCore 内核, 以致 : 不发生 PIE/DIE 强制中断 SPRAM/LDRAM 访问不产生 LMB 总线错误 CCPIE_R/CCDIE_R 计数器不更新当 COMPAT.PIE/DIE 随着相应的 MIECON 位而置位时, 任何检测到的存储器完整性错误将产生一个错误标志发送给 SCU 模块, 并可选择性产生一个 NMI 强制中断返回到内核中 2-14 V1.0,

15 2.4 寄存器本节仅描述表 1 所列出的与 具体实现相关的寄存器 有关所有寄存器的完整描述, 参见 TriCore 架构手册 表 1 寄存器 寄存器用途描述 CPU 内核特殊功能寄存器 (CSFRs) 程序状态信息 上下文和堆栈管 理 中断和强制中断控制 系统控 见页 2-16 制 CPU 通用寄存器 (GPRs) 通用寄存器和数据寄存器 见页 2-23 CPU 存储器保护寄存器 存储器保护控制和模式选择 见页 2-26 (CSFRs) FPU 寄存器 (CSFRs) 支持标准浮点指令 见页 2- 存储器完整性寄存器 (CSFRs) 完整性和保护内核特殊功能寄存器见页 2-34 CPU 从接口 (CPS) 寄存器软件断开控制和软件服务请求控制见页 2-51 Core 调试寄存器 (CSFRs) 调试控制见页 2-55 复位值的具体实现本章未定义的 CPU 寄存器的复位值见页 2-57 程序存储器接口寄存器 (PMI) PMI 指令 cache 的控制和状态见页 2-75 数据存储器接口寄存器 (DMI) DMI 状态和强制中断标志见页 V1.0,

16 2.5 CPU 内核特殊功能寄存器 (CSFR) 中的 CSFR 寄存器如图 6 所示 图 6 表 2 CSFR 寄存器内核特殊功能寄存器 缩略名说明偏移地址访问模式复位值 MMU_CON MMU 配置寄存器 8000 H PCXI 先前上下文信息寄存器 FE00 H PSW 程序状态字寄存器 FE04 H PC 程序计数器寄存器 FE08 H SYSCON 系统配置寄存器 FE14 H BIV 中断指针矢量表指针寄存器 FE20 H BTV 强制中断矢量表指针寄存器 FE24 H ISP 中断堆栈指针寄存器 FE28 H 读 写 E, E, E, H H B80 H XXXX XXXX H H H A H H 2-16 V1.0,

17 表 2 内核特殊功能寄存器 缩略名说明偏移地址访问模式复位值 ICR ICU 中断控制寄存器 FE2C H FCX 空闲上下文列表头指针寄存器 FE38 H LCX 空闲上下文列表限制指针寄存 FE3C H 器 COMPAT 兼容性控制寄存器 9400 H 读 写 E, H H H FFFFFFFF H 2-17 V1.0,

18 2.5.1 寄存器程序状态字寄存器 (PSW) 的具体实现是对 TriCore 架构手册中 PSW 说明的扩展 FPU 操作的状态标志位和算数逻辑 (ALU) 运算的状态标志位在 PSW 中共用一个标志位 程序状态字寄存器 PSW 程序状态字寄存器 (F7E1FE04 H ) 复位值 :0000 0B80 H 符号位序号类型功能描述 RM [25:24] rw FPU 舍入模式选择 FX 26 rwh FPU 误差标志位 SAV 27 rh StickyAdvance 上溢标志位 FU rwh FPU 下溢标志位 AV 28 rwh Advance 上溢标志位 FZ FPU 零标志分频 SV 29 rwh Sticky 上溢标志位 FV FPU 上溢标志位 V 30 rwh 上溢标志位 FI FPU 无效操作标志位 C 31 rwh 进位标志位 FS FPU 异常标志位 注 : 寄存器中未加阴影的区域表示具体实现的位元 / 位域, 阴影区域部分在 TriCore 构造手册中定义 2-18 V1.0,

19 中断控制寄存器中断控制寄存器 (ICR) 是一个具体实现的 CPU 内核特殊功能寄存器, 它的仲裁周期控制由 24 位到 26 位实现 ICR 中断控制寄存器 (F7E1FE2C H ) 复位值 : H 符号位序号类型功能描述 CARBCYC [25:24] rw 仲裁周期的编号 CARBCYC 控制仲裁周期数来决定最高优先级的请求 00B 4 个仲裁周期 ( 系统默认值 ) 01B 3 个仲裁周期 10B 2 个仲裁周期 11B 1 个仲裁周期 CONECYC 26 rw 每个仲裁周期控制的时钟数 CONECYC 位决定每个仲裁周期的系统时钟数, 只有在低系统频率下的系统设计中, 该位才被置 1 0 B 每个仲裁周期两个时钟 1 B 每个仲裁周期一个时钟 注 : 寄存器中未加阴影的区域表示具体实现的位元 / 位域, 阴影区域部分在 TriCore 构造手册中定义 2-19 V1.0,

20 MMU 配置寄存器 (MMU_CON) 指示 TriCore 的存储管理单元不可用 ( 位 No MMU 始终置位 ) MMU_CON MMU 配置寄存器 (F7E H ) 复位值 : H 符号 位序号 类型 功能描述 NO MMU 15 r MMU 实现 0B 1B MMU 可用 MMU 不可用 MMU_CON 的其它位未定义 注 : 中的 MMU 不可用 注 : 寄存器中未加阴影的区域表示具体实现的位元 / 位域, 阴影区域部分在 TriCore 构造手册中定义 2-20 V1.0,

21 CPU ID 寄存器 CPU_ID CPU ID 寄存器 (F7E1FE18 H ) 复位值 :000AC0XX H MOD:000A rh MOD_B rh REV:xx rh 符号位序号类型功能描述 MOD_REV [7:0] rh 修订编号 1H 给出模块修订版本编号, 从 01H( 第一版 ) 开始 编号到 FFH FFH 最后版本 MOD_B [15:8] rh 位模块使能 C0H 位模块 MOD [31:16] rh 模块 ID 编号 0A H 用于模块 ID 该位域的值为 C0H 定义具有 位模块 ID 寄存器的 2-21 V1.0,

22 兼容性控制寄存器兼容性控制寄存器 (COMPAT) 是一个具体实现的 CPU 内核特殊功能寄存器, 允许强制 执行 TriCore 1.3 向后兼容性的某些行为 COMPAT 寄存器的复位值保证 TriCore 1.3 向后兼 容性被默认使能 COMPAT 兼容性控制寄存器 (F7E H ) 复位值 :FFFFFFFF H r RM BP DIE PIE r rw rw rw rw 符号位序号类型功能描述 PIE 0 rw 程序完整性错误兼容性 0 B 由 CPU 处理错误 1 B 错误标志核心 TriCore1.3 向后兼容 DIE 1 rw 数据完整性错误兼容性 0 B 由 CPU 处理错误 BP 2 rw 分支预测兼容性 1 B 错误标志核心 TriCore1.3 向后兼容 0 B 双模式分支预测 RM 3 rw 舍入模式兼容性 0 [31:4] r 保留 1 B 静态分支预测 TriCore1.3 向后兼容 0 B PSW.RM 不通过 RET 恢复 1 B PSW.RM 通过 RET 恢复.TriCore 1.3 向后兼容 读取返回为 0; 应写入 V1.0,

23 2.6 CPU 通用寄存器 中的通用寄存器如图 7 所示 图 7 GPR 寄存器 表 3 GPR 寄存器 缩略名说明偏移地址访问模式复位值 D0 数据寄存器 0 FF00 H D1 数据寄存器 1 FF04 H D2 数据寄存器 2 FF08 H D3 数据寄存器 3 FF0C H D4 数据寄存器 4 FF10 H 读 写 XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H 2-23 V1.0,

24 表 3 GPR 寄存器 缩略名功能描述偏移地址访问模式复位值 D5 数据寄存器 5 FF14 H D6 数据寄存器 6 FF18 H D7 数据寄存器 7 FF1C H D8 数据寄存器 8 FF20 H D9 数据寄存器 9 FF24 H D10 数据寄存器 10 FF28 H D11 数据寄存器 11 FF2C H D12 数据寄存器 12 FF30 H D13 数据寄存器 13 FF34 H D14 数据寄存器 14 FF38 H D15 数据寄存器 15 FF3C H A0 地址寄存器 0( 全局地址寄存 FF80 H 器 ) A1 地址寄存器 1( 全局地址寄存 FF84 H 器 ) A2 地址寄存器 2 FF88 H A3 地址寄存器 3 FF8C H A4 地址寄存器 4 FF90 H 读 写 XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H 2-24 V1.0,

25 表 3 GPR 寄存器 缩略名功能描述偏移地址访问模式复位值 A5 地址寄存器 5 FF94 H A6 地址寄存器 6 FF98 H A7 地址寄存器 7 FF9C H A8 地址寄存器 8( 全局地址寄存 FFA0 H 器 ) A9 地址寄存器 9( 全局地址寄存 FFA4 H 器 ) A10 地址寄存器 10( 堆栈指针 ) FFA8 H A11 地址寄存器 11( 返回地址 ) FFAC H A12 地址寄存器 12 FFB0 H A13 地址寄存器 13 FFB4 H A14 地址寄存器 14 FFB8 H A15 地址寄存器 15 FFBC H 读 写 XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H XXXX XXXX H 2-25 V1.0,

26 2.7 CPU 存储器保护寄存器 如图 8 所示, 中具有四个存储器保护寄存器组, 它们规定存储器的保护区域和代码 / 数据的访问权限 由位域 PSW.PRS 决定 CPU 当前使用哪组寄存器 存储器保护寄存器是内核特殊功能寄存器, 在 TriCore 架构手册中有关于它们的详细描述 图 8 中的存储器保护寄存器组 2-26 V1.0,

27 表 4 存储器保护寄存器 缩略名功能描述偏移地址访问模式复位 读 写 DPR0_0L 数据段保护寄存器组 0, 区域 0, 下边界 C000 H DPR0_0U 数据段保护寄存器组 0, 区域 0, 上边界 C004 H DPR0_1L 数据段保护寄存器组 0, 区域 1, 下边界 C008 H DPR0_1U 数据段保护寄存器组 0, 区域 1, 上边界 C00C H DPR0_2L 数据段保护寄存器组 0, 区域 2, 下边界 C010 H DPR0_2U 数据段保护寄存器组 0, 区域 2, 上边界 C014 H DPR0_3L 数据段保护寄存器组 0, 区域 3, 下边界 C018 H DPR0_3U 数据段保护寄存器组 0, 区域 3, 上边界 C01C H DPR1_0L 数据段保护寄存器组 1, 区域 0, 下边界 C400 H DPR1_0U 数据段保护寄存器组 1, 区域 0, 上边界 C404 H DPR1_1L 数据段保护寄存器组 1, 区域 1, 下边界 C408 H 2-27 V1.0,

28 表 4 存储器保护寄存器 缩略名功能描述偏移地址访问模式复位 读 写 DPR1_1U 数据段保护寄存器组 1, 区域 1, 上边界 C40C H DPR1_2L 数据段保护寄存器组 1, 区域 2, 下边界 C410 H DPR1_2U 数据段保护寄存器组 1, 区域 2, 上边界 C414 H DPR1_3L 数据段保护寄存器组 1, 区域 3, 下边界 C418 H DPR1_3U 数据段保护寄存器组 1, 区域 3, 上边界 C41C H DPR2_0L 数据段保护寄存器组 2, 区域 0, 下边界 C800 H DPR2_0U 数据段保护寄存器组 2, 区域 0, 上边界 C804 H DPR2_1L 数据段保护寄存器组 2, 区域 1, 下边界 C808 H DPR2_1U 数据段保护寄存器组 2, 区域 1, 上边界 C80C H DPR2_2L 数据段保护寄存器组 2, 区域 2, 下边界 C810 H DPR2_2U 数据段保护寄存器组 2, 区域 2, 上边界 C814 H 2-28 V1.0,

29 表 4 存储器保护寄存器 缩略名功能描述偏移地址访问模式复位 读 写 DPR2_3L 数据段保护寄存器组 2, 区域 3, 下边界 C818 H DPR2_3U 数据段保护寄存器组 2, 区域 3, 上边界 C81C H DPR3_0L 数据段保护寄存器组 3, 区域 0, 下边界 CC00 H DPR3_0U 数据段保护寄存器组 3, 区域 0, 上边界 CC04 H DPR3_1L 数据段保护寄存器组 3, 区域 1, 下边界 CC08 H DPR3_1U 数据段保护寄存器组 3, 区域 1, 上边界 CC0C H DPR3_2L 数据段保护寄存器组 3, 区域 2, 下边界 CC10 H DPR3_2U 数据段保护寄存器组 3, 区域 2, 上边界 CC14 H DPR3_3L 数据段保护寄存器组 3, 区域 3, 下边界 CC18 H DPR3_3U 数据段保护寄存器组 3, 区域 3, 上边界 CC1C H CPR0_0L 代码段保护寄存器组 0, 区域 0, 下边界 D000 H 2-29 V1.0,

30 表 4 存储器保护寄存器 缩略名功能描述偏移地址访问模式复位 读 写 CPR0_0U 代码段保护寄存器组 0, 区域 0, 上边界 D004 H CPR0_1L 代码段保护寄存器组 0, 区域 1, 下边界 D008 H CPR0_1U 代码段保护寄存器组 0, 区域 1, 上边界 D00C H CPR1_0L 代码段保护寄存器组 1, 区域 0, 下边界 D400 H CPR1_0U 代码段保护寄存器组 1, 区域 0, 上边界 D404 H CPR1_1L 代码段保护寄存器组 1, 区域 1, 下边界 D408 H CPR1_1U 代码段保护寄存器组 1, 区域 1, 上边界 D40C H CPR2_0L 代码段保护寄存器组 2, 区域 0, 下边界 D800 H CPR2_0U 代码段保护寄存器组 2, 区域 0, 上边界 D804 H CPR2_1L 代码段保护寄存器组 2, 区域 1, 下边界 D808 H CPR2_1U 代码段保护寄存器组 2, 区域 1, 上边界 D80C H 2-30 V1.0,

31 表 4 存储器保护寄存器 缩略名功能描述偏移地址访问模式复位 CPR3_0L 代码段保护寄存器组 3, 区域 0, 下边界 DC00 H 读 写 CPR3_0U 代码段保护寄存器组 3, 区域 0, 上边界 DC04 H CPR3_1L 代码段保护寄存器组 3, 区域 1, 下边界 DC08 H CPR3_1U 代码段保护寄存器组 3, 区域 1, 上边界 DC0C H DPM0 数据保护模式寄存器组 0 E000 H DPM1 数据保护模式寄存器组 1 E080 H DPM2 数据保护模式寄存器组 2 E100 H DPM3 数据保护模式寄存器组 3 E180 H CPM0 代码保护模式寄存器组 0 E200 H CPM1 代码保护模式寄存器组 1 E280 H CPM2 代码保护模式寄存器组 2 E300 H CPM3 代码保护模式寄存器组 3 E380 H 2-31 V1.0,

32 2.8 FPU 寄存器 为了使功能更加强大, 在 TriCore 架构中引入了一组 FPU 特殊功能寄存器 FPU 强制中断寄存器 FPU_TRAP_CON FPU_TRAP_PC FPU_TRAP_OPC FPU_TRAP_SRCn 图 9 TriCore 1.3.1CSFR 寄存器 MCA06073_2 表 5 浮点特殊功能寄存器 缩略名说明偏移地址访问模式复位 FPU_TRAP _CON FPU_TRAP _PC FPU_TRAP _OPC FPU_TRAP _SRC1 FPU_TRAP _SRC2 FPU_TRAP _SRC3 强制中断控制寄存器 A000 H 强制中断指令程序计数器寄存 A004 H 器 强制中断指令可选代码寄存器 A008 H 强制中断指令操作数寄存器 A010 H 强制中断指令操作数寄存器 A014 H 强制中断指令操作数寄存器 A018 H FPU_ID 强制中断 ID 寄存器 A020 H 读 写 0054C003 H 2- V1.0,

33 2.8.1 寄存器 FPU ID 寄存器 FPU_ID 强制中断 ID 寄存器 (F7E1A020 H ) 复位值 :0054C003 H MOD:0054 rh MOD_B rh REV:xx rh 符号 位序号 类型 功能描述 MOD_REV [7:0] rh 修订编号 1H 给出模块修订版编号, 从 01H( 第一版 ) 开始编 号到 FFH FFH 最后版本 MOD_B [15:8] rh 位模块使能 C0H 该位域的值为 C0H 定义具有 位模块 ID 寄存器的 位模块 MOD [31:16] rh 模块 ID 编号 54 H 用于模块 ID 2-33 V1.0,

34 2.9 存储器完整性寄存器 存储器完整性寄存器 (CSFRs). 图 2-1 完整性寄存器 MIECON CCPIER CCDIER PIEAR PIETR DIEAR DIETR SMACON TriCore 1.3.1CSFR 寄存器 MCA 表 2-1 存储器完整性寄存器 缩略名功能描述偏移地址访问模式复位 MIECON 存储器完整性错误控制寄存器 9044 H MIECON2 存储器完整性错误控制寄存器 9048 H 2 CCPIER 纠正程序完整性错误计数寄存 9218 H 器 CCDIER 纠正数据完整性错误计数寄存 9028 H 器 PIEAR 程序完整性错误地址寄存器 9210 H PIETR 程序完整性错误强制中断寄存 9214 H 器 DIEAR 数据完整性错误地址寄存器 9020 H 读 写 E, E, H 2-34 V1.0,

35 表 2-1 存储器完整性寄存器 缩略名功能描述偏移地址访问模式复位 DIETR 数据完整性错误强制中断寄存器 9024 H SMACON SIST 模式访问控制寄存器 900C H 读 写 E, 2-35 V1.0,

36 2.9.1 寄存器描述存储器完整性错误控制寄存器存储器完整性错误控制寄存器能用软件来控制不可修复的存储器完整性错误的处理 MIECON 存储器完整性错误控制寄存器 (F7E H ) 复位值 : H PTIE E 0 DTIE E r rw r rw PMIE E r rw r rw 0 DMI EE 符号位序号类型功能描述 DMIEE 0 rwh 数据存储器完整性错误使能 使能数据存储器的不可修复完整性错误处理 0 B 不可修复的完整性错误处理禁止 所有的存储器访问被认为无差错 1 B 不可修复完整性错误处理使能 PMIEE 8 rwh 程序存储器完整性错误使能 使能程序存储器的不可修复完整性错误处理 0 B 不可修复的完整性错误处理禁止 所有的存 储访问被认为无差错 1 B 不可修复完整性错误处理使能 2-36 V1.0,

37 符号 位序号 类型 功能描述 DTIEE 16 rw 数据标签完整性错误使能使能数据标签的不可修复完整性错误处理 0 B 不可修复的完整性错误处理禁止 所有的存 储访问被认为无差错 1 B 不可修复的完整性错误处理使能 PTIEE 18 rw 程序标签完整性错误使能使能数据标签的不可修复完整性错误处理 0 B 不可修复的完整性错误处理禁止 所有的存 储访问被认为无差错 1 B 不可修复的完整性错误处理使能 0 [7:1] [15:9], 17, [31:19] r 保留 读取返回为 0; 应写入 V1.0,

38 存储器完整性错误控制寄存器 2 存储器完整性错误控制寄存器 2(MIECON2) 允许软件控制可修改存储器完整性错误的处理 MIECON2 的动作是根据 TriCore1.3.1 内核的 tc_cfg_sec_con_en_i 的输入来配置的 当 tc_cfg_sec_con_en_i 发出声明时,MIECON2 只能在管理模式下被写入, 并受到初始化结束保 护 MIECON2 读取返回寄存器值 当 tc_cfg_sec_con_en_i 无效, 对 MIECON2 的写入没有影 响, 且 MIECON2 读取全部返回 0 MIECON2 存储器完整性错误控制寄存器 2 (F7E H ) 复位值 : H PTS ECE 0 DTS ECE r rw r rw PMS ECE 0 DMS ECE r rw r rw 符号位序号类型功能描述 DMSECE 0 rwh 数据存储器单个错误纠正使能 使能数据存储器单个位的错误纠正 PMSECE 8 rwh 程序存储器单个错误纠正使能 使能程序存储器单个位的错误纠正 DTSECE 16 rwh 数据标签单个错误纠正标志位使能 使能数据标签单个位的错误纠正 PTSECE 18 rwh 程序标签单个错误纠正标志位使能 使能程序标签单个位的错误纠正 0 [7:1] [15:9], 17, [31:19] r 保留读取返回 0; 应写入 V1.0,

39 功能尽管由于 CSFR 位保护要求的不同 给定存储器类型的 xxiee 和 xxsece 位存在于不同的寄存器中 ( 分别在 MIECON 和 MIECON2 中 ), 这些位却可以交互执行以下功能 表 6 功能 xxsece xxiee 功能描述 0 0 无存储器完整性处理忽略所有的单双位存储器完整性错误 0 1 检测错误模式单双位错误被当做不可修复的错误 1 0 仅 SEC 模式 由 ECC 纠正单个位错误, 忽略双位错误 1 1 SECDED 模式 由 ECC 纠正单个位错误, 双位错误被当做不可修复 的错误 2-39 V1.0,

40 程序完整性错误信息寄存器两个结构上可见的寄存器 (PIETR,PIEAR), 允许软件来定位上一次检测到的不可修复的程序存储器完整性错误的来源 当检测一个不可修复程序完整性错误情况且 PIETR.IED 位为 0 时, 这些寄存器被更新 更新发生时, PIETR.IED 位置 1, 且保持为 1 直到由软件清除 在 PIETR.IED 置位期间, 禁止进一步硬件更新 PIETR 和 PIEAR 在总线访问期间或 CPU 指令预取期间, 一旦检测到任何不可修复的完整性错误条件, 则更新 PIETR 和 PIEAR 因为预取指令是不确定的,PIETR 和 PIEAR 寄存器可直接更新, 而不产生相应的 PIE 强制中断 程序完整性错误强制中断寄存器 (PIETR) 含有一些标志位, 支持软件定位上一次检测到的不可修复程序存储器完整性错误的来源 指令预取期间在检测到不可修复完整性错误情况的地方, 更新 IE_S IE_C 和 IE_T 位以指示检测到的错误处于何种存储器结构中, 同时清零位 BUS_ID 和 IE_B 总线访问期间在检测到错误的地方, 置位 IE_B 且更新 BUS_ID 以指示正在初始化的总线主设备的标签 ID, 同时清零位 IE_S IE_C 和 IE_T 2-40 V1.0,

41 程序完整性错误强制中断寄存器 (PIETR) PIETR 存储器完整性错误强制中断寄存器 (F7E H ) 复位值 : H r BUS_ID IE_B IE_S IE_C IE_T IED r rh rh rh rh rh rwh 符号位序号类型功能描述 IED 0 rwh 完整性错误检测 读操作 : 0 B 没有发生程序完整性错误情况 1 B 检测到程序完整性错误情况 写操作 : PIETR 和 PIEAR 的内容生效, 禁止 PIETR 和 IEAR 的进一步更新 0 B 清除 IED 位, 重新使能 PIETR 和 PIEAR 更新 1 B 无效 IE_T 1 rh 完整性错误 标签存储器 IE_C 2 rh 完整性错误 Cache 存储器 IE_S 3 rh 完整性错误 高速暂存存储器 IE_B [4] Rh 完整性错误 总线访问 BUS_ID [8:5] rh 总线主设备 ID 签 ID 0 [31:9] r 保留 总线访问期间检测到程序完整性错误的总线主设备标 读取返回 0; 应写入 V1.0,

42 程序完整性错误地址寄存器 当操作遇到不可修复程序存储器错误时, 寄存器包含该操作访问的物理地址 只有 当 PIETR.IED 为 0 时, 该寄存器才会更新 PIEAR 程序完整性错误地址寄存器 (F7E H ) 复位值 : H TA rh TA rh 符号 位序号 类型 功能描述 TA [31:0] rh 操作地址操作遇到程序完整性错误时, 该操作正在访问的物理 地址 2-42 V1.0,

43 数据完整性错误信息寄存器两个结构上可见的寄存器 (DIETR, DIEAR), 允许软件定位上一次检测到的不可修复的数据存储器完整性错误的来源 当检测一个不可修复数据完整性错误情况且 PIETR.IED 位为 0 时, 这些寄存器被更新 更新发生时,DIETR.IED 位置 1, 且保持为 1 直到该位由软件清除 在 DIETR.IED 置位期间, 禁止进一步硬件更新 PIETR 和 PIEAR 数据完整性错误强制中断寄存器 (DIETR) 含有一些标志位, 以支持由软件定位上一次检测到的不可修复数据存储器完整性错误来源 CPU 加载 / 存储访问期间, 在检测到不可修复数据完整性错误的地方更新位 IE_S IE_C IE_T 和 TRTYP, 以指示检测到的错误处于何种储存器结构以及 DIE 强制中断的性质, 同时清零位 BUS_ID 和 IE_B 总线访问期间, 在检测到错误的地方位置位 IE_B 且更新 BUS_ID, 以指示初始化主设备的标签 ID, 同时清零位 IE_S,IE_C IE_T 和 TRTYP TriCore1.3.1 中的 DIE 强制中断总是异步的, 与遇到数据完整性错误时的操作的类型无关 位 DIETR.TYTYP 指示 DIE 强制中断的类型 当检测到一个引起 DIE 信息寄存器更新并导致产生异步 DIE 强制中断的数据完整性错误时,DIETR.IED =1 DIETR.TRTYP= 1, 禁止异步 DIE 强制中断的进一步产生直到 DIETR.IED 被软件清零 2-43 V1.0,

44 数据完整性错误强制中断寄存器 (DIETR) DIETR 数据完整性错误强制中断寄存器 (F7E H ) 复位值 : H r TRT YP BUS_ID IE_B IE_S IE_C IE_T IED r rh rh rh rh rh rh rwh 符号 位序号 类型 功能描述 IED 0 rwh 完整性错误检测读操作 : 0 B 无数据完整性错误情况发生 1 B 检测到数据完整性错误情况,PIETR 和 DIEAR 的内容生效, 禁止进一步更新 DIETR 和 DIEAR 写操作 : 0 B 清除 IED 位, 重新使能 DIETR 和 DIEAR 的更新 1 B 无效 IE_T 1 rh 完整性错误 标签存储器 IE_C 2 rh 完整性错误 Cache 存储器 IE_S 3 rh 完整性错误 高速暂存存储器 IE_B 4 rh 完整性错误 总线访问 BUS_ID [8:5] rh 总线主设备 ID 总线访问期间检测到数据完整性错误的总线主设备标签 ID TRTYP 9 rh 强制中断类型在 CPU 加载 / 存储访问期间检测到数据完整性错误处产生的强制中断类型 0 B 同步强制中断 2-44 V1.0,

45 符号位序号类型功能描述 0 [31:10] r 保留 读取返回 0; 应写入 V1.0,

46 数据完整性错误地址寄存器当操作遇到不可修复数据存储器完整性错误时, 该寄存器含有该操作正在访问的物理地址 仅当 DIETR.IED 为 0 时, 该寄存器才会更新 DIEAR 数据完整性错误地址寄存器 (F7E H ) 复位值 : H TA rh TA rh 符号 位序号 类型 功能描述 TA [31:0] rh 操作地址 操作遇到程序完整性错误时, 该操作正在访问的物理 地址 2-46 V1.0,

47 SIST( 系统内软件 ) 测试支持 TriCore 内核通过 ECC 保护核心存储器来防止存储器完整性错误 但有一个副作用 : 需要比存储器常规访问路径更宽的存储区域 增加的 ECC 存储位不易由已经存在的数据路径进行访问, 需要对存储器进行基于 SIST 的测试的地方将会引发问题 TriCore 内核同样含有一个嵌入式存储器阵列, 比如标签存储器, 不能通过常规 CPU 数据访问路径正常访问 为了解决这个问题,TriCore 内核包含增强的 SIST 支持, 以允许访问所有内核上的存储器阵列 嵌入式存储器阵列到 TriCore 地址空间的映射和其他 SIST 相关特性的使能通过设置 SIST 模式访问控制寄存器 (SMACON) 中的相应位来控制 SMACON 寄存器的位域是特定实现的 通过对设置寄存器 SMACON 的位, 嵌入式存储器阵列被地址映射到程序和数据高速区域 ( 段 CH 和 DH) 程序方面的嵌入式存储器映射到 SPRAM 区域, 位于地址段的 C01C0000H- C01FFFFFH( 镜像为 D41C0000H-D41FFFFFH) 所有其他嵌入式储存器映射到 LDRAM 区域且位于地址段 D01C0000H-D01FFFFFH 如果一个存储器已经通过寄存器 SMACON 的设置映射到高速存储器区域, 其在正常操作模式下不能被访问 SIST 模式访问控制寄存器 SMACON SIST 模式访问控制寄存器 (F7E1900C H ) 复位值 : H IODT 0 r rw r DS DT DC 0 PS PT PC r rw rw rw r rw rw rw 2-47 V1.0,

48 符号位序号类型功能描述 PC [1:0] rw Cache 指令存储器 SIST 模块访问控制 1) 00 B 正常运行, 无映射 01 B 1XBcache 指令存储器配置为程序 SPR PT [3:2] rw 程序标签存储器 SIST 模式访问控制 00 B 正常运行, 无映射 01 B 数据阵列映射, 无查错 / 纠错 10 B 检查阵列映射, 无查错 / 纠错 11 B 数据阵列映射, 使能查错 / 纠错 PS [5:4] rw 程序高速暂存存储器 SIST 模块访问控制 00 B 正常运行, 无映射 01 B 数据阵列映射, 无查错 / 纠错 10 B 检查阵列映射, 无查错 / 纠错 11 B 数据阵列映射, 使能查错 / 纠错 DC [9:8] rw 数据 Cache 存储器 SIST 模块访问控制 00 B 正常运行, 无映射 01 B 1X B 数据 cache 存储器配置为数据 SPR DT [11:10] rw 数据标志位存储器 SIST 模块访问控制 00 B 正常运行, 无映射 01 B 数据阵列映射, 无查错 / 纠错 10 B 检查阵列映射, 无查错 / 纠错 11 B 数据阵列映射, 使能查错 / 纠错 2-48 V1.0,

49 符号 位序号 类型 功能描述 DS [13:12] rw 数据高速暂存存储器 SIST 模块访问控制 00 B 正常运行, 无映射, 性能优化 01 B 数据阵列映射, 无查错 / 纠错 10 B 检查阵列映射, 无查错 / 纠错 11 B 数据阵列映射, 使能查错 / 纠错 IODT 24 rw 按顺序数据处理 0 B 正常运行, 非独立旁通存储 1 B 按顺序操作, 加载值总是在存储前被擦除, 禁 止处理器存储缓存 0 [7:6] [23:14] [31:25] r 保留读取返回 0; 应被写入 0 1) 当 Flash 读取保护机制被激活,SMACON.PC 的位值被取代并当做 00B 正常运行模式, 而该位域仍可正 常读取和写入 2-49 V1.0,

50 控制位域 SMACON 寄存器内部的控制位域允许对本地存储器的单独控制 每个存储器可被映射到不同模式下的操作 正常运行, 无映射无存储器映射且可以正常运行 不能被直接寻址的嵌入式存储器在系统地址映射中不可用 使能性能优化, 从而可从物理存储器或相关写缓存中读取加载值 数据阵列映射, 无查错 / 纠错存储器的数据阵列 ( 仅该阵列 ) 在地址映射中可见 写该存储器不影响检查位 禁止存储器纠错 / 查错 禁止性能优化, 从而确保执行对真实存储器的存储器访问 检查阵列映射, 无查错 / 纠错存储器的检查位阵列 ( 仅该阵列 ) 在地址映射中可见 写该存储器将不会影响数据位 禁止存储器纠错 / 查错 禁止性能优化, 从而确保执行对真实存储器的存储器访问 数据阵列映射, 使能查错 / 纠错存储器的数据阵列在地址映射中可见 每次正常操作中, 写该存储器将会更新检查位 使能存储器纠错 / 查错 禁止性能优化, 从而确保执行真实存储器的存储器访问 2-50 V1.0,

51 2.10 CPU 从接口 (CPS) 寄存器 TriCoreCPU 的 CPU 从接口可从系统外设总线直接访问 CPU 的中断服务请求寄存器 有 关 CPS 寄存器的详细说明, 参见 TriCore 架构手册 图 10 CPS 寄存器 表 7 CPS 寄存器 缩略名功能描述偏移地址访问模式复位 CPU_SBSRC CPU 软件断点服务请求控 制寄存器 FFBC H 读 写 CPU_SRC3 CPU 服务请求控制寄存器 3 FFF0 H CPU_SRC2 CPU 服务请求控制寄存器 2 FFF4 H CPU_SRC1 CPU 服务请求控制寄存器 1 FFF8 H CPU_SRC0 CPU 服务请求控制寄存器 0 FFFC H 注 : 寄存器 CPU_SBSRC 和 CPU_SRC[3:0] 不能进行位寻址 2-51 V1.0,

52 寄存器描述 这些寄存器有一个具体实现 : 服务控制类型 (TOS) 位 / 位域 CPU 服务请求控制寄存器 CPU_SRCn(n= 0-3) CPU 服务请求控制寄存器 n (F7E0FFFC H -n*4) 复位值 : H 符号位序号类型功能描述 TOS 10 rw 服务控制类型 0 B 服务提供者 =CPU 1 B 服务提供者 =PCP r 保留读取返回 0; 应写入 0 注 : 寄存器描述中未加阴影的区域表示具体实现的位 / 位域, 阴影区域的定义在 TriCore 构架手册中 2-52 V1.0,

53 CPS 模块 ID 寄存器 CPS_ID CPS 模块 ID 寄存器 (F7E0FF08 H ) 复位值 :0015C0XX H MOD:0015 rh MOD_B rh REV: xx rh 符号位序号类型功能描述 MOD_REV [7:0] rh 修订编号 1H 给出模块修订版编号, 从 01H( 第一版 ) 开始编号到 FFH FFH 最后版本 MOD_B [15:8] rh 位模块使能 C0 H 该位域为 C0 H 定义具有 位模块 ID 寄存器的 位模块 MOD [31:16] rh 模块 ID 编号 15 H 用于模块 ID 2-53 V1.0,

54 CPU 软件断点服务请求控制寄存器 CPU_SBSRC CPU 软件断点服务请求控制寄存器 (F7E0FFBC H ) 复位值 : H 符号位序号类型功能描述 TOS 10 rw 服务控制类型 0 B 服务提供者 =CPU 1 B 保留 0 11 r 保留读取返回为 0; 应写入 0 注 : 寄存器描述中未加阴影的区域表示具体实现的位 / 位域, 阴影区域的定义在 TriCore 构架手册中给出 2-54 V1.0,

55 2.11 内核调试寄存器 手册 内核调试寄存器的作用是用于调试 有关内核调试寄存器的详细说明, 参见 TriCore 构架 图 11 表 8 内核调试寄存器内核调试寄存器 缩略名功能描述偏移地址访问模式复位 CCTRL 计数器控制寄存器 FC00 H CCNT CPU 时钟计数寄存器 FC04 H ICNT 指令计数寄存器 FC08 H M1CNT 多重计数寄存器 1 FC0C H M2CNT 多重计数寄存器 2 FC10 H M3CNT 多重计数寄存器 3 FC14 H DBGSR 调试状态寄存器 FD00 H 读 写 类 1 复位 类 1 复位 类 1 复位 类 1 复位 类 1 复位 类 1 复位 类 1 复位 2-55 V1.0,

56 表 8 内核调试寄存器 缩略名 功能描述 偏移地址访问模式 复位 EXEVT 外部断开输入事件寄存器 FD08 H CREVT 内核 SFR 访问断开事件寄存 FD0C H 器 SWEVT 软件断开事件寄存器 FD10 H TR0EVT 触发事件 0 寄存器 FD20 H TR1EVT 触发事件 1 寄存器 FD24 H DMS 调试监控起始地址寄存器 FD40 H DCX 调试上下文保存区指针 FD44 H DBGTCR 调试强制中断控制寄存器 FD48 H CPU_SBSR CPU 软件断开服务请求控 FFBC H C 制寄存器 1) 位于 CPU 从 (CPS) 接口寄存器区域 读 写,NC 类 1 复位值 类 1 复位值 类 1 复位值 类 1 复位值 类 1 复位值 类 1 复位值 DE H 类 1 复位值 DE H 类 1 复位值 1) U,SV 值 2-56 V1.0,

57 2.12 复位值的具体实现 这部分概括了在 CPU 寄存器这一章节中没有定义的复位值的具体实现 表 9 复位值的具体实现 寄存器 地址 复位值 PCXI F7E1FE00 H PCX F7E1FE00 H CPU_ID F7E1FE18 H 000AC0XX H FCX F7E1FE38 H LCX F7E1FE3C H COMPAT F7E19400 H FFFFFFFF H ISP F7E1FE28 H H BIV F7E1FE20 H BTV F7E1FE24 H A H FPU_ID F7E1A020 H 0054C003 H 2-57 V1.0,

58 2.13 CPU 指令时序本节介绍执行单元中各流水线的 CPU 指令时序 执行单元一般包含有整数流水线 Load/Store 流水线 以及浮点运算单元 ( 可选 ) Load/Store 单元中的 TLB 指令也是可选指令 术语定义 : 重复率假定连续发送同一条指令, 重复率 表示两次连续发送之间所需的最少时钟周期数 当连续发送不同的指令时, 内部流水线的影响可能会导致额外的延迟 结果延迟 结果延迟 表示从指令发送开始到指令的结果产生 ( 以用作后续指令的操作数或写入 GPR) 之间的时钟周期数 结果延迟对于不执行 GPR 写操作的指令无意义 地址延迟 地址延迟 表示从指令发送开始到地址值被更新 ( 以用作后续指令的操作数或写入地址寄存器 ) 之间的时钟周期数 指令流延迟 流延迟 表示从发送当前指令到发送下条指令 ( 如果控制转移是有条件的, 则该指令位于目标地址或下一条顺序指令处 ) 之间的时钟周期数 2-58 V1.0,

59 整数流水线指令 以下为每条指令的整数流水线指令时序 简单算术指令时序 每条指令是单独发出的 表 10 简单算术指令时序 指令 结果延迟 重复率 指令 结果延迟 重复率 整数流水线算法指令 ABS 1 1 MAX.H 1 1 ABS.B 1 1 MAX.HU 1 1 ABS.H 1 1 MAX.U 1 1 ABSDIF 1 1 MIN 1 1 ABSDIF.B 1 1 MIN.B 1 1 ABSDIF.H 1 1 MIN.BU 1 1 ABSDIFS 1 1 MIN.H 1 1 ABSDIFS.H 1 1 MIN.HU 1 1 ABSS 1 1 MIN.U 1 1 ABSS.H 1 1 RSUB 1 1 ADD 1 1 RSUBS 1 1 ADD.B 1 1 RSUBS.U 1 1 ADD.H 1 1 SAT.B 1 1 ADDC 1 1 SAT.BU 1 1 ADDI 1 1 SAT.H 1 1 ADDIH 1 1 SAT.HU 1 1 ADDS 1 1 SEL 1 1 ADDS.H 1 1 SELN 1 1 ADDS.HU 1 1 SUB 1 1 ADDS.U 1 1 SUB.B 1 1 ADDX 1 1 SUB.H 1 1 CADD 1 1 SUBC 1 1 CADDN 1 1 SUBS V1.0,

60 表 10 简单算术指令时序 指令结果延迟重复率指令结果延迟重复率 CSUB 1 1 SUBS.H 1 1 CSUBN 1 1 SUBS.HU 1 1 MAX 1 1 SUBS.U 1 1 MAX.B 1 1 SUBX 1 1 MAX.BU 1 1 比较指令 EQ 1 1 LT.B 1 1 EQ.B 1 1 LT.BU 1 1 EQ.H 1 1 LT.H 1 1 EQ.W 1 1 LT.HU 1 1 EQANY.B 1 1 LT.U 1 1 EQANY.H 1 1 LT.W 1 1 GE 1 1 LT.WU 1 1 GE.U 1 1 NE 1 1 LT 1 1 计数指令 CLO 1 1 CLS.H 1 1 CLO.H 1 1 CLZ 1 1 CLS 1 1 CLZ.H 1 1 抽取指令 DEXTR 1 1 INS.T 1 1 EXTR 1 1 INSN.T 1 1 EXTR.U 1 1 INSERT 1 1 IMASK 1 1 逻辑指令 AND 1 1 OR.EQ 1 1 AND.AND.T 1 1 OR.GE 1 1 AND.ANDN.T 1 1 OR.GE.U 1 1 AND.EQ 1 1 OR.LT 1 1 AND.GE 1 1 OR.LT.U V1.0,

61 表 10 简单算术指令时序 指令 结果延迟 重复率 指令 结果延迟 重复率 AND.GE.U 1 1 OR.NE 1 1 AND.LT 1 1 OR.NOR.T 1 1 AND.LT.U 1 1 OR.OR.T 1 1 AND.NE 1 1 OR.T 1 1 AND.NOR.T 1 1 ORN 1 1 AND.OR.T 1 1 ORN.T 1 1 AND.T 1 1 XNOR 1 1 ANDN 1 1 XNOR.T 1 1 ANDN.T 1 1 XOR 1 1 NAND 1 1 XOR.EQ 1 1 NAND.T 1 1 XOR.GE 1 1 NOR 1 1 XOR.GE.U 1 1 NOR.T 1 1 XOR.LT 1 1 OR 1 1 XOR.LT.U 1 1 OR.AND.T 1 1 XOR.NE 1 1 OR.ANDN.T 1 1 XOR.T 1 1 移动指令 CMOV 1 1 MOV.U 1 1 CMOVN 1 1 MOVH 1 1 MOV 1 1 移位指令 SH 1 1 SH.NE 1 1 SH.AND.T 1 1 SH.NOR.T 1 1 SH.ANDN.T 1 1 SH.OR.T 1 1 SH.EQ 1 1 SH.ORN.T 1 1 SH.GE 1 1 SH.XNOR.T 1 1 SH.GE.U 1 1 SH.XOR.T 1 1 SH.H 1 1 SHA 1 1 SH.LT 1 1 SHA.H 1 1 SH.LT.U 1 1 SHAS V1.0,

62 表 10 简单算术指令时序 指令结果延迟重复率指令结果延迟重复率 SH.NAND.T 1 1 协事务 0 指令 BMERGE 1 1 DVSTEP 4 4 BSPLIT 1 1 DVSTEP.U 4 4 DVADJ 1 1 IXMAX 1 1 DVINIT 1 1 IXMAX.U 1 1 DVINIT.U 1 1 IXMIN 1 1 DVINIT.B 1 1 IXMIN.U 1 1 DVINIT.H 1 1 PACK 1 1 DVINIT.BU 1 1 PARITY 1 1 DVINIT.HU 1 1 UNPACK V1.0,

63 乘法指令时序 每条指令是单独发出的 表 11 乘法指令时序 指令 结果延迟 重复率 指令 结果延迟 重复率 MUL 2 1 MUL.Q 2 1 MUL.U 2 1 MULM.H 2 1 MULS 2 1 MULR.H 2 1 MULS.U 2 1 MULR.Q 2 1 MUL.H V1.0,

64 累乘加 (M AC) 指令时序 每条指令单独发出 表 12 累乘加指令时序 指令 结果延迟 重复率 指令 结果延迟 重复率 MADD 2 1 MSUB 2 1 MADD.U 2 1 MSUB.U 2 1 MADDS 2 1 MSUBS 2 1 MADDS.U 2 1 MSUBS.U 2 1 MADD.H 2 1 MSUB.H 2 1 MADD.Q 2 1 MSUB.Q 2 1 MADDM.H 2 1 MSUBM.H 2 1 MADDMS.H 2 1 MSUBMS.H 2 1 MADDR.H 2 1 MSUBR.H 2 1 MADDR.Q 2 1 MSUBR.Q 2 1 MADDRS.H 2 1 MSUBRS.H 2 1 MADDRS.Q 2 1 MSUBRS.Q 2 1 MADDS.H 2 1 MSUBS.H 2 1 MADDS.Q 2 1 MSUBS.Q 2 1 MADDSU.H 2 1 MSUBAD.H 2 1 MADDSUM.H 2 1 MSUBADM.H 2 1 MADDSUMS.H 2 1 MSUBADMS.H 2 1 MADDSUR.H 2 1 MSUBADR.H 2 1 MADDSURS.H 2 1 MSUBADRS.H 2 1 MADDSUS.H 2 1 MSUBADS.H 2 1 对指令 MADD.Q,MADDS.Q,MSUB.Q,MSUBS.Q 而言 : 结果延迟 重复率 V1.0,

65 控制流指令时序 : 需要注意 : 所有的整数流水线控制流指令都属于条件指令 每条指令单独发出 对于每次访问, 目标地址产生一条完整指令 ( 即 位指令不会产生 16 位代码 ) 所有的取指操作均占用一个时钟周期 最优时序 ; 无 Cache 缺失, 无保存挂起 表 13 指令 分支指令 整数流水线控制流指令时序 控制流延 重复率 指令 控制流延 迟 迟 重复率 JEQ 1/2/3 1/2/3 JLTZ 1/2/3 1/2/3 JGE 1/2/3 1/2/3 JNE 1/2/3 1/2/3 JGE.U 1/2/3 1/2/3 JNED 1/2/3 1/2/3 JGEZ 1/2/3 1/2/3 JNEI 1/2/3 1/2/3 JGTZ 1/2/3 1/2/3 JNZ 1/2/3 1/2/3 JLEZ 1/2/3 1/2/3 JNZ.T 1/2/3 1/2/3 JLT 1/2/3 1/2/3 JZ 1/2/3 1/2/3 JLT.U 1/2/3 1/2/3 JZ.T 1/2/3 1/2/3 用于所有的控制流指令 : 控制流延迟 重复率 被正确预测, 不跳转 1 1 被正确预测, 跳转 2 2 被错误预测 V1.0,

66 Load-Store 流水线指令 本节归纳了 Load-Store 流水线指令 地址算术时序 每条指令单独发出 表 14 地址算术指令时序 指令结果延迟重复率指令结果延迟重复率 载入存储算法指令 ADD.A 1 1 GE.A 1 1 ADDIH.A 1 1 LT.A 1 1 ADDSC.A 1 1 NE.A 1 1 ADDSC.AT 1 1 NEZ.A 1 1 EQ.A 1 1 SUB.A 1 1 EQZ.A 1 1 NOP 1 1 强制中断和中断指令 DEBUG 1 TRAPSV 1) 1 DISABLE 1 TRAPV 1) 1 ENABLE 1 RSTV 1 移动指令 MFCR 1 1 MOV.A 1 1 MTCR 1 MOV.AA 1 1 MOVH.A 1 1 MOV.D 1 1 同步指令 DSYNC 2) 1 ISYNC 3) 1 1) 没有 TRAP 时的执行周期 在产生这些 TRAP 的情况下, 指令时序跟其它 TRAP( 如 SYSCALL) 一样 2) 重复率假定没有映射寄存器回写操作被挂起, 否则重复率将取决于所有被延迟的存储器操作所占用的时间 3) 该指令的重复率假定重新取指占用一个时钟周期 2-66 V1.0,

67 控制流指令时序 本节归纳了控制流指令时序每条指令是单独发出的 对于每次访问, 目标地址将返回完整的指令 ( 即 位指令不会产生 16 位代码 ) 所有的取指操作均占用一个时钟周期 最优时序 ; 上下文操作不会出现 cache 缺失, 存储操作不会被挂起 CSA 相关指令的延迟有所不同, 这取决于先前指令和映射寄存器文件的状态 表 15 Load-Store 控制流指令时序 指令控制流延迟重复率指令控制流延迟重复率 分支指令 J 2 2 JLI 2 2 JA 2 2 JEQ.A 1/2/3 1/2/3 JI 2 2 JNE.A 1/2/3 1/2/3 JL 2 2 JNZ.A 1/2/3 1/2/3 JLA 2 2 JZ.A 1/2/3 1/2/3 CSA 指令 CALL 1) SYSCALL 1) CALLA 1) SVLCX 4) CALLI 1) RSLCX 2) 4,8 4,8 RET 3) RFE 3) BISR 4) RFM 5) 循环指令 LOOP 6) 2/1/3 2/1/3 LOOPU 6) 2/1/3 2/1/3 1) LDRAM 保护段为 2-5.LDRAM 的平均延迟约为 2.7 个时钟周期 2) LDRAM 保护段为 4 3) LDRAM 保护段为 2-5 4) LDRAM 保护段为 ) 并非严格的 CSA 操作, 不过该指令从内存恢部分上下文并以相似的方式改变控制流 LDRAM 保护段为 2-3 6) 第一次在 LS 流水线中执行时 : 控制流延迟 =2; 重复率 =2 在循环流水线中连续执行时 : 控制流延迟 =1, 重复率 =1( 嵌套深度最大 2 级 ) 末次执行时 : 控制流延迟 = 3, 重复率 = V1.0,

68 对 JLI,JEQ.A, JNE.AJNZ.A, JZ.A 指令来说 : 控制流延迟 重复率 被正确预测, 不跳转 1 1 被正确预测, 跳转 2 2 错误预测 加载指令时序 加载指令在前加 后加 循环或位反转寻址模式下可以产生两种结果, 所以必须指定两 中延迟 : 从存储器加载数据的结果延迟和使用更新地址寄存器结果的地址延迟 每条指令单独发出 存储器访问自然对齐 存储器访问在一个时钟周期内接收数据 最优时序 ; 无 Cache 缺失, 无存储挂起 表 16 加载指令时序 指令地址延迟结果延迟重复率指令地址延迟结果延迟重复率 载入指令 LD.A LD.Q LD.B LD.W LD.BU LDLCX LD.D LDUCX LD.DA SWAP.W LD.H LEA 1) 1 1 LD.HU ) 返回更新地址值的寻址模式与该指令无关 2-68 V1.0,

69 存储指令时序 Cache 和存储指令同加载指令类似, 在进行前加 后加 循环或位反转寻址模式下将产生地址结果, 但不产生 存储 结果. 每条指令单独发出 存储器访问自然对齐 存储器访问在一个时钟周期内接收数据 最优时序 ; 无 Cache 缺失, 无保存挂起 表 17 Cache 和存储指令时序 指令地址延迟重复率指令地址延迟重复率 Cache 指令 CACHEA.I 1 1 CACHEA.WI 1) 1 1 CACHEA.W 1) 1 1 CACHEI.W 1 1 CACHEI.WI 1 1 存储指令 ST.A 1 1 ST.T 2 2 ST.B 1 1 ST.W 1 1 ST.D 1 1 STLCX 4 4 ST.DA 1 1 STUCX 4 4 ST.H 1 1 LDMST 2 2 ST.Q 1 1 1) 该指令的重复率假定没有存储器回写操作, 否则重复率将取决于快速输出缓存的清零时间 2-69 V1.0,

70 浮点流水线时序 只有当系统实现了浮点单元时, 这些指令才有效 每条指令是单独发出 表 18 浮点指令时序 指令 结果延迟 重复率 指令 结果延迟 重复率 浮点指令 ADDF 2 2 ITOF 2 2 CMP.F 1 1 MADD.F 3 3 DIV.F MSUB.F 3 3 FTOI 2 2 MUL.F 2 2 FTOIZ 2 2 Q31TOF 2 2 FTOQ QSEED.F 1 1 FTOQ31Z 2 2 SUB.F 2 2 FTOU 2 2 UPDFL 1 FTOUZ 2 2 UTOF V1.0,

71 2.14 程序存储器接口 (PMI) 的程序存储器接口 (PMI) 框图如图 12 所示 图 12 PMI 模块框图 PMI 特性 程序存储器接口具有以下特性 : 24KB 总程序存储器 (PMEM) 可软件配置拆分为 SPRAM 和 ICACHE, 支持下列配置 : SPRAM ICACHE V1.0,

72 ICACHE 操作特性 : 双向通道相连 cache LRU( 最近最少使用 ) 替代算法 Cache 线长 :256 位 (4 个双字 ) 有效间隔 : 每条 cache 线具有一个有效位 可使 ICACHE 全局失效以在软件上保证 cache 的一致性 ( 由编程人员处理 ) 可使 ICACHE 旁通, 直接从 CPU 读取指令送至片上和片外模块 ICACHE 的填充机制填充 : 从关键双字开始, 采取循环填充方式依次提交给 CPU CPU 接口 支持未对齐访问 (16 位对齐 ) 本地存储器总线 (LMB) 主接口 本地存储器总线 (LMB) 从接口与高速暂存 RAM 相连 PMI SRAMs (SPRAM,ICACHE, 和 cache 标签 SRAM) 受 ECC 保护 LMB 访问优先级 中的本地存储器总线由程序存储器接口 (PMI) 数据存储器接口 (DMI) DMA 控制器和 LMB-FPI 接口 (FPI) 总线主设备共用 在该系统中, 总线主设备缺省为 DMI, LMB 的仲裁优先级如下 : 1. 高级 DMA 2. LFI 3. 中等 DMA 4. DMI 5. PMI 6. 低级 DMA 高速暂存 RAM 内嵌 24KB 高速暂存 RAM, 通过完成关键代码序列, 高速暂存 RAM 提供来自 CPU 的快速 确定的程序取指访问 CPU 向高速暂存 RAM 的取指访问过程中, 该指令不需指令 cache 的缓存, 而是始终直接指向高速暂存 RAM 高速暂存 RAM 也采用 线长 (line) 概念 ( 类似于指令 cache) 高速暂存 RAM 的线长为 256 位 (4 个双字 ) 若 CPU 取指的地址未对齐 (16 位对齐 ), 一般会产生并返回 64 位指令包 2-72 V1.0,

73 若取指请求发生在 RAM 线内, 则在一个时钟周期内返回 64 位的指令包 若取指发生在 RAM 线的末端, 这样 64 位指令包将会跨越两条 RAM 线, 但只会把指令半字直至 RAM 线末端的代码部分返回 CPU 需要注意 :CPU 取指单元只能读访问高速暂存 RAM, 绝不能对其进行写访问 也可由另一个总线主设备 ( 例如数据存储器接口 DMI) 通过 LMB 从接口访问高速暂存 RAM 高速暂存 RAM 可由 LMB 读写 系统中,PMI LMB 从接口支持所有 LMB 处理类 型 指令 Cache 内嵌 8KB 指令 Cache(ICache) 该 ICache 是双向通道相连 cache, 采用最近最少使用 (LRU) 替代算法, 共由 256 条 cache 线组成, 线长 256 位 每条 cache 线对应一个单独有效位 若 CPU 的取指访问指向可被缓存的存储器空间 ( 且此处 ICache 没有被旁路 ), 则 ICache 将发挥作用 如果所请求的地址以及相关指令能在 Cache 中查询到 (Cache 符合 ), 则指令无需任何等待状态即传递给 CPU 取指单元 如果所请求的地址不能在 Cache 中查询到 (Cache 缺失 ), 则 PMI Cache 控制器将会发出填充请求, 并在 Cache 填充时插入等待周期 若 CPU 取指的地址未对齐 (16 位对齐 ), 则通常会产生并返回 64 位的指令包 如果取指发生在 ICache 线内, 无论对齐与否, 若发生 Cache 符合, 则返回 64 位的指令包 若取指发生在 ICache 线的末端, 这样 64 位指令包将会跨越两条 ICache 线, 但只会把指令半字直到 ICache 线末端的代码返回 CPU ICache 填充序列填充 ICache 时, 遵循关键双字优先的策略, 需循环填充, 填充大小总是 4 个双字 填充 ICache 始终以 64 位为单位进行 一次填充操作只会影响一条 Cache 线, 不会预取填充下一条 Cache 线 ICACHE 填充实现使用 LMB Burst Transfer4(BTR4) 传送 ICache 支持指令流模式, 表示在 ICache 被填充的同时, 将取到的指令以半字 (16 位 ) 提交给 CPU 的取指单元 2-73 V1.0,

74 ICache 旁路通过配置 PMI_CON0.CCBYP 位可使 ICache 旁路, 从而为 CPU 取指单元提供一条直接的取指路径 复位后 PMI_CON0.CCBYP 缺省配置为 ICache 旁路 初始化期间应禁止 ICache 旁路以使能 ICache ICache 旁路使能时,CPU 对可缓存地址的取指访问将强制产生 ICache 缺失, 此时 Cache 控制器将按标准的填充序列, 以指令流形式把取得的指令按半字 (16 位 ) 返回给 CPU, 并且不会更新 ICache 中的的值 在 ICache 旁路时,ICache 内任何有效的 Cache 线依然保持有效和不变 这样, 对 ICACHE 旁路的可缓存地址的取指请求与对非缓存地址的取指访问表现相同 ICache 失效程序存储器接口 (PMI) 不支持自动的 Cache 一致性 若 PMI 外围存储器的的值已被缓存到 ICache 中, 对其的值的更新将无法被检测到 这种情况下软件必须保持 Cache 的一致性 PMI 通过使 ICache 失效来保证 Cache 的一致性, 这可通过向 PMI_CON1..PCINV 写 1 使 ICache 内容全部无效 ICACHE 失效是在硬件状态机的控制下在多个周期内完成的, 该状态机轮询各个 ICACHE 入口并将其标记为无效 ICACHE 失效序列的状态可通过读 PMI_CON1.PCINV 位确定 程序线缓冲 PMI 模块包含一个 256 位的程序线缓冲 (PLB) 在对可缓存地址的访问中,PLB 充当主指令 cache 的流缓冲区 Cache 指令填充序列转移数据到 PLB, 并且立即转移到 TriCoreCPU 中, 而不更新主指令 cache 在下一个 cache 指令缺失时,PLB 内容转移到主指令 cache 程序对非缓存地址的取指访问把 PLB 作为一个单独的 cache 线 一个单独的有效位与 PLB 相关联, 指示 PLB 有效 这样, 所有的导致 PLB 的更新的取指请求 ( 不管是否是对可缓存地址 ), 被作为 LMB Burst Transfer 4 (BTR4) 事物完成, 即首先取指 PLB 线上的关键双字 2-74 V1.0,

75 PMI 寄存器 程序存储器接口中具有三个控制寄存器, 本节将对这些寄存器和它们的位予以说明 PMI 控制寄存器 PMI_CON0 PMI_CON1 PMI_CON2 PMI_STR MCA 图 13 PMI 寄存器 表 19 PMI 寄存器 缩略名功能描述偏移地址访问模式复位 PMI_CON0 PMI 控制寄存器 0 FD10 H PMI_CON1 PMI 控制寄存器 1 FD14 H PMI_CON2 PMI 控制寄存器 2 FD18 H PMI_STR PMI 同步强制中断寄存器 FD20 H 读 写 E, H H 2-75 V1.0,

76 PMI 寄存器描述 PMI 控制寄存器 0 PMI_CON0 PMI 控制寄存器 0 (F87F FD10 H ) 复位值 : H r PC BYP r rw r 0 符号位序号类型功能描述 PCBYP 1 rw 指令 Cache 旁路 0 B Cache 使能 1 B Cache 旁路 ( 禁止 ) 0 [31:2], 0 r 保留读取返回 0; 应写入 V1.0,

77 PMI 控制寄存器 1 PMI_CON1 PMI 控制寄存器 1 (F87FFD14 H ) 复位值 : H r PB INV PC INV r rw rwh 符号 位序号 类型 功能描述 PCINV 0 rwh 指令 Cache 无效写操作 : 0 B 无效. 正常指令 cache 操作 1 B 启动整个指令 cache 无效 读操作 : 0 B 正常操作 指令 cache 可用 1 B 正在处理的 cache 指令无效 指令 cache 不可用 PBINV 1 rw 程序缓冲无效写操作 : 0 B 无效 正常程序线缓冲操作 1 B 程序线缓冲无效 该位域读取返回 0. 0 [31:2] r 保留读取返回 0; 应写入 V1.0,

78 PMI 控制寄存器 2 PMI_CON2 寄存器只有在管理模式下才能被写入且受初始化结束保护 另外, 对 PMI_CON2 的写访问也依赖于 Flash 读取保护的状态 只要 Flash 读取保护未激活,PMI_CON2 可根据需要经常被写入 ( 同时注意对变化的 SRAM 和 cache 大小的操作限制 ) 复位后 Flash 的读取保护变成激活状态,PMI_CON2 只能在这个时候被写入, 忽略任何对 PMI_CON2 进一步的写操作 设置 Flash 读取保护无效, 那么再次激活 Flash 读取保护, 将不会允许进一步的 Flash 读取保护使能的 PMI_CON2 写操作 只有复位才能重新使能单个 Flash 读取保护使能的写操作 符号 位序号 类型 功能描述 PC_SZ_AV [3:0] rh 可用的最大指令 Cache 大小最大可用指令 Cache 的大小类似于 PC_SZ_CFG 进行编码 PMEM_SZ_AV [15:4] rh 可用的最大程序存储器大小最大可用程序存储器大小 PMEM 的大小 =SPRAM 大小 + ICACHE 大小 类似于 PMEM_SZ_CFG 进行编码 2-78 V1.0,

79 符号 位序号 类型 功能描述 PC_SZ_CFG [19:16] rwh 指令 Cache 大小配置指令 Cache 大小的配置 没有被配置为指令 cache 的程序存储区被配置为 SPRAM 复位后, 该位域设置为零 随后该位域可被写入, 以选择 PEMEM 在 ICACHE 和 SPRAM 之间的一种拆分方式 PC_SZ_CFG 的编码如下所示 : 0000B 无指令 cache 0001B 2KB 指令 cache 0010B 4KB 指令 cache 0011B 8KB 指令 cache 其他 : 保留 PMEM_SZ_CF G [31:20] rwh 程序存储器大小配置程序存储器 (PMEM) 大小的配置 复位后该位域设置为可用的最大 PMEM 大小,PMEM_SZ_AV 随后可写入该位域, 以强制使对软件可见的 PMEM 更小 PMEM_SZ_CFG 指定 PMEM 配置的大小, 单位为 KB 000H 保留. 004H 4KB 程序存储器 008H 8KB 程序存储器 00CH 12KB 程序存储器 H 256KB 程序存储器 1) 程序存储器和指令 cache 大小的配置不会因应用代码而产生空闲 PMI_CON0.PCBYP 清零之前, 一旦 初始化按顺序排好后, 应该选择该配置 在位域 PC_SZ_CFG 的切换期间, 从 SPRAM 或可缓存的程序 区域取指将会出现一个未定义的动作 2) 用一个比最大可用 ICACHE(PC_SZ_AV) 大的值写入, 则重置该位域到 PC_SZ_AV 3) 用一个比最大可用 PMEM(PMEM_SZ_AV) 大的值写入, 则重置该位域到 PMEM_SZ_AV 2-79 V1.0,

80 程序存储器接口同步强制中断寄存器 (PMI_STR) PMI_STR PMI 同步强制中断寄存器 (F87FFD20 H ) 复位值 : H FME STF 0 FPE STF 0 r FBE STF r rh r rh r rh r rh 0 FRE STF 符号位序号类型功能描述 FRESTF 0 rh 取指段错误同步强制中断标志 FBESTF 2 rh 取指总线错误同步强制中断标志 FPESTF 12 rh 取指外设错误同步强制中断标志 FMESTF 14 rh 取指 MSIST 错误同步强制中断标志 0 1, [11:3], 15, [31:16] r 保留读取返回 0; 应被写入 V1.0,

81 PMI ID 寄存器 PMI_ID PMI ID 寄存器 (F87FFD08 H ) 复位值 :000B C0XX H MOD:000B rh MOD_B rh REV:xx rh 符号 位序号 类型 功能描述 MOD_REV [7:0] rh 修订版编号 1H 给出模块修订版编号, 从 01H( 第一版 ) 开始编 FFH 号到 FFH 最新版本 MOD_B [15:8] rh 位模块的功能 C0H 该位域的值为 C0H, 表明该模块为具有 位 ID 寄 存器的 位模块 MOD [31:16] rh 模块 ID 编号 0B H 用于模块 ID 2-81 V1.0,

82 2.15 数据存储器接口 (DMI) 中的数据存储器接口 (DMI) 框图如下图所示 图 14 DMI 模块框图 DMI 特性 数据存储器接口 (DMI) 具有下列特性 : 120KB 总数据存储器 (DMEM), 用软件可配置的拆分为 LDRAM 和 DCache 支持下列 配置 : LDRAM 数据 Cache 特性 : DCache 2-82 V1.0,

83 cache 双向通道连接,LRU ( 最近最少使用 ) 替换算法 Cache 线大小 :128 位 有效间隔 : 每条 cache 线上有一个有效位 Cache 回写 : 回写间隔 :128 位 填充机制 : 填充所有 cache 线 CPU 接口 支持未对齐访问 (16 位对齐 ), 但跨越 2 条 LDRAM 或 DCache 线的未对齐访问将至少 多用一个时钟周期 本地存储器总线 (LMB) 主接口 本地存储器总线 (LMB) 从接口与 LDRAM 相连 LMB 访问优先级 参见页 2-72 LMB 访问优先级 的描述 本地数据 RAM (LDRAM) 内嵌 120KB LDRAM,LDRAM 中存放对系统性能起关键作用的程序, 为 CPU 提供快速 准确的数据访问 LDRAM 也采用 LARAM 线 (line) 概念,LDRAM 的线长为 128 位 (2 个双字 )CPU 的加载 - 存储接口会产生地址未对齐的访问 (16 位对齐 ), 通常会向 CPU 返回或者从 CPU 获取 64 位数据 ( 无上下文操作的情况 ) 如果数据访问发生在 LDRAM 线内, 无论对齐与否, 则在一个时钟周期内返回所请求的数据 ; 如果数据访问发生在 LDRAM 线的末端, 所请求的数据会跨越两条 LDRAM 线, 于是将产生一个等待周期 也可由其它总线主设备通过 LMB 从接口访问 LDRAM, 并且同时支持 LMB 读写操作 系统支持 LMB 从接口对 LDRAM 访问的所有 LMB 操作类型 ( 包括 burst 传送在内 ) 根据 LMB 协议, 访问 LMB 从接口必须自然对齐 数据 Cache 内嵌了 4KB 数据 Cache (DCache) DCache 是一个双向通道相连 cache, 有一个最近最少使用 (LRU) 替换算法, 且被组织为 256 条 cache 线, 每线 128 位 与每一条 DCache 线相关联的是一个单独有效位, 该有效位影响整条线 CPU 向可缓存的存储器段的数据访问以 DCache 为目标 如果在 cache(cache 符合 ) 中发现请求地址及其相关的数据, 数据送至 / 取自 CPU 加载 - 存储单元, 而不引发任何等状态 如果在 cache(cachemiss) 中没有发现请求地址,DMI cache 控制器发出一个 cache 填充序列, 而且当 cache 线被填充时, 引发等待状态 2-83 V1.0,

84 CPU 加载 - 存储接口将会产生不对齐的访问 (16 位对齐 ), 该访问将会导致 64 位数据送至 / 取自 CPU ( 对无上下文操作来说 ) 如果数据访问在 Dcache 线中进行, 不管是否对齐, 且检测到一个 cache 符合, 那么请求的数据将会在一个时钟周期内返回到 CPU 中 如果数据访问是在一个 Dcache 线末端进行, 所请求的数据会跨越两条 Dcache 线, 于是产生一个等待周期 ( 若 cache 中出现两条 cache 线, 否则缺失的 cache 线需要一个填充序列 ) 数据 cache 支持回写类型 当 CPU 写入到一个可缓存区域, 数据与相应的 cache 线合并, 且不会立即写入主存储器 和每条 cache 线关联的是一个单独的 出错 位, 用来指示 cache 线中的数据被修改 每当 CPU 加载 - 存储访问导致 cache 缺失, 且每个可能含有请求 cache 线的 cache 通道都有效时, 可基于 LRU 替代算法选择收回 cache 线中的一条 然后, 检查选择收回的 cache 线, 以决定该线是否被其 出错 位修改 若该线没有被修改, 则该线被丢弃, 填充序列立即开始 若该线被修改, 那么出错数据在填充初始化之前第一个回写到主存储器 由于每条 cache 线的单个 出错 位, 数据的 128 位将总是被回写, 导致 LMB Burst Transfer 2 (BTR2) 处理 数据 Cache 回填总是导致所有 cache 线被回填,DCache 线的关键双字优先取指 一个填充序列将总是只影响一个 cache 线 不会对下一个 cache 线进行预取指 由于 DCache 回填序列有相同的大小, 这些回填通过使用 LMB Burst Transfer 2(BTR2) 处理来实现 数据线缓冲 DMI 模块包含一个 128 位数据线缓冲区 (DLB) 当 设备配置包含数据 cache 时,DLB 作为主数据 cache 的一个流缓冲区 数据 Cache 填充序列把数据发送到 DLB 中, 并且之后立即发送到 TriCore CPU 中, 而不更新主数据 cache 当下一个数据 cache 缺失之后,DLB 的内容发送到主数据 cache 中 DLB 对软件可见, 但要确保访问可缓冲的地址类型引发的等待周期通常不超过访问到非可缓冲地址的周期 当 设备配置不包含数据 cache 时, 为了访问可缓冲地址,DLB 用作单线数据 cache 1) 只要数据 cache 线被替换时不包含一个需要 cache 回写的 出错 信息, 就不会引发额外的等待状态 2-84 V1.0,

85 DLB 与一个单独的有效位相关联, 指示 DLB 的内容有效 这样, 所有更新 DLB 的访问, 无论数据 cache 是否配置, 都当作 LMB Burst Transfer 2 (BTR2) 处理来实现, 对 DLB 线的关键双字优先取指 不像 PMI 模块中的 PLB, 数据访问到非可缓冲的地址总是旁通 DLB DMI 强制中断的产生 CPU 对 DMI 的数据访问可能会发生许多潜在错误情况, 导致产生两种强制中断情况的其中一种并由 DMI 报告给 CPU 加载访问可导致产生数据访问同步总线错误( DSE ) 强制中断, 而存储访问可导致产生数据访问异步错误 (DAE) 强制中断 由于存在许多潜在的错误情况,DMI 含有两个只读状态寄存器来保存错误类型的信息 DMI 同步强制中断标志寄存器 (DMI_STR) 含有指示引起 DSE 强制中断的标志, 而 DMI 异步强制中断标志寄存器 (DMI_ATR) 保存指示引起 DAE 强制中断的标志 DMI 可能产生的错误条件以及他们相应的强制中断寄存器标志位如下 : 范围错误若访问超出 LDRAM 地址范围 (D H D3FF FFFFH), 将会产生地址范围错误 由加载访问导致的错误将置位 DMI_STR.LRESTF 标志 ; 由存储访问导致的错误将置位 DMI_ATR.SREATF 标志 LMB 总线错误若在 CPU 的直接对 LMB 的加载 - 存储访问期间在 LMB 上遇到一种错误情况, 将会检测到一个 LMB 总线错误 产生 LMB 总线错误的加载访问将会导致标志 DMI_STR.LBESTF 置位, 存储访问将会导致标志 DMI_ATR.SBEATF 置位 注意访问 DMI 的特殊功能寄存器也将导致该类型的错误, 因为这些访问总是直接针对 LMB 的 ( 即使由 CPU 执行 ) 且由 DMI LMB 从接口操作 Cache 填充错误当一个数据 cache 或是 DLB 填充序列在 LMB 上遇到一种总线错误时, 将会检测到 cache 填充错误 产生 cache 填充错误的加载访问将会导致标志 DMI_STR.CRLESTF 置位, 而存储访问将会导致标志 DMI_ATR.CRSEATF 置位 2-85 V1.0,

86 Cache 回写错误当数据 cache 或者 DLB 回写序列 ( 由产生 cache 缺失的 CPU 加载 - 存储访问初始化 ) 在 LMB 上遇到总线错误时, 将检测到 Cache 回写错误 注意, 不像其他类型的错误, 引起 cache 回写错误的地址与引起回写的 CPU 加载 - 存储访问的地址无关 遇到一个 cache 回写错误的加载访问将会导致标志 DMI_ATR.CWSEATF 置位, 而存储访问将会导致标志 DMI_STR.CWLESTF 置位 Cache 溢出错误当数据 cache 或 DLB 回写序列 ( 该回写序列由 cache 管理指令 (cachea.w,cachea.wi,cachei.w,cachei.wi) 初始化 ) 在 LMB 上遇到总线错误时, 将检测到 cache 溢出错误 cache 管理指令遇到上述错误的时候将会导致标志 DMI_ATR.CFEATF 置位 Cache 管理错误当一个 cache 管理指令 (cachea.w, cachea.i, cachea.wi, cachei.w, cachei.wi) 针对一个非可缓冲的地址或非可缓冲物理存储器地址的时候, 将检测到 cache 管理错误 cache 管理错误将会导致标志 DMI_ATR.CMEATF 置位 2-86 V1.0,

87 DMI 寄存器 DMI 中含有两个控制寄存器, 两个强制中断标志寄存器和四个错误检测寄存器 本节将 对这些寄存器和他们的位予以说明 图 15 表 20 DMI 寄存器 DMI 寄存器 缩略名说明偏移地址访问模式复位 DMI_CON DMI 控制寄存器 FC10 H DMI_STR DMI 同步强制中断标志寄存 FC18 H 器 DMI_ATR DMI 异步强制中断标志寄存 FC20 H 器 ADEDCTL 地址错误检测控制 FC30 H 读 写 E, 1) 1) WREDCTL 数据写入错误检测控制 FC38 H RDEDCTL 数据读取错误检测控制 FC40 H REEDCTL 反馈控制 FC48 H E, E, E, E, H 1) 在管理模式下读这些寄存器将返回寄存器的内容之后清零这些寄存器 在用户模式下读这些 寄存器将仅返回寄存器的内容而不清零这些寄存器 在该情况下没有错误报告 对 DMI 控制寄存器的访问必须是双字对齐的字访问 若访问未遵循该规则或者未按照指 定的特权模式 ( 管理模式 初始化结束保护 ) 访问 或对只读寄存器进行写访问, 若访问由 2-87 V1.0,

88 LMB 总线发出, 将导致总线错误 ; 若访问由 CPU 加载 / 存储访问发出, 将导致强制中断, 由寄存器 DMI_STR/DMI_ATR 指示 2-88 V1.0,

89 DMI 寄存器描述 DMI 控制寄存器 DMI 控制寄存器指出了 DMI 数据存储寄存器的大小和数据 cache 的有效性 DMI_CON DMI 控制寄存器 (F87FFC10 H ) 复位值 : H DMEM_SZ_CFG rwh DC_SZ_CFG rwh DMEM_SZ_AV r DC_SZ_AV r 符号 位序号 类型 功能描述 DC_SZ_AV [3:0] r 可用的最大的数据 Cache 大小可用的最大数据 Cache 大小 类似于 DC_SZ_CFG 进行编码 DMEM_SZ_AV [15:4] r 可用的最大的数据存储区大小可用的最大数据存储区的大小,DMEM 的大小 =LDRAM 的大小 +DCACHE 的大小 类似于 DMEM_SZ_CFG 进行编码 DC_SZ_CFG [19:16] rwh 数据 Cache 大小配置数据 cache 大小的配置 没有被配置为数据 cache 的其他数据存储区被配置为 LDRAM 复位后该位域置为 0 随后该位域可被写入, 从而选择 DMEM 在 DCache 和 LDRAM 之间的一种拆分方式 DC_SZ_CFG 的编码如下所示 : 0000B 无数据 cache 0001B 2KB 数据 cache 0010B 4KB 数据 cache 其他 : 保留 2-89 V1.0,

90 符号位序号类型功能描述 DMEM_SZ_CF G [31:20] rwh 数据存储区大小配置 数据存储区 (DMEM) 大小的配置 复位后, 该位域设 置为最大可用 DMEM, 即 DMEM_SZ_AV 2) 随后可写入该位域以强制使对软件可见的 DMEM 更 小 DMEM_SZ_CFG 指定配置的 DMEM 的的大小, 单 位 Kbytes: 000H 保留. 004H 008H 00CH H 4KB 数据存储器 8KB 数据存储器 12KB 数据存储器 256KB 数据存储器 1) 若把一个超过 Dcache 大小 (DC_SZ_AV) 的值写入该位域, 将以 DC_SZ_AV 的值复位该位域 2) 若把一个超过 DMEM 大小 (DMEM_SZ_AV) 的值写入该位域, 将以 DMEM_SZ_AV 的值复位该位域 2-90 V1.0,

91 DMI 同步强制中断标志寄存器 DMI 同步强制中断标志寄存器 DMI_STR 中的标志位用于指示产生数据访问同步总线错误 (DSE) 的根本原因 管理模式下读取 DMI_STR 将返回寄存器的值并随后对其清零 ; 用户模式下读取 DMI_STR 将返回寄存器的值, 但不会对其清零 DMI_STR DMI 同步强制中断标志寄存器 (F87FFC18 H ) 复位值 : H LME STF 0 CWL EST F 0 r CRL EST F 0 LBE STF r rh r rh r rh rh r rh 0 LRE STF 符号 位序号 类型 功能描述 LRESTF 0 rh 载入范围同步错误强制中断标志 LBESTF 2 rh 总线载入同步错误强制中断标志 CRLESTF 6 rh Cache 填充同步错误强制中断标志 CWLESTF 8 rh Cache 回写同步错误强制中断标志 LMESTF 14 rh 加载 MSIST 同步错误强制中断标志 0 1,[5:3], 7, [13:9], 15, [31:16] r 保留读取返回 0; 应写入 V1.0,

92 DMI 异步强制中断标志寄存器 DMI 异步强制中断标志寄存器 DMI_ATR 中的标志位用于指示产生数据访问异步总线错误 (DAE) 的根本原因 管理模式下读取 DMI_ATR 将返回寄存器的值并随后对其清零 ; 用户模式下读取 DMI_ATR 将返回寄存器的值, 但不会对其清零 DMI_ATR DMI 异步强制中断标记寄存器 (F87FFC20 H ) 复位值 : H SME ATF 0 CME ATF CFE ATF CWS EAT F 0 0 r CRS EAT F 0 SBE ATF 0 SRE ATF rh r rh rh rh r rh r rh r rh r 0 符号 位序号 类型 功能描述 SREATF 1 rh 存储范围异步错误强制中断标志 SBEATF 3 rh LMB 总线存储异步错误强制中断标志 CRSEATF 7 rh Cache 填充存储异步错误强制中断标志 CWSEATF 9 rh Cache 回写存储异步错误强制中断标志 CFEATF 10 rh Cache 溢出存储异步错误强制中断标志 CMEATF 11 rh Cache 管理存储异步错误强制中断标志 SMEATF 15 rh 存储 MSIST 存储异步错误强制中断标志 0 0, 2, [6:4],8, [14:12] [31:16] r 保留读取返回 0; 应写入 V1.0,

93 DMI ID 寄存器 DMI_ID DMIID 寄存器 (F87FFC08 H ) 复位值 :0008C0XX H MOD:0008 rh MOD_B rh REV:xx rh 符号位序号类型功能描述 MOD_REV [7:0] rh 修订编号 01H 给出模块修订版编号, 从 01H( 第一版 ) 开始 编号到 FFH FFH 最新版本 MOD_B [15:8] rh 位模块使能 C0H 该位域值为 C0H, 定义模块为含有 位 ID 寄存器 的 位模块 MOD [31:16] rh 模块 ID 编号 08 H 用于模块 ID 2-93 V1.0,

94 LMB 错误插入控制寄存器 处理器的 LMB 总线系统受保护, 以避免由瞬变事件引起的错误传送 所有信号组 - 地址组信号 ( 地址, 总线操作码等等 ) 数据信号和响应组信号都受到 ECC 保护, 允许检测并发送传送协议中的单 - 或双位错误信号 此外, 具有单独周期时序的 LMB 中止信号, 在 LMB 中止信号和其补码的传送过程中, 都能受到保护 为了便于测试 LMB 错误检测机制,DMI 含有四个特殊功能寄存器, 用来使能损坏的 LMB 传送的产生 为了约束副作用的范围, 这些寄存器仅提供损坏的冗余信息的产生 为了简化测试序列并允许单个处理中产生多种传送错误类型, 访问这四个 DMI 错误插入控制寄存器将不会触发 LMB 错误插入机制, 即使已经使能 特别的, 任何对地址段 F87FFC30H- F87FFC4FH 的访问都不会触发错误插入, 不论该访问是由 DMI 产生的还是由其他 LMB 主介质产生的 在 TriCore CPU 通过 DMI LMB 主设备接口编程错误插入控制寄存器的位置, 所需寄存器修改之后必须使用数据屏障 (DSYNC 指令 ), 以确保 DMI 模块产生的下一次操作将会从预期的错误插入开始 ( 或不插入 ) 此外, 软件应该使用一个数据屏障优先来修改这四个插入寄存器之一, 以确保没有其他缓冲操作接收到意外错误 LMB 传送错误的插入仅在一次操作过程中发生 ( 或一个损坏的空闲周期的特殊情况下 ) 且需要的操作错误产生后, 操作的使能位由硬件复位 这样, 可以通过读各自的错误插入控制寄存器决定需求的错误插入是否已经发生 2-94 V1.0,

95 地址错误检测控制寄存器 对由 DMI LMB 主设备接口产生的操作来说,ADEDCTL 寄存器使能 ECC 位上的错误插 入, 该 ECC 位与 LMB 地址信号组和 / 或 LMB 中止信号的补码相关 它可用于检查任意 LMB 从接 口 1) 的 LMB 地址和中止错误检测功能 ADEDCTL 地址错误检测控制寄存器 (F87FFC30 H ) 复位值 : H 符号位序号类型功能描述 AENABLE 31 rwh 地址使能 为下一个由 DMI LMB 主设备产生的非空闲操作使能 地址信号 ECC 位的讹误和 / 或 LMB 中止信号的补码 : 0 B 不使能 1 B 使能 由 DMI 完成的一个非排除的 非空闲的操作之后由硬 件清零 1) 由 TriCore CPU 针对 LDRAM 地址来进行的加载 - 存储操作的初始化, 是经过已选择的 DMI 模块内的路径 为了使用 DMI 主接口 来检查 LMB 地址 /DMI LMB 从接口的中止错误检测功能, 必须针对寄存器之一 ( 除了四个错误插入寄存器 ) 不管是否来 自 TriCoreCPU 或者其他任何 LMB 主接口, 所有对 DMI 寄存器的访问路径都通过 LMB 2-95 V1.0,

96 符号位序号类型功能描述 IENABLE 30 rwh 空闲使能 当作为 LMB 默认主接口, 为下一个由 DMILMB 主接 口产生的非排除空闲时钟周期使能地址信号组 ECC 位的 讹误 0 B 不使能 1 B 使能 由 DMI 驱动的非排除空闲周期完成之后, 由硬件清 零 0 [29:9] r 保留 ABTFLIP 8 rw 中止翻转 对于一个非排除 非空闲操作, 如果 AENABLE 置位且该位置位, 由 DMI 传送的 LMB 中止信号的补码 相对于真实值翻转 ADFLIP [7:0] rw 地址翻转 对于一个非排除操作, 如果 AENABLE 或者 IENABLE 置位, 对于 ADFLIP 组中的每一位, 其对应的由 DMI 传送的 LMB 地址组 ECC 信号根据真实值翻转 1) 通过 DMI LMB 主接口对四个错误插入控制寄存器之一的编程完成之后,LMB 上通过 DMI 一个空闲周期驱动的地址将会保留之前的操作, 并且将会标志为一个已排除的地址 IENABLE 置位时, 通过 DMILMB 讹误的空闲周期, 将会是 对非排除地址再次进行 DMI 操作之后的第一个空闲周期 该寄存器受到 ENDINIT 保护 2-96 V1.0,

97 写数据错误检测控制寄存器对由 DMI LMB 主接口产生的 LMB 写操作来说, 寄存器 WREDCTL 使能 ECC 位上的错误插入, 该 ECC 位与 LMB 地址信号相关 它可用于检查任何 LMB 从接口 1) 的写入数据错误检测功能 WREDCTL 写数据错误检测控制寄存器 (F87FFC38 H ) 复位值 : H WEN ABL 0 E rwh r WDFLIP r rh 符号位序号类型功能描述 WENABLE 31 rwh 写使能为下一个由 DMI LMB 主设备产生的写操作使能数据使能 ECC 位的讹误 0 B 不使能 1 B 使能 由 DMI 驱动的写操作完成之后, 由硬件清零 0 [30:8] r 保留 WDFLIP [7:0] rh 写数据翻转对于一个非排除操作来说, 如果 WENABLE 置位, 对于 WDFLIP 组中的每一位, 其对应的由 DMI 传送的 LMB 数据 ECC 信号根据真实值进行翻转 1) 由 TriCore CPU 针对 LDRAM 地址进行的存储操作的初始化, 使用已选择的 DMI 模块内的路径 为了使用 DMI 主接口检查 LMB 地址 /DMILMB 从接口的写数据错误检测功能, 必须针对 DMI 寄存器之一操作 ( 而不是四个错误插入寄存器之一 ) 不管是来自 TriCore CPU 或者其他任何 LMB 主接口, 所有对 DMI 寄存器的访问路径都通过 LMB 2-97 V1.0,

98 该寄存器受到 ENDINIT 保护 2-98 V1.0,

99 读数据错误检测控制寄存器 对于对 DMI LMB 从接口 LMB 进行的读操作, 寄存器 RDERCTL 使能 ECC 位上的错误插入, 该 ECC 位与 LMB 地址信号相关, 它可用于检查任何 LMB 主介质 1) 的读数据错误检测功能 RDEDCTL 读数据错误检测控制寄存器 (F87FFC40 H ) 复位值 : H REN ABL 0 E rwh r RDFLIP r rw rw 符号位序号类型功能描述 RENABLE 31 rwh 读使能 为下一个对 DMI LMB 从接口的读操作, 使能数据 ECC 位的讹误 0 B 不使能 1 B 使能 针对 DMI LMB 从设备的操作完成之后, 由硬件清零 0 [30:8] r 保留 RDFLIP [7:0] rw 读数据翻转 对于一个非排除操作来说, 如果 RENABLE 置位, 对 于 RDFLIP 组中的每一位, 其对应的由 DMI 传送的 LMB 数据 ECC 信号根据真实值进行翻转 1) 由 TriCore CPU 针对 LDRAM 地址进行的加载操作的初始化, 使用已选择的 DMI 模块内的路径 为了使用 DMI 主接 口来检查 LMB 地址 /DMILMB 从接口的读数据错误检测功能, 必须针对 DMI 寄存器之一操作 ( 而不是四个错误插入 寄存器之一 ) 不管是来自 TriCore CPU 或者其他任何 LMB 主接口, 所有对 DMI 寄存器的访问路径都通过 LMB 2-99 V1.0,

100 该寄存器受到 ENDINIT 保护 V1.0,

101 响应错误检测控制寄存器 对于对 DMI LMB 从接口产生的 LMB 操作来说,REEDCTL 寄存器使能 ECC 位上的错误插入, 该 ECC 位与 LMB 响应信号组相关 它可用于检查任意 LMB 主介质 1) 响应错误检测功能 REEDCTL 响应错误检测控制寄存器 (F87FFC48 H ) 复位值 : H RSE NAB 0 LE rwh r RSPFLIP r rw 符号 位序号 类型 功能描述 RSENABLE 31 rwh 响应使能 为下一个针对 DMI LMB 从接口的操作使 能响应组 ECC 位的讹误 0B 不使能 1 B 使能 在事务处理针对 DMI LMB 从设备完成之后, 由硬件清零 0 [30:5] r 保留 RSPFLIP [4:0] rw 响应翻转对于一个非排除操作来说, 如果 RSENABLE 置位, 对于 RSPFLIP 组中的每一位, 其对应的由 DMI 传送的 LMB 响应组 ECC 信号根据真实值进行翻转 1) 由 TriCoreCPU 针对 LDRAM 地址进行的加载 - 存储操作的初始化, 使用已选择的 DMI 模块内的路径 为了使用 DMI 主接口来检 查 DMI LMB 从接口的响应错误检测功能, 必须针对 DMI 寄存器之一操作 ( 而不是四个错误插入寄存器之一 ) 不管是来自 TriCore CPU 或者其他任何 LMB 主接口, 所有对 DMI 寄存器的访问路径都通过 LMB V1.0,