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

Что такое Speculative prefetch в Cortex-M7 ?

Люди добрые,

объясните пожалуйста тупому, что такое Cortex-M7 speculative prefetch  (AN4838 п. 3.4)

У меня в проекте на STM32H743 (Cortex-M7) периодически возникали проблемы с изображением на дисплее (дергалось изображение).
Тут на форуме умные люди подсказали задействовать MPU. Посмотрел пример от ST, взял оттуда настройки для MPU  и действительно все стало хорошо.
Судя по всему это происходило из-за этого события "speculative prefetch". Хочу теперь понять, что это такое. Почитал Джозефа Ю (Cortex-M3), там этого нет. 
 
--------------------------------------------------------
Вот, что пишет AN4838 (пункт 3.4):
Cortex-M7 constraint speculative prefetch:
The Cortex-M7 implements the speculative prefetch feature, which allows speculative accesses to normal
memory locations (for example: FMC, Quad-SPI devices). When a speculative prefetch happens, it may impact
memories or devices that are sensitive to multiple accesses (such as FIFOs, LCD controller). It may also disturb
the traffic generated by another masters such as LCD-TFT or DMA2D with higher bandwidth consumption when a
speculative prefetch happens. In order to protect normal memories from a speculative prefetch, it is
recommended to change memory attributes from normal to a strongly ordered or to device memory thanks to the
MPU.

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


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

От этого бравого стрелка убегает заяц, но в 50 метрах на него же несется кабан.

image.png.e0ff062ecd48488b07b5bce699ef33a7.png


У него одностволка. Нужно принять решение - зарядить дробину и шмальнуть в зайца, забрать его и "заказать сибаса", или зарядить пулю восьмерку и всадить кабану в лоб, спасая собственные кахоносы (иначе можно эти кахоносы потом повесить на сук). Так вот - этот чел лезет в левый карман за патроном с дробью, а в правый - за пулей. Это и есть спекулятивный выбор. Выбор "наперед". Что будет дальше - зависит от его выбора. Так или иначе в итоге один из патронов останется незадействованным (будет отброшен).

В таком же положении процессор, которому надо решить, по какой ветке кода пойти в условии. Пока его быстрый мозг думает, по какой ветке пойти, "руки" уже делают: правая - "выполняет" true-ветку, левая - false-ветку. Ну, как выполняет - осуществляет подсос данных (берет те самые патроны), если нужно, для этих инструкций. А данные там могут лежать совершенно по другим адресам. Поэтому доступ и будет спекулятивным - т.е. непредсказуемым. С точки зрения доступов к памяти это будет несколько несвязанных друг с другом доступов.

Такие доступы разрешены архитектурно только для Normal-памяти, т.е. памяти, имеющей атрибут слабоупорядоченной обычной памяти (коей обычно является, например, ОЗУ).

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


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

Если при LTDC дергается изображение, это означает только одно - не хватает пропускной способности подсистемы памяти. В частности, на пути от SDRAM до LTDC. Знаем, проходили такое. 

Решение лежит в области устранения помех потоку по этому пути. То есть, увеличение частоты шины SDRAM, увеличение разрядности шины (переход на 32-разрядную коммуникацию), снижение пиксельной частоты LTDC, увеличение невидимых полей в LTDC и изменение методов работы с SDRAM, чтобы развести по времени запись-чиенип SDRAM и извлечение данных из неп модулем LTDC

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


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

22 минуты назад, Arlleex сказал:

Нужно принять решение - зарядить дробину и шмальнуть в зайца, забрать его и "заказать сибаса", или зарядить пулю восьмерку и всадить кабану в лоб, спасая собственные кахоносы...

Художественно😆

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


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

8 минут назад, stells сказал:

Художественно😆

Главное, чтоб ассоциация хорошо запомнилась))

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


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

1 hour ago, Arlleex said:

Поэтому доступ и будет спекулятивным - т.е. непредсказуемым. С точки зрения доступов к памяти это будет несколько несвязанных друг с другом доступов.

Спасибо, Arlleex. Очень образно !

 

1 hour ago, EdgeAligned said:

Если при LTDC дергается изображение, это означает только одно - не хватает пропускной способности подсистемы памяти. В частности, на пути от SDRAM до LTDC. Знаем, проходили такое. 

Решение лежит в области устранения помех потоку по этому пути. То есть, увеличение частоты шины SDRAM, увеличение разрядности шины (переход на 32-разрядную коммуникацию), снижение пиксельной частоты LTDC, увеличение невидимых полей в LTDC и изменение методов работы с SDRAM, чтобы развести по времени запись-чиенип SDRAM и извлечение данных из неп модулем LTDC

Спасибо, EdgeAligned.

У меня тоже была такая мысль, но почитав документ AN4861, на странице 25 рассказывают как проверить, что железо тянет соответствующее разрешение экрана и глубину цвета.

ST'шники советуют проверять бит "LTDC FIFO underrun" в регистре LTDC_ISR. И если вдруг он будет "1", значит железо не успевает.  У нас этот бит всегда был "0".

Эти дергания экрана бывало происходили и на статической картинке(чаще конечно на динамической), а при перекомпиляции проекта дергание могло пропасть, а могло и не пропасть.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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