Сколько переключателей нужно? Если хотим выбрать один из восьми элементов, потребуются три переключателя. Три переключателя могут представлять восемь разных значений: 000, 001, 010, 011, 100, 101, 110 и 111.
Итак, вот наши восемь однобитных защелок, три переключателя, лампочка и устройство, которое необходимо поместить между переключателями и лампочкой.
Устройство — это некий корпус с восемью входами сверху и тремя входами слева. Замыкая и размыкая три переключателя, мы можем выбрать, какой из восьми входов должен быть перенаправлен на выход в нижней части корпуса. Этот выход зажигает лампочку.
Так что же это за устройство? Мы уже видели что-то подобное, хотя и не с таким количеством входов. Оно похоже на схему, которую мы использовали в главе 14 в первой модифицированной версии сумматора. В том случае нам нужно было нечто позволяющее выбрать, откуда должен поступать сигнал на вход сумматора: от ряда переключателей или с выхода защелки. Тогда мы назвали устройство селектором «2 на 1». В данном случае нам нужен селектор «8 на 1».
Селектор восьми линий на одну имеет восемь входов для данных (вверху) и три входа для выборки (Select, Sel) (слева). Входы Select позволяют выбрать, сигнал какого входа для данных появится на выходе. Например, если сигналы Select равны 000, то выходной сигнал совпадает с D0. Если входы Select равны 111, то выходной сигнал совпадает с D7. Если входы Select — 101, выходной сигнал совпадает с D5. Приведем таблицу логики для этого селектора.
Селектор «8 на 1» состоит из трех инверторов, восьми четырехвходовых вентилей И и одного восьмивходового вентиля ИЛИ.
Эта схема может показаться довольно запутанной, однако с помощью следующего примера постараюсь убедить вас, что она работает. Допустим, сигналы Sel2 и Sel0 равны 1, а сигнал S1— 0. На входы шестого сверху вентиля И подаются сигналы Sel0, Sel1, Sel2, каждый из которых равен 1. Ни на один другой вентиль И эти три сигнала не подаются, поэтому выход всех остальных вентилей И будет равен 1. Выход шестого вентиля И — 0 при D5, равном 0, или 1 при D5, равном 1. То же касается крайнего справа вентиля ИЛИ. Таким образом, если сигналы для выборки равны 101, выходной сигнал совпадает с сигналом D5.
Давайте еще раз повторим, чего хотим добиться. Мы пытаемся соединить восемь однобитных защелок так, чтобы в них можно было записывать и считывать данные по отдельности, используя один сигнал «Ввод данных» и один сигнал «Вывод данных». Мы уже выяснили, что можно выбрать сигнал «Вывод данных» одной из восьми защелок, используя селектор «8 на 1».
Итак, наша задача наполовину решена. Теперь, когда мы определились с устройством на выходе, давайте займемся входом.
На входе мы имеем сигналы «Данные» и «Запись». Входы «Данные» защелок можно соединить между собой. Однако мы не можем сделать то же самое с сигналами «Запись», поскольку хотим записывать данные отдельно, следовательно, должны подавать один сигнал «Запись» на одну (и только одну!) защелку.
Теперь нужна другая схема, которая немного похожа на селектор «8 на 1», но выполняет прямо противоположное действие. Эта схема называется дешифратор «3 на 8». В главе 11 мы уже видели простой дешифратор данных, когда соединяли переключатели для выбора цвета нашей идеальной кошки.
Дешифратор «3 на 8» имеет восемь выходов. В любой момент все эти выходы равны 0, кроме одного, который выбран входными сигналами Sel0, Sel1 и Sel2. Значение этого выхода совпадает со значением входа «Ввод данных».
Обратите внимание: входными сигналами шестого вентиля И сверху являются Sel0, Sel1, Sel2. Они не подаются ни на один другой вентиль И, поэтому если на входы для выборки подается значение 101, то выходы всех остальных вентилей И будут равны 0. Вход шестого вентиля И может иметь значение 0, если вход «Ввод данных» равен 0, или 1, если вход «Ввод данных» равен 1. Полная таблица логики имеет следующий вид.
Полная схема с восемью защелками выглядит таким образом.
Важно: три сигнала выборки для дешифратора и селектора являются одинаковыми (они обозначены словом «адрес» — address, Addr). Подобно почтовому индексу, этот 3-битный адрес определяет, к какой из восьми однобитных защелок мы обращаемся. На входе сигнал «Адрес» определяет, какая защелка сохранит сигнал «Данные» под воздействием сигнала «Запись». На выходе (в нижней части схемы) вход «Адрес» управляет селектором «8 на 1» для того, чтобы считать выходной сигнал одной из восьми защелок.
Эта конфигурация защелок иногда называется памятью с записью/чтением, но чаще — памятью с произвольным доступом, или произвольной выборкой (random access memory, RAM). Эта конкретная конфигурация RAM хранит восемь отдельных однобитных значений. Ее можно изобразить следующим образом.
Устройство называется памятью, потому что оно сохраняет информацию. Возможность чтения/записи говорит о том, что вы можете сохранить новое значение в любой защелке (записать значение), а также узнать, что хранится в каждой из защелок (прочитать значение). Термин «произвольный доступ» означает, что запись и считывание информации из защелок могут осуществляться путем изменения входных сигналов «Адрес». Кроме памяти с произвольным доступом, существует память с последовательным доступом, при использовании которой для считывания значения, хранящегося по адресу 101, требуется сначала прочитать значение, хранящееся по адресу 100.
Описанная выше конфигурация RAM часто называется массивом RAM. Этот конкретный массив RAM организован по схеме, иногда сокращенно обозначаемой «8 × 1» — восемь однобитных значений. Чтобы определить общее количество битов, которые можно сохранить в массиве RAM, нужно перемножить эти два числа.