我认为在 DSP 库 DSPLIB 版本2.4的 C55x 实现中、相关函数存在错误。
您可以使用随安装程序分发的示例代码重新创建错误。
将 t8.h 的内容替换为以下内容。
#define NA 9.
#define NB 9 // NB <= nA
#define FNAME"T8"(定义 FNAME "T8")
#define MAXROR 10 //最大绝对误差
数据错误[2]={150、15000};
数据 A[NA]={-3427、1375、-8326、-7231、-4831、1241、-315、9878、-5857};
数据 b[NB]={-467、579、6394、-6707、8947、9223、-1063、5844、9772};
数据 rtest[nA+NB-1]={-1022、-201、-1126、-5052、-577、588、-3564、1065、-924、-4589、3389、1373、-3592、103、-964、-244、83};
分布式 t8.h 与上述的唯一区别是在 A[NA]数组之前添加了 ERR[2]数组。
假设在 craw_T.c 中调用'corr(b、a、r、nA、nb、raw)'时 CSR 寄存器值为1 这将在'r'数组中产生以下结果。
错误位于 craw.asm 中的第209行。 "RPTADD CSR、#2"错误地假设 CSR 寄存器为零。 在我运行的分布式示例代码中、跳转到 corr_raw 时 CSR 寄存器值为1。 这将导致第210行中的 MAC 调用索引'A'数组以外的一个。 在 t8.h 中的"A"数组之前添加'err'数组可确保在关联计算中包含15000的错误样本。 较大的错误值将导致测试功能失败。
我可以通过在 craw_T.C.中调用 cr 之前插入以下代码来修复此错误
asm (“MOV #0,CSR”);
(b、a、r、nA、nB、raw);
TI 能否确认上述内容是否正确?
清除 CSR 是否是正确的修复?
DSPLIB 中是否有其他调用会做出相同的假设?