Перейти к содержанию

Такт ожидания (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 %: код с короткими циклами работает быстрее и экономнее.

Источники

  1. Texas Instruments. MSP430FR4xx and MSP430FR2xx Family User's Guide (SLAU445I, revised March 2019) — разд. 6.5 — генератор тактов ожидания для FRAM, биты NWAITS в FRCTL0; при повышении частоты сначала увеличить NWAITS, при понижении — сначала снизить частоту; нарушение вызывает сброс PUC; после сброса ожидания нет
  2. Texas Instruments. MSP430FR2433 Mixed-Signal Microcontroller (SLASE59F, revised December 2019) — разд. 5.3 — до 8 МГц без тактов ожидания, до 16 МГц с одним; такты ожидания только при промахе кэша FRAM, ОЗУ и периферия — без ожидания; ток на 16 МГц 1000 мкА при 100 % попаданий в кэш и 3047 мкА при 0 %
  3. Texas Instruments. MSP430FR235x, MSP430FR215x Mixed-Signal Microcontrollers (SLASEC4D, revised December 2019) — до 8 МГц без ожидания, до 16 МГц с одним тактом, до 24 МГц с двумя

Нашли ошибку?