Доброго времени суток. Помогите, пожалуйста, разобраться с проблемой. Я зашел в тупик при чтении книги "Код. Тайный язык информатики" Чарльза Петцольда. Проблема заключается в том, что я не смог найти логику в некоторых схемах, которые демонстрируют логику памяти. Я уже несколько раз проверял схемы и так и не смог найти логики в некоторых местах, но при этом я очень сильно сомневаюсь, что в такой качественной, популярной и старой книге может быть такая ошибка.
Хотелось бы кратко объяснить ситуацию, но не получится. Начну с того, с чего начинается эта глава. Есть защелка, которая хранит один бит информации, она выглядит так:
В этой защелке есть 2 входа DI(ввод данных) и W(запись) и один выход DO(вывод данных). Сигнал на входе W означает, что значение сигнала на входе DI нужно записать на выход DO. Если сигнал на W - 1, на DI - 0, то на выходе DO будет "хранится" 0. Если сигнал на W - 1, на DI - 1, то на выходе DO будет "хранится" 1. Если сигнал на W "0", то в DO будет храниться последнее "записанное" значение, даже если сигнал DI будет меняться. Таблица логики защелки выглядит так:
Из восьми 1-битовых защелок можно собрать восьмибитную. Для этого нужно соединить их входы Запись(W):
У восьмибитной защелки 8 входов для данных, 8 выходов, единственный вход Запись, в обычном состоянии равный 0. Для того чтобы сохранить 8 битов информации, на вход Запись подается 1, а затем снова 0, восьмибитную защелку можно изобразить как-то так:
Или вот так:
С помощью такой защелки отдельно записывать каждый бит нельзя, можно только все вместе.
Нужно сделать так, чтобы можно было записывать информацию в любую выбранную защелку из восьми доступных, отдельно от остальных семи, в любой момент времени, не стирая информацию с других, и также отдельно читать. Для этой задачи используются дешифратор 3 на 8 и селектор 8 на 1.
Дешифратор 3 на 8 выглядит так:
Изменяя адрес(переключая переключатели) мы можем выбрать на которую из 8-ми защелок будет записана информация. Таблица логики для этого дешифратора выглядит так:
Сигнал Запись должен подаваться на дешифратор 3 на 8, при помощи переключателей можно выбрать одну из 8-ми защелок на которую будет проходить сигнал из дешифратора, и именно на эту защелку будет проходить сигнал Запись.
Сигнал Ввод данных(DI) будет один для всех защелок, ведь сигнал Запись будет проходить только на одну, поэтому на остальные это никак не повлияет.
В конце находится селектор 8 на 1:
Работает почти также как и дешифратор, выбирает сигнал одной из 8 защелок, сигнал из которой будет подаваться на выход (“лампочку”). На селектор подаются те же 3 сигнала Адреса(переключателей), что и на дешифратор, поэтому если выбрать с помощью адреса(переключателей), например 6 защелку, то и на дешифраторе и на селекторе будет выбрана 6 защелка.
Если надо записать информацию, то выбирается любая защелка, подается сигнал на Вход данных(DI) - 0 или 1 и нажимается кнопка Запись, на выбранную защелку “записывается” сигнал с входа Вход данных(DI). Или если хочется прочитать информацию, то выбирается любая защелка, если лампочка горит, то в эту защелку записана 1, если нет то 0.
Таким образом получился массив RAM 8x1, которая может хранить 8 разных значений. Вот готовая схема:
Затем идет схема, которая заставила меня морально страдать:
Если соединить две восьмибитные защелки, то получится память 16x1. Здесь есть дешифратор 1 на 2, который выбирает один из двух массивов RAM 8x1 с помощью переключателя Выборка. Выборка является 4-ым переключателем(адресом).
Теперь обратите внимание на то что сигналы Запись и сигнал переключателей(Адрес) идут на оба массива. Представьте, что с помощью переключателя Выборка выбран, например, левый массив, с помощью адреса выбрана 6 защелка в этом массиве, на Вход данных подан сигнал 1 и нажата кнопка запись. Вспомним, что сигналы Запись и Адрес также передаются на правый массив(по крайней мере на схеме так нарисовано), но сигнал Вход данных отсутствует, то есть 0, ведь сигнал подается только на левый массив, получается, что при нажатии кнопки Запись сигнал пойдет на оба массива, в 6-ую защелку в левом массиве запишется 1, а в левую 0. Выходит так, что записываются значения сразу в два массива, ведь в 6-ой защелке правого массива могла быть записана 1, а ее стерли записывая информацию в 6-ую защелку другого массива.
У меня есть предположение, что переключатель Выборка должен выбирать не только куда пойдет сигнал с Вход данных, а и с входа Запись.
Возможно так и надо, но от этого мне не легче. Скорее всего я просто туплю. Или может там действительно ошибка? Эта книга есть в сети, так что можете ознакомиться более подробно.