Що таке стан очікування флеш-пам’яті?


10

Я використовую мікроконтроллер PowerPC вільного масштабу. У модулі флеш-пам’яті в таблиці даних кількість «станів очікування доступу до флеш-пам’яті» може регулюватися.

Далі йде частина аркуша даних, що підняв моє запитання, це взято з опису регістра регістрів модуля PFlash:

Це поле повинно бути встановлено у значення, що відповідає робочій частоті PFlash та фактичному часу доступу PFlash до читання. Для правильної роботи спалаху для цього поля потрібні більш високі робочі частоти.
0 МГц, <23 МГц, необхідні стани очікування = 0 ---
23 МГц, <45 МГц, необхідні стани очікування = 1 ---
45 МГц, <68 МГц, необхідні стани очікування = 2 ---
68 МГц, <90 МГц, необхідні стани очікування = 3 ---

(PFlash - модуль контролера Flash Platform)

Я розумію, що процесор швидше, ніж спалах, тому вводяться стани очікування. Що я не розумію, це: якщо процесор швидше, ніж спалах, то процесор - це той, якого потрібно сповільнити не спалахом, а абзац вище говорить про зворотне (чи я цього не розумів?), Це говорить, що у випадку, якщо Pflash працює з високими частотами, тоді нам потрібно сповільнити його, додавши до нього додаткові стани очікування !!

Що поганого в моєму розумінні?

Дякую


1
Якщо я правильно зрозумів, чи є регулятор, який можна встановити на різні швидкості; тому доводиться чекати, коли фактична флеш-пам’ять має доступні дані.
clabacchio

Відповіді:


8

Для посилення відповіді stevenvh, будь-який тип логіки, коли йому подають вхідний сигнал, знадобиться деякий час, щоб створити вихідний сигнал; пам'ять часто дуже повільна порівняно з іншими логіками. Часто є гарантія, що вихідний сигнал стане дійсним протягом певного часу, але це все. Зокрема, можливо, що сигнал може змінитися кілька разів протягом цього інтервалу, і до кінця цього інтервалу не буде вказівки на те, що сигнал досяг остаточного "правильного" значення.

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


Приємно! Дякую за корисні деталі, які ви пояснили!
MohamedEzz

1
@MemoryLeaks: Моє задоволення. Важливо зазначити, що зменшення станів очікування нижче зазначених меж призведе до швидшого запуску системи, але зчитування з пам'яті може довільно видавати невірні дані; крім того, "довільно видавати невірні дані" може означати "видавати правильні дані, поки пристрій, який ви створили, перебуває в руках вашого клієнта, а потім почніть видавати невірні дані досить часто, щоб клієнт дуже злий на вас".
supercat

1
Здається, це дуже тісний паралельний розгін, але більше його настроюваний варіант. Можливо, цікавий спосіб розігнати MCU.
sherrellbc

1
@supercat, Одне питання, що означає контролер, це процесор чи контролер пам'яті?
Mouin

1
@Mouin: контролер пам'яті, якщо він є, або процесор, якщо його немає.
суперкарт

9

Стани очікування додаються до циклу доступу до пам'яті, ініційованого процесором. Тож справді процесор повинен чекати повільнішого Flash. Контролер пам'яті сигналізує "не готовий" до процесора протягом декількох циклів (від 0 до 3), і поки це робить, процесор залишається у своєму поточному стані, тобто записав Flash-адресу, але ще не читав дані. Тільки тоді, коли контролер пам'яті подасть сигнал "готові до даних", процесор прочитає з шини даних і продовжить свою інструкцію (зав'язування даних в регістр або в оперативну пам'ять).


1
Отже, налаштовуючи це налаштування, я кажу контролеру пам’яті, коли саме потрібно сигналізувати «дані готові». Чи не можу я просто сказати пам'яті, щоб вона сигналізувала "дані готові", коли вона насправді готова?
MohamedEzz

1
@MemoryLeaks - Це можливо, і це робиться асинхронними процесорами, що є рідкістю. Більш поширене та більш передбачуване - синхронізувати все за допомогою годинника. Отже, це або затримка циклу годин (або 2, або 3), або нічого.
stevenvh

Дякую за вашу відповідь :) Отже, підводячи підсумок: опис у моєму запитанні вище означає, що це затримає "процесор", а не флеш-контролер
MohamedEzz

1
@stevenvh процесор буквально зависає, він отримує дані з пам'яті, я маю на увазі, чи повністю припиняє його виконання чи виконує інші інструкції у випадку конвеєрного процесора. А як щодо перебоїв, я думаю, вони будуть обслуговуватися, поки процесор чекає, поки пам'ять буде готова?
Мігель Санчес,

3

Процесору може знадобитися затримка пам’яті, але розумний дизайн не потребує.

Я думаю, що ключовою технологією, про яку ви не знаєте, є доступ до режиму вибуху / сторінки . Це дозволяє пропускній здатності оперативної пам'яті бути дуже близькою до швидкості процесора (але, мабуть, Flash все ще є вузьким місцем, оскільки я ніколи не бачив MCU на базі Flash, який працює при> 200 МГц)

Однак затримка залишається однаковою. Наприклад, для MCU STM32F4, який я використовую, #wait States = floor (clockSpeed ​​/ 30MhZ). Це означає, що затримка завжди становить 33нс, незалежно від тактової частоти. Є приказка: "Гроші можуть купувати пропускну здатність, але затримка навіки ..."

Навіть якщо пропускна здатність Flash не була достатньою для того, щоб центральний процесор зайнятий, ви можете легко створити кеш коду, який зберігає та попередньо вибирає інструкції, які, як очікується, виконати. ST має підказку щодо цього для своїх MCU STM32F4 (168 МГц):

Завдяки прискорювальнику ART та 128-бітній флеш-пам’яті кількість наведених тут станів очікування не впливає на швидкість виконання Flash-пам’яті, оскільки прискорювач ART дозволяє досягти продуктивності, еквівалентної 0 виконанню стану програми очікування.

Насправді, заява також дозволяє припустити, що режим розриву не потрібен і що також достатньо широкого інтерфейсу пам'яті. Але ідея та ж (використання паралелізму, щоб приховати затримку). На мікросхемі дроти безкоштовні, тому 128-бітова пам'ять мала б сенс.


Проводи далеко не "вільні" на мікросхемі, загалом кажучи, але збільшення ширини шини між масивом пам'яті та набором засувок не додає проводів. Якщо в мікросхемі є 256-бітовий флеш-масив, організований як сітка 512x512, проводка та логіка для конденсації 512 стовпців на 32-бітну шину буде необхідною, чи потрібно розміщувати 512-бітну широку засувку перед "конденсаційними" проводами та логікою або 32-розрядна засувка після них.
supercat

1
Я маю на увазі, що вони "вільні" порівняно із зовнішніми штифтами. Я знаю, що енергія проводів домінує в наші дні і що місцевість важлива, тому дозвольте мені кваліфікувати це твердження. Вони вільні, але не можуть включати!
Yale Zhang

1
Я не впевнений, що ви маєте на увазі під "провідною енергією", але навіть з космічної точки зору великі автобуси коштують дорого, але якщо подвоєння ширини автобуса скоротить його приблизно в довжину вдвічі, загальна вартість залишиться приблизно однаковою.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.