Я использую бесплатный микроконтроллер PowerPC. В модуле флэш-памяти в таблице данных число «состояний ожидания доступа к флэш-памяти» настраивается.
Ниже приведена часть таблицы, поднятая на мой вопрос, она взята из описания регистров модуля PFlash:
В этом поле должно быть установлено значение, соответствующее рабочей частоте PFlash и фактическому времени доступа для чтения PFlash. Более высокие рабочие частоты требуют ненулевых настроек для этого поля для правильной работы вспышки.
0 МГц, <23 МГц, требуется состояние ожидания = 0–23
МГц, <45 МГц, требуется состояние ожидания = 1–45
МГц, <68 МГц, требуется состояние ожидания = 2–68
МГц, <90 МГц, требуется состояние ожидания = 3 ---
(PFlash - это модуль контроллера платформы Flash)
Я понимаю, что процессор быстрее флэш-памяти, поэтому введены состояния ожидания. Чего я не понимаю, так это: если процессор работает быстрее, чем флэш-память, то нужно замедлять процессор, а не флэш, но в приведенном выше параграфе говорится об обратном (или я этого не понял?), говорит, что если Pflash работает на высоких частотах, нам нужно замедлить его, добавив в него дополнительные состояния ожидания !!
Что не так с моим пониманием?
Спасибо
Ответы:
Чтобы усилить ответ Стивенва, любой тип логики, когда ему дают входной сигнал, потребует некоторого времени для создания выходного сигнала; память часто очень медленная по сравнению с другой логикой. Часто будет гарантия, что выходной сигнал станет действительным в течение определенного периода времени, но это все. В частности, возможно, что сигнал может изменяться несколько раз в пределах этого интервала, и до конца этого интервала не будет никаких признаков того, что сигнал достиг своего окончательного «правильного» значения.
Когда типичный микроконтроллер или микропроцессор считывает байт (или слово, или любую другую единицу) памяти, он генерирует адрес и через некоторое время просматривает значение, выводимое памятью, и воздействует на него. Между временем, когда контроллер генерирует адрес, и временем, когда он смотрит на значение из памяти, ему все равно, когда или изменится ли выходной сигнал из памяти. С другой стороны, если сигнал из памяти не стабилизировался до своего конечного значения к тому времени, когда контроллер смотрит на него, контроллер будет неправильно воспринимать память как имеющую то значение, которое выводилось в момент его просмотра. Обычно контроллер будет смотреть на значение из памяти, как только он будет готов что-то с ним сделать, но если значение памяти не будет готово, это может не сработать. Следовательно, многие контроллеры имеют возможность подождать немного дольше, после того как они готовы обработать данные из памяти, чтобы убедиться, что вывод из памяти действительно действителен. Обратите внимание, что добавление такой задержки замедлит процесс (контроллер был бы рад быстрее обработать данные из памяти), но не повлияет на правильность работы (если все не будет настолько замедлено, что другие временные обязательства не будут выполнены).
источник
Состояния ожидания добавляются к циклу доступа к памяти, инициированному ЦП. Так что это действительно процессор, который должен ждать медленной Flash. Контроллер памяти сигнализирует «не готов» к ЦПУ в течение ряда циклов (от 0 до 3), и пока он это делает, ЦП остается в своем текущем состоянии, то есть записал адрес Flash, но еще не считал данные. Только когда контроллер памяти подает сигнал «готовность данных», ЦП будет считывать данные с шины данных и продолжать выполнение своих команд (фиксируя данные в регистре или в ОЗУ).
источник
Процессору, возможно, придется остановиться на памяти, но умный дизайн не понадобится.
Я думаю, что ключевой технологией, о которой вы не знаете, является доступ в режиме серийной съемки . Это позволяет пропускной способности доступа к памяти быть очень близкой к скорости процессора (но, вероятно, Flash по-прежнему является узким местом, поскольку я никогда не видел микроконтроллер на базе Flash, работающий на> 200 МГц)
Однако время ожидания остается прежним. Например, для используемых микроконтроллеров STM32F4, #wait states = floor (clockSpeed / 30MhZ). Это означает, что задержка всегда составляет 33 нс, независимо от тактовой частоты. Есть поговорка: «Деньги могут купить пропускную способность, но задержка навсегда ...»
Даже если пропускной способности флэш-памяти было недостаточно для загрузки процессора, вы можете легко спроектировать кэш кода, в котором хранятся и предварительно выбираются инструкции, которые должны выполняться. ST намекает на это для своих микроконтроллеров STM32F4 (168 МГц):
На самом деле, утверждение также предполагает, что пакетный режим не является необходимым и что очень широкий интерфейс памяти также достаточен. Но идея та же самая (использование параллелизма для сокрытия задержки). На чипе провода свободны, поэтому имеет смысл использовать 128-битную память.
источник