Существуют ли разные адресные пространства для ОЗУ и ПЗУ в типичном микроконтроллере? [закрыто]

Если микроконтроллер имеет 16-битное адресное пространство от 0000H до FFFFH, будут ли ОЗУ, регистры ввода-вывода, ввод-вывод с отображением памяти и ПЗУ (флэш-память/EEPROM) совместно использовать одно и то же адресное пространство линейно, или будет отдельное адресное пространство для Только ПЗУ (например, от 0000H до 1FFFH), или это зависит от производителя?

Думаю, я прочитал много документов и запутался в этом. Пожалуйста помоги.

Лучше всего, если вы выберете конкретное устройство, потом почитаете даташит, потом спросите здесь, если что непонятно.
Как правило, будут разные несмежные пространства из-за ограничений декодирования адресов и различий в размерах устройств.
Это полностью зависит от устройства. Для ПОС да; АРМ, нет. И так далее.
Я бы поставил под сомнение существование типичного микроконтроллера
@ pjc50 вы не можете непрерывно отображать три устройства разного размера, даже если у вас есть ARM. Возможно, приложение будет видеть непрерывные адреса из-за MMU, но адреса HW не могут быть непрерывными для diff. размеры
@ClaudioAviChami Если декодер адреса выполняет полное вычитание вместо того, чтобы просто проверять старшие биты адреса, вы можете это сделать. Но и без этого можно, например: 128кбайт по адресу 0x00000, 64кбайт по адресу 0x20000, 16кбайт по адресу 0x30000.
@ClaudioAviChami - наличие общего адресного пространства не требует наличия непрерывного. По сути, это означает, что можно использовать одни и те же методы доступа на программном уровне (как минимум чтение).
Ваши первые 12 слов определяют ситуацию, когда все должно быть отображено в памяти в одно и то же 16-битное адресное пространство. Насколько тонко это разделено, это всего лишь вопрос того, сколько логики вы хотите вложить. Apple II довольно хорошо разделил свое пространство, несмотря на его известное низкое количество чипов, поэтому он смог получить 48 КБ ОЗУ (включая 1-9 КБ дисплея). буфер), 2 КБ ввода-вывода, 2 КБ банковской памяти и 12 КБ ПЗУ.

Ответы (2)

В этом, собственно, и заключается ключевое различие между "фон-неймановской" и "гарвардской" архитектурами. Первый использует единое адресное пространство для всего, а второй имеет отдельные адресные пространства для инструкций (обычно ПЗУ) и данных (обычно ОЗУ).

Вы можете получить микроконтроллеры с любой архитектурой. Некоторые реализуют гибрид двух.

Это был поразительный момент! Но как именно будет гибрид из двух? Немного больше информации, пожалуйста..?
Некоторые архитектуры (особенно 8080 и производные) используют отдельные адресные пространства для ввода-вывода.
Например, 8051 — это машина Гарварда, но в ней есть инструкции, которые позволяют перемещать данные из пространства инструкций. Также, если к нему подключить внешнюю память, то легко "наложить" адресные пространства друг на друга, как частично, так и полностью.
Части ARM Cortex-M имеют единое адресное пространство, но в целях оптимизации скорости разные механизмы реализации и внутренние пути данных для разных типов хранилищ. Можно утверждать, что то же самое справедливо для любой современной большой системы с отдельными кэшами инструкций и данных.
Примером «гибридной» гарвардской архитектуры является PIC24. Он имеет функцию «PSV» (видимость программного пространства), которая позволяет частично сопоставлять программную память с верхней 32-килобайтной областью SRAM. Затем его можно использовать как ПЗУ. Хотя шина SRAM имеет ширину всего 16 бит, но, учитывая типичный размер ОЗУ этих устройств, это не представляет проблемы.
Я думаю, что самым простым способом описать гибридную архитектуру было бы сказать, что существует область памяти кода с быстрой шиной, соединяющей ее с логикой обработки инструкций, и другая область памяти данных с быстрой шиной, соединяющей ее с данными. логике обработки, но есть и другие, возможно, более медленные пути связи, позволяющие данным перемещаться другими путями (чаще всего между памятью кода и блоком обработки данных или — в некоторых сценариях кэширования — из памяти данных в код). кэш памяти).

Дэйв уже упоминал о различиях между гарвардской архитектурой и архитектурой фон Неймана .

Примером архитектуры фон Неймана, в которой имеется только одно адресное пространство для ОЗУ, флэш-памяти, ввода-вывода и EEPROM, является семейство HCS08 от Freescale. Вот карта памяти одного из его микроконтроллеров с 128 КБ флэш-памяти и 4 КБ ОЗУ:

введите описание изображения здесь

Обратите внимание, что на этом рисунке адрес памяти 0 находится вверху. Это также не в масштабе; адрес 0x8000 (граница 32K) должен быть ровно посередине.

Этот микроконтроллер имеет прямую страницу (иногда называемую страницей 0), т.е. 256 адресов, к которым можно получить доступ только с 8-битным адресом (что уменьшает размер инструкции на байт). Первые 128 адресов, от 0x0000 до 0x007F, используются для сопоставления регистров ввода-вывода. Затем следуют 5 КБ ОЗУ, от адреса 0x0080 до 0x17FF. Таким образом, первые 128 байт ОЗУ также размещаются на странице 0. Затем следуют 256 дополнительных адресов, зарезервированных для дополнительных регистров ввода-вывода с адресами от 0x1800 до 0x18FF, затем больше ОЗУ, затем первый сегмент флэш-памяти, затем 2 КБ EEPROM. .

Затем дополнительные страницы Flash. Обратите внимание, что у них тоже есть номера страниц (PPAGE). Помните, я говорил, что у этого микроконтроллера 128 КБ флэш-памяти? Как вы поместите это в 64 КБ адресного пространства? С помощью постраничной адресации. Существует «окно подкачки» с адресами от 0x8000 до 0xBFFF (16 КБ), в которое может быть отображена одна из восьми 16 КБ страниц Flash (всего 128 КБ). Какой из них контролируется пейджинговым регистром. Когда компилятор генерирует переходы или вызовы подпрограмм, он знает, что нужно обновить регистр подкачки по мере необходимости.

К некоторым страницам также можно обращаться напрямую (страницы 0, 1 и 3) без использования страничного регистра. Это необходимо для таких вещей, как обработчики прерываний, которые могут возникнуть в любое время. Общие подпрограммы, такие как библиотека C, также являются хорошими кандидатами на эти страницы.

Не показаны векторы сброса и прерывания, которые начинаются с верхней части памяти (0xFFFF) и спускаются вниз.

Машины с чистой гарвардской архитектурой имеют гораздо более простые схемы: одно адресное пространство для флэш-памяти, начинающееся с 0x0000, другое для ОЗУ, начинающееся также с 0x0000, и третье для портов ввода-вывода, начинающееся с 0x0000 (иногда ОЗУ и ввод-вывод объединяются в то же пространство, известное как ввод-вывод с отображением памяти). Если используются порты ввода-вывода, доступ к ним осуществляется с помощью специальных инструкций, таких как IN и OUT.

Поскольку это отдельные пространства, они могут иметь разную ширину. Например, микроконтроллер PIC16 от Microchip имеет 14-битную ширину инструкции и 8-битную шину ОЗУ и ввода-вывода.

В чем преимущество каждого? Что ж, с гарвардской архитектурой вы можете иметь 64 КБ пространства для программ, 64 КБ пространства ОЗУ и 64 КБ пространства ввода-вывода, и все это с использованием 16-битных адресов. Так что это хорошо для 8 и 16-битных микроконтроллеров. Поскольку программа находится во Flash, ее нельзя изменить.

С архитектурами фон Неймана вы можете запускать программы как из Flash (или ROM), так и из RAM. Вот как работают ПК: при первом запуске они загружаются с использованием ПЗУ BIOS (базовой системы ввода/вывода), которое считывает ОС с жесткого диска и загружает ее в ОЗУ. С этого момента программы выполняются из оперативной памяти.

Существуют также процессоры с « модифицированной гарвардской архитектурой », которые позволяют рассматривать часть пространства команд так, как если бы это была оперативная память «только для чтения». Обычно это делается с помощью окна подкачки, похожего на то, что было на диаграмме HCS08 ранее. В PIC24 эта функция называется Program Space Visibility (PSV).

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