Связаны ли адреса ввода-вывода в памяти и адреса ОЗУ? - PullRequest
0 голосов
/ 14 сентября 2018

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

Если предположить, что система подключает 4 ГБ ОЗУ с некоторыми подключенными периферийными устройствами, то единственное пространство ОЗУ, которое я могу использовать, это 4 ГБ минус объем отображаемой памяти?

Например, GPIO отображается по адресу 0x500, тогда нет возможности использовать адрес RAM 0x500? Я полагаю, что это возможно (надеюсь?), Если MMU существует и включен, но в остальном я понятия не имею.

1 Ответ

0 голосов
/ 14 сентября 2018

Вы помечали руку и другие процессоры не обязательно разные.

Обычно некоторый процент адресного пространства выделяется для ввода-вывода с отображением в памяти, gpio, uart, nvic и т. Д. С помощью arm у вас будет некоторое внутреннее адресное пространство, которое не доходит до шины axi / amba(ses) для производителя микросхем.

Так что, если вы хотите использовать консоль с 32-битной адресной шиной, то подключение 4 ГБ памяти является пустой тратой времени.Вы, конечно, можете подключить больше (у меня есть arm11 с 24 ГБ)), но это не линейно, вы должны иметь адресную схему, такую ​​как PCIe hsa, где вы указываете окно адресного пространства, в которое вы можете попасть в адресное пространство за этим (снова подумайте о PCIe, но не о иллюзии, которую они пытаются представить в x86).

Но вы слишком усложняете это.Особенно с ARM, где это все задокументировано.У вас есть ядро, вы являетесь поставщиком микросхем, вы покупаете это ядро, у него есть адресная шина (см. Документацию amba / axi), вы подключаетесь к этой адресной шине, если это Cortex-M, у них есть некоторые рекомендации относительно того, куда поместить оперативную память.и rom и держаться подальше от здесь.Для полноразмерных оружий это, в основном, честная игра, вы предоставляете базовый адрес для ядра, в котором отображаются определенные периферийные устройства (например, nvic, таймеры и т. Д.), А не как cortex-m, где базовый адрес таймера синкстика жестко задан в дизайне,вы передаете ядру базовый адрес в адресное пространство, в котором хранятся внутренние элементы (PERIPHBASE или какое-то другое имя сигнала / шины).Помимо того, что производитель микросхем предпочитает разделять это адресное пространство, устройство может загружаться, как правило, по одному из двух адресов, но, конечно, вы можете иметь столько уровней адресов, сколько хотите, и для каждого уровня естьпреобразование / перевод в это адресное пространство.Это включает в себя периферийные устройства, память (ram / rom / flash), usb, pcie и т. Д., Адресные пространства и т. Д.

Таким образом, это может быть как компьютер, в котором окно pcie отнимает один или два гигабайта оперативной памяти.то же самое пространство, и вы просто теряете эту память, но в этом случае вы думаете об этом немного неправильно, потому что это разные адресные пространства / слои.Некоторые ПК, 64-битные, доминировали над 32-битными, и хотя 32-битные не совсем мертвые, но теперь мы можем иметь биозы, которые по умолчанию установлены на 64-битные и позволяют окну pcie быть над памятью, вместо того, чтобы вырезать в нем дыру.

Приятная вещь о покупке ядра, такого как arm или mips, которое вы можете в некоторой степени, если не полностью спроектировать адресное пространство, как вам нравится, не нужно ничего согласовывать и т. Д.

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

...