У современных программистов нет необходимости знать устройство компьютера на самом низком уровне, и все же без этого чувствуешь, что упустил что-то важное. Увы, в одной статье я не смогу рассказать о том, как работает даже самый примитивный процессор, поэтому мы начнем с изучения сумматора — ключевого элемента арифметико-логического устройства (АЛУ). Пробежавшись по теории, мы перейдем к практике: познакомимся с микросхемой 74HC283 и соберем на макетной плате небольшой тестовый стенд.

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

Знаешь, что изображено на этой картинке?


Так выглядит руль болида «Формулы-1». Нетрудно догадаться, что у пилота за таким штурвалом совершенно иной уровень подготовки. И речь не о скорости реакции или рефлексах: тут абсолютно другое, качественно более глубокое понимание принципов и особенностей работы машины.

Знания пилота «Формулы-1» — это и немного знаний конструктора, и инженера, и механика. Только так можно выжать из этого автомобиля максимум и нестись по трассе на огромной скорости под восхищенные крики болельщиц. Примерно то же и со схемотехникой: без нее ты просто скучный современный водитель, от которого скрыли устройство его машины.

Лично мне цифровая схемотехника дала многое. Я, например, узнал, что собой представляет конвейер в процессоре, почему его сброс дорого обходится для исполняемой программы и как выглядит компромисс времени и памяти на аппаратном уровне. Если мне удалось тебя убедить и ты тоже хочешь хоть немного овладеть этой наукой, то приступим!

 

Форма сигнала

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

В С/С++ подобное отношение моделирует тип bool и два его состояния — true и false. Я и дальше буду использовать аналогии из языков программирования, где это уместно. Надеюсь, это поможет тебе лучше понять происходящее. Кроме того, это ярко показывает, насколько тесно все связано в цифровом мире.

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

INFO

Фирма Sony удачно обыграла аналоговую и цифровую природу сигнала в названии своих ноутбуков VAIO. Если внимательно присмотреться к их логотипу, то первые его две буквы повторяют аналоговую форму синусоиды, тогда как последние две представляют пару дискретных состояний цифрового бита.

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

 

Схема на миллион

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

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

В этой статье мы будем рассматривать только комбинационные схемы. Они проще для понимания и наглядней. Кстати, в отечественной литературе нет устоявшегося перевода для последовательностных схем. Кто-то называет их последовательными, кто-то предпочитает кальку с английского языка и использует термин «секвенциальные схемы» (sequential). Разницы нет никакой, но все равно учти это, когда будешь читать дополнительные источники.

 

Базовые блоки

Все цифровые схемы сводятся к нескольким стандартным логическим элементам. Это примерно как кубики Lego в детском конструкторе. Их можно комбинировать, соединять друг с другом и получать новые схемы. Для каждого элемента я привел таблицу истинности — соответствие между входными и выходными сигналами.

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

 

NOT


Самый простой вентиль, представляет собой логическое отрицание и инвертирует сигнал на единственном входе. Так как у нас всего два возможных состояния, таблица истинности совсем крохотная. В С/C++ это оператор !, хотя там его действие распространяется на любые переменные с числовым значением, не только бинарные.

Обрати внимание, что на рисунке выше (и на всех последующих) приведены два символа для обозначения конкретного элемента на схемах. Слева — американский вариант (ANSI), справа — его европейский аналог (МЭК и ГОСТ). Второй стандарт сейчас уже редко где применяется, и даже в русскоязычной литературе почти всегда используется графически более наглядный стандарт ANSI.

 

AND


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

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

В С/С++ существует аж два аналога для этого вентиля: булево И (оператор &) и логическое И (оператор &&). Первый применяется для проверки флагов и других операций над отдельными битами числа, тогда как второй используется в логических выражениях.

 

OR


Здесь выход находится в состоянии логического ноля, только когда все входы равны нулю. Остальные комбинации приводят к высокому уровню на выходе.

Вместе AND и OR — это два основных строительных «кирпичика» цифровой логики. Сразу возникает вопрос, как их отличать друг от друга на схемах. Конечно, все решает практика, и со временем они запомнятся сами собой, но можно воспользоваться простым правилом: форма элемента со стороны входов соответствует первой букве в английском обозначении.

Так, округлость вентиля OR напоминает очертания буквы O, а прямая линия элемента AND явно позаимствована из буквы А. Звучит немного нелепо, но главное, что это работает.

Аналогично ситуации с AND для вентиля OR в языках программирования С/С++ используется булево ИЛИ (оператор |) и логическое ИЛИ (оператор ||).

 

XOR


Наконец, последний из базовых элементов в нашем списке — функция исключающего ИЛИ (XOR). На первый взгляд его таблица истинности выглядит странной, но легко запоминается — высокий уровень на выходе, только когда входы отличаются друг от друга. Однако не все так просто.

В общем случае (больше двух входов) этот вентиль реализует самую неочевидную функцию из рассмотренных: если на входах нет логических единиц или если их количество четное, то на выходе ноль, в любом другом случае — единица.

В C/C++ это оператор ^ и с ним связана забавная возможность обменять значения двух числовых переменных без участия временной переменной для промежуточного хранения (свойство самообратимости). И все в одной строчке:

int x, y;
...
x ^= y ^= x ^= y;

Но вернемся к нашим вентилям. Иногда в их список добавляют также сочетания с NOT: NOT + AND = NAND, NOT + OR = NOR и NOT + XOR = XNOR. При желании можешь вывести их таблицы истинности самостоятельно, это не составляет никакого труда.

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

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

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Дырявые диски. Эксплуатируем уязвимости в сетевых хранилищах Synology

Защита данных, приватность и соответствие нормам безопасного хранения информации — то, над…

6 комментариев

  1. Аватар

    icoz

    16.07.2019 at 08:26

    Неплохо бы было упомнянуть об игре MHRD.

    • Аватар

      faberge

      16.07.2019 at 09:54

      О, это стоящая игра, согласен. На самом деле, у меня были мысли сделать отдельный обзор на вот такие вот любопытные, небанальные игры. Где можно и время приятно провести и что-то полезное для себя вынести. Например, взять MHRD, Silicon Zeroes, Exa-Punks, TIS100, ещё какие-нибудь и сравнить их.

  2. Аватар

    kaa110101

    17.07.2019 at 11:30

    Начало статьи навевает на мысль, что автор либо не «древний программист», либо «человек ленивый», или таки пытается скрыть «устройство автомобиля».
    «Схемотехнику принято делить на две большие области: цифровую и аналоговую, по типу сигнала.» — по принципу действия она делится, ну или по способу реагирования на изменение параметров сигнала — на вход цифровой схемы тоже можно подать синусоидальный сигнал, но реагировать она будет только на наличие его или отсутствие, где под «наличием» или «отсутствием» будут заданные схемотехникой(!) граничные уровни.
    «Аналоговая оперирует такими параметрами, как сила тока, напряжение (иногда оно бывает отрицательным) и сопротивление.» — любая электрическая-электронная схема оперирует только силой тока, а напряжение и сопротивление, это параметры, определяемые схемотехникой(!), при которых, этот самый ток «течёт» или «не течёт» — тут уже физика (ща прочитавшие учебник по ТОЭ будут кидаться какашками, но этим следует прочитать учебник по ТОЭ ещё раз, или прочитать более старый учебник по ТОЭ).
    «В цифровой все проще — в схеме есть только высокий и низкий логические уровни, даже без конкретных значений.» — не настолько «всё проще» — граничные параметры «высокого» и «низкого» уровня определяются схемотехникой(!).
    «Цифровая схемотехника, напротив, слабо зависит от окружающих условий и вообще устойчива к шумам.» — если рассматривать реальную схемотехнику, а не модели, отображающие логику работы, то всё не так просто, особенно с высокочастотной цифровой техникой, об этом говорит, хотя бы, наличие кучи дискретных элементов на «материнских» платах компов и «нелогичная», как бы, витиеватость токоведущих дорожек на них.

    • Аватар

      faberge

      17.07.2019 at 19:48

      Из всего перечисленного согласен разве что с последним пунктом. Мне действительно следовало упомянуть, что высокочастотные цифровые схемы имеют свою специфику. С другой стороны, если человек решил почитать вводную статью, то наверное его вряд ли интересуют нюансы цифрового сигнала в каком-нибудь PCI-Express.
      Что касается моего возраста, то я конечно не «древний программист». И это было сказано скорее в шутку, хоть я и с уважением отношусь к тем, кто имел отношение к ИТ тогда, когда это еще не стало мейнстримом.

  3. Аватар

    psbinfo

    17.07.2019 at 13:31

    Круто! ребята продолжайте писать на эти темы. Сразу зашло. До этого со скрипом давались книги по этой теме.

  4. Аватар

    binary-51

    09.08.2019 at 04:32

    «Интересно, сможем ли мы когда-нибудь собирать квантовые компьютеры так же просто, как сейчас на основе полупроводниковых микросхем?» — 100% техника когда-нибудь будет развита настолько, что эти квантовые компьютеры возможно будет собирать из деталей. Это как когда-то можно было собрать из деталей комп на Z-80 или «Микроша». Да-да, я настолько старый, что помню те времена…

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