Перейти к содержанию
    

Кеш и TCM

Такой вопрос - зачем во всех примерах из sdk разрешается кеширование TCM ?

    /* Region 5 setting: Memory with Normal type, not shareable, outer/inner write back */
    MPU->RBAR = ARM_MPU_RBAR(5, 0x00000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);

    /* Region 6 setting: Memory with Normal type, not shareable, outer/inner write back */
    MPU->RBAR = ARM_MPU_RBAR(6, 0x20000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_128KB);


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разве TCM кешируется? Камень-то какой?
Вообще, в примерах все что угодно могут писать, на то они и примеры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Фигню значит пишут в примерах. i.MX RT1050, судя по описанию, имеет контроллер памяти, который может распределять внутреннее ОЗУ как I-TCM, D-TCM, On-chip RAM. Вот в режиме TCM память работает на частоте ядра. Если же память настроена как пользовательская SRAM, то она, естественно, "проброшена" через кэш (2.1.1. FlexRAM memory bank configuration)

Цитата

NOTE
All TCM interfaces run at the same frequency as the Arm® Cortex®-M7 core and are synchronous to each other. The OCRAM controller is connected through the 64-bit AXI bus to one slave port of the interconnect bus fabric (NIC). This slave port frequency is limited. For example, on RT 1050, if the Arm Cortex-M7 core runs at 528 MHz, then the AXI bus connected to the OCRAM controller is limited to 132 MHz. Expect performance degradation in the data access to the OCRAM in comparison to the xTCM memories. The L1 CACHE memory can help with that.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По этим адресам находится ITCM и DTCM, у OCRAM другой адрес. Так вот не совсем понятно - достаточно ли того что память распределена по адресам ITCM и DTCM чтобы она работала как TCM или для этого нужно ещё что-то проинициализировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Думаю вполне достаточно.

52 минуты назад, sergvks сказал:

По этим адресам находится ITCM и DTCM, у OCRAM другой адрес. Так вот не совсем понятно - достаточно ли того что память распределена...

Только не "распределена по адресам ITCM/DTCM", а настроена как ITCM/DTCM, т.к. судя по описанию, почти любой кусок из 512кБ SRAM можно обозвать ITCM/DTCM/OCRAM, записав нужные регистры FlexRAM-контроллера памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если смотреть TCMCR,ВTCMCR и IOMUXC_GPR_GPR16 то биты Enable для TCM установлены, FlexRAM-контроллер тоже проинициализирован и если включен код настройки кеша из первого поста эти области памяти кешируются (видно при работе с DMA). Весь вопрос в чём тайный смысл кешировать то что и так работает на максимальной скорости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, sergvks сказал:

...эти области памяти кешируются (видно при работе с DMA).

Это Вы как определили то?

Цитата

Весь вопрос в чём тайный смысл кешировать то что и так работает на максимальной скорости.

Вот именно, что его нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из еще одного документа

image.png.a5e0cbc71f2c2a08cdbf0d63c7e1e193.png

Цитата

The i.MXRT series implement a CPU core platform described in Figure 1. The L1 I/D-Cache is embedded in the core platform. The data cache is 4-way set-associative and instruction cache is 2-way set-associative with cache line size of 32 bytes. It connects with the SIM_M7 bus fabric master port by AXI bus. The subsystem of internal/external memory like OCRAM (FlexRAM banks configured as OCRAM), FlexSPI (Serial NOR, NAND Flash and Hyper Flash/RAM etc.) and SEMC (SDRAM, Overview Using the i.MXRT L1 Cache, Application Note, Rev. 1, 12/2017 NXP Semiconductors 3 PNOR Flash, NAND Flash etc.) are connected to the bus fabric slave port. CPU core access the subsystem through this bus fabric by L1 cache.
Since the access to the subsystem of those memory can take multiple cycles (especially on the external memory interfaces with multiple wait states), the L1 cache is designed to speed up the read/write operation to the memory. This brings a big performance boost.
The I/DTCM (FlexRAM banks configured as TCM) is accessed directly by CPU core, bypass the L1 cache. Therefore, put the critical code and data into the TCM is recommended, like the vector table.

image.thumb.png.e7235ba474cd00323967b9165b38215a.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Arlleex said:

Это Вы как определили то?

Прошу прощения, мой косяк - не туда глядел, реально не кеширует эти области.

Спасибо за подсказки!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё одна деталь - в своих доках они рекомендуют размещать буферы dma  в некешируемой части OCRAM, но в usb-шных примерах кладут их в DTCM.

Если все буферы dma разместить в DTCM, чем это грозит ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Медленной, относительно доступа CPU, работой. Да и время доступа CPU будет недетерминированным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...