Что значит «память» в цифровой логике
Любая рассмотренная ранее схема либо мгновенно вычисляет результат из текущих входов (комбинационная логика), либо хранит один бит (защёлки и триггеры). Память масштабирует идею хранения одного бита до тысяч или миллиардов битов, организованных так, что любой из них можно прочитать или записать, указав адрес.
RAM: массив защёлок
Оперативная память (RAM) концептуально — это сетка однобитных ячеек хранения (в статической RAM буквально по защёлке на бит), организованных в строки и столбцы. Декодер принимает биты адреса и активирует ровно одну строку; данные этой строки затем доступны для чтения или записи через общие линии данных.
«Произвольный доступ» означает, что любой адрес достигается за одно и то же время, независимо от того, к какому адресу обращались ранее — в отличие от сдвигового регистра или ленты, где доступ к далёкому биту занимает больше времени.
Чтение и запись
Линия разрешения записи (Write Enable) управляет направлением: когда она активна, защёлки выбранной строки устанавливаются в значение, поданное на линии данных. Когда она неактивна, текущее содержимое выбранной строки выводится на линии данных для чтения. В любой момент выбрана только одна строка — именно поэтому декодер из предыдущей статьи делает адресуемую память возможной в принципе.
ROM: данные, подключённые навсегда
Постоянная память (ROM) использует тот же принцип адресации — декодер выбирает строку — но вместо защёлок каждая ячейка представляет собой фиксированное соединение (присутствующее или отсутствующее), заложенное при производстве, или однократно программируемое в некоторых вариантах. Записывать в неё нечего: один и тот же адрес всегда возвращает одно и то же значение, что делает ROM идеальной для данных, которые никогда не должны меняться — например, загрузчика или фиксированной таблицы соответствий.
RAM и ROM на практике
Реальная система использует оба типа: ROM хранит код запуска, выполняющийся до того, как что-либо ещё сконфигурировано, а RAM хранит рабочие данные и саму программу после загрузки. Boolflow не моделирует полный массив памяти как единый блок, но принцип адресации виден напрямую: загрузите пример декодера и заметьте, что тот же декодер, управляющий одной из нескольких защёлок, — это ровно то, как маленькая RAM строится из уже знакомых вам частей.