Основы цифровой схемотехники. Как логические элементы образуют биты памяти в твоем компьютере

То, что компьютеры могут хранить информацию в памяти, мы давно принимаем за данность, но знаешь ли ты, как именно эта память работает? В этом материале мы поговорим о последовательностной логике, которая позволяет компьютерам хранить информацию. Какие возможности это открывает и реально ли узнать секретный ключ кодового замка, располагая только его схемой, — самое время это выяснить!

В начале был бит

Пару месяцев назад мы приступили к изучению цифровой схемотехники с базового блока NOT. Не будем изменять традиции и в этот раз, тем более что блок на самом деле не так прост, как кажется на первый взгляд. Возьмем парочку и соединим их последовательно.


Кто-то может сказать, что это совершенно бессмысленная схема, ведь сигнал на выходе всегда равен входному. Действительно, применяя логическое отрицание дважды, мы получаем исходное утверждение. Если ты не «белый» хакер, ты «черный». Не «небелый» — по-прежнему «белый». Это выглядит как бесполезная словесная эквилибристика, но все меняется, если в схеме выше попробовать вход замкнуть на выход.


Теперь, если в правой половине у нас высокий логический уровень, в левой половине всегда будет низкий (и наоборот). Иначе говоря, схема приобретает свойство бистабильности и принимает лишь одно из двух возможных состояний. Совсем как бит памяти — или переменная bool в С/С++.

Для наглядности можно собрать схему на макетной плате. Здесь подойдет любой инвертор — например, 74HC04B. Это шесть логических вентилей NOT в корпусе DIP-14 (целых три бита информации, Карл!). Впрочем, как ты уже понимаешь, одну и ту же функцию можно реализовать несколькими способами, поэтому здесь наш выбор практически не ограничен.

INFO

Тут стоит упомянуть, что с теми же целями мы можем использовать и 74HC00N (четыре элемента NAND). Эта микросхема получила свой особый «нулевой» номер в серии 74хх не просто так — логическая операция И — НЕ обладает замечательным свойством функциональной полноты. Иными словами, мы можем любой другой базовый блок (AND, OR и остальные) разложить на комбинацию блоков NAND. Аналог в отечественной микроэлектронике — 155ЛА3, и это настолько популярная у радиолюбителей микросхема, что в ее честь даже называют сайты.

Простой пример (как на картинке выше) позволяет на практике убедиться, что микросхема работает, как мы предполагали. Для мигания светодиодами и переключения состояний в такой ячейке памяти достаточно прикасаться концами проводов (от земли или питания) к соответствующим выводам микросхемы. Возможно, само по себе это звучит и не очень увлекательно, но размышление в процессе должно навести на интересные идеи.

Некоторая неопределенность

В какой-то момент твой пытливый хакерский ум наверняка задался вопросом — а что, если подать одно и то же напряжение на обе половинки одновременно? И в каком состоянии окажется наша схема после? В сущности, это сродни делению на ноль в математике (или программировании) — запрещенная операция, результат на выходе которой не определен. Парадоксально, но даже такое свойство может иметь практическое применение! Инженеры в Intel хорошо знают схемотехнику (кто бы сомневался), и встроенный в их процессоры генератор случайных чисел работает именно по такому принципу.

Сейчас работа нашей схемы напоминает электромеханические компьютеры середины сороковых годов XX века, когда коммутация сигналов внутри устройства выполнялась с помощью реле и переключателей. Самое время добавить новые возможности и перейти от инверторов к элементам с несколькими входами.

Простой RS-триггер

Внесем минимальные изменения в нашу схему и воспользуемся дополнительными входами NAND. Назовем их nR и nS (not RESET и not SET соответственно, их назначение прояснится в дальнейшем).


Оба входа могут принимать по два значения, итого предстоит разобрать четыре варианта. Начнем с базового случая nR = 1 и nS = 1. При этом на выходах Q и nQ уже есть какие-то значения. Обрати внимание, что если Q = 1, то при nS = 1 результатом операции NAND будет низкий уровень, то есть nQ = 0. И наоборот, если Q = 0, то nQ = 1 и оба выхода в нашей схеме действительно принимают противоположные значения. Другими словами, если один из входов вентиля NAND оказывается в состоянии логической единицы, то сигнал на выходе определяется как инверсия второго входа — в точности как с инверторами чуть ранее! Таким образом, при nR = 1 и nS = 1 схема сохраняет свое старое состояние и выходы не обновляются.

Теперь рассмотрим вариант с nR = 1 и nS = 0. Так как на входе верхнего элемента NAND точно есть хотя бы один ноль, то его выход в любом случае будет равен логической единице. Значит, Q = 1, и, следовательно, nQ = 0. Аналогично, при nR = 0 и nS = 1 мы можем схожим образом вывести, что состояние схемы будет полностью противоположным (Q = 0 и nQ = 1).

Остается разобрать заключительный вариант, где оба входа равны нулю одновременно. На интуитивном уровне можно уже предполагать, что тут что-то не так. Действительно, при nR = nS = 0 результат элемента NAND не может быть положительным ни при каких возможных значениях дополнительного входа (рекомендую проверить по таблице истинности). Следовательно, Q = nQ = 0, и это единственный случай, когда наша схема «сбоит». В дальнейшим мы ее улучшим и обязательно избавимся от этого недостатка.

Но сейчас самое время остановиться и перевести дух. Выше были не самые тривиальные рассуждения, и если ты чего-то не понял, то это совершенно нормально. Последовательностные схемы сложнее для восприятия, и именно поэтому в предыдущей статье мы начали знакомство с комбинационной логики.

Так что советую перечитать несколько абзацев выше еще раз. Тем более что это ключевая схема и далее в статье многие элементы будут основаны именно на ней. А вообще, самый правильный способ разобраться в любой схеме раз и навсегда — это взять ручку и листочек бумаги (или стилус и планшет) и последовательно рассмотреть каждый из возможных вариантов. Я сужу по личному опыту — в твоем случае может сработать что-то еще.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

faberge: Цифровыхъ дѣлъ мастеръ

Комментарии (2)

  • Опечатка в предложении:
    Эта микросхема получила свой особый «нулевой» номер в серии 74хх не просто так — логическая операция ИЛИ-НЕ обладает замечательным свойством функциональной полноты.
    должно быть И-НЕ
    Если речь идёт о к155ла3, то это четыре элемента 2И-НЕ.

    • Действительно. Это я проглядел. Спасибо!