6.与 C28x+FPU 比较¶
注意
本讨论仅限于 C28x + 32 位 FPU,不包括 TMU 或 FPU64。
对于本讨论,我们定义了以下指令集:
- C28x 指令集
- 这是最初的定点指令集。
- C28x+FPU 指令集
- 这是 C28x 指令集加上支持本地单精度(32 位)浮点运算的附加指令。虽然附加指令主要支持单精度浮点数学运算,但也包括诸如 RPTB(重复块)等其他有用指令。由于它们是超集的一部分,并且只在具有 FPU 的器件上提供,我们仍然把它们视为 FPU 指令的一部分。
- CLA 指令集
- CLA 指令集是 FPU 指令的子集。在 CLA上,有几个 FPU 指令不受支持 - 例如重复块就不受支持。CLA 还有几个 FPU 没有的指令。例如:CLA 具有一些本地整数数学指令以及一个本地分支/调用/返回指令。
6.1.FPU div、sin、cos 等的基准是否相同?¶
CLA 指令是 C28x+FPU 的一个子集,对于数学指令,每个指令都有等效项,但仍然存在影响基准的差异。例如:
- 乘法和转换的周期差异(见下一个问题)
- 分支指令和调用指令的差异
- 资源差异(例如:8 浮点寄存器与 4)
- 寻址模式
- CLA 缺少 RPTB(重复块)
6.2.CLA 浮点乘法是否更快?¶
请考虑以下情况:
C28x 32 位 FPU:
乘法或转换需要 2p 个周期。这意味着它们花费了两个周期的时间来完成,但是请牢记您可以将另外一条指令放置在包含另一个数学指令的延迟槽中。
CLA:
数学指令和转换需要 1 个周期 - 无需延迟槽。所以,如果您不能使用 FPU 上的那个延迟周期进行有意义的操作,那么您可以说 CLA 速度更快(如果您只是数周期数量的话)。
6.3.主要差异是什么?¶
下表总结了目前 C28x + FPU 和 CLA CPU 之间的一些主要区别。有关新信息,请参阅其他资源中列出的 CLA 文档。
条目 | CLA | C28x+FPU |
---|---|---|
执行 | 与 C28x CPU 并行独立执行 | 主 C28x CPU 的部分 |
浮点寄存器 | 4 (MR0 - MR3) | 8 (R0H - R7H) |
辅助寄存器 | 2 个,16 位(MAR0、MAR1)– 可访问所有 CLA 数据 | 8 个,32 位,(XAR0 - XAR7) – 与定点指令共享 |
流水线 | 8 级流水线 – 与 C28x 完全独立 | 8 级流水线 – CPU 获取和解码与定点指令共享 |
单步执行 | 将流水线向前移动 1 个周期 | 完全清空流水线 |
寻址模式 | 2:直接和间接,有后增量。无数据页指针。 | 所有 C28x 寻址模式 |
中断源 | 视器件而定。 中断直接进入 CLA。 | 通过 PIE 支持所有可用中断。 |
嵌套中断 | 无堆栈指针。CLA type 0 & 1: 不受支持。CLA Type 2: 支持 1 个后台任务 | 通过软件启用嵌套 |
指令集 | FPU 指令的独立子集。与 C28x+FPU 类似的助记符,但带有前导“M”,例如:MMPYF32 MR0、MR1、MR2。 | 浮点指令是对 C28x 定点指令的补充(超集)。 |
重复指令 | 无单次重复或重复块 | 重复 MACF32 & 重复块 (RPTB) |
与 C28x 通信 | 通过共享 RAM、消息 RAM 和中断。C28x 可以读取 CLA 寄存器。 | 一个 CPU。可以在固定和浮动寄存器之间复制 |
数学和转换 | 单周期 | 2p 周期(2 个流水线周期) |
整数运算 | 有限支持。针对与、或、异或、加、减、移位等的原生指令 | 使用定点指令 |
流控 | 原生分支/调用/返回条件延迟。总是执行分支之前/之后的 3 条指令 - 可以通过使用延迟周期来提高性能 | 使用固定点流控制。分支不会延迟 - 仅在未采用分支时才执行分支之后的指令 需要将浮点标志复制到定点 ST0 |
存储器访问 | 仅限 CLA 程序、数据和消息 RAM。请参阅数据手册中的存储器映射部分。 | 器件上的所有存储器 |
寄存器访问 | 请参阅特定数据表或 TRM。 | 器件或特定 C28x 子系统上的所有外设 |
编程 | CLA 汇编器或 CLA C 编译器。需要 C28x 代码生成工具版本 6.1.0 或更高版本。 | C 或 C++ 或汇编语言 |
运行频率 | 请参阅器件数据表 | 请参阅器件数据表 |