Реклама:

До настоящего момента мы не останавливались подробно на том, как происходит выбор микросхемы памяти или устройства ввода-вывода. Рассмотрим простой 16-разрядный встроенный компьютер, состоящий из центрального процессора, памяти EPROM объемом 2 К х 8 байт для хранения программы, ОЗУ объемом 2 К х 8 байт для хранения данных и микросхемы РЮ. Такая небольшая система может встраиваться в дешевую игрушку или простой прибор. Вместо EPROM может использоваться обычное ПЗУ.

К микросхеме РЮ можно обратиться одним из двух способов: как к устройству ввода-вывода или как к части памяти. Если микросхема нам нужна в качестве устройства ввода-вывода, мы должны обратиться к ней, использовав внешнюю линию шины. Другой подход называется вводом-выводом с отображением на память (memory-mapped I/O). В этом случае микросхеме требуется назначить 4 байта памяти для трех портов и регистра управления. Наш выбор в какой-то степени произволен. Рассмотрим ввод-вывод с отображением на память, поскольку этот подход наглядно иллюстрирует некоторые интересные проблемы сопряжения.

Памяти EPROM требуется 2 Кбайт адресного пространства, ОЗУ - также 2 Кбайт, микросхеме РЮ - 4 байта. Поскольку в нашем примере адресное пространство составляет 64 К адресов, мы должны выбрать, где поместить указанные три устройства. Один из возможных вариантов показан на рис. 3.57. EPROM занимает адреса до 2 К, ОЗУ - от 32 К до 34 К, РЮ - 4 старших байта адресного пространства, от адресов 65 532 до 65 535. С точки зрения программиста, не важно, какие именно адреса использовать, однако для сопряжения это имеет большое значение. Если бы мы обращались к РЮ через пространство ввода-вывода, нам не потребовались бы адреса памяти (зато понадобились бы четыре адреса пространства ввода-вывода).

Декодирование адреса

Рис. 3.57. Расположение EPROM, ОЗУ и РЮ в пространстве из 64К адресов

При таком распределении адресов к EPROM нужно обращаться с помощью 16-разрядного адреса памяти ОООООххххххххххг (в двоичной системе). Другими словами, любой адрес, у которого пять старших битов равны 0, попадает в область памяти до 2 К, то есть в EPROM. Таким образом, сигнал выбора EPROM можно связать с 5-разрядным компаратором, у которого один из входов всегда будет соединен с 00000.

Чтобы достичь того же результата, лучше было бы использовать вентиль ИЛИ с пятью входами, связанными с адресными линиями от Аи до А15. Выходной сигнал может быть равен 0 тогда и только тогда, когда все пять линий равны 0. В этом случае устанавливается сигнал С8. К сожалению, в стандартных сериях МИС не существует вентилей ИЛИ с пятью входами. Однако мы можем использовать вентиль НЕ-ИЛИ с восемью входами. Заземлив три входа и инвертировав выход, мы можем получить нужный нам сигнал (рис. 3.58, а).

Декодирование адреса

Рис. 3.58. Полное декодирование адреса (а); частичное декодирование адреса (б)

Схемы МИС стоят очень дешево, поэтому не слишком эффективное применение одной из них вполне допустимо. По соглашению неиспользуемые входы на схемах не показаны.

Тот же принцип можно применить и для ОЗУ. Однако ОЗУ должно отзываться на бинарные адреса типа ЮОООххххххххххх, поэтому необходим дополнительный инвертор (он показан на схеме). Декодирование адреса микросхемы РЮ несколько сложнее, поскольку к ней происходит обращение с помощью четырех адресов типа 1111111 111 111 1хх. Один из возможных вариантов схемы, которая устанавливает сигнал CS только в том случае, если на адресной шине появляется адрес данного типа, показан на рисунке. Здесь используются два вентиля НЕ-И с восемью входами, которые соединяются с вентилем ИЛИ. Чтобы сконструировать схему декодирования адреса, изображенную на рис. 3.58, я, требуется шесть микросхем МИС: четыре микросхемы с восемью входами, вентиль ИЛИ и микросхема с тремя инверторами.

Если компьютер состоит только из центрального процессора, двух микросхем памяти и РЮ, можно значительно упростить декодирование адреса. Дело в том, что у всех адресов EPROM (и только у EPROM) старший бит А15 всегда равен 0. Следовательно, мы можем просто связать сигнал CS с линией А15, как показано на рис. 3.58, б.

Теперь решение разместить ОЗУ с адреса 8000Н кажется не таким уж произвольным. Отметим, что в ОЗУ попадают адреса типа поэтому для декодирования достаточно 2 бит. Точно так же любой адрес, начинающийся с И, является адресом РЮ. Полная логика декодирования состоит из двух вентилей НЕ-И и инвертора. Поскольку инвертор можно сделать из вентиля НЕ-И, связав два входа вместе, одного счетверенного вентиля НЕ-И более чем достаточно.

Логика, которую иллюстрирует рис. 3.58, б, называется частичным декодированием адреса, поскольку в данном случае полные адреса не используются. При таком декодировании считывание из адресов 0001000000000000, 0001100000000000 и 0010000000000000 дает один и тот же результат. В действительности любой адрес в нижней половине адресного пространства означает выбор EPROM. Поскольку дополнительные адреса не используются, в этом нет ничего ужасного, но при разработке компьютера, который в будущем предполагается расширять (в случае с игрушками это маловероятно), следует избегать частичного декодирования, поскольку оно значительно ограничивает адресное пространство.

Можно применять и другую технологию декодирования адреса - с использованием декодера (см. рис. 3.12). Связав три входа с тремя адресными линиями самых старших разрядов, мы получаем восемь выходов, которые соответствуют адресам в первом отрезке 8 К, втором отрезке 8 К и т. д. В компьютере, содержащем 8 микросхем ОЗУ по 8 К х 8 байт, полное декодирование осуществляет одна такая микросхема. Если компьютер содержит 8 микросхем памяти по 2 К х 8 байт, для декодирования также достаточно одного декодера при условии, что каждая микросхема памяти занимает отдельную область адресного пространства в 8 К. (Вспомните наше замечание о том, что расположение микросхем памяти и устройств ввода-вывода внутри адресного пространства имеет значение.)

Микросхемы ввода-вывода || Оглавление || Краткое содержание главы 3