Проектирование функциональных узлов комбинационного типа

Курс предназначен для студентов технических вузов, знакомых с основами булевой алгебры, и охватывает проектирование комбинационных устройств на базе логических элементов. В центре внимания — синтез схем по таблицам истинности, минимизация логических функций, анализ временных диаграмм, а также устройство, расчет и применение типовых комбинационных узлов и АЛУ.

1. Шифраторы и дешифраторы

Шифраторы и дешифраторы

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

В комбинационной логике дешифратор и шифратор удобнее рассматривать как взаимно обратные по смыслу, но не по реализации устройства. Дешифратор получает двоичный код и активирует одну линию из множества. Шифратор получает одну активную линию из множества и формирует код её номера. Эта симметрия красива в теории, но на практике быстро ломается из-за неидеальности входных наборов, приоритетов и задержек.

Дешифратор как узел выбора одной линии

Дешифратор — это комбинационное устройство с входами и до выходов, в котором для каждого двоичного набора на входе активируется один определённый выход. Здесь — число входных переменных, а — число возможных комбинаций этих переменных. Для трёх входов получаем схему , для четырёх — .

Самая важная идея: каждый выход дешифратора — это минтерм входных переменных. Если входы обозначены как , , , то, например, выход для кода описывается выражением . Здесь , , соответствуют номеру 5 в двоичном представлении. Именно поэтому дешифратор часто воспринимают как «генератор минтермов».

Для дешифратора таблица особенно наглядна:

| A | B | Y0 | Y1 | Y2 | Y3 | |---|---|---|---|---|---| | 0 | 0 | 1 | 0 | 0 | 0 | | 0 | 1 | 0 | 1 | 0 | 0 | | 1 | 0 | 0 | 0 | 1 | 0 | | 1 | 1 | 0 | 0 | 0 | 1 |

Такую таблицу легко перевести в систему уравнений:

- - - -

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

> Дешифратор полезно мыслить не как «ещё одну микросхему», а как аппаратный способ развернуть код в множество адресных признаков.

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

Классический пример — адресация памяти. Пусть процессор выдаёт 4-разрядный адрес, а нужно выбрать один из 16 регистров. Дешифратор делает это напрямую: адрес активирует линию . Регистр 11 открывается на запись или чтение, остальные 15 остаются заблокированными.

!Сравнение структуры дешифратора и шифратора

Активные уровни и реальные микросхемы

Здесь начинается зона типичных ошибок. В учебных рисунках выход, как правило, активен высоким уровнем: выбранная линия равна 1. В серийных микросхемах часто наоборот — активный ноль. Это не косметика, а важное электрическое соглашение.

Например, дешифратор 74LS138 — очень распространённая микросхема — имеет активные низкие выходы. Это значит, что при выборе одной линии именно она переходит в 0, а остальные остаются в 1. Кроме того, у неё три входа разрешения, из которых один активен по высокому уровню, а два — по низкому. Такая организация удобна для каскадирования.

Сравнение учебной и реальной логики полезно держать в виде таблицы:

| Характеристика | Учебная модель | Типовая серия 74LS138 | |---|---|---| | Активный выход | 1 | 0 | | Вход разрешения | один, условный | три входа разрешения | | Внутренний смысл | минтерм | минтерм с инверсией на выходе | | Назначение | объяснение принципа | адресация и выбор кристаллов |

Если не учесть активный уровень, схема формально будет «правильной», но физически не заработает. Например, вход Chip Select у памяти может быть активным нулём, и именно поэтому 74LS138 удобно подключается к таким узлам почти без дополнительной логики.

Каскадирование дешифраторов

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

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

Шифратор и проблема неоднозначных входов

Шифратор выполняет обратное преобразование: если активна одна входная линия из , на выходе появляется её двоичный номер длиной бит. Для шифратора входы обозначим как , а выходы — , , .

Если активен только , то на выходе должен появиться код 101. Отсюда логические выражения для обычного шифратора:

- - -

Здесь знак означает логическое ИЛИ, а не арифметическое сложение. Например, если активен только , то , , , то есть код 110.

Но тут появляется фундаментальное ограничение: обычный шифратор корректно работает только при одном активном входе. Если одновременно активны и , выходной код становится неоднозначным и обычно не соответствует ни одному реальному номеру. В системах с кнопками, линиями запросов и асинхронными источниками это недопустимо.

Поэтому в практической цифровой технике используют в основном приоритетные шифраторы. У них заранее задан порядок важности входов. Если одновременно активны несколько линий, на выход передаётся код старшей по приоритету.

Возьмём входы как старший приоритет и как младший. Тогда при активных , и на выходе будет код 110, потому что выбран . Дополнительно часто формируются сигналы:

  • признак наличия хотя бы одного запроса;
  • признак группового переноса или каскадирования;
  • сигнал валидности кода.
  • > Приоритетный шифратор — это уже не просто «обратный дешифратор», а узел арбитража, который разрешает конфликт нескольких запросов.

    Типовой представитель — 74LS148, приоритетный шифратор с активными низкими входами и выходами. Его часто используют в системах прерываний: несколько устройств подают запросы, а схема выдаёт код наиболее приоритетного.

    Пошаговый синтез дешифратора по таблице

    Пусть требуется синтезировать узел, который по входам , , активирует выходы согласно стандартной функции . Это простой пример, но он хорошо показывает общий метод.

    Шаг 1. Задаём соответствие кода и выхода

    Каждой комбинации входов сопоставляется один выход:

  • 000 →
  • 001 →
  • 010 →
  • 011 →
  • 100 →
  • 101 →
  • 110 →
  • 111 →
  • Это кажется тривиальным, но именно здесь фиксируются порядок разрядов и соглашение, какой вход старший. Ошибка в старшинстве даст полностью рабочую, но логически неверную схему.

    Шаг 2. Выписываем минтермы

    Для каждого выхода записываем набор переменных с инверсией там, где в коде стоит 0:

    - - - - - - - -

    Для входа 110, например, получаем , , , поэтому . Эта запись не требует минимизации: каждый выход уже минимален в рамках своей функции.

    Шаг 3. Учитываем разрешение

    Если добавлен вход активного высокого уровня, каждое уравнение умножается на :

    - -

    Теперь при любой выход равен 0. Это типично для выбора узла только в нужный момент машинного цикла.

    Шаг 4. Переходим к реальной элементной базе

    Если доступны элементы И, НЕ и ИЛИ, схема строится напрямую. Если база ограничена, например только NAND, уравнения преобразуют по законам де Моргана. В ТТЛ-сериях это обычная практика, потому что NAND часто технологически выгоднее.

    Шаг 5. Проверяем временное поведение

    Формально дешифратор не имеет памяти, но его выходы не меняются мгновенно. При переключении входов может возникнуть кратковременный ложный импульс из-за разных задержек инверторов и элементов И. Если выход дешифратора управляет чувствительным входом записи, такой импульс способен вызвать ошибку.

    !Временная работа дешифратора при смене адреса

    Временные диаграммы и ложные срабатывания

    Переход от кода 011 к 100 особенно показателен: одновременно меняются все три входа. В идеальной булевой модели активный выход просто переносится с на . В реальной схеме один вход может переключиться за 8 нс, другой за 12 нс, третий за 15 нс. В промежутке кратко возникают комбинации 111, 110, 010 или другие.

    Отсюда два типичных эффекта:

  • ложное срабатывание соседнего выхода;
  • короткий интервал, когда не активен ни один выход.
  • Если дешифратор используется для адресации памяти, эти всплески часто безопасны, когда чтение/запись стробируются позже. Но если его выход напрямую открывает защёлку, формирует импульс запуска или переключает источник на шину, риск уже реальный.

    Практические способы снижения проблемы:

  • стробировать выходы отдельным сигналом разрешения;
  • менять адрес до активного фронта строба;
  • использовать синхронную фиксацию сигналов;
  • минимизировать глубину каскадирования;
  • учитывать паспортные задержки серии микросхем.
  • По данным типовых справочников по ТТЛ-сериям, задержки для LS-логики обычно лежат в диапазоне единиц и десятков наносекунд, и этого достаточно, чтобы на осциллограмме увидеть короткие паразитные интервалы. На макетной плате студент часто не замечает их светодиодом, но логический анализатор показывает проблему сразу.

    Маркировка и типовые серии

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

    Часто встречаются такие позиции:

    | Обозначение | Назначение | Комментарий | |---|---|---| | 74LS138 | дешифратор 3-в-8 | активные низкие выходы, 3 входа разрешения | | 74HC138 | дешифратор 3-в-8 | CMOS-вариант, иные электрические параметры | | 74LS148 | приоритетный шифратор 8-в-3 | активные низкие входы и выходы | | К555ИД7 | отечественный дешифратор | функционально близок ТТЛ-аналогам серии 74 | | К555ИВ1 | отечественный шифратор/приоритетный узел | зависит от конкретного справочника и исполнения |

    С сериями важно не перепутать логическую функцию и электрическое семейство. Например, LS и HC могут реализовывать одинаковую таблицу истинности, но иметь разные токи входов, допустимые уровни и энергопотребление. Это особенно критично при смешивании ТТЛ и CMOS в одной схеме.

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

    Где именно применяют эти узлы

    Дешифраторы чаще всего встречаются в таких задачах:

  • выбор кристалла памяти или периферии по части адресной шины;
  • управление семисегментными индикаторами через последующее декодирование;
  • выбор одного регистра из банка;
  • построение матриц опроса.
  • Шифраторы и приоритетные шифраторы типичны для других задач:

  • кодирование нажатой клавиши в двоичный номер;
  • обработка нескольких запросов прерывания;
  • формирование адреса активного канала;
  • сокращение числа линий при передаче взаимно исключающих состояний.
  • Реальный пример — контроллер прерываний в микропроцессорной системе. Несколько устройств одновременно требуют обслуживания: таймер, UART, АЦП. Приоритетный шифратор или совместимый с ним узел формирует код наиболее важного запроса, а процессор получает не «россыпь линий», а компактный адрес источника.

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

    2. Мультиплексоры и демультиплексоры

    Мультиплексоры и демультиплексоры

    Если восемь источников данных нужно по очереди подключать к одной линии, собирать это на россыпи элементов И-ИЛИ можно, но уже после второй лабораторной становится ясно: проще и правильнее использовать специализированный узел. Мультиплексор фактически выполняет управляемую коммутацию данных, а демультиплексор — обратную операцию распределения. Эти устройства выглядят как «логические переключатели», но в проектировании они ценны не только этим: на их основе синтезируют функции, строят тракты передачи и уменьшают число межсоединений.

    Связь с предыдущей темой здесь прямая. Дешифратор разворачивал адрес в одну активную линию. Мультиплексор делает следующий шаг: использует адресные линии, чтобы выбрать какой именно информационный сигнал пройдёт на выход. Поэтому студент, хорошо понимающий дешифратор, обычно быстро схватывает внутреннюю логику MUX.

    Как работает мультиплексор

    Мультиплексор — это комбинационное устройство, которое передаёт на единственный выход один из нескольких информационных входов в зависимости от состояния адресных входов. Для схемы требуется адресных линий. Например, мультиплексор использует два селекторных входа.

    Пусть информационные входы — , , , , адресные — , , выход — . Тогда таблица выбора такова:

    | | | | |---|---|---| | 0 | 0 | | | 0 | 1 | | | 1 | 0 | | | 1 | 1 | |

    Это можно записать одним уравнением: .

    Здесь каждая конъюнкция адресных переменных выбирает ровно один канал, а логическое ИЛИ объединяет их на выходе. Символы и — адресные входы, — данные, — выходной сигнал. По сути это дешифратор, который формирует сигналы выбора, и набор элементов И, открывающих нужный информационный канал.

    Ключевой инженерный смысл: мультиплексор отделяет управление выбором от содержимого данных. Если на подан меняющийся сигнал, а адрес равен 10, на выходе повторяется именно он. Если адрес меняется, меняется не функция данных, а маршрут прохождения сигнала.

    > Мультиплексор — это не просто «один из входов на выход», а универсальный узел управляемого выбора, который легко встроить в большие цифровые структуры.

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

    Внутренняя структура и связь с дешифратором

    Понять мультиплексор проще через структуру. Его можно представить как три части:

  • инверторы для получения адресных переменных и их отрицаний;
  • узел выбора, фактически формирующий сигналы «разрешить канал 0», «разрешить канал 1» и так далее;
  • объединяющую схему, пропускающую выбранный вход на выход.
  • Именно поэтому MUX часто рисуют как «треугольник» или прямоугольный блок, хотя внутри там вполне конкретная комбинационная логика. Для схемы нужны три адресных входа и восемь информационных линий. При коде 101 выбирается .

    !Структурное сравнение мультиплексора и демультиплексора

    С инженерной точки зрения у мультиплексора два особенно ценных свойства:

  • он сокращает число линий передачи, когда много источников делят один канал;
  • он позволяет реализовать произвольные логические функции, если правильно подключить входы данных.
  • Первое свойство очевидно на примере датчиков. Вместо четырёх отдельных трактов можно по очереди опрашивать четыре источника через один MUX и общую линию обработки. Второе кажется менее интуитивным, но именно оно делает мультиплексор базовым строительным блоком.

    Реализация логической функции на мультиплексоре

    Пусть требуется построить функцию трёх переменных , которая равна 1 для наборов 1, 2, 6, 7. В записи через минтермы это . Строить её только на элементах И-ИЛИ можно, но мультиплексор часто даёт более компактную реализацию.

    Идея в том, чтобы часть переменных использовать как адресные, а оставшуюся — подать в подходящем виде на информационные входы. Возьмём и как адресные линии, а оставим информационной переменной.

    Рассмотрим наборы по адресам :

    | A | B | Какие строки входят | Значение F | |---|---|---|---| | 0 | 0 | 000, 001 | 0, 1 | | 0 | 1 | 010, 011 | 1, 0 | | 1 | 0 | 100, 101 | 0, 0 | | 1 | 1 | 110, 111 | 1, 1 |

    Теперь для каждого адреса определяем, что надо подать на входы MUX:

  • при функция совпадает с , значит ;
  • при функция равна , значит ;
  • при функция всегда 0, значит ;
  • при функция всегда 1, значит .
  • Итог: один мультиплексор и, при необходимости, инвертор для реализуют функцию полностью. В этом подходе особенно ценна системность: вместо полной минимизации по Карно можно получить рабочую схему через разложение по переменным.

    Почему это удобно

    Такой способ проектирования полезен в трёх случаях:

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

    Демультиплексор как распределитель сигнала

    Демультиплексор выполняет обратное по направлению действие: один входной сигнал направляется на один из многих выходов, выбранный адресными линиями. Для схемы при адресе 10 входной сигнал окажется только на выходе .

    Если вход данных обозначить как , а адресные линии как , , получим:

    - - - -

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

    Типичные применения демультиплексора:

  • распределение общего потока данных по каналам;
  • поочерёдная запись в несколько регистров;
  • сканирование индикаторов;
  • адресная подача управляющего импульса.
  • Хороший пример — динамическая индикация. Один источник сегментных кодов последовательно направляется на разные разряды индикатора, а демультиплексор или дешифратор выбора разряда включает нужный разряд в нужный момент. Глаз видит непрерывное свечение, хотя физически каналы работают по очереди.

    Пошаговый синтез схемы на мультиплексоре

    Разберём более системно задачу реализации функции на MUX .

    Шаг 1. Выбор адресных переменных

    Берём две переменные для селектора: и . Это определяет четыре группы строк таблицы истинности. Третья переменная будет задавать наполнение информационных входов.

    Этот выбор не единственный. Можно взять и , а оставить информационной, но сложность входных функций может получиться другой.

    Шаг 2. Группировка строк

    Разбиваем таблицу истинности на четыре пары строк по значениям :

  • → строки 000 и 001;
  • → строки 010 и 011;
  • → строки 100 и 101;
  • → строки 110 и 111.
  • Такой разрез полезен потому, что внутри каждой пары меняется только . Следовательно, зависимость либо равна 0, либо 1, либо , либо .

    Шаг 3. Определение входов данных

    По значениям функции получаем:

  • ,
  • ,
  • ,
  • .
  • Здесь важен навык видеть шаблон. Последовательность 0,1 при изменении — это просто . Последовательность 1,0 — это .

    Шаг 4. Учёт реальной микросхемы

    Если используется, например, 74LS153, нужно проверить:

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

    Шаг 5. Проверка временной диаграммы

    При изменении адреса на выходе может кратко появиться не тот канал, особенно если селекторные входы приходят не одновременно. Если MUX коммутирует данные на синхронный регистр, проблему обычно решает правильное расположение фронта тактового сигнала. Если же выход сразу идёт на чувствительный асинхронный вход, нужна особая осторожность.

    !Переключение каналов мультиплексора во времени

    Каскадирование и расширение разрядности

    Один корпус редко решает всю задачу. Чтобы получить MUX , часто каскадируют несколько MUX и один дополнительный на следующем уровне. Нижний уровень выбирает один сигнал из каждой четвёрки, верхний — один из четырёх промежуточных.

    Такое дерево удобно, но вводит две инженерные цены:

  • увеличивается задержка распространения;
  • возрастают требования к согласованности адресных сигналов.
  • Если нижний уровень уже переключился, а верхний ещё нет, на короткое время на выходе может появиться промежуточное состояние. В простых задачах это незаметно. В высокочастотных трактах или при формировании управляющих импульсов — уже критично.

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

    Типовые микросхемы и маркировка

    Ниже — несколько узлов, которые часто встречаются в учебных и практических схемах:

    | Обозначение | Назначение | Комментарий | |---|---|---| | 74LS151 | мультиплексор 8-в-1 | имеет инверсный и прямой выходы в ряде исполнений | | 74HC151 | мультиплексор 8-в-1 | CMOS-аналог с иными электрическими параметрами | | 74LS153 | двойной мультиплексор 4-в-1 | два независимых канала в одном корпусе | | 74LS157 | четырёхразрядный 2-в-1 | удобен для выбора между двумя шинами | | 74LS138 | дешифратор 3-в-8 | часто используется как основа демультиплексирования | | К555КП11 | отечественный мультиплексор | конкретные параметры уточняют по справочнику |

    Особенно полезен 74LS157. Он не выглядит как «классический многовходовый MUX», но на практике чрезвычайно важен: четыре параллельных канала 2-в-1 позволяют выбирать, например, между двумя 4-разрядными шинами данных. Это уже очень близко к структурам АЛУ, где нужно подавать на тракт один из нескольких операндов.

    Частые ошибки проектирования

    Студенты чаще всего допускают не булевы, а структурные ошибки:

  • путают информационные и адресные входы;
  • забывают про вход разрешения;
  • игнорируют активные низкие сигналы;
  • считают MUX идеальным переключателем без задержки;
  • не проверяют, что при каскадировании сохраняется правильный порядок каналов.
  • Отдельная тонкость — использование мультиплексора для логической функции без осознанного выбора переменных разложения. Если взять «неудачные» адресные переменные, схема останется корректной, но потребует больше инверсий и дополнительных связей.

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

    3. Цифровые компараторы

    Цифровые компараторы

    Два двоичных числа длиной всего 4 бита можно сравнить «в уме» за секунду: сначала смотрим старший разряд, потом следующий и так далее. Но именно эта кажущаяся простота часто мешает понять аппаратную реализацию. В схеме нельзя просто написать «смотрим слева направо» — нужно превратить это правило в набор логических признаков, которые работают одновременно и с учётом задержек.

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

    Логика одноразрядного сравнения

    Начинать удобно с одного бита. Пусть есть два входа: и . Для них возможны четыре комбинации:

    | A | B | A>B | A<B | A=B | |---|---|---|---|---| | 0 | 0 | 0 | 0 | 1 | | 0 | 1 | 0 | 1 | 0 | | 1 | 0 | 1 | 0 | 0 | | 1 | 1 | 0 | 0 | 1 |

    Из таблицы прямо получаются уравнения:

    - - -

    Здесь — признак «больше», — признак «меньше», — признак «равно». Последнее выражение эквивалентно функции XNOR: равенство истинно, когда оба бита совпадают.

    Это важный момент: равенство — не остаточный признак, а самостоятельная логическая функция. Если её не выделить явно, каскадирование многоразрядного сравнения становится громоздким. В аппаратной логике как раз удобно сначала выяснять, равны ли пары разрядов, а затем использовать этот результат для анализа старшинства.

    Короткий числовой пример: при , сразу имеем , , . Здесь ничего больше анализировать не нужно. Но если и , компаратор не говорит «числа равны полностью», он говорит лишь «эти биты равны, решение надо искать дальше, если старшие ещё не различили числа».

    > В многоразрядном сравнении признак равенства работает как разрешение продолжать анализ младших разрядов.

    Сравнение многоразрядных чисел

    Для двоичных слов действует простое правило: исход сравнения определяет старший разряд, в котором числа различаются. Например, 1010 больше 1001 не потому, что сумма единиц больше, а потому, что уже на третьем бите слева имеем 1 против 0.

    Если записать 4-разрядные операнды как и , где индекс 3 — старший разряд, сравнение строится каскадно. Сначала проверяется пара , . Если они различны, решение окончательное. Если равны, смотрим , и так далее.

    Это можно формализовать так. Пусть:

  • — признак равенства в разряде ,
  • — признак ,
  • — признак .
  • Тогда для 4-разрядного компаратора:

    - - -

    Здесь знак означает логическое ИЛИ, а произведение — логическое И. Смысл выражения для таков: либо старший разряд уже даёт превосходство, либо он равен и превосходство появляется в следующем, и так далее.

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

    Структура компаратора и каскадирование

    В аппаратной реализации удобно разделить узел на два слоя:

  • локальное сравнение каждого разряда;
  • цепь распространения решения от старших разрядов к младшим.
  • Такую структуру можно построить из базовых элементов, но в практике часто используют готовые микросхемы. Типовой пример — 74LS85, 4-разрядный компаратор. Он выдаёт три признака: , , , а также имеет каскадные входы для связи нескольких корпусов при сравнении более длинных слов.

    !Структура одноразрядного и каскадного компаратора

    Каскадные входы нужны потому, что один 4-разрядный блок может быть частью 8- или 16-разрядного сравнения. Старший корпус анализирует верхние биты. Если они равны, его результат «равно» разрешает младшему блоку определить исход по младшим разрядам. Если старший уже выдал «больше» или «меньше», младший не должен это решение переопределять.

    Это инженерно изящно: вместо полной ручной сборки длинной цепочки разработчик соединяет стандартные блоки. Но цена — снова задержка. Чем больше каскадов, тем позже формируется итоговый признак.

    Пошаговый разбор 4-разрядного сравнения

    Сравним числа и . Это пример хорош тем, что различие появляется не в младшем, а в одном из средних разрядов.

    Шаг 1. Проверяем старший разряд

    Старшие биты: , . Значит, в этом разряде:

  • ,
  • ,
  • .
  • Решение пока не найдено. Старший разряд равен, значит анализ должен идти дальше.

    Шаг 2. Переходим ко второму разряду

    Теперь , . Получаем:

  • ,
  • ,
  • .
  • Ситуация сохраняется: различия всё ещё нет. Для схемы это означает, что цепь равенства продолжает «пропускать» решение вниз.

    Шаг 3. Анализируем третий разряд

    Здесь уже , . Следовательно:

  • ,
  • ,
  • .
  • Это критический разряд. Поскольку все более старшие разряды были равны, именно здесь фиксируется окончательный вывод .

    Шаг 4. Младший разряд больше не влияет

    Хотя , , этот факт уже не имеет значения. Младший бит не может отменить решение, принятое старшим значимым различием. В формуле это видно по множителям : они разрешили учесть и тем самым закрыли вопрос.

    Шаг 5. Формируем итоговые признаки

    В итоге:

  • ,
  • ,
  • .
  • Это совпадает с обычной арифметикой: двоичное 1010 равно десятичному 10, а 1001 — десятичному 9.

    Такой разбор особенно полезен при отладке. Если лабораторная схема даёт неверный результат, нужно смотреть не только финальный выход, но и локальные признаки по разрядам. Ошибка часто находится либо в перепутанной старшинстве шин, либо в неверно подключённом каскадном входе.

    !Пошаговое сравнение разрядов во времени

    Компаратор как часть системы

    В учебных схемах компаратор часто воспринимают как отдельный законченный блок. В реальных устройствах он почти всегда встроен в более широкую логику принятия решения. Например:

  • в системе контроля порога проверяется, превышает ли код АЦП допустимое значение;
  • в адресной логике определяется, попадает ли адрес в заданный диапазон;
  • в АЛУ формируется флаг равенства или знакового отношения;
  • в цифровом управлении сравниваются текущий и опорный коды.
  • Возьмём диапазон адресов. Если нужно определить, принадлежит ли адрес области от 1000 до 1111, один компаратор может проверять нижнюю границу, другой — верхнюю. Далее результаты объединяются логикой И. Внешне задача похожа на арифметическую, но по сути это всё тот же компаратор как источник признаков отношения.

    Временные диаграммы и практические ограничения

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

    В синхронных системах это обычно решается просто: результат сравнения считывается только после выдержки времени установления. В асинхронных схемах проблема серьёзнее. Тогда применяют:

  • согласование времени прихода операндов;
  • буферизацию и регистрацию входов;
  • синхронный захват выходных признаков;
  • сокращение глубины каскадов.
  • По паспортным данным типовых ТТЛ-компараторов задержка распространения составляет единицы-десятки наносекунд. Для учебного стенда это кажется мелочью, но при частотах в десятки мегагерц уже становится параметром расчёта, а не декоративной цифрой.

    Типовые микросхемы и маркировка

    В учебных курсах и справочниках чаще всего встречаются такие обозначения:

    | Обозначение | Назначение | Комментарий | |---|---|---| | 74LS85 | 4-разрядный компаратор | признаки A>B, A<B, A=B, каскадные входы | | 74HC85 | 4-разрядный компаратор | CMOS-аналог с другой электрической совместимостью | | К555СП1 | отечественный цифровой компаратор | функциональный аналог в ТТЛ-семействе | | КР1533СП1 | отечественная серия повышенного быстродействия | требует сверки по конкретному справочнику |

    При выборе серии важно смотреть не только функцию сравнения, но и:

  • уровни логического нуля и единицы;
  • нагрузочную способность выходов;
  • тип входов каскадирования;
  • задержку распространения.
  • Особенно опасна ошибка, когда разработчик воспринимает каскадные входы как необязательные и оставляет их «в воздухе». Для компаратора это недопустимо: неинициализированные каскадные сигналы приводят к непредсказуемому результату.

    Частые заблуждения

    Есть три устойчивые ошибки понимания.

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

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

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

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

    4. Сумматоры

    Сумматоры

    В двоичной арифметике самая дорогая по времени операция — не получение бита суммы, а ожидание, пока станет известен перенос из младшего разряда. Именно поэтому сумматор — не просто набор XOR и AND, а центральный узел, вокруг которого строится арифметический тракт. Если понять, как рождается и распространяется перенос, становится проще и вычитание, и сравнение, и работа АЛУ.

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

    Полусумматор: сложение без входного переноса

    Самый простой случай — сложение двух одноразрядных чисел и . Возможны четыре комбинации:

    | A | B | S | C | |---|---|---|---| | 0 | 0 | 0 | 0 | | 0 | 1 | 1 | 0 | | 1 | 0 | 1 | 0 | | 1 | 1 | 0 | 1 |

    Здесь — бит суммы, — перенос. Из таблицы получаем:

    - -

    Символ обозначает исключающее ИЛИ: сумма равна 1, когда входы различны. Перенос появляется только тогда, когда оба входа равны 1. Такой узел называют полусумматором.

    Он хорошо объясняет логику двоичного сложения: 1 + 1 даёт 0 в текущем разряде и 1 переноса в следующий. Но полусумматор почти никогда не используется как самостоятельный многоразрядный строительный блок, потому что не умеет принимать перенос от младшего разряда.

    Короткий пример: при сложении 1 и 1 полусумматор выдаёт , . Это полностью соответствует двоичному результату 10. Для младшего разряда этого достаточно, а для всех остальных — уже нет.

    Полный сумматор и его уравнения

    Полный сумматор принимает три входа: , и , где — входной перенос из предыдущего разряда. Выходов два: сумма и выходной перенос .

    Таблица истинности здесь шире, но результат можно записать компактно:

    - -

    Первое уравнение означает: сумма равна 1, когда среди трёх входов нечётное число единиц. Второе показывает, что перенос возникает, если единичны как минимум два из трёх входов.

    Эту логику удобно понимать через «голосование большинства». Если хотя бы два сигнала из , , равны 1, на выход переноса идёт 1. Например, для набора 1, 0, 1 сумма равна 0, а перенос равен 1, потому что единиц две.

    Есть и структурно важное представление полного сумматора через два полусумматора:

  • сначала складываются и ;
  • затем промежуточная сумма складывается с ;
  • переносы этих этапов объединяются через ИЛИ.
  • Такое разложение полезно и для понимания, и для практической сборки в дискретной логике.

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

    Каскадный многоразрядный сумматор

    Чтобы сложить два 4-разрядных слова, четыре полных сумматора соединяют последовательно. Выходной перенос младшего разряда становится входным переносом следующего. Такая структура называется последовательным по переносу, или ripple-carry adder.

    Пусть складываются:

  • ,
  • .
  • Младший разряд получает внешний входной перенос, обычно . Затем формируются:

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

    !Структура полусумматора, полного сумматора и каскадного сумматора

    Простой пример: 0111 + 0001. Младший разряд даёт 0 и перенос 1. Следующий разряд снова получает перенос и тоже выдаёт 0 с переносом 1. Процесс повторяется до старшего значащего бита. Именно поэтому результат 1000 «рождается справа налево».

    Пошаговый разбор сложения 0111 + 0001

    Этот пример специально выбран для демонстрации длинной цепочки переноса.

    Шаг 1. Младший разряд

    Складываем , , .

    По формулам: - -

    Уже здесь видно, что локально сумма нулевая, но работа ещё не закончена: перенос ушёл дальше.

    Шаг 2. Второй разряд

    Теперь , , .

    Получаем: - -

    Опять та же картина: бит суммы 0, перенос сохраняется.

    Шаг 3. Третий разряд

    Для , , : - -

    С математической точки зрения ничего неожиданного: прибавление единицы к 111 разворачивает длинную цепочку переносов.

    Шаг 4. Старший разряд

    Теперь , , : - -

    Итоговая сумма равна 1000. Дополнительного переноса за пределы 4 бит нет.

    Шаг 5. Что показывает этот пример

    Локально каждый разряд был прост. Но итоговый результат сформировался только после последовательного прохождения переноса через три ячейки. В этом и состоит главная временная цена ripple-carry сумматора.

    !Распространение переноса по разрядам

    Переполнение и смысл старшего переноса

    В проектировании важно различать перенос и переполнение. Для беззнаковых чисел выходной перенос из старшего разряда означает, что результат не помещается в заданную разрядность. Например, 1111 + 0001 в 4-битном формате даёт 0000 и перенос 1.

    Для знаковых чисел в дополнительном коде ситуация сложнее. Там ориентироваться только на старший перенос нельзя. Признак переполнения определяется несовпадением переноса в знаковый разряд и переноса из него. Это уже шаг к архитектуре АЛУ, но базовая идея появляется именно здесь.

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

    Сумматор как универсальный арифметический узел

    Почему сумматор занимает центральное место в цифровой арифметике? Потому что через него реализуют не только сложение.

    На его основе строят:

  • вычитание через сложение с дополнительным кодом;
  • инкремент и декремент;
  • сравнение через анализ разности и флагов;
  • часть операций АЛУ.
  • Например, вычитание можно реализовать как . Здесь — инверсия каждого бита , а добавление единицы завершает формирование дополнительного кода. Поэтому многие АЛУ содержат один основной сумматор и набор управляющих сигналов, которые определяют, какие данные подать на его входы.

    Более быстрые схемы и цена ускорения

    Каскадный сумматор прост, но медленен. Если разрядность растёт, перенос становится узким местом. Поэтому используют более быстрые структуры, самая известная из которых — сумматор с ускоренным переносом.

    Идея здесь такая: для каждого разряда заранее оценивают два свойства:

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

    С инженерной стороны ускорение не бесплатно. За меньшее время платят:

  • увеличением аппаратурных затрат;
  • ростом числа соединений;
  • усложнением разводки и анализа.
  • Поэтому для малой разрядности и учебных устройств ripple-carry часто вполне рационален.

    Типовые микросхемы и маркировка

    Для практики полезно знать несколько стандартных узлов:

    | Обозначение | Назначение | Комментарий | |---|---|---| | 74LS83 | 4-разрядный полный сумматор | классический параллельный сумматор с входным и выходным переносом | | 74HC283 | 4-разрядный сумматор | CMOS-аналог, распространён в учебных макетах | | К555ИМ6 | отечественный 4-разрядный сумматор | применяется в ТТЛ-сериях | | КР1533ИМ3 | быстродействующий сумматор серии 1533 | уточняется по справочнику |

    Обращать внимание нужно на:

  • наличие входного и выходного переноса;
  • активные уровни управляющих сигналов, если они есть;
  • задержку распространения;
  • электрическую совместимость серии.
  • На лабораторной ошибку часто вызывает неверное подключение начального переноса. Если при обычном сложении вместо случайно подать 1, схема начнёт постоянно прибавлять лишнюю единицу. Это уже не дефект логики, а дефект инициализации режима.

    Что чаще всего понимают неправильно

    Есть три типичные ошибки.

    Первая: считают, что XOR «сам по себе делает сложение». На самом деле XOR даёт только бит суммы без учёта всей логики переноса. Полный сумматор невозможен без правильной схемы формирования .

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

    Третья: смешивают перенос и переполнение. Эта ошибка потом переносится в АЛУ и приводит к неверной интерпретации флагов состояния.

    Если из этой главы запомнить три вещи — это: полный сумматор отличается от полусумматора наличием входного переноса, в многоразрядной схеме время часто определяется распространением переноса, и один и тот же сумматор можно использовать как основу не только сложения, но и вычитания и формирования флагов. Тогда арифметический узел перестаёт быть набором формул и становится понятной инженерной конструкцией.

    5. Арифметико-логическое устройство: способы организации АЛУ

    Арифметико-логическое устройство: способы организации АЛУ

    Внутри даже простого процессорного тракта редко существует отдельный «блок сложения», отдельный «блок сравнения» и отдельный «блок логических операций», работающие совершенно независимо. Почти всегда эти функции объединяются в арифметико-логическом устройстве, где одна и та же входная инфраструктура, система выбора и набор флагов обслуживают целую группу операций. Поэтому проектирование АЛУ — это уже не задача одной функции, а задача архитектуры комбинационного узла.

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

    Что делает АЛУ

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

    В минимальном варианте АЛУ поддерживает:

  • логические операции И, ИЛИ, XOR, НЕ;
  • арифметические операции сложения и вычитания;
  • инкремент, декремент, иногда передачу одного из операндов без изменений;
  • формирование флагов нуля, переноса, знака, переполнения, равенства.
  • Смысл АЛУ не в том, чтобы «уметь всё», а в том, чтобы в одной стандартной структуре быстро выбирать одну из нескольких операций. Именно поэтому ключевым проектным вопросом становится не отдельное уравнение суммы, а способ организации внутренних трактов.

    > Хорошее АЛУ — это не набор разрозненных операций, а единый вычислительный канал с чёткой системой выбора и общими правилами формирования флагов.

    Способ первый: параллельная организация с выбором результата

    Самый прямой подход — реализовать каждую операцию отдельным подблоком, а затем выбрать нужный результат выходным мультиплексором. Например, для 4-разрядного АЛУ можно иметь:

  • блок логического И;
  • блок логического ИЛИ;
  • блок XOR;
  • сумматор;
  • вычитатель или сумматор в режиме вычитания;
  • блок сравнения или логику флагов.
  • Все эти узлы получают одни и те же операнды и одновременно. Каждый вычисляет свой результат, а код операции выбирает, какой из них попадёт на выход .

    Главное достоинство такого подхода — простота понимания и проектирования. Каждая функция существует явно, её легко тестировать отдельно, а выходной мультиплексор делает финальный выбор. Для учебных схем это почти идеальная структура.

    Но есть и цена:

  • увеличивается аппаратурная избыточность;
  • растёт потребляемая мощность;
  • итоговый выходной MUX может стать узким местом по задержке;
  • часть блоков постоянно считает ненужные результаты.
  • На малой разрядности это не страшно. Для сложных АЛУ уже возникает вопрос рациональности: нужно ли иметь отдельный вычитатель, если вычитание можно выполнить тем же сумматором?

    Способ второй: единый арифметический тракт на базе сумматора

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

    Идея такова:

  • для сложения на входы подаются и , а начальный перенос равен 0;
  • для вычитания подаются и , а начальный перенос равен 1;
  • для инкремента на один вход подаётся , на второй — 0, а начальный перенос равен 1;
  • для декремента используются аналогичные комбинации с инверсией и константами.
  • Этот подход резко уменьшает аппаратурные затраты. Один и тот же сумматор обслуживает целый класс операций. Логика управления должна только сформировать правильные сигналы выбора: инвертировать ли , подать ли константу 0 или 1, какой начальный перенос установить.

    Удобно представить это таблицей:

    | Операция | Вход X сумматора | Вход Y сумматора | Начальный перенос | |---|---|---|---| | | | | 0 | | | | | 1 | | | | 0 | 1 | | | | все 1 | 0 |

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

    Так строятся многие реальные АЛУ: арифметика концентрируется вокруг одного сумматора, а окружающие мультиплексоры и инверторы задают режим.

    Способ третий: бит-срезовая организация

    Когда разрядность растёт, удобно мыслить АЛУ не как один большой блок, а как повторяющийся разрядный срез. Каждый срез обрабатывает один бит операндов и получает часть общих управляющих сигналов. Для 4-разрядного АЛУ четыре одинаковых среза соединяются по цепям переноса и, при необходимости, по цепям распространения признаков.

    Внутри одного среза обычно есть:

  • логические элементы для И, ИЛИ, XOR;
  • часть полного сумматора;
  • мультиплексор выбора локального результата;
  • логика формирования локальных флагов.
  • Такой подход называется bit-slice. Он очень удобен в трёх ситуациях:

  • когда нужно масштабировать разрядность;
  • когда есть готовые стандартные срезы;
  • когда проектируется модульная арифметика.
  • Исторически bit-slice подход был особенно важен в эпоху, когда широкие АЛУ собирали из нескольких одинаковых микросхем. Но и как учебная модель он полезен, потому что показывает: большая арифметика строится из повторяемых локальных клеток, а не из «магического общего блока».

    !Структурные способы организации АЛУ

    Способ четвёртый: разделение логического и арифметического трактов

    Иногда рационально выделить два подканала:

  • логический тракт, где операции И, ИЛИ, XOR выполняются напрямую;
  • арифметический тракт, где работает сумматор и связанные с ним режимы.
  • После этого финальный мультиплексор выбирает, какой тракт формирует итоговый выход. Такая структура сочетает достоинства двух предыдущих подходов. Логические операции не нагружают арифметический тракт, а арифметические не требуют отдельных громоздких блоков.

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

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

    Формирование флагов состояния

    АЛУ почти никогда не ограничивается только результатом . Оно формирует флаги состояния, которые используются последующей управляющей логикой. Наиболее типичные:

  • C — перенос;
  • Z — нулевой результат;
  • N или S — знак, обычно копия старшего бита результата;
  • V — переполнение для знаковой арифметики;
  • EQ — равенство, если предусмотрена отдельная логика сравнения.
  • Флаг нуля обычно получается просто: все биты результата объединяют через ИЛИ, а затем инвертируют. Если все биты равны 0, итоговый флаг .

    Флаг переноса зависит от арифметической операции. Для логических функций он либо обнуляется, либо сохраняется по правилам архитектуры. И вот здесь появляется важный проектный выбор: должны ли флаги быть универсальными для всех операций или специализированными по классам команд. Чем проще учебное АЛУ, тем чаще выбирают первый вариант; чем ближе схема к реальному процессору, тем больше нюансов.

    Флаг переполнения особенно важен. Для знакового сложения он определяется не просто выходным переносом, а сравнением переносов в знаковый разряд и из него. Это та самая идея, которая уже появилась в теме сумматоров, но внутри АЛУ она становится системным правилом.

    Пошаговый разбор проектирования простого 4-разрядного АЛУ

    Пусть нужно спроектировать АЛУ, поддерживающее операции:

  • ,
  • ,
  • ,
  • ,
  • .
  • Выход — 4-разрядный результат и флаги , , .

    Шаг 1. Определяем код операции

    Выделим 3 управляющих бита. Например:

    | Код | Операция | |---|---| | 000 | AND | | 001 | OR | | 010 | XOR | | 011 | ADD | | 100 | SUB |

    Остальные комбинации можно зарезервировать под будущие операции. Это решение влияет не на математику, а на архитектуру управления.

    Шаг 2. Строим логический тракт

    Параллельно формируем три 4-разрядных результата:

  • ,
  • ,
  • .
  • Каждый из них строится побитно и не требует межразрядных связей. Поэтому логический тракт обычно быстрый и структурно простой.

    Шаг 3. Строим арифметический тракт

    Используем один 4-разрядный сумматор. Для ADD на второй вход идёт , для SUB — , а начальный перенос ставится в 1. Фактически один управляющий сигнал определяет, нужно ли инвертировать , и тот же сигнал можно подать как начальный перенос.

    Это elegant-решение: одна линия управления превращает сложение в вычитание. Для учебного АЛУ это один из самых важных архитектурных приёмов.

    Шаг 4. Выбираем итоговый результат

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

    Шаг 5. Формируем флаги

  • вычисляется по выбранному результату.
  • имеет смысл только для арифметики, значит для логических операций его либо сбрасывают, либо определяют по соглашению.
  • формируется только для ADD и SUB по правилам знакового переполнения.
  • Такой набор уже достаточен, чтобы АЛУ стало центральным узлом небольшой учебной процессорной схемы.

    Типовые микросхемы и исторические решения

    В учебном и историческом контексте особенно известна микросхема 74181 — классическое 4-разрядное АЛУ. Она поддерживает широкий набор арифметических и логических функций и долго служила эталонным примером bit-slice организации. Даже если в современной практике чаще используют ПЛИС и встроенные арифметические ресурсы, с точки зрения архитектуры 74181 остаётся очень поучительной.

    Полезно помнить и о связке стандартных компонентов:

    | Обозначение | Назначение | Роль в АЛУ | |---|---|---| | 74181 | 4-разрядное АЛУ | готовый функциональный блок | | 74LS83 / 74HC283 | 4-разрядный сумматор | арифметическое ядро | | 74LS157 | 4×(2-в-1) мультиплексор | выбор операндов или результата | | 74LS153 / 74LS151 | мультиплексоры | выбор режимов и каналов | | 74LS85 | компаратор | отдельное формирование признаков сравнения |

    В дискретном проектировании можно либо взять готовое АЛУ, либо собрать его из перечисленных узлов. Первый путь быстрее. Второй лучше раскрывает внутреннюю логику проектирования.

    Что выбирают на практике

    Выбор способа организации зависит от цели.

    Если нужна учебная прозрачность, лучше параллельная архитектура: она наглядно показывает, где рождается каждая операция.

    Если важна аппаратурная экономия, выгоднее единый сумматор с управляемой подготовкой входов.

    Если нужна масштабируемость, лучше bit-slice организация.

    Если важен баланс задержек, разумно разделять логический и арифметический тракты.

    Часто реальные АЛУ сочетают сразу несколько принципов: арифметика централизована вокруг сумматора, логика вынесена в отдельный тракт, а вся схема организована по разрядным срезам.

    Если из этой главы запомнить три вещи — это: АЛУ проектируют не как одну формулу, а как архитектуру выбора операций, сумматор обычно становится ядром арифметического тракта, и качество АЛУ определяется не только набором функций, но и способом организации флагов, мультиплексоров и разрядных связей. Именно здесь комбинационная логика превращается в системный узел, из которого уже можно строить процессорный тракт.