Введение

Компьютерная архитектура, в которой код и данные используют отдельные шины.

Архитектурная программа в Гарвардском университете.

Архитектура Гарварда – это компьютерная архитектура с раздельными путями хранения и передачи сигналов для инструкций и данных. Она часто противопоставляется архитектуре фон Неймана, в которой инструкции программы и данные используют общую память и пути передачи. Эта архитектура часто применяется в системах обработки в реальном времени или в приложениях с низким энергопотреблением. Считается, что термин возник в связи с релейным компьютером Harvard Mark I, который хранил инструкции на перфоленте (шириной 24 бита) и данные в электромеханических счетчиках. В этих ранних машинах хранение данных полностью находилось внутри центрального процессора, и доступа к хранилищу инструкций как к данным не предоставлялось. Программы загружались оператором; процессор не мог инициализироваться самостоятельно. Однако в единственной рецензируемой опубликованной статье на эту тему – «Миф об архитектуре Гарварда», опубликованной в «Анналах истории вычислительной техники» IEEE, автор демонстрирует, что:

«Термин «архитектура Гарварда» был придуман десятилетиями позже, в контексте разработки микроконтроллеров» и только «ретроспективно применен к машинам Гарварда, а затем – к RISC-микропроцессорам с разделенными кэшами»;

«Так называемые архитектуры «Гарварда» и «фон Неймана» часто представляются как дихотомия, но различные устройства, классифицируемые как первые, имеют больше общего со вторыми, чем друг с другом»;

«Короче говоря, [архитектура Гарварда] не является архитектурой и не произошла от разработок в Гарварде». Современные процессоры кажутся пользователю системами с архитектурой фон Неймана, где программный код хранится в той же основной памяти, что и данные. Однако, в целях повышения производительности, внутренне и, как правило, невидимо для пользователя, большинство конструкций имеют отдельные кэши процессора для инструкций и данных, с отдельными путями доступа к процессору для каждого из них. Это одна из форм так называемой модифицированной архитектуры Гарварда. Исторически и традиционно архитектура Гарварда разделена на два адресных пространства, но использование трех – то есть двух дополнительных (и доступных в каждом цикле) – также встречается, хотя и редко.

Детали памяти

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

Контраст с архитектурой фон Неймана

В системе с чистой архитектурой фон Неймана инструкции и данные хранятся в одной и той же памяти, поэтому инструкции извлекаются по тому же каналу, который используется для извлечения данных. Это означает, что процессор не может одновременно считывать инструкцию и читать или записывать данные в память или из неё. В компьютере с архитектурой Гарварда процессор может одновременно считывать инструкцию и выполнять доступ к данным в памяти, даже без использования кэша. Таким образом, компьютер с архитектурой Гарварда может быть быстрее при той же сложности схемы, поскольку извлечение инструкций и доступ к данным не конфликтуют за общий канал памяти. Кроме того, в машине с архитектурой Гарварда существуют отдельные пространства адресов для кода и данных: нулевой адрес инструкции не совпадает с нулевым адресом данных. Нулевой адрес инструкции может указывать на 24-битное значение, в то время как нулевой адрес данных может указывать на 8-битный байт, который не является частью этого 24-битного значения.

Контраст с модифицированной архитектурой Гарварда

Модифицированная машина с гарвардской архитектурой очень похожа на машину с гарвардской архитектурой, но ослабляет строгое разделение между инструкциями и данными, при этом позволяя процессору одновременно обращаться к двум (или более) шинам памяти. Наиболее распространенная модификация включает отдельные кэши инструкций и данных, опирающиеся на общее адресное пространство. Пока процессор выполняет код из кэша, он функционирует как чисто гарвардская машина. При обращении к основной памяти он ведет себя как машина фон Неймана (где код может перемещаться как данные, что является мощным приемом). Эта модификация широко распространена в современных процессорах, таких как архитектуры ARM, Power ISA и процессоры x86. Иногда ее неточно называют гарвардской архитектурой, упуская из виду тот факт, что она фактически "модифицирована". Другая модификация обеспечивает канал связи между памятью инструкций (например, ПЗУ или флэш-памятью) и процессором, позволяя рассматривать слова из памяти инструкций как данные только для чтения. Эта техника используется в некоторых микроконтроллерах, включая Atmel AVR. Это позволяет обращаться к постоянным данным, таким как текстовые строки или таблицы функций, без предварительного копирования в память данных, сохраняя дефицитную (и энергоемкую) память данных для переменных, доступных для чтения и записи. Для чтения данных из памяти инструкций предусмотрены специальные инструкции машинного кода, либо доступ к памяти инструкций можно получить через периферийный интерфейс. (Это отличается от инструкций, которые сами содержат постоянные данные, хотя для отдельных констант эти два механизма могут быть взаимозаменяемыми.)

Скорость

В последние годы скорость процессора значительно возросла по сравнению со скоростью доступа к основной памяти. Необходимо принимать меры для уменьшения количества обращений к основной памяти, чтобы поддерживать производительность. Например, если для выполнения каждой инструкции процессору требуется обращение к памяти, увеличение скорости процессора не принесет пользы – эта проблема называется "узким местом, связанным с памятью". Создать чрезвычайно быструю память возможно, но это целесообразно лишь для небольших объемов из-за стоимости, энергопотребления и сложности разводки сигналов. Решением является использование небольшого объема очень быстрой памяти, известной как кэш процессора, который хранит недавно использованные данные. Пока необходимые процессору данные находятся в кэше, производительность значительно выше, чем при обращении к основной памяти. Однако кэш все еще может быть ограничен хранением повторяющихся программ или данных, имеет ограничение по объему хранения и другие потенциальные недостатки.

Внутренний дизайн против внешнего

Современные высокопроизводительные конструкции процессоров сочетают в себе элементы архитектур Гарварда и фон Неймана. Особенно распространена версия "раздельного кэша" модифицированной архитектуры Гарварда. Кэш-память процессора разделена на кэш инструкций и кэш данных. Архитектура Гарварда используется при обращении процессора к кэшу. Однако, при промахе кэша данные извлекаются из основной памяти, которая формально не разделена на отдельные секции для инструкций и данных, хотя она может иметь отдельные контроллеры памяти для одновременного доступа к оперативной памяти, ПЗУ и (NOR) флэш-памяти. Таким образом, хотя архитектура фон Неймана проявляется в некоторых случаях, например, когда данные и код проходят через один и тот же контроллер памяти, аппаратная реализация выигрывает в эффективности благодаря архитектуре Гарварда при доступе к кэшу и, по крайней мере, при некоторых обращениях к основной памяти. Кроме того, процессоры часто оснащены буферами записи, позволяющими им продолжать работу после записи в некэшируемые области. Природа памяти, характерная для архитектуры фон Неймана, становится очевидной, когда процессор записывает инструкции как данные, и программное обеспечение должно обеспечивать синхронизацию кэшей (инструкций и данных) и буфера записи перед попыткой выполнения только что записанных инструкций.

Современные применения архитектуры Гарварда

Основным преимуществом чистой гарвардской архитектуры — одновременный доступ к нескольким системам памяти — стало меньше благодаря модифицированным гарвардским процессорам, использующим современные кэш-системы ЦП. Машины с относительно чистой гарвардской архитектурой в основном используются в приложениях, где компромиссы, такие как снижение стоимости и энергопотребления за счет отказа от кэшей, перевешивают недостатки программирования, связанные с наличием отдельных адресных пространств для кода и данных. Процессоры цифровой обработки сигналов (DSP) обычно выполняют небольшие, высокооптимизированные алгоритмы обработки аудио или видео, используя гарвардскую архитектуру. Они избегают использования кэшей, поскольку их поведение должно быть предельно воспроизводимым. Сложности, связанные с работой с несколькими адресными пространствами, менее важны, чем скорость выполнения. Следовательно, некоторые DSP имеют несколько банков памяти данных в отдельных адресных пространствах для упрощения SIMD и VLIW обработки. Например, процессоры Texas Instruments TMS320 C55x оснащены несколькими параллельными шинами данных (двумя для записи, тремя для чтения) и одной шиной инструкций. Микроконтроллеры характеризуются небольшим объемом программной (флэш-памяти) и оперативной (SRAM) памяти и используют гарвардскую архитектуру для ускорения обработки за счет одновременного выполнения инструкций и доступа к данным. Раздельное хранение означает, что память программ и данных может иметь разную разрядность, например, 16-битные инструкции и 8-битные данные. Это также позволяет выполнять предварительную выборку инструкций параллельно с другими операциями. Примеры включают PIC от Microchip Technology, Inc. и AVR от Atmel Corp (теперь часть Microchip Technology). Даже в этих случаях обычно используются специальные инструкции для доступа к памяти программ, как если бы это были данные, например, для таблиц только для чтения или для перепрограммирования; эти процессоры являются модифицированными гарвардскими процессорами.