memory - 我可以在 Atmel SAM E70 处理器中使用 "Instruction"TCM 来获取数据吗?

标签 memory arm embedded cortex-m

我正在为 Atmel SAME70Q21 开发应用程序微处理器。该 MCU 具有 ARM Coretex-M7 内核。

Atmel 已在此特定 MCU 变体中实现了 ARM TCM(紧耦合内存)。 Atmel似乎将TCM分为两部分“ITCM”(指令TCM)和“DTCM”(数据TCM)

我目前正在使用 DTCM 进行快速存储,通常是通过中断。然而,ITCM 目前实际上已关闭,尽管 TCM 的配置系统仍为其分配了 32K 数据。

我在想,既然我不是在ITCM之外执行,并且RAM已经分配了,我可以使用ITCM来存储数据吗? Cortex-M7 是冯·诺依曼架构的 CPU,我见过的架构图显示两个 TCM 内存段与 CPU 具有单独的接口(interface)。

DTCM 和 ITCM 内存空间在链接器脚本中都是 rw(要使用 ITCM,实际上您必须在运行时将代码重新定位到其中)。以这种方式(ab)使用 ARM 内核会对性能产生什么影响?

最佳答案

From the ARM Cortex-M7 Processor Technical Reference Manual Section 5.8 TCM Interfaces :

The Prefetch Unit (PFU) can fetch instructions from any of the TCM interfaces. The Load Store Unit (LSU) and the AHBS interface can each read and write data using any of the TCM interfaces. Best performance is achieved if code is placed in ITCM and data in DTCM. However, there is no functional restriction in which TCM, code and data is placed.

如果您不使用这两种代码来编写代码,那么可能不会影响性能,但如果您在 TCM 中运行代码,那么将它们与哈佛架构分开会带来好处,允许并发指令获取和数据读。 ITCM 的 64 位总线大概允许单周期指令和操作数获取 - 但我怀疑这对数据读/写有任何好处。

关于memory - 我可以在 Atmel SAM E70 处理器中使用 "Instruction"TCM 来获取数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389559/

相关文章:

python - 使用循环参数生成变量

ios - 解决迁移大量数据的内存问题

python - python 变量如何工作?

c - 如何检测是否分配了内存? (链表)

linux - 为 arm 交叉编译 glibc

c - 定位 RAM 变量的 ROM 地址

arduino - 如何解码未知的红外遥控协议(protocol)?

c - 为什么会发生字节溢出以及它们的作用是什么?

arm - JTAG 适配器 ULINK-ME 和 openocd(在 ArchLinux 上)

c - 具有不同迭代的循环