This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
在 TMS320F28004x 数据表(PSRS945E)的顶部、1.1特性、其内容为:
–三角函数加速器(TMU)
–常见三角函数与软件库的3×周期到4×周期改进
–13周期帕克变换
我的客户询问;
Q1)“Park 变换”在这里究竟意味着什么?
Q2)哪些 TMU 支持的指令(参见下文)用于执行上述“Park 变换”?
Q3)这13个周期是什么?
谢谢、此致、
田志郎一郎
帕克变换由以下公式给出。 您可以看到、与非基于 TMU 的计算相比、TMU 有助于更快地计算正弦和余弦 Theta。 如果 CPU 时钟为100MHz (10ns 时间周期),则13个周期意味着大约需要130nS (13*10ns)来完成 Park 变换。
谢谢 Shamim。 您所附的图片在我的末尾未显示、因此我要输入方程式。
pOutVec->value[0]=(value_0 * cosTh)+(value_1 * sinTh);
pOutVec->value[1]=(value_1 * cosTh)-(value_0 * sinTh);
谢谢、
Sira
假设您的问题得到了准确回答、我将结束本主题。 如果没有、请告知我们。
Shamim
您好、Shamim、
感谢您的回复。
客户还想知道如何将13个周期分成每条指令。
例如、这是我的猜测。
pOutVec->value[0]=(value_0 * cosTh)+(value_1 * sinTh);
pOutVec->value[1]=(value_1 * cosTh)-(value_0 * sinTh);
CosTh 为 COSPUF32 Rah、RBH、然后是4周期
1个 MPY 1周期?
SinTh 为 SINPUF32 Rah、RBH、然后为4周期
1个 MPY 1周期?
一个加1周期?
1个 MOV 1周期?
总共12个周期?
您能否提供上述公式和所需周期的汇编表示?
谢谢、此致、
田志郎一郎
一郎
我尝试查看编译器是否会生成最有效的汇编代码、但即使启用了优化、编译器也不会生成最有效的汇编代码。 请参阅我使用的代码段-它需要45个周期。
例如,我想看看是否可以将 COSPBUF32和 SINPUF32中的 NOP 与不同的寄存器一起使用,但编译器没有这样做。 我将更深入地探讨这一点、包括是否需要手动编写的汇编。
volatile float32_t value0、value1、theta;
volatile float32_t value_0、value_1、cosTh、sinTh;
volatile float32_t temp1、temp2、temp3、temp4;
cosTh = cosf (theta);
sinTh = sinf (theta);
TEMP1 = value_0 * cosTh;
TEMP2 = value_1 * cosTh;
temp3 = value_1 * sinTh;
temp4 = value_1 * cosTh;
value0 = temp1 + temp2;
Value1 = temp3 - temp4;
谢谢、
Sira
假设您的问题得到了准确的回答、我将关闭此主题。
Shamim