Рис. 5.2.
Распределением памяти называют разбиение адресного пространства на несколько областей, каждая из которых выделена для размещения ячеек какого-либо определенного элемента системы: ОЗУ, ПЗУ или внешних устройств. Часто его изображают в форме рисунка. Распределение адресного пространства, соответствующее схеме, приведенной на рис. 5.1, изображено на рис. 5.3.
Рис. 5.3.
Обычно адресное пространство распределяют одновременно с проектированием принципиальной схемы устройства (созданием дешифраторов адреса для каждого подключаемого к системной шине устройства). Начнем распределение адресного пространства с выделения диапазона адресов для ПЗУ.
Микропроцессоры после включения питания и выполнения процедуры сброса всегда начинают выполнение программы с определенного адреса, чаще всего нулевого. Однако есть и исключения. Например, процессоры, на основе которых строятся универсальные компьютеры IBM PC или Macintosh, стартуют не с нулевого адреса. Программа или се загрузчик должны храниться в памяти, которая не стирается при выключении питания, т. е. в ПЗУ. Таким образом, адрес, записываемый в счетчик команд процессора после сброса, обязательно должен попадать в диапазон адресов, выделенных ПЗУ.
Выберем для построения микропроцессорной системы микросхему ПЗУ объемом 2 Кбайт, как это показано на рис. 5.1. При построении операционного блока мы договорились, что процессор после сброса начинает работу с нулевого адреса, поэтому разместим ПЗУ в адресном пространстве, начиная с нулевого адреса. Для того чтобы нулевая ячейка ПЗУ оказалась расположенной по нулевому адресу адресного пространства микропроцессора, старшие разряды шины адреса E разрядов, начиная с разряда 11) должны быть равны 0.
Так как в микросхеме ПЗУ уже имеются одиннадцать адресных выводов, то при построении схемы необходимо дополнительно декодировать старшие пять разрядов адреса (определить, чтобы они были равны 0). Это выполняется при помощи внешнего дешифратора адреса, который в данном случае вырождается в 5-входовую схему «ИЛИ». При использовании дешифратора адреса обращение микропроцессора за пределы нижней области 2 Кбайт не приведет к чтению ячеек ПЗУ, т. к. на входе выбора кристалла CS уровень напряжения останется высоким (неактивным).
Теперь подключим микросхему ОЗУ. Для примера выберем микросхему объемом 8 Кбайт. Выбор любой из ячеек этой микросхемы возможен при помощи 13-разрядного адреса, поэтому необходимо дополнительно декодировать сигналы трех старших линий 16-разрядной шины адреса. Так как начальные ячейки памяти адресного пространства уже заняты ПЗУ, то их использовать нельзя. Им соответствует значение старших разрядов адресной шины 000. Выберем для адресации ОЗУ комбинацию сигналов 001 и используем уже известные нам принципы построения схемы по произвольной таблице истинности. Дешифратор адреса выродится в данном случае в 3-входовую схему «И-НЕ» с двумя инверторами на входе. Схема дешифратора адреса ОЗУ приведена на рис. 5.1. Этот дешифратор адреса обеспечивает нулевой уровень сигнала на входе CS микросхемы ОЗУ только при комбинации старших битов адреса 001. Обратите внимание: т. к. объем ПЗУ меньше объема ОЗУ, то между областями адресов ПЗУ и ОЗУ образовалось пустое пространство неиспользуемых адресов памяти.
Так как все микропроцессоры предназначены для обработки данных, поступающих извне, то в любой микропроцессорной системе должны присутствовать порты ввода-вывода. Будем считать, что порт ввода-вывода отображается в адресное пространство микропроцессорного устройства как одиночная ячейка памяти, поэтому можно выбрать любой свободный адрес. Проще всего построить дешифратор числа FFFFh. В этом случае он превращается в обычную 16-входовую схему «И-НЕ», поэтому и выберем данный адрес для размещения порта ввода-вывода.
Известно, что размер адресного пространства определяется разрядностью счетчика команд микропроцессора. Достаточно часто при развитии микропроцессорной системы возможности адресного пространства исчерпываются. В таком случае приходится прибегать к методам расширения адресного пространства.