ZHCAEQ3 November   2024 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1实时控制简介
  5. 2C29 CPU 及其主要特性
    1. 2.1 并行架构和编译器优化
  6. 3C29 性能基准测试
    1. 3.1 使用 ACI 电机控制的信号链基准测试
    2. 3.2 实时控制和 DSP 性能
      1. 3.2.1 影响结果的示例和因素
        1. 3.2.1.1 饱和(或限制)示例
        2. 3.2.1.2 死区示例
        3. 3.2.1.3 空间矢量生成 (SVGEN) 示例
        4. 3.2.1.4 软件流水线
      2. 3.2.2 客户控制和数学运算基准测试
    3. 3.3 通用处理 (GPP) 性能
      1. 3.3.1 影响结果的示例和因素
        1. 3.3.1.1 不连续性管理
        2. 3.3.1.2 Switch() 示例
    4. 3.4 基于模型的设计基准测试
    5. 3.5 应用基准测试
      1. 3.5.1 单相 7kW OBC 说明
      2. 3.5.2 基于 Vienna 整流器的三相功率因数校正
      3. 3.5.3 单相位逆变器
      4. 3.5.4 机器学习
    6. 3.6 闪存存储器效率
    7. 3.7 代码尺寸效率
  7. 4总结
  8. 5参考资料

Switch() 示例

C29 CPU 特殊的分支指令使编译器能够将多个分支目标折叠为一个指令。switch 是通用代码中常见的结构,通常用于处理辅助控制任务。C29 ISA 提供多路分支指令 QDECB 和 DDECB,用于高效实现此语句。四路递减分支 (QDECB) 允许最多四个分支目标,或者选择继续线性执行。四路递减分支 (DDECB) 允许最多两个分支目标,或者选择继续线性执行。

下面的代码块中显示了一个包含 16 个分支的 switch 语句。在 C29 CPU 上,switch 使用一条分支指令 (BCMP) 和四条 QDECB 指令实现,需要 10 到 17 个周期,具体取决于输入。在 Cortex-M7 上,switch 针对每种情况使用比较指令和分支指令实现,需要 6 到 51 个周期,具体取决于输入。

switch(state) { case 15: .... break; case 14: .... break; case 13: .... break; ... ... case 0: .... break; default: .... break; }  

C29 Implementation
LD.32 A14,@State  
BCMP @default,A.GT,A14,#15   QDECBA14,#0x4,@case15,@Case14,@Case13,@Case12,@  QDECBA14,#0x4,@case11,@Case10,@Case9,@Case8,@   QDECBA14,#0x2,@case7,@case6,@case5,@case4,@  
QDECBA14,#0x2,@case3,@case2,@case1,@case0,@  
default:
.... 
.... 
LB @State_end
case15:
.... 
.... 
LB @State_end 
case14:
.... 
.... 
LB @State_end 
case13:
.... 
.... 
LB @State_end 
....
....
....
case2: 
.... 
.... 
LB @State_end 
case1: 
.... 
.... 
LB @State_end 
case0: 
.... 
.... 
State_end:

M7 Implementation
LDRSB R6,[State]
CMP   R6,#15  
BGT.N default  
BEQ.N case15  
CMP   R6,#14  
BEQ.N case14  
.... 
CMP   R6,#0  
BEQ.N case0   
default:
.... 
.... 
B  State_end 
case15:
.... 
.... 
B  State_end 
case14:
.... 
.... 
B  State_end 
case13:
.... 
.... 
B  State_end 
....
....
....
case2: 
.... 
.... 
B  State_end 
case1: 
.... 
.... 
B  State_end 
case0: 
.... 
.... 
State_end: