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

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

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


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


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

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

INFO

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

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

 

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

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

Сейчас процесс работы нашей схемы напоминает электромеханические компьютеры середины 40-х годов 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! Подробнее

Check Also

Malware vs WordPress. Проверяем защитные плагины в боевых условиях

Wordpress — одна из самых распространенных систем управления сайтом и поэтому вызывает при…

1 комментарий

  1. Аватар

    colonelelkin

    12.11.2019 at 15:13

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

Оставить мнение