AWRL6844EVM: The D1P in AWRL6844 DSP core can not be used normally

Part Number: AWRL6844EVM
Other Parts Discussed in Thread: AWRL6844, SYSCONFIG, AWR1843

hello, we found that the D1P memory in AWRL6844 DSP core dose not used in incabin radar demo code. As the picture showed behind.

During our software developement,  we have tried to use the D1P. For example, we have configured the 16KB D1P to cache , and we put some test code in it. however, the code in the D1P can not run normally as we want it to. Then, DSP core project go  exit.

We just want to know that how to use the D1P correctly in DSP?

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好,

          关于 D1P 以及一般使用缓存的几点说明。

         如您所提到的,L1 内存可以在 SRAM 和缓存之间配置。L1P 和 L1D 内存各自总共为 32 KB,可以配置为 SRAM 或缓存(4K、8K、16K 或 32K)。这是通过 SysConfig C66SS0 Cache 66x DPL 配置来完成的。SRAM 内存放置在每个缓存内存位置的起始地址——即 L1P 为 0x00E00000,L1D 为 0x00F00000。根据缓存大小,缓存将根据每个缓存内存位置的末端进行放置——例如,L1P 的 8KB 缓存将从 0x00E00000 - 0x2000(8KB)= 0x00E06000 开始,到 0x00E07FFFF 结束。

          要将代码或数据放入 L1 SRAM 内存,您必须先将其加载到 L2 SRAM 或外部内存中,然后再复制到相应的 L1 内存中。您可以在 DSS 的 linker.cmd 文件的 fastCode 部分找到如何使用此运行和加载指令的示例,该部分已被注释掉——另请参阅相关的编译器用户指南。由于调试构建的内存限制,我们不使用该部分。

  • 您好,

          我理解了您的意思。并按照您给的方法,打开了在 DSS 的 linker.cmd 文件的 fastCode 部分并构建了一个版本,但是仍然遇到了相同的问题。代码部分依旧不能正常运行,当程序运行到该部分代码时,就会出现跑飞的状态。如下图所示,是我们在构建中的调试代码。

          所以我们现在对DSS中L1P部分的使用依旧有疑问。因为在其他芯片中比如AWR1843,使用同样的方式,程序是可以正常运行的。这两者的L1P是否有差异?或者在AWRL6844demo中,对于L1P的配置需求有什么不一样的地方呢?

          麻烦您这边解答一下我们的疑问,非常感谢!

          

  • 您好,

        我很抱歉,在之前的回复中我本应更清楚地提醒您,将代码移到 L1P SRAM 可能会导致in-cabin demo出现一些不稳定。

        如果您从 SDK 刷写空的 appimage,并通过 CCS 调试器加载 MSS 和 DSS 的 .out 文件,demo应该可以运行,但可能会出现一些异常。

        我们不确定为何会这样,这也是我们目前不使用 L1P SRAM 的另一个原因。

  • 您好,

          非常感谢您的答复。我理解了您的意思。

          基于您的回复,我们现在不会尝试将代码段放在L1P中。现在我们尝试将L1P配置成一个完全的数据RAM来使用。但在实验过程中,我们发现L1P并不能像L1D一样被正常读写。即使对缓存进行了失效和写回步骤,L1P的读写操作也不会生效。

          我们的疑问是,这是否意味着AWRL6844 DSP的L1P完全不能被使用?或者是否有其他方式,将这一片缓存利用起来?

          再次麻烦您这边解答一下我们的疑问,非常感谢!

  • 您好,

         L1P 和 L1D 的 SRAM 特性应当相同。L1P SRAM 中存储的数据类型是什么?我们目前只测试了未初始化的动态分配内存,例如堆和临时区的操作。您执行缓存无效化和写回的顺序/函数是什么?

  • 您好,

          非常感谢您的答复。

          我们使用如下函数对L1P和L1D缓存进行无效和写回。

          

          对两片内存区域写入固定个数的uint8的数据。我们发现,L1D的数据可以正常写入,但L1P的数据不可以。同样的,对两片内存分别执行读操作,L1D可以正常读,但L1P不可以。这就表现出L1D和L1P的差异性,而且L1P不能正常读写,也不能像L1D一样被使用。

          基于您的答复,我们同样尝试了L1P动态内存分配是可以实现的,但对其中的数据读写操作无法实现。

          希望收到您的答复,非常感谢!

  • 您好,

        是通过 EDMA 写入数据还是直接通过 CPU 访问写入?

       如果数据是通过 EDMA 从例如 L3 复制到 L1,那么您将需要执行缓存失效操作。如果直接写入 L1P,则不需要执行缓存失效操作。

  • 您好,

          我们使用CPU直接访问读写L1P和L1D。

          这种方式确实不需要缓存失效操作,这是我们的失误。当然,不管是否使用缓存失效操作,表现出来的现象都与之前描述的现象一致,不能正常读写。而且AWRL6844的DSP好像不具备EDMA操作。