TOG 0 24 мая Опубликовано 24 мая · Жалоба Люди добрые, объясните пожалуйста тупому, что такое 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 24 мая Опубликовано 24 мая · Жалоба От этого бравого стрелка убегает заяц, но в 50 метрах на него же несется кабан. У него одностволка. Нужно принять решение - зарядить дробину и шмальнуть в зайца, забрать его и "заказать сибаса", или зарядить пулю восьмерку и всадить кабану в лоб, спасая собственные кахоносы (иначе можно эти кахоносы потом повесить на сук). Так вот - этот чел лезет в левый карман за патроном с дробью, а в правый - за пулей. Это и есть спекулятивный выбор. Выбор "наперед". Что будет дальше - зависит от его выбора. Так или иначе в итоге один из патронов останется незадействованным (будет отброшен). В таком же положении процессор, которому надо решить, по какой ветке кода пойти в условии. Пока его быстрый мозг думает, по какой ветке пойти, "руки" уже делают: правая - "выполняет" true-ветку, левая - false-ветку. Ну, как выполняет - осуществляет подсос данных (берет те самые патроны), если нужно, для этих инструкций. А данные там могут лежать совершенно по другим адресам. Поэтому доступ и будет спекулятивным - т.е. непредсказуемым. С точки зрения доступов к памяти это будет несколько несвязанных друг с другом доступов. Такие доступы разрешены архитектурно только для Normal-памяти, т.е. памяти, имеющей атрибут слабоупорядоченной обычной памяти (коей обычно является, например, ОЗУ). 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 85 24 мая Опубликовано 24 мая · Жалоба Если при LTDC дергается изображение, это означает только одно - не хватает пропускной способности подсистемы памяти. В частности, на пути от SDRAM до LTDC. Знаем, проходили такое. Решение лежит в области устранения помех потоку по этому пути. То есть, увеличение частоты шины SDRAM, увеличение разрядности шины (переход на 32-разрядную коммуникацию), снижение пиксельной частоты LTDC, увеличение невидимых полей в LTDC и изменение методов работы с SDRAM, чтобы развести по времени запись-чиенип SDRAM и извлечение данных из неп модулем LTDC 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 24 мая Опубликовано 24 мая · Жалоба 22 минуты назад, Arlleex сказал: Нужно принять решение - зарядить дробину и шмальнуть в зайца, забрать его и "заказать сибаса", или зарядить пулю восьмерку и всадить кабану в лоб, спасая собственные кахоносы... Художественно😆 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 24 мая Опубликовано 24 мая · Жалоба 8 минут назад, stells сказал: Художественно😆 Главное, чтоб ассоциация хорошо запомнилась)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TOG 0 24 мая Опубликовано 24 мая · Жалоба 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". Эти дергания экрана бывало происходили и на статической картинке(чаще конечно на динамической), а при перекомпиляции проекта дергание могло пропасть, а могло и не пропасть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться