Такт ожидания (wait state)
Энергонезависимая память микроконтроллера — флеш или FRAM — медленнее ядра на высокой частоте. Чтобы процессор не прочитал недостоверные данные, при обращении к ней вставляют такты ожидания. Их число зависит от частоты и задаётся программой.
Обновлено Редакция GAW
Такт ожидания (wait state) — дополнительный такт процессора, который вставляется при обращении к памяти, не успевающей за ядром. Энергонезависимая память — флеш или FRAM — имеет ограниченное время доступа, и когда частота ядра выше, чем память может обслужить за один такт, процессор ждёт.
Пример — MSP430 с FRAM по даташитам TI:
| Микросхема | Без ожидания | 1 такт | 2 такта |
|---|---|---|---|
| MSP430FR2433 | до 8 МГц | до 16 МГц | — |
| MSP430FR2355 | до 8 МГц | до 16 МГц | до 24 МГц |
Число тактов задают биты NWAITS в регистре FRCTL0. По руководству TI SLAU445 порядок смены частоты такой: при повышении — сначала увеличить NWAITS, потом частоту; при понижении — наоборот. После сброса тактов ожидания нет, и если частота и настройка не соответствуют друг другу, микроконтроллер сбрасывается.
Такты ожидания возникают только при реальном обращении к медленной памяти. У MSP430 с FRAM есть кэш: при попадании в него и при работе с ОЗУ и периферией ожидания нет. Поэтому даташит FR2433 на 16 МГц даёт ток 1000 мкА при 100 % попаданий в кэш и 3047 мкА при 0 %. У STM32 то же самое называется задержкой флеш-памяти (latency) и настраивается в регистре FLASH_ACR — её подбирает калькулятор задержки флеш-памяти STM32. Обзор MSP430 с FRAM — на странице «MSP430 с FRAM».
Частые вопросы
Зачем нужны такты ожидания?
Память не успевает выдать данные за один такт процессора на высокой частоте. Например, у MSP430FR2433 FRAM работает без ожидания только до 8 МГц, а на 16 МГц нужен один такт ожидания. Без него процессор прочитал бы недостоверные данные, поэтому TI сбрасывает микроконтроллер, если настройки нарушают требования памяти.
В каком порядке менять частоту и такты ожидания?
По TI SLAU445: при повышении частоты сначала увеличить число тактов ожидания, затем частоту; при понижении — сначала снизить частоту, затем уменьшить такты. Иначе в промежутке память окажется слишком медленной для текущей частоты.
Сильно ли такты ожидания замедляют программу?
Меньше, чем кажется, если есть кэш. У MSP430 с FRAM ожидание возникает только при промахе кэша, а ОЗУ и периферия всегда работают без него. По даташиту FR2433 на 16 МГц ток — 1000 мкА при 100 % попаданий в кэш и 3047 мкА при 0 %: код с короткими циклами работает быстрее и экономнее.
Источники
- Texas Instruments. MSP430FR4xx and MSP430FR2xx Family User's Guide (SLAU445I, revised March 2019) — разд. 6.5 — генератор тактов ожидания для FRAM, биты NWAITS в FRCTL0; при повышении частоты сначала увеличить NWAITS, при понижении — сначала снизить частоту; нарушение вызывает сброс PUC; после сброса ожидания нет
- Texas Instruments. MSP430FR2433 Mixed-Signal Microcontroller (SLASE59F, revised December 2019) — разд. 5.3 — до 8 МГц без тактов ожидания, до 16 МГц с одним; такты ожидания только при промахе кэша FRAM, ОЗУ и периферия — без ожидания; ток на 16 МГц 1000 мкА при 100 % попаданий в кэш и 3047 мкА при 0 %
- Texas Instruments. MSP430FR235x, MSP430FR215x Mixed-Signal Microcontrollers (SLASEC4D, revised December 2019) — до 8 МГц без ожидания, до 16 МГц с одним тактом, до 24 МГц с двумя
Нашли ошибку?
Смотрите также
- MSP430 с FRAMFR2xx, FR4xx, FR5xx, FR6xx: память, частота, токи, режимы LPMx.5, выбор
- FRAMЭнергонезависимая память с записью как у ОЗУ: ресурс, ECC, применение
- Такты ожидания флеш-памяти STM32LATENCY в FLASH_ACR по частоте и питанию, таблица и код
- Конвейер командPipeline: выборка следующей команды во время исполнения