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

Фон-неймановская архитектура

В фон-неймановской архитектуре команды и данные лежат в одной памяти и передаются по одним шинам. Так устроены MSP430 и ядра Cortex-M с точки зрения адресного пространства, а 8-битные AVR — гарвардские.

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

Фон-неймановская архитектура (von Neumann architecture) — устройство вычислительной машины, в котором команды программы и данные хранятся в одной памяти с общим адресным пространством и передаются по одним и тем же шинам. Процессор не различает, где код, а где данные: всё определяется тем, как он обращается к адресу.

Пример среди микроконтроллеров — MSP430. По руководству TI SLAU144K его процессор, память и периферия связаны общей шиной адреса MAB и шиной данных MDB, а в одном адресном пространстве лежат регистры периферии, ОЗУ, флеш-память и векторы прерываний — карта памяти разобрана в статье «Архитектура MSP430». Отсюда практические следствия:

  • программа может выполняться из ОЗУ — TI указывает, что ОЗУ годится и для кода, и для данных;
  • константы и таблицы во флеш-памяти читаются обычными командами, без копирования;
  • одна и та же команда с одним режимом адресации работает с любой областью памяти.

Противоположность — гарвардская архитектура, где у программы и данных отдельные памяти и шины. Так устроены 8-битные AVR: Microchip объясняет выбор тем, что следующая команда выбирается из памяти программ одновременно с выполнением текущей. Цена — для чтения констант из флеш-памяти AVR нужна отдельная команда LPM.

У общей шины есть своя цена: выборка команды и обращение к данным делят одну шину и не могут идти одновременно. Ядра вроде Cortex-M3 совмещают оба подхода: адресное пространство у них общее, а шины команд и данных раздельные — подробнее в статье о гарвардской архитектуре. Где в памяти лежит стек и как его настроить — тоже вопрос карты памяти конкретного микроконтроллера.

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

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

В фон-неймановской команды и данные хранятся в одном адресном пространстве и передаются по одним шинам. В гарвардской у программы и данных отдельные памяти и шины — так у AVR, где Microchip объясняет это стремлением выбирать следующую команду во время выполнения текущей.

Можно ли выполнять программу из ОЗУ в MSP430?

Да. TI прямо пишет, что ОЗУ MSP430 можно использовать и для кода, и для данных, — это следствие общей памяти. На AVR так нельзя: процессор выбирает команды только из памяти программ.

Как прочитать таблицу констант из флеш-памяти?

На MSP430 — теми же командами, что и ОЗУ: TI указывает, что таблицы во флеш-памяти используются без копирования в ОЗУ. На гарвардском AVR для чтения памяти программ нужна отдельная команда LPM, а в языке C — специальные функции доступа.

Источники

  1. Texas Instruments. MSP430F2xx, MSP430G2xx Family User's Guide (SLAU144K, revised August 2022) — разд. 1.1 и 1.4: процессор, память и периферия на общих шинах адреса MAB и данных MDB; одно адресное пространство для регистров периферии, ОЗУ и флеш-памяти; ОЗУ годится для кода и данных, таблицы во флеш-памяти читаются без копирования
  2. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B, 2020) — разд. 7: AVR использует гарвардскую архитектуру — раздельные память и шины для программы и данных, выборка следующей команды совмещена с выполнением текущей

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