问:C28x、C28x FPU 和 VCU 上有哪些不同的 FFT 实现? 如何选择使用哪一个?
差异:
32位定点
此实现方案使用 C28定点 CPU。 它使用 CPU 的片上32位定点数学功能。 根据经验、对于优化的32位实现、每个 FFT 蝶形计算需要~20个周期。
16位定点
此实现可使用 C28定点 CPU 或具有 VCU 增强功能的 C28x (C28x+VCU)。
C28x 定点
该实现使用 C28x 定点 CPU 的16位数学功能。 如果使用 C28 CPU 内核、每个 FFT 蝶形计算需要~16个周期
具有 VCU 的 C28x
此实现使用具有 VCU 的 C28x 的16位数学功能。 除了定点 CPU 之外、VCU 还提供优化的16位复数数学功能。 如果使用 C28x+VCU 增强功能、则每个 FFT 蝶形计算需要~5个周期。 目前有两个版本的 VCU、0类通常称为 VCU-I、2类称为 VCU-II FFT 在 VCU-II 上大幅上升、蝶形计算平均需要~2.5个周期才能完成。
注意:VCU 并非在所有器件上都可用、并且没有计划将其放置在未来的器件上。
32位浮点
此实现使用扩展浮点指令集。 它使用 C28x+FPU 的32位浮点数学功能以及重复块(RPTB)指令。 根据经验、每个 FFT 蝶形计算需要~10个周期。 如果在浮点器件上实现并且需要32位、则这是首选实现。
具有 TMU 的32位浮点
三角函数加速器(TMU)是32位单精度浮点单元(FPU)的扩展。 它提供了以周期高效方式执行某些三角函数和算术函数的指令。 TMU 特定指令用于通过有效计算平方根、除法和反正切来加快幅度和相位计算。 可以通过设置以下编译器选项来启用 TMU:
注意: 有关所有与浮点相关的编译器选项、请参阅 C2000编译器用户指南(www.ti.com/.../spru514)。
--float_support=fpu32和--tmu_support=tmu0。
如果用户希望在 C 代码中使用 TMU、则必须打开附加选项、
--fp_mode=relaxed
这将使编译器用 TMU 指令替换对标准 C 数学库的调用、如正弦或余弦。
结论:
16位实现
虽然 C28x+VCU 实现可提供最佳性能、但 并非在所有器件上都可用、并且没有计划将其包含在未来的器件上。 VCU 幅度和相位计算与定点器件上的计算相同。 这是因为 VCU 没有改进这些算法的增强功能。
32位定点 FFT 性能
要提高32位定点 FFT 的性能、请执行以下操作:
考虑使用浮点器件。 FPU 可以使性能加倍。 此外、幅度和相位计算速度更快、因为 FPU 在这方面比32位定点数学做得更好。 32位定点和32位浮点实现之间的分辨率折衷可以忽略不计。
如果应用能够容忍16位实现、则考虑使用 C28x+VCU。 与32位定点实现相比、这会更快。 但是、VCU 没有改进幅度或相位计算性能的指令。 这些运算最好在浮点中完成。
32位 FPU 与16位 VCU
16位 VCU 和32位 FPU 实现之间的性能差异并不大。 VCU-I (0类)没有改进幅度和相位计算性能的增强功能。 VCU-II 有一条新指令、用于在单个周期内计算16位定点复数变量的幅度;它对相位计算没有任何改进。
CLA
虽然 CLA 本身不适合完整 FFT 算法、但可以考虑将其用于幅度和相位计算。 这将减轻主 CPU 的这些操作负载。 例如、在 F2806x 等器件上、可以在主 C28x+FPU 上执行浮点 FFT、并在 CLA 上执行幅度计算。 由于 CLA 的 RAM 有限、因此点数将受到限制。
C2000培训小程序码