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

Гарвардская архитектура

Гарвардская архитектура — организация процессора, в которой команды и данные хранятся и передаются раздельно. Благодаря этому процессор может одновременно читать следующую команду и работать с данными; так устроены, например, AVR и 8051.

Обновлено Редакция GAW

Гарвардская архитектура (Harvard architecture) — организация процессора, в которой память команд и память данных разделены и подключены к ядру разными шинами. Противоположная схема — архитектура фон Неймана, где команды и данные лежат в общей памяти и идут по одной шине. Раздельные пути позволяют процессору одновременно выбирать следующую команду и выполнять текущую, работая с данными.

Примеры

  • AVR. Microchip прямо пишет, что AVR использует гарвардскую архитектуру с раздельными памятью и шинами для программы и данных (DS40002061B, гл. 7). Команды выполняются с одноуровневым конвейером: пока выполняется одна, следующая уже выбирается из флеш-памяти, и большинство команд выполняются за такт — до 1 MIPS на 1 МГц. Подробнее — в статье об архитектуре AVR.
  • 8051. Память программ и память данных разнесены по разным адресным пространствам: программа — до 64 КБ, внутренние данные — 128 или 256 байтов. См. статью об архитектуре 8051.
  • Cortex-M3. У ядра три шины: I-Code для выборки команд из области кода, D-Code для данных из неё же и System для SRAM и периферии. Команды и данные идут по разным шинам одновременно, но адресное пространство общее — это модифицированная гарвардская схема. Подробнее — в статье об архитектуре Cortex-M3.

Что это значит для программиста

На AVR и 8051 константы во флеш-памяти не читаются обычным указателем — для этого есть отдельные команды (LPM у AVR, MOVC у 8051) и в C — атрибут PROGMEM и функции pgm_read_*. На Cortex-M такой проблемы нет: константа во флеш-памяти читается той же командой, что и переменная в ОЗУ. Энергонезависимые данные, которые программа меняет сама, хранят в EEPROM — у AVR это ещё одно отдельное адресное пространство.

Частые вопросы

Чем гарвардская архитектура отличается от архитектуры фон Неймана?

В архитектуре фон Неймана команды и данные лежат в одной памяти и идут по одной шине, поэтому процессор не может одновременно выбирать команду и читать данные. В гарвардской у них раздельные пути, и выборка следующей команды идёт параллельно с выполнением текущей. AVR и 8051 устроены по гарвардской схеме.

Почему константы в AVR хранят с PROGMEM?

У AVR память программ и память данных — разные адресные пространства. Обычный указатель в C адресует память данных, поэтому константа, оставленная во флеш-памяти, читается специальными командами и функциями вроде pgm_read_byte. Без PROGMEM avr-gcc копирует инициализированные константы в ОЗУ при старте, расходуя его.

Cortex-M — это гарвардская архитектура?

По шинам — да: у Cortex-M3 команды из области кода выбираются по шине I-Code, данные из неё же — по D-Code, остальное пространство обслуживает шина System. Но адресное пространство у ядра общее, и одна команда LDR читает и константу из флеш-памяти, и переменную из ОЗУ. Поэтому его называют модифицированной гарвардской архитектурой.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 7: гарвардская архитектура с раздельными памятью и шинами для программы и данных, одноуровневый конвейер, до 1 MIPS на МГц
  2. Arm. Cortex-M3 Processor Technical Reference Manual, revision r2p1 (ARM 100165), 2016 — разд. 2.3 — шины I-Code, D-Code и System
  3. Intel. MCS 51 Microcontroller Family User's Manual (272383-002, февраль 1994) — раздельные адресные пространства памяти программ и данных
  4. AVR-LibC User Manual: Data in Program Space — PROGMEM и pgm_read_byte; без PROGMEM инициализированные данные копируются в ОЗУ при старте

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