Что такое состояния ожидания флэш-памяти?

10

Я использую бесплатный микроконтроллер PowerPC. В модуле флэш-памяти в таблице данных число «состояний ожидания доступа к флэш-памяти» настраивается.

Ниже приведена часть таблицы, поднятая на мой вопрос, она взята из описания регистров модуля PFlash:

В этом поле должно быть установлено значение, соответствующее рабочей частоте PFlash и фактическому времени доступа для чтения PFlash. Более высокие рабочие частоты требуют ненулевых настроек для этого поля для правильной работы вспышки.
0 МГц, <23 МГц, требуется состояние ожидания = 0–23
МГц, <45 МГц, требуется состояние ожидания = 1–45
МГц, <68 МГц, требуется состояние ожидания = 2–68
МГц, <90 МГц, требуется состояние ожидания = 3 ---

(PFlash - это модуль контроллера платформы Flash)

Я понимаю, что процессор быстрее флэш-памяти, поэтому введены состояния ожидания. Чего я не понимаю, так это: если процессор работает быстрее, чем флэш-память, то нужно замедлять процессор, а не флэш, но в приведенном выше параграфе говорится об обратном (или я этого не понял?), говорит, что если Pflash работает на высоких частотах, нам нужно замедлить его, добавив в него дополнительные состояния ожидания !!

Что не так с моим пониманием?

Спасибо

MohamedEzz
источник
1
Если я правильно понял, это контроллер, который можно установить на разные скорости; поэтому нужно подождать, пока фактическая флэш-память будет иметь доступные данные.
Clabacchio

Ответы:

8

Чтобы усилить ответ Стивенва, любой тип логики, когда ему дают входной сигнал, потребует некоторого времени для создания выходного сигнала; память часто очень медленная по сравнению с другой логикой. Часто будет гарантия, что выходной сигнал станет действительным в течение определенного периода времени, но это все. В частности, возможно, что сигнал может изменяться несколько раз в пределах этого интервала, и до конца этого интервала не будет никаких признаков того, что сигнал достиг своего окончательного «правильного» значения.

Когда типичный микроконтроллер или микропроцессор считывает байт (или слово, или любую другую единицу) памяти, он генерирует адрес и через некоторое время просматривает значение, выводимое памятью, и воздействует на него. Между временем, когда контроллер генерирует адрес, и временем, когда он смотрит на значение из памяти, ему все равно, когда или изменится ли выходной сигнал из памяти. С другой стороны, если сигнал из памяти не стабилизировался до своего конечного значения к тому времени, когда контроллер смотрит на него, контроллер будет неправильно воспринимать память как имеющую то значение, которое выводилось в момент его просмотра. Обычно контроллер будет смотреть на значение из памяти, как только он будет готов что-то с ним сделать, но если значение памяти не будет готово, это может не сработать. Следовательно, многие контроллеры имеют возможность подождать немного дольше, после того как они готовы обработать данные из памяти, чтобы убедиться, что вывод из памяти действительно действителен. Обратите внимание, что добавление такой задержки замедлит процесс (контроллер был бы рад быстрее обработать данные из памяти), но не повлияет на правильность работы (если все не будет настолько замедлено, что другие временные обязательства не будут выполнены).

Supercat
источник
Ницца! Спасибо за полезные детали, которые вы объяснили!
MohamedEzz
1
@MemoryLeaks: С удовольствием. Важно отметить, что сокращение состояний ожидания ниже указанных пределов приведет к ускорению работы системы, но чтение из памяти может произвольно привести к неверным данным; кроме того, «произвольно выдавать неверные данные» может означать «выдавать правильные данные до тех пор, пока разработанное вами устройство не окажется в руках ваших клиентов, а затем начать собирать неверные данные достаточно часто, чтобы клиент очень разозлился на вас».
суперкат
1
Это похоже на очень параллельный разгон, но это скорее настраиваемая опция. Интересный способ разгона MCU возможно.
sherrellbc
1
@supercat, один вопрос что означает контроллер это процессор или контроллер памяти?
Муин
1
@Mouin: контроллер памяти, если он есть, или процессор, если его нет.
суперкат
9

Состояния ожидания добавляются к циклу доступа к памяти, инициированному ЦП. Так что это действительно процессор, который должен ждать медленной Flash. Контроллер памяти сигнализирует «не готов» к ЦПУ в течение ряда циклов (от 0 до 3), и пока он это делает, ЦП остается в своем текущем состоянии, то есть записал адрес Flash, но еще не считал данные. Только когда контроллер памяти подает сигнал «готовность данных», ЦП будет считывать данные с шины данных и продолжать выполнение своих команд (фиксируя данные в регистре или в ОЗУ).

stevenvh
источник
1
Таким образом, настраивая этот параметр, я сообщаю контроллеру памяти, когда именно следует сигнализировать «данные готовы». Разве я не могу просто сказать памяти, чтобы она подала сигнал «данные готовы», когда они на самом деле готовы?
MohamedEzz
1
@MemoryLeaks - это возможно, и это делается асинхронными процессорами, которые встречаются редко. Чаще всего и более предсказуемо синхронизировать все, используя часы. Так что это либо задержка тактового цикла (или 2 или 3), либо ничего.
Stevenvh
Спасибо за ваш ответ :) Итак, подведем итог: описание в моем вопросе выше означает, что будет задерживать «процессор», а не контроллер Flash
MohamedEzz
1
@stevenvh - процессор буквально зависает, получает данные из памяти, я имею в виду, полностью ли он останавливает выполнение или выполняет другие инструкции в случае конвейерного процессора. Как насчет прерываний, я полагаю, они будут обслуживаться, пока процессор ожидает готовности памяти?
Мигель Санчес
3

Процессору, возможно, придется остановиться на памяти, но умный дизайн не понадобится.

Я думаю, что ключевой технологией, о которой вы не знаете, является доступ в режиме серийной съемки . Это позволяет пропускной способности доступа к памяти быть очень близкой к скорости процессора (но, вероятно, Flash по-прежнему является узким местом, поскольку я никогда не видел микроконтроллер на базе Flash, работающий на> 200 МГц)

Однако время ожидания остается прежним. Например, для используемых микроконтроллеров STM32F4, #wait states = floor (clockSpeed ​​/ 30MhZ). Это означает, что задержка всегда составляет 33 нс, независимо от тактовой частоты. Есть поговорка: «Деньги могут купить пропускную способность, но задержка навсегда ...»

Даже если пропускной способности флэш-памяти было недостаточно для загрузки процессора, вы можете легко спроектировать кэш кода, в котором хранятся и предварительно выбираются инструкции, которые должны выполняться. ST намекает на это для своих микроконтроллеров STM32F4 (168 МГц):

Благодаря ускорителю ART и 128-битной флэш-памяти число состояний ожидания, приведенное здесь, не влияет на скорость выполнения из флэш-памяти, поскольку ускоритель ART позволяет достичь производительности, эквивалентной нулю выполнения программы состояния ожидания.

На самом деле, утверждение также предполагает, что пакетный режим не является необходимым и что очень широкий интерфейс памяти также достаточен. Но идея та же самая (использование параллелизма для сокрытия задержки). На чипе провода свободны, поэтому имеет смысл использовать 128-битную память.

Йельский Чжан
источник
Вообще говоря, провода на чипе далеко не «свободны», но увеличение ширины шины между массивом памяти и набором защелок не добавляет проводов. Если микросхема имеет флэш-массив 256 кбит, организованный как сетка 512x512, то потребуется проводка и логика для конденсации 512 столбцов в 32-битную шину, независимо от того, размещается ли защелка шириной 512 бит перед «уплотняющими» проводами и логикой или защелка шириной 32 бита после них.
суперкат
1
Я имею в виду, что они "свободны" по сравнению с внешними контактами. Я знаю, что энергия проводов доминирует в наши дни, и что местность важна, поэтому позвольте мне уточнить это утверждение. Они бесплатны, но не могут быть включены!
Йель Чжан
1
Я не уверен, что вы подразумеваете под «проводной энергией», но даже с точки зрения космоса, большие автобусы дороги, но если удвоить ширину автобуса, сократить его длину примерно вдвое, общая стоимость останется примерно такой же.
суперкат