Что такое цифровая схемотехника
Как отличить начинающего профессионала от умудренного хоббиста в цифровой схемотехнике?
Три слова: понимание концепции конвейера. Молодым профессионалом, не старым хоббистом.
Это наглядно видно, если вы погуглите тексты про FPGA для начинающих. Если текст пишет программист, которому захотелось потрогать FPGA чисто для разнообразия, он как правило до конвейера не доходит. Помигает лампочками, поговорит про конечные автоматы и может начнет встраивать какую-нибудь FPGA-реализацию старого 8-битного процессора.
Все это происходит потому, что понимание работы конвейера как правило требует некоего мозгового усилия, типа толчка штанги. И если мозг уже поставлен десятилетиями программирования на Си и ассемблере, он упирается, потому что это ему контринтуитивно.
Именно этому вопросу будет посвящено следующее занятие Сколковской Школы Синтеза Цифровых Схем.
Это занятие состоится 4 декабря в Технопарке «Альтаир» МИРЭА
(пр-т Вернадского, 86, стр.2, Метро»Юго-Западная)
Вот живой линк на трансляцию:
Этот тест я приведу ниже, а до него приведу аллегорическое объяснение информации, нужной для прохождения теста, из другого моего текста:
Разъяснение на пальцах концепций комбинационной (combinational), секвенциальной (sequential) и конвейерной (pipelined) организации вычислений
Представьте, что вам нужно организовать работу медкомиссии военкомата. Это можно сделать несколькими способами, в зависимости от поставленных целей.
Если целью является минимизация количества помещений для осмотра, то можно усадить всех членов комиссии в одну большую комнату, в которую впускать по одному. Это пример комбинационной (combinational) организации вычислений. Недостатком его будет то, что каждый акт осмотра будет долгим, а члены комиссии будут скучать [каждый из четырех членов комиссии соответствует схеме умножения на схеме ниже].
Как это выглядит в виде кода на языке описания аппаратуры Verilog, а также синтезированной из него схемы (до mapping-а, размещения и трассировки). Комбинационный каскад из пяти операций умножения:
Соотвественно (здесь у нас только операция умножения, которое повторяется пять раз, Но можно построить пример, в котором тут будет ALU с разными операциями в каждом такте):
А теперь вы можете сами ответить на вопросы, которые я задавал студентам в Северо-Западном Политехническом Университете по поводу этих трех схем:
7. Which implementation is likely to allow the highest maximum frequency (assuming that the outputs of the combinational implementation are connected to clocked register)?
a) pow_5_implementation_1; b) pow_5_implementation_2; c) pow_5_implementation_3
8. Which implementation is likely to use the smallest number of gates?
9. Which implementation is likely to have the highest throughput (number of calculated pow_5(n) results per seconds)?
10. Which implementation is going to have the smallest latency in clock cycles (assuming that the outputs of the combinational implementation are connected to clocked registers)?
11. The testbench instantiated all three implementations of pow_5.
An engineer simulated the testbench and got the following waveform. However he forgots the order he added the last three signals to the waveform. Can you determine which signal is the output of combinational implementation, sequential non-pipelined implementation and sequential pipelined implementation?
a) The order is (from upper n_pow_5. to lower n_pow_5. ): combinational, sequential non-pipelined implementation, pipelined
b) combinational, pipelined, sequential non-pipelined implementation
c) pipelined, combinational, sequential non-pipelined implementation
d) pipelined, sequential non-pipelined implementation, combinational
e) sequential non-pipelined implementation, combinational, pipelined
f) sequential non-pipelined implementation, pipelined, combinational
Следующее занятие на школе будет про графику. Собственно вот вся программа:
30 октября 2021: 1. Введение в маршрут проектирования и упражнения с комбинационной логикой.
13 ноября 2021: 2. Архитектура: вид процессора с точки зрения программиста.
20 ноября 2021: 3. Последовательностая логика и конечные автоматы.
27 ноября 2021: 4. Разбор учебного проекта: распознавание и генерация звуков и мелодий.
4 декабря 2021: 5. Конвейеры и систолические массивы, с приложением для искуственного интеллекта.
11 декабря 2021: 6. Разбор учебного проекта: модульная графичеcкая игра со спрайтами.
18 декабря 2021: 7. Микроархитектура однотактового процессора.
25 декабря 2021: 8. Микроархитектура конвейерного процессора.
15 января 2022: 9. Проектирование процессорного кэша и измерение его производительности.
22 января 2022: 10. Стандартные блоки и приемы проектирования: очереди FIFO и кредитные счетчики.
29 января 2022: 11. Стандартные блоки и приемы проектирования: арбитры, банки и разделение памяти.
5 февраля 2022: 12. Пробуем маршрут RTL2GDSII: как разрабатываются массовые микросхемы. Часть I.
12 февраля 2022: 13. Пробуем маршрут RTL2GDSII: как разрабатываются массовые микросхемы. Часть II.
19 февраля 2022: 14. Имитиция собеседования на позицию проектировщика цифровых микросхем.
26 февраля 2022: 15. Разбор имитации интервью с вручением поощрительных призов.
Что такое цифровая схемотехника
Соообщество (Техно-братство) радиолюбителей, мастеров по ремонтам, и просто любителей электроники на Пикабу
При создании новой темы давайте ей осмысленное название. Оно должно отражать суть вашего поста.
Все посты в сообщество проходят модерацию Разрешена публикация постов по тематикам сообщества.
Всем добра и печенюх. Будьте добры друг к другу.
1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.
Управление сообществом
Комментарий дня
Мы так с соседом сделали денди мультиплеер. Когда я просёк что сигнал на приставке соседа снизу ловится на мой телевизор (причем в цвете и со звуком). То сначала это просто был для меня этакий twitch я смотрел как сосед играет в игры и тихо завидовал. Родители приставку мне не покупали, а поиграть хотелось. В какой-то момент мне пришло в голову что видео и звук уже в телевизоре, нужно только передать управление с джойстика и можно играть вдвоём. (Почему-то очевидная идея просто собраться у него и поиграть мне в голову не пришла, родители соседа были достаточно строгие и частых гостей не привечали. Я предложил офигительную идею разрезать провод джойстика, удлиннить его и провести этот кабель в квартиру через форточку. Соседу идея показалась интересной, но он не соглашался резать собственный джойстик так как сильно сомневался, что что-нибудь из этой ерунды получится. В итогде был найден и куплен (на все мои сбережения) джойстик, который подходил к разъему соседа. В роли удленнителя выступил 6 жильный телефонный кабель. Нужно было понимать, что ни малейшей идеи о распиновки у меня в 7 лет не было, грубо говоря отрезать, спаять жилы заизолировать синей изолентой и надеяться что сработает. Но вы не представляете этот восторг когда я притащил бухту кабеля с джойстиком на одном конце и коннектором на другом. Подключил к разъему приставки и оно заработало, можно было играть вдвоём. Отдельная эпопея как мы протягивали кабель, к счастью кабель был тонкий и проходил в щель от форточки. Из остатков кабеля так же были сделаны удлиннители для телефона (телефоны были проводные). Так в 1993-1994 году у нас был не только мультиплеер, но и голосовой чат каждый день часа по 2-3 после школы но до прихода родителей. Так продолжалось около полугода, мы приходили домой после школы и резались в Черепашек Ниндзя вторых и третьих, Double Dragon в Контру и Танчики. Родители со временем просекли, что именно мы построили и с удивлением отнеслись с пониманием, просили играть поменьше и после уроков, но убирать конструкцию не заставили. Были и мелкие конфликты, связанные с тем, что у меня кнопки Start и Select не было а у друга были, так что контроль над игрой у меня был значительно меньший чем у него. Например другу могло надоесть играть в контру и он специально умирал а потом нажимал end вместо continue. В принципе завершение игры тоже было на соседе и тут я ничего поделать не мог. Закончилось всё внезапно, сосед с родителями переехал, а в той квартире поселился хмурый подросток лет 17 которому приставки были не интересны. Родители мне потом всё-таки купили Сегу уже и история с супе-удлиннителем джойстика забылась. Странно, больше 30 лет прошло, лица того парня уже не вспомнить, даже имени полного Артем его звали, кажется. Где он что с ним? Зато память сохранила запах канифоли, синей изоленты, обожённый палец при пайке (паял я увлечённо, но довольно плохо) и восторг игры без приставки, но с приставкой. Наш голосовой чат через телефон. Следующий раз я поиграл в мультиплеер в только 1997 году, это был компьютерный клуб и игра Command and Conquer.
Рекомендуемое сообщество
Тебе повезло, ты не такой как все.
Ты работаешь в офисе
Офисные будни. Вакансии и резюме. Собеседования и увольнения. Клиенты и подрядчики. Мы любим все, что связано с офисом, ведь недаром мы проводим здесь по восемь часов в день.
Самостоятельное изучение схемотехники. Основные понятия. Часть 1
Изучение цифровой схемотехники нужно начинать с теории автоматов. В этой статье можно найти некоторые элементарные вещи, которые помогут не потеряться в дальнейших статьях. Я постарался сделать статью легкочитабельной и уверен, что неподготовленный читатель сможет в ней легко разобраться.
Сигнал — материальный носитель информации, используемый для передачи сообщений по системе связи. Сигнал, в отличие от сообщения, может генерироваться, но его приём не обязателен (сообщение должно быть принято принимающей стороной, иначе оно не является сообщением, а всего лишь сигналом).
В статье рассматривается цифровой дискретный сигнал. Это такой сигнал, который имеет несколько уровней. Очевидно, что двоичный сигнал имеет два уровня — и их принимают за 0 и 1. Когда высокий уровень обозначается единицей, а низкий нулем — такая логика называется позитивной, иначе негативной.
Цифровой сигнал можно представить в виде временной диаграммы.
В природе дискретных сигналов не существует, по этому их заменяют аналоговыми. Аналоговый сигнал не может перейти из 0 в 1 мгновенно, по этому такой сигнал обладает фронтом и срезом.
Если рисовать упрощенно то это выглядит так:
1 — низкий уровень сигнала, 2 — высокий уровень сигнала, 3 — нарастание сигнала (фронт), 4 — спад сигнала (срез)
Сигналы можно преобразовывать. Для этого на практике используются логические элементы, а чтобы это записать формально используются логические функции. Вот основные:
Отрицание — инвертирует сигнал.
На схемах обозначается так:
Логическое ИЛИ (логическое сложение, дизъюнкция)
На схеме:
Логическое И (логическое умножение, конъюнкция)
На схеме:
Последние два могут иметь отрицание на выходе (И-НЕ, ИЛИ-НЕ). Значения их логических функций инвертируются, а на схеме выход рисуется кружочком.
Сводная таблица логических функций двух аргументов выглядит так:
Работа с логическими функциями основывается на законах алгебры логики, основы которых изложены в прикрепленном файле. Так же там есть задания для самоконтроля и контрольные вопросы по теме.
Проектирование логических схем с помощью функций алгебры логики
Логической схемой называется совокупность логических электронных элементов, соединенных между собой таким образом, чтобы выполнялся заданный закон функционирования схемы, иначе говоря, — выполнялась заданная логическая функция.
По зависимости выходного сигнала от входного все электронные логические схемы можно условно разбить на:
Схемы первого рода, т.е. комбинационные схемы, выходной сигнал которых зависит только от состояния входных сигналов в каждый момент времени;
Схемы второго рода или накапливающие схемы (схемы последовательностные), содержащие накапливающие схемы (элементы с памятью), выходной сигнал которых зависит как от входных сигналов, так и от состояния схемы в предыдущие моменты времени.
По количеству входов и выходов схемы бывают: с одним входом и одним выходом, с несколькими входами и одним выходом, с одним входом и несколькими выходами, с несколькими входами и выходами.
По способу осуществления синхронизации схемы бывают с внешней синхронизацией (синхронные автоматы), с внутренней синхронизацией (асинхронные автоматы являются их частным случаем).
Практически любой компьютер состоит из комбинации схем первого и второго рода разной сложности. Таким образом, основой любого цифрового автомата, обрабатывающего цифровую информацию, являются электронные элементы двух типов: логические или комбинационные и запоминающие. Логические элементы выполняют простейшие логические операции над цифровой информацией, а запоминающие служат для ее хранения. Как известно, логическая операция состоит в преобразовании по определенным правилам входной цифровой информации в выходную.
Можно считать, что элементарные логические функции являются логическими операторами упомянутых электронных элементов, т.е. схем. Каждая такая схема обозначается определенным графическим символом. (Они были представлены выше — Элементы И, ИЛИ, НЕ, ИЛИ-НЕ, И-НЕ)
В качестве примера ниже представлена схема электрическая функциональная логического преобразователя (комбинационного автомата), реализующего логическую функцию в элементном базисе из логических элементов И, ИЛИ, НЕ.
Для закрепления предлагаю, самостоятельно синтезировать логическую схему, реализующую следующие логические функции:
Сделать это можно к примеру в Electronic workbench.
Вот для примера первое выполненное задание:
Hint: Для того чтобы включить условные обозначения в соответствии с отечественными ГОСТ-ами в файл настроек EWB.INI нужно добавить строку DIN = ON
На этом первая часть статьи заканчивается. Надеюсь, что она была не слишком утомительной. Все вышеописанное необходимо для понимания принципов работы с сигналами в электрических схемах. В следующей статье будут рассмотрены способы минимизации логических функций, понятие абстрактного автомата и пример синтеза RS-триггера.
Цифровая схемотехника. Основы построения (2018)
Цифровые устройства уверенно вошли в жизнь каждого современного человека средствами связи, устройствами обработки информации, аппаратурой телевидения, модемами, роутерами и многим другим. В ходе диалога автор книги и новичок проходят путь от азов к вершинам мастерства, от изучения элементарных строительных элементов цифровой техники до создания самостоятельных практических конструкций. Книга проста в восприятии и читается легко.
На первом этапе новичок рассматривает базовые элементы цифровой техники, их построение. Затем знакомится с этапами развития цифровой схемотехники. Во второй главе приведена полезная справочная информация по тем особенностям цифровых микросхем, без которой их использование будет затруднительно. В третьей главе рассматриваются принципы построения и работа базовых элементов цифровой техники, от простых к сложным. Показаны примеры практических решений построения отдельных узлов и рабочих фрагментов реальных схемотехнических решений. В заключительной главе автор и уже продвинутый новичок переходят к созданию практических устройств, полезных в быту.
Приведена коллекция достаточно простых схем различных цифровых устройств, доступных для самостоятельного повторения начинающим радиолюбителем. Книга предназначена для широкого круга читателей. Она одновременно может быть полезна как начинающему, так и искушенному в цифровой схемотехнике пользователю.
Содержание:
Что есть что в цифровой схемотехнике
Терминологический ликбез для новичка
Аналоговые и цифровые сигналы: что есть что
Какие существуют модели логических микросхем
Изучим способы управления логическими микросхемами
Сравниваем аналоговые и цифровые устройства
Знакомство с поколениями цифровых интегральных микросхем
Транзистор в аналоговом и цифровом понимании
Немного технической истории
Транзисторная логика с непосредственными связями
Диодная логика
Резисторно-транзисторная и резисторно-емкостная транзисторная логика
Диодно-транзисторная логика
Эмиттерно-связанная логика
Транзисторно-транзисторная логика
Буферные элементы ТТЛ на три состояния
Интегральная инжекционная логика И2Л
Транзисторно-транзисторная логика с диодами Шоттки
Особенности эксплуатации ТТЛ и ТТЛШ-микросхем
МОП-логика на полевых транзисторах
КМОП-логика на комплементарных полевых транзисторах
Внутреннее устройство цифровых микросхем КМОП
Защита входных и выходных цепей КМОП-микросхем от повреждений
Буферные элементы КМОП на три состояния
Особенности эксплуатации КМОП-микросхем
Истоково-связанная логика на основе GaAs-полевых транзисторов с управляющим затвором Шоттки
Логика на основе GaAs-полевых транзисторов с непосредственными связями
Логика на полевых транзисторах с использованием углеродных нанотрубок
БиКМОП логика
Основные параметры логических элементов
Изучим характеристики и обозначения логических микросхем
Характеристики логических уровней ТТЛ (ТТЛШ) и КМОП-микросхем
Сравнительные характеристики цифровых интегральных микросхем
Семейство ТТЛ и ТТЛШ-микросхем
Семейство КМОП-микросхем
Расшифровка буквенных префиксов и суффиксов микросхем
Серии ТТЛ-микросхем зарубежного производства
Отечественные серии ТТЛ-микросхем
Серии и семейства зарубежных логических КМОП-микросхем
Серии отечественных логических КМОП-микросхем
Обозначения выводов корпусов микросхем
Зарубежные обозначения сигналов и микросхем
Система условных обозначений отечественных микросхем
Условные графические изображения цифровых микросхем
Элементы цифровой техники от А до Я
3.1. Что есть что в цифровой схемотехнике?
3.2. Электронные ключевые элементы
Принцип действия электронных ключей
Электронные ключевые элементы на биполярных транзисторах
Схемотехнические способы повышения быстродействия ключевых элементов
Электронные ключевые элементы.на транзисторах Шоттки
Электронные ключевые элементы на полевых транзисторах
3.3. Базовые элементы цифровой логики
Основные формы цифровых сигналов: ноль и единица
Условные графические обозначения логических элементов
Полезные термины
Таблица истинности
Логический элемент НЕ
Логический элемент И
Логический элемент ИЛИ
Логический элемент И-НЕ
Логический элемент ИЛИ-НЕ
Применение логических элементов И, И-НЕ, ИЛИ, ИЛИ-НЕ
Логические элементы «Исключающее ИЛИ» и «Исключающее ИЛИ-НЕ»
Применение логических элементов «Исключающее ИЛИ» и «Исключающее ИЛИ-НЕ»
Синтез одних логических элементов из совокупности других
3.4. Триггеры
Назначение, разновидности, обозначения
RS-триггеры
RS-триггеры S, R и Е-типов
D-триггеры
DV-триггер
Т-триггеры
JK-триггеры
Триггеры Шмитта
3.5. Регистры
Разновидности регистров
Параллельные регистры
Регистры, срабатывающие по фронту сигнала
Регистры, срабатывающие по уровню сигнала
Последовательные регистры
3.6. Счетчики импульсов и делители частоты
Разновидности счетчиков импульсов и делителей частоты
Асинхронные счетчики
Синхронные счетчики с асинхронным переносом
Синхронные счетчики
Счетчики реверсивные
3.7. Дешифраторы
3.8. Шифраторы
3.9. Мультиплексоры
3.10.Демультиплексоры
3.11. Аналого-цифровые преобразователи
3.12. Цифро-аналоговые преобразователи
3.13. Многофункциональные времязадающие устройства (таймеры)
3.14. Другие элементы цифровой логики
3.15. Элементы бесприоритетной логики
Диаграмма рабочих состояний элементов бесприоритетной логики
Элемент «ТОЛЬКО ВСЕ»
Элемент «КРОМЕ ВСЕХ»
Элемент «ТОЛЬКО ОДИН ИЗ ВСЕХ»
3.16. Вспомогательные элементы цифровой техники
Внешние выходные каскады для повышения нагрузочной способности микросхем
Согласование логических уровней ТТЛ- и КМОП-микросхем
Реверсивные регенераторы логического уровня
Создаем практические конструкции
электронных устройств своими руками
Модель электронного светофора
Имитатор проблескового маячка полицейской машины
Полицейская мигалка
Бегущие огни
Цветорегулятор
Многоголосый имитатор звуков
Тестер скорости реакции
Простые реле времени
Световые маячки
Таймеры на интегральных микросхемах
Сирены личной охраны
Звукосигнальные охранные устройства
Сенсорный коммутатор нагрузки
Фото- и термореле
Одноголосый электромузыкальный инструмент
Электромузыкальный инструмент
Задающий генератор для терменвокса
Терменвокс
Светофон
Музыкальный светофон
Стимулятор сна
Бесконтактный датчик приближения металла
Простой металлоискатель
Индикаторы скрытой проводки
Светодиодный индикатор напряжения
Аудиовизуальный индикатор постоянного напряжения
Многодиапазонный КМОП-генератор прямоугольных импульсов
Аналоговое применение цифровых микросхем
Аналоговые свойства логических микросхем
Усилители на логических элементах
Послесловие. ПОЛЕЗНЫЙ ОПЫТ АВТОРА-РАДИОЛЮБИТЕЛЯ
СПИСОК ЛИТЕРАТУРЫ И РЕСУРСОВ ИНТЕРНЕТ
Название: Цифровая схемотехника. Основы построения
Автор: Шустов М. А.
Издательство: НиТ
Год: 2018
Страниц: 320
Язык: русский
Формат: DjVu
Размер: 14.34 mb
Скачать Шустов М.А. Цифровая схемотехника. Основы построения
Основы цифровой схемотехники
У сегодняшних программистов нет необходимости знать устройство компьютера на самом низком уровне, и все же без этого чувствуешь, что упустил что-то важное. К сожалению, в одной статье я не смогу рассказать о том, как работает даже самый примитивный процессор, поэтому мы начнем с изучения сумматора — ключевого элемента арифметико-логического устройства (АЛУ). Немного поговорим по теории, потом перейдем к практике: познакомимся с микросхемой 74HC283 и попробуем собрать на макетной плате небольшой тестовый стенд.
Говорят, древние кодеры собирали свои компы самостоятельно, уверенно обращались с паяльником и знали ассемблер. Но потом эти умения были безвозвратно погребены под слоями абстракции, и теперь каждый — специалист в узкой области, который редко заглядывает дальше ее. Если вы не работаете с железом, то схемотехника вам вряд ли пригодится сама по себе. Так зачем ее учить? Попробую показать на примере.
Знаете, что изображено на этой картинке?
Так выглядит руль болида «Формулы-1». Нетрудно догадаться, что у пилота за таким штурвалом совершенно иной уровень подготовки. И речь не о скорости реакции или рефлексах: тут абсолютно другое, качественно более глубокое понимание принципов и особенностей работы машины.
Знания пилота «Формулы-1» — это и немного знаний конструктора, и инженера, и механика. Только так можно выжать из этого автомобиля максимум и нестись по трассе на огромной скорости под восхищенные крики болельщиц. Примерно то же и со схемотехникой: без нее ты просто скучный современный водитель, от которого скрыли устройство его машины.
Лично мне цифровая схемотехника дала многое. Я, например, узнал, что собой представляет конвейер в процессоре, почему его сброс дорого обходится для исполняемой программы и как выглядит компромисс времени и памяти на аппаратном уровне. Если мне удалось вас убедить и вы тоже хотите хоть немного овладеть этой наукой, то приступим!
Форма сигнала
Схемотехнику принято делить на две большие области: цифровую и аналоговую, по типу сигнала. Аналоговая оперирует такими параметрами, как сила тока, напряжение (иногда оно бывает отрицательным) и сопротивление. В цифровой все проще — в схеме есть только высокий и низкий логические уровни, даже без конкретных значений.
Аналоговая схемотехника капризна и непредсказуема — на параметры сигнала могут влиять не только хорошо известные факторы вроде температуры и внешних наводок, но и даже такие неочевидные вещи, как вовремя не отмытый с платы флюс или окислившиеся контакты (без шуток). Цифровая схемотехника, напротив, слабо зависит от окружающих условий и вообще устойчива к шумам.
Фирма Sony удачно обыграла аналоговую и цифровую природу сигнала в названии своих ноутбуков VAIO. Если внимательно присмотреться к их логотипу, то первые его две буквы повторяют аналоговую форму синусоиды, тогда как последние две представляют пару дискретных состояний цифрового бита.
Так что нет ничего удивительного в том, что сегодня большая часть информации существует именно в цифровом виде, а компьютеры оперируют исключительно числами (если точнее, то их двоичным представлением). Для базового понимания цифровой схемотехники не требуется особых знаний — достаточно только уметь переводить числа из десятичной формы в двоичную и обратно.
Цифровая схема
Типичная цифровая схема состоит из входов, выходов и логических элементов, также называемых вентилями. Сигналы поступают на входы схемы, преобразуются по определенным правилам внутри вентилей (об этом чуть ниже) и подаются на выходы.
В комбинационных схемах состояние сигналов на выходе зависит только от состояния на входе. В последовательностных схемах выход зависит не только от входа, но еще и от внутреннего состояния схемы. В любом случае важно понимать, что сигналы на выходе зависят от входа, не наоборот.
В этой статье мы будем рассматривать только комбинационные схемы. Они проще для понимания и наглядней. Кстати, в отечественной литературе нет устоявшегося перевода для последовательностных схем. Кто-то называет их последовательными, кто-то предпочитает кальку с английского языка и использует термин «секвенциальные схемы» (sequential). Разницы нет никакой, но все равно учти это, когда будешь читать дополнительные источники.
Базовые блоки
Все цифровые схемы сводятся к нескольким стандартным логическим элементам. Это примерно как кубики Lego в детском конструкторе. Их можно комбинировать, соединять друг с другом и получать новые схемы. Для каждого элемента я привел таблицу истинности — соответствие между входными и выходными сигналами.
Существуют еще диаграммы Венна, но, на мой взгляд, они совершенно лишние и только осложняют дело. Впрочем, если ты предпочитаешь графическое представление, то можешь ознакомиться и с ними.
Обрати внимание, что на рисунке выше (и на всех последующих) приведены два символа для обозначения конкретного элемента на схемах. Слева — американский вариант (ANSI), справа — его европейский аналог (МЭК и ГОСТ). Второй стандарт сейчас уже редко где применяется, и даже в русскоязычной литературе почти всегда используется графически более наглядный стандарт ANSI.
Сигнал на выходе этого вентиля равен логической единице только тогда, когда на всех входах присутствует высокий уровень. При этом количество входов может быть любым — таблица истинности изменится незначительно. Кроме того, ничто не мешает каскадировать такие элементы, подавая выход одного вентиля AND на вход другого.
Традиционно таблица рисуется именно таким образом: сперва все входы находятся в состоянии логического ноля, а затем последовательно инвертируется один из разрядов, начиная с младшего. Можно смотреть на это и с другой стороны — как будто все входы кодируют какое-то число (в двоичном представлении) и в каждой строке мы прибавляем к нему по единичке, проходя все возможные значения.
В С/С++ существует аж два аналога для этого вентиля: булево И (оператор &) и логическое И (оператор &&). Первый применяется для проверки флагов и других операций над отдельными битами числа, тогда как второй используется в логических выражениях.
Здесь выход находится в состоянии логического ноля, только когда все входы равны нулю. Остальные комбинации приводят к высокому уровню на выходе.
Вместе AND и OR — это два основных строительных «кирпичика» цифровой логики. Сразу возникает вопрос, как их отличать друг от друга на схемах. Конечно, все решает практика, и со временем они запомнятся сами собой, но можно воспользоваться простым правилом: форма элемента со стороны входов соответствует первой букве в английском обозначении.
Так, округлость вентиля OR напоминает очертания буквы O, а прямая линия элемента AND явно позаимствована из буквы А. Звучит немного нелепо, но главное, что это работает.
Аналогично ситуации с AND для вентиля OR в языках программирования С/С++ используется булево ИЛИ (оператор | ) и логическое ИЛИ (оператор | | ).
Наконец, последний из базовых элементов в нашем списке — функция исключающего ИЛИ ( XOR ). На первый взгляд его таблица истинности выглядит странной, но легко запоминается — высокий уровень на выходе, только когда входы отличаются друг от друга. Однако не все так просто.
В общем случае (больше двух входов) этот вентиль реализует самую неочевидную функцию из числа рассмотренных: если на входах нет логических единиц или если их количество четное, то на выходе ноль, в любом другом случае — единица.
В C/C++ это оператор ^ и с ним связана забавная возможность обменять значения двух числовых переменных без участия временной переменной для промежуточного хранения (свойство самообратимости). И все в одной строчке:
Пример
Настало время применить полученные знания и собрать что-то практически полезное. Логические операции — это, конечно, прекрасно, но хотелось бы и работать с числами, хотя бы для разнообразия!
Представим, что наши требования к безопасности таковы, что мы не можем доверять даже процессорам крупных компаний. Мы опасаемся возможных закладок, на уровне компании — разработчика схемы или на уровне компании — производителя кристалла, каких-либо гипотетических уязвимостей, которые могут эксплуатировать недоброжелатели, — словом, мы опасаемся всего и сразу. Значит, нужно собрать все самостоятельно, не доверяя никому!
Начинать стоит именно с процессора, а если еще конкретнее, то с сумматора в АЛУ. Это ключевой блок всего компьютера. Как если бы мы захотели приехать в Москву и очутились бы сразу на Красной площади.
Полусумматор
Конкретизируем задачу — пусть нам надо сложить два восьмибитных положительных значения друг с другом. Если использовать алгоритм сложения столбиком, то это будет выглядеть примерно так.
Мы последовательно складываем цифры в каждом разряде, справа налево, и получаем результат для этого разряда. При этом мы распространяем дальше перенос, если у нас возникло переполнение. Таким образом, у нас в схеме должно быть два входа (A и B) и два выхода (S и C). Составим таблицу истинности для всех возможных комбинаций А и В.
Рассматривая по отдельности получившиеся колонки S и C, легко заметить, каким логическим элементам они соответствуют. Теперь можно представить схему полностью.
Сумматор
Предыдущий блок носил несколько обидное название «полусумматора». Почему только половинка — догадаться нетрудно, ведь здесь мы никак не учитываем выход с предыдущего разряда. Логично предположить, что, комбинируя два таких блока, мы можем составить схему полного сумматора. Это как с Землей — есть Северное и Южное полушария. Хотя стоп, есть же еще Западное и Восточное…
Вопрос, куда девали вторую Землю, остается открытым
Теперь, когда мы получили возможность полноценно складывать биты из одного разряда, мы можем последовательно вычислить полную сумму нашего числа, каким бы большим оно ни было. Да, вот так все просто!
Важная характеристика цифровой схемы — задержка распространения. Схема реагирует на изменение входных сигналов не мгновенно, а с некоторым запаздыванием. То есть приходится ждать какое-то время, в течение которого сигнал на выходе тоже может меняться. Чем больше элементов в схеме, тем хуже ее быстродействие. На примере с сумматором в такой наивной реализации сигнал переноса должен последовательно пройти через все биты числа, прежде чем сформируется итоговая сумма. К счастью, есть хитрые способы обойти такие ограничения, и один из них мы разберем ниже.
Практика
До этого момента в статье была сплошь теория. Сейчас я предлагаю закрепить ее практической частью и собрать восьмибитный сумматор. Нам потребуется пара беспаечных макетных плат, несколько DIP-переключателей, светодиоды для индикации, токоограничивающие резисторы на 10 кОм и пара микросхем 74HC283.
Серия 74xx включает в себя микросхемы самого разного назначения. Это могут быть как сборки логических вентилей (например, 74HC04 — шесть инверторов в одном корпусе), так и полноценные АЛУ (74HC181). Помимо комбинационных схем, там есть и последовательностные: триггеры (74НС74), регистры (74НС373) и счетчики (74НС393).
Чтобы ориентироваться во всем этом номенклатурном разнообразии, я рекомендую не скачивать документацию на каждую микросхему в отдельности, а сразу найти целый справочник по всей серии. Например, есть справочник Texas Instruments в PDF.
В СССР и России существуют аналогичные микросхемы серий К155 и КР1564, для замены 74хх и 74НСхх соответственно. Большинство из них совместимы по корпусам и контактам с зарубежными, но из-за своей редкости и высокой цены они остаются скорее занятной диковинкой. Для этой статьи я пытался достать парочку интегральных схем (ИС) белорусского «Интеграла» (ЭКР5564ИМ6), но в наличии их не оказалось, поэтому пришлось ограничиться более массовыми SN74HC283 все той же Texas Instruments.
Расположение выводов у микросхемы 74HC283 можно найти на странице 176 справочника, принципиальную схему и таблицы истинности смотри на страницах 390–391. И хотя это сумматор всего лишь на четыре бита, тут есть функция ускоренного переноса, а сами микросхемы можно объединять, собирая сумматоры на 8, 16 или даже 32 бит.
Хорошо видно, что схема здесь несколько отличается от той, что мы вывели ранее. В этом нет ничего необычного, одну и ту же функцию можно реализовать несколькими способами, и в производстве зачастую используют тот, который дешевле (по элементам) и лучше подходит для техпроцесса.
При этом все равно осталось некоторое сходство — его можно заметить при внимательном изучении. Например, элементы XOR от полусумматоров располагаются непосредственно перед выходом для значений каждого из разрядов.
Кроме того, можно понять, что значение для переноса вычисляется параллельно со значениями разрядов — для этого в микросхеме и присутствуют «лишние» элементы. Пожалуй, это самая сложная часть в статье. Поэтому, если у тебя возникли трудности, попробуй рассмотреть схему ускоренного переноса отдельно — это ИС 74HC182 на с. 338 (вот она, польза от полноценного справочника).
Сложение
Теперь, когда принцип работы микросхемы и назначение каждого ее вывода для нас не составляет секрета, можно собирать рабочий сумматор на восемь бит на макетных платах. Потребуется целый ворох проводов и перемычек, чтобы соединить все компоненты, так что главное здесь — быть внимательным и не допускать ошибок.
Как правило, значения в АЛУ попадают из регистров — самого быстрого типа памяти в компьютере. Здесь же я для удобства использую пару DIP-переключателей (левый верхний угол), чтобы можно было легко задавать нужные значения. По сути, это регистры А и В нашего протокомпьютера.
К сожалению, производитель переключателей явно не рассчитывал на такое применение, поэтому нумерация битов в каждом регистре мало того что начинается с единицы, так еще и идет в «неправильном» порядке, слева направо! Учитывай это, когда будешь работать со схемой.
Пара 74НС283 располагается по центру на нижней макетке, а результат операции отображается на линии из светодиодов (правый верхний угол). В левом нижем углу роль источника питания выполняет преобразователь USB — UART (другого способа подать стабильные 5 В я в тот момент не нашел).
Если схема была собрана без ошибок, то, задавая двоичное представление чисел на переключателях, ты сможешь наблюдать значение суммы на светодиодах. Примерно как на картинке выше.
Вычитание
Удивительно, но такую схему без каких-либо изменений и доработок можно использовать и для вычитания. Да, раньше я не говорил об этом ни слова, но такое действительно возможно. Если использовать представление отрицательных чисел в дополнительном коде, нам никак не нужно переопределять операцию сложения — все будет работать на имеющемся железе.
Заключение
Статья подошла к концу, но цифровая схемотехника на этом отнюдь не заканчивается. Скорее наоборот, только начинается! Мы рассмотрели лишь самые простые комбинационные схемы (за исключением, может быть, ускоренного переноса). За бортом оказались дешифраторы, мультиплексоры, буферы и все последовательностные схемы (они несколько сложнее для понимания).
Кроме того, можно было бы спуститься на уровень ниже и рассказать о том, как собирать логические вентили из дискретных элементов — транзисторов, диодов и резисторов. В разные времена для этого использовали разные технологии, в зависимости от развития промышленности — ТТЛ (транзисторно-транзисторная логика), КМОП (комплиментарный металл-оксид-полупроводник) и другие.
Конечно, собранная самостоятельно на макетке схема с точки зрения производительности навсегда останется на уровне решений семидесятых годов прошлого века. И она никогда не сможет соперничать с современными многоядерными процессорами, с их многоуровневым кешем, блоками спекулятивных вычислений и параллелизмом.
С другой стороны, важно понимать, что основные принципы работы компьютеров не сильно изменились с тех пор. За исключением разве что квантовых машин, но это совсем другая история. Интересно, сможем ли мы когда-нибудь собирать квантовые компьютеры так же просто, как сейчас на основе полупроводниковых микросхем?