Вы находитесь на странице: 1из 39

1.

ЛОГИЧЕСКИЕ ОСНОВЫ ЦИФРОВЫХ АВТОМАТОВ

1.1. Логические операции и логические элементы


В вычислительных системах (ВС) существует два вида преобразования информации:
преобразования, определяемые правилами выполнения арифметических операций, и
логические преобразования (логические операции).
В 1938 г. американский ученый К. Шеннон применил формальные математические
методы для решения задач, связанных с логическими преобразованиями информации,
которые были описаны еще в XIX в. Дж. Булем в теории исчисления высказываний.
Разработанный математический аппарат является разделом математической логики и
называется алгеброй логики, или булевой алгеброй. Основным понятием алгебры логики
является высказывание. Под высказыванием понимается всякое предложение, которое
либо истинно, либо ложно, и притом только одно из двух. В алгебре логики принято
отождествлять истинность высказывания с символом 1, а ложность — с символом 0 и
рассматривать эти символы как двоичные логические (булевы) переменные, т. е. такие
переменные, которые могут принимать только одно из двух возможных значений.
Высказывания могут быть простыми и сложными. Высказывание называется
простым, если его значение истинности не зависит от значений истинности других
высказываний (например, Вена - столица Австрии, снег черен). Высказывание, значение
истинности которого зависит от значения истинности других высказываний, называется
сложным. Любое сложное высказывание можно считать логической (булевой) функцией
некоторых двоичных аргументов — простых высказываний, входящих в его состав.
Логическим элементом называется схема, реализующая некоторую булеву функцию
и имеющая количество входов, равное числу аргументов функции, и только один выход. В
ВС логические элементы выполнены с помощью интегральной технологии и
представляют собой интегральные схемы малой и средней интеграции.
Рассмотрим основные логические операции и соответствующие им логические
элементы, используя которые можно реализовать логическую функцию любой заданной
сложности. В алгебре логики булевы функции удобно изображать в виде таблиц
соответствия всех возможных комбинаций значений истинности аргументов (входных
двоичных переменных) и логической функции (выходной двоичной переменной). Такие
таблицы называются таблицами истинности.
Логическая операция КОНЪЮНКЦИЯ (И). КОНЪЮНКЦИЕЙ (логическим
умножением) называется логическая операция, при выполнении которой формируется
булева функция от двух или более аргументов, истинная тогда и только тогда, когда
истинны все ее аргументы одновременно. Если обозначить аргументы функции от двух
переменных х1 и х2 , а функцию - у, то таблица истинности операции КОНЪЮНКЦИЯ
будет иметь вид, представленный в табл. 1.1.

Таблица 1.1
Аргументы Ф У Н К Ц И Я
Х1 х2 Х И ИЛИ НЕ ИЛИ- И-НЕ Исключающее
НЕ ИЛИ
0 0 0 0 0 1 1 1 0
0 1 1 0 1 0 0 1 1
1 0 0 0 1 1 0 1 1
1 1 1 1 1 0 0 0 0

Поскольку функция у истинна только тогда, когда истинны и первый и второй ее


аргументы, операцию КОНЪЮНКЦИЯ часто называют операцией И. Простая схема с
двумя ключами, объясняющая смысл операции И, приведена на рис. 1.1, а. Если ключ
замкнут, переменная х имеет значение 1. Если ключ разомкнут, переменная х имеет
значение 0. Ток может протекать через схему только в том случае, если оба ключа
замкнуты (на выходе будет 1, если обе переменные х1 и х2 будут равны 1).
a) в)
X1
X1 X2
X2
б) X1 Y=X1X2 д)
& г) X1 Y=X1 V X2
1 Y= X
X2
X2
X 1

Рис. 1.1. Схемы логических элементов: а, б—ло-


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

у = х1 х2 = х1 &. х2 (1.1)

и читается как у ЕСТЬ х1 И х2 . Логический элемент, реализующий операцию И, называется


схемой совпадения и может быть построен на различных элементах: на переключателях
тока, диодах или транзисторах. Следует заметить, что подобным же образом могут быть
построены логические элементы, реализующие любые другие операции булевой алгебры.
Функциональное обозначение логического элемента И, реализующего операцию И,
приведено на рис. 1.1, б.
Логическая операция ДИЗЪЮНКЦИЯ (ИЛИ). ДИЗЪЮНКЦИЕЙ
(логическим сложением) называется логическая операция, при выполнении которой
формируется булева функция от двух или более аргументов, истинная тогда и только
тогда, когда истинен хотя бы один из ее аргументов. Для двух переменных операция
ДИЗЪЮНКЦИЯ имеет вид, представленный в табл. 1.1.
Так как значение функции у - равно 1, когда равен 1 или первый ее аргумент, или
второй, или оба аргумента одновременно, операцию ДИЗЪЮНКЦИЯ называют часто
операцией ИЛИ.
Простая схема с двумя ключами, показывающая смысл операции ИЛИ, приведена на
рис.1.1, в. Ток в схеме протекает, если любой из ключей х1 и х2 замкнут. Для двух
переменных операция ИЛИ записывается в виде

у = х1 V х2 (1.2)
и читается как у ЕСТЬ х1 ИЛИ х2 . Функциональное обозначение логического элемента,
реализующего операцию ИЛИ, приведено на рис.1.1, г.
Логическая операция ОТРИЦАНИЕ (НЕ). ОТРИЦАНИЕМ (инверсией)
называется логическая операция, при выполнении которой формируется булева функция
от одного аргумента, которая истинна только тогда, когда аргумент ложен, и ложна
только тогда, когда аргумент истинен. Таблица истинности операции ОТРИЦАНИЕ
представлена в табл. 1.1. Операция ОТРИЦАНИЕ записывается в виде

у = х (1.3)
и читается как у ЕСТЬ НЕ х, или у ЕСТЬ ИНВЕРСИЯ х. Логическая схема, реализующая
операцию НЕ, называется инвертором. Ее функциональное обозначение приведено на
рис. 1.1, д.
Система булевых функций {И, ИЛИ, НЕ} называется функционально полной
системой. С помощью этой системы можно записать сколь угодно сложную булеву
функцию, используя функции И, ИЛИ, НЕ в качестве ее аргументов (принцип
суперпозиции). Точно так же система логических элементов {И, ИЛИ, НЕ} представляет
собой систему, используя которую можно построить любую сколь угодно сложную схему.
Эта система логических элементов называется булевским функционально полным базисом.
Помимо булевского базиса существуют другие функционально полные базисы,
называемые универсальными. Это базис Пирса и базис Шеффера.
Логическая операция Пирса (ИЛИ-НЕ). Логическая операция Пирса заключается
в инвертировании значений функции при операции ИЛИ. Ее таблица истинности для
функции от двух переменных представлена в табл. 1.1. Операцию ИЛИ-НЕ для двух
переменных записывают следующим образом:
––––– (1.4)
у = х1 V х2
и читают: у ЕСТЬ НЕ х1 ИЛИ х2 . Функциональная схема логического элемента ИЛИ-НЕ
приведена на рис. 1.2, а.
Логическая операция Шеффера (И-НЕ). Логическая операция Шеффера
представляет собой инверсию результата операции И и может быть для двух переменных
описана таблицей истинности, которая дана в табл. 1.1. Операция Шеффера записывается
следующим образом:
–––
у = х1 х2 (1.5)
и читается как у ЕСТЬ НЕ х1 И х2 . Функциональная схема логического элемента И-НЕ
изображена на рис. 1.2, б.

X1 1 y  X 1 V X2 X1 & y  X 1 X2
X2 X2
a) б)

Рис. 1.2. Функциональные схемы логических элементов: а—логический


элемент Пирса (ИЛИ—НЕ); б—логический элемент Шеффера (И-НЕ)

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


рассматривать логическую операцию, результатом которой является булева функция, не
входящая в используемые в ВС функционально полные базисы, но тем не менее часто
встречающаяся в процессе логических преобразований информации. Это операция
ИСКЛЮЧАЮЩЕЕ ИЛИ.
Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ. ИСКЛЮЧАЮЩЕЕ ИЛИ (сумма
по модулю 2) - это такая логическая операция, при выполнении которой формируется
булева функция от двух аргументов, которая истинна тогда и только тогда, когда значения
истинности ее аргументов противоположны. Таблица истинности операции
ИСКЛЮЧАЮЩЕЕ ИЛИ дана в табл. 1.1.
Логика формирования функции ИСКЛЮЧАЮЩЕЕ ИЛИ аналогична получению
результата при выполнении арифметического сложения по модулю 2 (сложение без
переноса в старший разряд). Операция ИСКЛЮЧАЮЩЕЕ ИЛИ записывается в виде
– –
у = х1  х2 = х1 mod2 х2 = х1 х2 v х1 х2 (1.6)
и может быть реализована на логических элементах булевского базиса.
Все рассмотренные логические операции выполняются в ВС над двоичными
числами. Пусть, например, имеем два двоичных числа А и В, причем А = 11010110, В =
01100111. Результаты выполнения всех логических операций с этими числами будут
иметь вид:

АВ = 01000110 - И
А V В = 11110111 - ИЛИ
АВ = 10111001 - И-НЕ
А v В = 00001000 - ИЛИ-HE
A mod2 B = 10110001 - ИСКЛЮЧАЮЩЕЕ ИЛИ

1.2. Основные соотношения булевой алгебры

Пусть заданы булевы переменные х, х1 , х2 , х3 . Тогда для логических функций


дизъюнкция, конъюнкция и отрицание справедливы следующие утверждения (табл.1.2):
Таблица 1.2
Дизъюнктивная форма Конъюнктивная форма Аксиома или теорема
=
х=x
х v 0=х х · 1=х
х v 1=1 х · 0=0
х v х=х хх=х Идемпотентность
– –
x v х=1 xх=0
х1 v х2 = х2 v х1 Об обратном элементе
х1 х2 = х2 х1 Коммутативность
х1 v (х2 v х3) = (х1 v х2) v х3 х1 (х2 х3) = (х1 х2) х3
х1 v х2 х3 = (х1 v х2) & (х1 v х3) Ассоциативность
х1 (х2 v х3) = х1 х2 v х1 х3 Дистрибутивность
х1 v х1 х2 = х1 х1 (х1 v х2) = х1
– – Поглощение
х1 х2 v х1 х2 = х1 (х v х ) (х v х ) = х
–-–-–- – – 1
–-–- –
2 1

2 1
Склеивание
х1 v х2 = х1 х2 х1 х2 = х1 v х2
Де Моргана

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

1.3. Аналитическое представление булевых функций

Поскольку значениями логических функций могут быть только 0 или 1, то любые


логические функции можно использовать как аргументы других логических функций, т.е.
строить из простых функций более сложные. Пусть в табл.1.3 задана произвольная
функция Y трех аргументов, и ее нужно выразить с помощью простых функций НЕ, И,
ИЛИ.
Таблица 1.3
N Аргументы Функция N Аргументы Функция
х1 х2 х3 Y х1 х2 х3 Y
0 000 0 4 100 0
1 001 1 5 101 0
2 010 0 6 110 1
3 011 1 7 111 1

По правилам построения таблицы функция Y = 1 тогда, когда конъюнкции строк №


1, 3, 6 и 7 равны 1, т.е.
–– – –
x1 x2 x3 =1; x1 x2 x3 =1; x1 x2 x3 =1; x1 x2 x3 =1.
(1.7)
Все это можно записать в виде одного общего аналитического выражения
– – – –
Y = x1 x2 x3 v x1 x2 x3 v x1 x2 x3 v x1 x2 x3 .
Выражение (1.7) действительно равно 1 только при любой из четырех
перечисленных комбинаций значений аргументов. При всех других комбинациях
значений все четыре его конъюнкции равны 0. Следовательно, функция, записанная в
виде (1.7), эквивалентна функции, заданной табл.1.3, причем выражена она через функции
НЕ, И, ИЛИ.
Полученное аналитическое выражение для функции Y называют совершенной
дизъюнктивной нормальной формой (СДНФ). СДНФ состоит из элементарных
конъюнкций, соединенных знаками дизъюнкции. Конъюнкцию называют элементарной,
если в нее не входит по нескольку одинаковых букв. Число элементарных конъюнкций в
СДНФ обязательно равно числу единичных значений функции в таблице истинности. В
каждую элементарную конъюнкцию
СДНФ входят обязательно все аргументы функции, каждый из которых может быть
представлен либо в прямой, либо в инверсной форме. Описанная процедура получения
СДНФ есть процедура перехода от табличной формы задания функции к ее
аналитической форме.

1.4. Минимизация булевых функций

Запись функции в форме СДНФ не единственно возможная и, как правило, не самая


короткая. Построенная по СДНФ логическая схема также часто оказывается не самой
экономичной. Как правило, они избыточны и поддаются минимизации. Наиболее
очевидным способом минимизации СДНФ является выполнение преобразований с
помощью основных аксиом и теорем булевой алгебры (см. табл. 1.2). Целью
преобразований является такая группировка членов минимизируемого выражения,
которая позволяет сократить число конъюнкций исходной формулы и число входящих в
них аргументов.
Целью минимизации логической функции является нахождение минимальной
дизъюнктивной нормальной формы (ДНФ). Какого-либо правила группировки,
гарантированно приводящего СДНФ к ее минимальной форме, не существует.
Приходится пробовать различные варианты и сравнивать результаты. Процедуру поиска
заметно облегчают специально разработанные методы минимизации. Наиболее
известными являются метод диаграмм Вейча-Карно (далее метод диаграмм Вейча) и
метод Квайна-МакКласки.
Метод диаграмм Вейча. Метод позволяет быстро получать минимальные ДНФ
булевой функции f небольшого числа переменных. В основе метода лежит задание
булевых функций диаграммами некоторого специального вида, получившими название
диаграмм Вейча. Для булевой функции двух переменных диаграмма Вейча имеет вид
показанный в табл. 1.4. Каждая клетка диаграммы соответствует набору переменных
булевой функции в ее таблице истинности. В табл. 1.4 это соответствие показано. В клетке
диаграммы Вейча ставится единица, если булева функция принимает единичное значение
на соответствующем наборе. Нулевые значения булевой функции в диаграмме Вейча не
ставятся. Для булевой функции трех переменных диаграмма Вейча имеет следующий вид
(табл. 1.5). Добавление к ней еще такой же таблицы дает диаграмму для функции 4-х
переменных (табл.1.6). Добавление к диаграмме 4-х переменных еще одной диаграммы 4-
х переменных дает диаграмму для функции 5-ти переменных и т. д., однако диаграммы
для функций с числом переменных больше 4-х используются редко. Для приведенных
диаграмм характерно следующее:
1) каждой клетке диаграммы соответствует свой набор;
2) соседние наборы расположены рядом в строке либо в столбце.
Соседними наборами называются наборы, отличающиеся одной компонентой.
Столбцы, расположенные по краям диаграммы, тоже считаются соседними. Если
соседние клетки диаграммы Вейча соответствуют единичным наборам минимизируемой
функции, то их можно склеивать, с целью упрощения элементарных конъюнкций
(произведений). Общее правило склеивания на диаграммах Вейча можно сформулировать
следующим образом:

Таблица 1.4 Таблица 1.5


– –
x1 х1 x1 х1
----------- ----------- ----------------------- -------------------------
11 01 x2 110 111 011 010
x2
– 10 00 – 100 101 001 000
х2 x2
– ------------------------- –
x3 x3 x3
Таблица 1.6

x1 х1
----------------------------- -----------------------------
1100 1110 0110 0100 –
x4
x2 1101 1111 0111 0101
x4
– 1001 1011 0011 0001
x2
1000 1010 0010 0000 –
x4
– ------------------------- –
x3 x3 x3
склеиванию подлежат прямоугольные конфигурации, заполненные единицами и
содержащие число клеток, являющееся степенью 2. Получающееся новое элементарное
произведение определяется как произведение переменных, не меняющих своего значения
на всех склеиваемых наборах. Число m оставшихся переменных в элементарном
произведении определяется легко:
m = n - log2 M,
где п — число переменных функции; М — число склеиваемых наборов (клеток). Метод
широко используется на практике, благодаря простоте и удобству. Минимизация булевой
функции заключается в нахождении минимального покрытия всех единиц
диаграммы Вейча блоками из единиц (указанной конфигурации), расположенных в
соседних клетках диаграммы. При этом всегда считается, что левый край диаграммы
Вейча примыкает к ее правому краю, а верхний край диаграммы примыкает к нижнему ее
краю. После получения минимального покрытия всех единиц диаграммы Вейча,
минимальная ДНФ булевой функции записывается как дизъюнкция элементарных
конъюнкций, соответствующих выделенным блокам единиц в диаграмме.
Пример 1. Булева функция у имеет следующую СДНФ:
– – – –
у = x1 x2 x3 v x1 x2 x3 v x1 x2 x3 v x1 x2 x3 .

Найти минимальную ДНФ с помощью диаграммы Вейча.


Таблица 1.7

x1 х1
--------------------------- -------------------------
x2 1 1 1
– 1
x2
– ------------------------- –
x3 x3 x3
Диаграмма Вейча, соответствующая функции у, представлена в табл. 1.7.
Минимальное покрытие всех единиц диаграммы возможно двумя блоками по две
единицы . Этим блокам соответствуют конъюнкции

x1 x2 и x1 x3 .
Следовательно, минимальная ДНФ функции у имеет следующий вид:

у = x1 x2 v x1 x3 .
Пример 2. Булева функция y задана диаграммой Вейча (табл. 1.8). Найти
минимальную ДНФ.
Таблица 1.8

x1 х1
-------------------------- --------------------------
1 1 –
x4
x2 1 1
x4
– 1 1
x2
1 1 –
x4
– ------------------------- –
x3 x3 x3
Минимальное покрытие единиц показано в табл. 1.8. Минимальная ДНФ функции y
имеет вид
– – – –
y = x2 x3 v x1 x2 x4 v x2 x3 x4 .

Минимизация не полностью определенных функций

Очень часто при синтезе числовых устройств функции, которые


необходимо минимизировать, определяются частично. Это означает, что из 2n
комбинаций функция определяется для m комбинаций (m < 2 n ), то есть для
некоторых комбинаций функция равна нулю, для других она равна единице,
а для остальных ( 2 n -m) она не имеет строгого значения. Минимизация таких
функций происходит следующим образом: Комбинация, для которой
функция не определена в таблице истинности, обозначается отдельным
знаком (*), и в процессе минимизации их значение устанавливается равным
единице, если оно приведет к наиболее минимальной форме и равно нулю,
если это приведет к оптимальной функции.
Пример:
Дана функция y, равная - 1 în : 1,4,5,11,15, и в комбинациях: 2,6,7,13
функция неопределенна.
a) Составляем таблицу истинности:
x4 x3 x2 x1 y
0 0 0 0 0
0 0 0 1 1
0 0 1 0
0 0 1 1
*0
0 1 0 0 1
0 1 0 1 1
0 0
0
1
1
1
1 1
*
1 0 0 0
*0
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 0
1 1 0 1
1 1 1 0
*0
1 1 1 1 1 b) Минимизируем функцию y:
x4
x2 x3
x1 0 0 01 11 10
00 1

01 1 1
*
11 1 1
*
10
* *

y= x x3  x x x1  x4 x3 x1
4 4 2
Метод Квайна-МакКласки. Минимизация методом Квайна-МакКласки включает
следующие шаги:
1. Составление таблицы, в которой все минтермы из СДНФ записываются в виде их
двоичных кодов. При этом, двоичные коды разбиваются по числу единиц на
непересекающиеся группы.
2. Определение первичных импликант функции путем попарного сравнения двоичных
кодов соседних групп.
3. Расстановка меток.
4. Нахождение существенных импликант.
5. Выбор минимального покрытия и запись функции в минимальной форме.
Рассмотрим пример. Пусть задана СДНФ (указаны десятичные номера наборов, на которых
функция принимает единичное значение) функции f:
f (x4 x3 x2 x1 ) = v (0,1,2,3,4,7,8,11,12,13,15).
1
1. Запишем двоичные коды минтермов СДНФ в виде табл.1.9.
2. Строим таблицу (табл.1.10) для определения первичных импликант функции. Конъюнкции
соседних групп склеиваются, если отличаются по одной переменной. Переменную которая
поглощается будем заменять символом х. Конъюнкции соседних групп также склеиваются, если
символ х присутствует в одном и том же разряде и имеется отличие по одной переменой. Вместо
вновь поглощаемой переменной проставляется символ х. Конъюнкция, которая более не
склеивается с другими, является первичной импликантой заданной функции.
3. Для расстановки меток составляется таблица, число строк которой равно числу полученных
первичных импликант, а число столбцов совпадает с числом минтермов СДНФ. Если в некоторый
минтерм СДНФ входит какая-либо из первичных импликант, то на пересечении соответствующих
столбца и строки ставится метка (табл.1.11).

Таблица 1.9
Вес Двоичный код Десятичный эквивалент
0 0000 0
1 0001 1
0010 2
0100 4
1000 8
2 0011 3
1100 12
3 0111 7
1011 11
1101 13
4 1111 15

Таблица 1.10
Десятичные Десятичные
Первичные Первое эквиваленты Первичные Второе эквиваленты
импликанты склеивание склеиваемых импликанты склеивание склеиваемых
конъюнкций конъюнкций
000х (0,1) * v (0,1;2,3)
00х0 (0,2) * v c 00хх (0,2;1,3) -
0х00 (0,4) * v (0,4;8,12)
х000 (0,8) * v d хх00 (0,8;4,12) -
00х1 (1,3) * v
001х (2,3) * v
х100 (4,12) * v
1х00 (8,12) * v
0х11 (3,7) * v (3,7;11,15)
х011 (3,11) * v e хх11 (3,11;7,15) -
a 110х (12,13)* -
х111 (7,15) * v
1х11 (11,15)* v
b 11х1 (13,15)* -

Таблица 1.11
Первичные Исходные термы
импликанты 0000 0001 0010 0011 0100 0111 1000 1011 1100 1101 1111
110х v v
11х1 v v
00хх v v v v
хх00 v v v v
хх11 v v v v

4. Если в каком-либо из столбцов табл.1.11 имеется только одна метка, то первичная импликанта в
соответствующей строке является существенной, так как без нее не будет получено все множество
заданных минтермов. В нашем примере имеется три существенных импликанты, которые в
табл.1.11 выделены:
–– – –
00хх = x4 x3 ; хх00 = x2 x1 ; хх11 = x2 x1 .
5. Выбираем минимальное покрытие. С этой целью к существенным импликантам добавляем те из
оставшихся первичных импликант, которые обеспечивают совместное покрытие хотя бы одной
меткой каждого из столбцов табл.1.11. В рассматриваемом примере минимальная ДНФ может
быть записана в виде
–– – –
f (x4 x3 x2 x1 ) = x4 x3 x1 v x4 x3 v x2 x1 v x2 x1 ,
или
– –– – –
f (x4 x3 x2 x1 ) = x4 x3 x2 v x4 x3 v x2 x1 v x2 x1 .

2. АРИФМЕТИЧЕСКИЕ ОСНОВЫ ЦИФРОВЫХ АВТОМАТОВ

2.1. Системы счисления и коды

Цифровые устройства выполняют операции над числами представленными в некоторой


системе счисления.
Под системой счисления понимается совокупность правил представления чисел
посредством ограниченного количества символов. Используемые для представления
чисел символы называются цифрами.
Системы счисления могут быть позиционными и непозиционными. Система
счисления является позиционной если вес (значение) каждой цифры определяется
позицией соответствующей цифры в представлении числа. Конкретным примером
позиционной системы счисления является используемая нами десятичная система
счисления. В десятичной системе счисления 392923, так как вес цифр 2, 3 и 9 различен в
представлении указаных чисел. Например, вес цифры 9 определяется как 9101 для числа
392 и как 9102 для числа 923.
В случае непозиционных систем счисления, вес каждой цифры не зависит от
позиции занимаемой в представлении числа. Классическим примером непозиционной
системы счисления является римская система счисления. Значение некоторого числа
представленного римскими цифрами определяется посредством арифметических
операций сложения и вычитания. Например, VIVI6, в то же время IVV-I4.
Непозиционные системы счисления имеют ограниченное применение и практически
используются для нумерации. С другой стороны, позиционные системы счисления
используются в самых разнообразных областях человеческой деятельности, в том числе в
цифровых системах.
Количество цифр используемых для написания чисел в некоторой системе
счисления определяет основание соответствующей системы. В системе счисления с
основанием q, некоторое число N записывается посредством ряда цифр:

N(q)bn-1bn-2...bi...b1b0 . b-1b-2...b-m , (2.1)

где десятичная точка разделяет целую часть от дробной части числа N. Цифра bi
представляет i-й разряд числа N. Для вычисления значения числа N следует прибегнуть к
равенству

N(q)bn-1qn-1bn-2qn-2 ... b1q1b0q0b-1q-1b-2q-2...b-mq-m,

или
n 1
N(q)  b q
i  m
i
i ( 2 .2 )

Например, число 392.46 в десятичной системе счисления может быть записано в


следующем виде:

392.46(10)310291012100410-1610-2.

Далее представим системы счисления используемые в области цифровых систем.


 Двоичная система счисления. Эта система использует для представления чисел
только две цифры - 0 и 1, то есть bi{0,1}. Число N в двоичной системе записывается
согласно формуле (2.2) следующим образом :

N(2)bn-12n-1bn-22n-2  b121b020b-12-1b-22-2b-m2-m. (2.3)

Пусть задано двоичное число 101010.11. Тогда, согласно формуле (2.3), имеем:

101010.11(2)12502412302212102012-112-242.75(10). (2.4)
Следовательно, любое двоичное число может быть записано в десятичной системе
счисления представив двоичное число в виде (2.3) и выполнив требуемые арифметические
операции согласно (2.4).
Для преобразования десятичного числа в двоичную систему счисления следует
выделить целую и дробную части десятичного числа. Затем приступают к раздельному
преобразованию целой и дробной частей. Алгоритм преобразования целого числа из
десятичной системы в двоичную сводится к выполнению следующей последовательности
операций :
1. Десятичное число делится на два; при этом получается целое частное и
остаток от деления;
2. Если полученое частное отличается от нуля, вернуться к шагу 1; при этом
частное используется как делимое;
3. Если частное от деления равно нулю, все полученные остатки
используются для представления двоичного числа, причем запись остатков в виде
двоичного числа будет производиться в порядке обратном их получению.
Поясним представленный алгоритм. Пусть задано десятичное число 264.
Преобразование этого числа в двоичную систему счисления выполняется следующим
образом :

264 : 2  132 остаток 0


132 : 2  66 остаток 0
66 : 2  33 остаток 0
33 : 2  16 остаток 1
16 : 2  8 остаток 0
8:24 остаток 0
4:22 остаток 0
2:21 остаток 0
1:20 остаток 1

Значит, 264(10)100001000(2). Проверить правильность преобразования можно обратившись


к формулам (2.3), (2.4):

100001000(2)128123264(10).
Преобразование десятичной дроби в двоичную систему счисления выполняется
следующим образом :
1. Дробное число умножается на два;
2. Полученная в результате умножения на два целая часть отделяется от
дробной части;
3. Полученная на шаге 2 дробная часть рассматривается как множимое и
выполняется переход к шагу 1. Последовательное умножение на два завершается когда
дробная часть оказывается нулевой либо когда получено количество двоичных цифр
удовлетворяющее требуемой (заданой) точности. Двоичное представление числа будет
состоять из цифр, которые представляют целые части полученные на шаге два, причем
запись этих цифр производится в том порядке в каком они были получены.
Приведем конкретный пример. Пусть задана десятичная дробь 0.53125.

0.5312521.06250 целая часть 1


0.0625020.12500 целая часть 0
0.1250020.25000 целая часть 0
0.2500020.50000 целая часть 0
0.5000021.00000 целая часть 1

Таким образом, 0.53125(10)0.10001(2). Проверим правильность результата :

0.10001(2)  02012-102-202-302-412-50.53125(10).

 Восьмеричная система счисления. Восьмеричная система это система счисления с


основанием q8 и использует цифры от 0 до 7, то есть bi{0,1,2,3,4,5,6,7}. Преобразование
из двоичной системы в восьмеричную и обратно выполняется просто, так как основание
восьмеричной системы есть степень числа два - q823. Правило преобразования
двоичного числа в восьмеричное число следующее :
1. Двоичные цифры слева и справа от десятичной точки группируются по
три, образуя триады;
2. Каждая триада заменяется восьмеричной цифрой в соответствии со
следующей таблицей эквивалентности:

Таблица 2.1.
Восьмеричная Двоичная триада
цифра
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Пусть задано двоичное число 11010111.1010111. Для преобразования в


восьмеричную систему счисления двоичное число разбиваем на триады, которые затем
заменяем на соответствующие восьмеричные цифры согласно табл.2.1:

011 010 111 . 101 011 100


3 2 7. 5 3 4

Следовательно, 11010111.1010111(2)327.534(8). В приведенном примере крайние


слева и справа триады были образованы добавлением незначащих нулей.
Преобразование восьмеричного числа в двоичную систему счисления выполняется в
обратном порядке и состоит в замене восьмеричных цифр двоичными триадами согласно
табл.2.1. Пусть задано восьмеричное число N(8)610.213. Преобразование имеет вид:

6 1 0. 2 1 3
110 001 000 . 010 001 011

Значит, 610.213(8)110001000.010001011(2).
Для преобразования десятичного числа в восьмеричную систему следует
использовать алгоритм преобразования десятичных чисел в двоичные с оговоркой что в
операциях деления и умножения цифру 2 нужно заменить на цифру 8. Приведем пример
преобразования десятичного числа в восьмеричное число. Пусть задано десятичное число
431.625. Преобразование выполняется раздельно для целой части исходного числа
431 : 8  53 остаток 7
53 : 8  6 остаток 5
6:80 остаток 6

и для дробной части

0.62585.000 целая часть 5


Итак, 431.625(10)657.5(8).

 Шестнадцатеричная система счисления. Шестнадцатеричная система использует


для представления чисел 16 символов: цифры от 0 до 9 и первые шесть букв латинского
алфавита. То есть bi0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Преобразование из двоичной
системы в шестнадцатеричную и обратно аналогично двоично-восьмеричному
преобразованию, так как основание шестнадцатеричной системы есть также степень числа
два - q1624. Правило преобразования двоичного числа в восьмеричное число, которое
дано выше, справедливо и для двоично-шестнадцатеричного преобразования с
уточнением, что двоичные цифры группируются по 4, образуя тетрады, каждая из
которых заменяется определенной шестнадцатеричной цифрой. В табл.2.2 дается
соответствие между шестнадцатеричными и двоичными цифрами. Сохраняется также
правило преобразования восьмеричного

Таблица 2.2
Деся- Шестнадца- Двоичная Деся- Шестнадца- Двоичная
тичное теричная тетрада тичное теричная тетрада
число цифра число цифра
0 0 0000 8 8 1000
1 1 0001 9 9 1001
2 2 0010 10 A 1010
3 3 0011 11 B 1011
4 4 0100 12 C 1100
5 5 0101 13 D 1101
6 6 0110 14 E 1110
7 7 0111 15 F 1111

числа в двоичное с уточнением, что при преобразовании шестнадцатеричного числа в


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

3257 : 16  203 остаток 9


203 : 16  12 остаток 11
12 : 16  0 остаток 12

Заменяя десятичные остатки шестнадцатеричными цифрами получаем:


3257(10)CB9(16).
Рассмотрим теперь преобразование десятичного числа 0.640625 :
0.6406251610.25 целая часть 10
0.25164.00 целая часть 4
Следовательно, 0.640625(10)0.A4(16).

 Двоично-десятичные коды. Кроме рассмотренных выше систем счисления,


вычислительные устройства оперируют и с другими представлениями чисел. Примером в
этом плане могут служить двоично-десятичные коды (BCD). В таблице 2.3 приводится
соответствие между десятичными цифрами и их эквивалентами в двух широко
используемых двоично-десятичных кодах - 8421 и “8421”+3 (код с “избытком” 3).

Таблица 2.3.
Десятичная Код Код Десятичная Код Код
цифра 8421 “8421”+3 цифра 8421 “8421”+3
0 0000 0011 5 0101 1000
1 0001 0100 6 0110 1001
2 0010 0101 7 0111 1010
3 0011 0110 8 1000 1011
4 0100 0111 9 1001 1100

Замечаем, что каждой десятичной цифре ставится в соответствие конкретное


двоичное слово, длина которого равна четырем битам. Эта длина вытекает из
необходимости закодировать 10 десятичных цифр посредством двоичных цифр. Так как
число 10 находится в интервале между 23 и 24, двоичное слово должно быть по меньшей
мере длиной в 4 бита. Поясним как записываются десятичные числа в двоично-
десятичном представлении (коде):

3 5 8. 1 9 6 число N в
10-ом виде
0011 0101 1000. 0001 1001 0110 число N в
коде 8421

0101 0111 1100. 0110 0011 1010 число M в


коде “8421”+3
2 4 9. 3 0 7 число М в
10-ом виде

 Другие коды. Двумя другими кодами, практически используемыми в цифровых


системах, являются код ASCII и код Грея. Код ASCII кодирует прописные и строчные
буквы латинского алфавита, десятичные цифры от 0 до 9, специальные и управляющие
символы. Код Грея характеризуется тем, что при переходе от одного двоичного кодового
слова к следующему изменяется всего одна двоичная цифра. Например, в случае 2-
разрядных двоичных кодовых слов имеют место переходы 00-01-11-10-00, а в случае 3-
разрядных двоичных кодовых слов 000-001-011-010-110-111-101-100-000.

2.2. Формы представления двоичных чисел

Двоичные числа могут быть представлены в двух формах: в форме с фиксированной


точкой и в форме с плавающей точкой. Рассмотрим сначала представление двоичных
чисел с фиксированной точкой.
 
десятичная точка
десятичная точка
десятичная точка

 Представление целых чисел без знака. Формат целых чисел без знака выглядит
следующим образом:
разряд: (n-1) 1 0
bn-1 ... b1 b0

Старшим является разряд (n-1), а младшим разряд 0. Десятичная точка неявно


фиксирована справа (заметим, что эта точка физически не представляется). Некоторое
число N представленное в данном формате находится в интервале
1  N  2n-1.
Например, 8-разрядное двоичное число может иметь значения между 1 и 255.
 Представление дробных (меньше единицы) чисел без знака . В этом случае, формат
чисел аналогичен формату целых чисел без знака. Отличие состоит в том, что десятичная
точка неявно фиксирована слева.
разряд: -1 -2 -m
b-1 b-2 ... b-m

Двоичное дробное число без знака находится в интервале


2-m  N  1-2-m.
Представление двоичных чисел со знаком предполагает использование некоторого
соглашения относительно цифры знака. Согласно принятой конвенции знак “”
представляется цифрой 0 а знак “-” цифрой 1. Двоичные числа со знаком могут быть
представлены в прямом, дополнительном и обратном коде.
 Представление двоичных чисел в прямом коде . Целые числа со знаком имеют
следующий формат:
разряд: n (n-1) 1 0
Sg bn-1 ... b1 b0

где Sg изображает знак числа. Прямой код числа со знаком можно записать в виде:
0 bn N  0
(2.5)
- 1 bn - 2 ... b1 b0 ;
Ncd  
1 bn - 1 bn - 2 ... b1 b0 ; N  0

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


которых 8 бит (n=7):

N=-17(10) ; Ncd=10010001
N=40(10) ; Ncd=00101000

Диапазон значений целого числа в прямом коде определяется как

-(2n-1)  Ncd  2n-1.


Двоичные дробные числа со знаком имеют формат:
0 -1 -2 -m
Sg b-1 b-2 ... b-m

 числа в прямом коде удовлетворяет неравенству:


Значение дробного
десятичная точка
-(1-2-m)  Ncd  1-2-m.

 Представление двоичных чисел в дополнительном коде . Дополнительный код


положительного числа совпадает с прямым кодом этого числа. В случае отрицательных
чисел правило получения дополнительного кода следующее: инвертируются все разряды с
последующим прибавлением 1 в младший разряд, а в поле цифры знака проставляется 1.
Следовательно, можно записать
0 bn - 1 bn - 2 ... b1 b0 ; N  0
Ncc = 
(2.6)
1 bn - 1 bn - 2 ... b1 ( b 0 + 1) ; N < 0

Проиллюстрируем как записываются в дополнительном коде некоторые целые 8-


разрядные числа (n=7):
N=-1(10) ; NCD=10000001 ; NCC=11111111 ;
N=35(10) ; NCD=00100011 ; NCC=00100011 ;
N=-35(10) ; NCD=10100011 ; NCC=11011101 ;
Замечаем, что дополнением кода 00100011 является код 11011101 и наоборот
дополнением кода 11011101 является код 00100011.
Максимальное и минимальное значения целого числа в дополнительном коде
выглядят как показано ниже:

n (n-1) 1 0
0 1 ... 1 1

1 0 ... 0 0
- мах значение

Отсюда следует, что диапазон значений целых чисел в дополнительном коде задается
неравенством:
- min значение
-2n  NCC  2n-1.
Например, 32-разрядное целое число будет принимать значения в диапазоне -231;
(231-1).
Когда десятичная точка неявно фиксирована слева, максимальное и минимальное
значения числа в дополнительном коде будут:

0 -1 -2 -m
0 1 1 ... 1

- мах значение
1 0 0 ... 0

- min значение
Следовательно, диапазон значений задается неравенством:

-1  NCC  1-2-m.

 Представление двоичных чисел в обратном коде: Обратный код положительного


числа совпадает с прямым кодом этого числа. Обратный код отрицательного числа
получается путем инвертирования цифровых разрядов и проставляя 1 в знаковый разряд.
Например, обратный код числа N=-127 есть NCI=10000000. Диапазон значений целых
чисел в обратном коде задается в виде
-(2n-1)  NCI  2n-1.
Например, значения 8-разрядного целого числа будут находиться в интервале -127; 127.
В случае дробных чисел, диапазон значений задается неравенством:
-(1-2-m)  NCI  1-2-m.

Другой формой представления двоичных чисел является представление с


плавающей точкой. Представление некоторого числа N в форме с плавающей точкой
определяется выражением
e
N  mN 2 , N
(2.7)
где mN и eN соответствуют мантиссе и порядку двоичного числа N. Следовательно, формат
числа с плавающей точкой имеет два поля: одно для мантиссы и другое для порядка. В
соответствии с существующими соглашениями мантисса двоичного числа
представленного в форме с плавающей точкой должна удовлетворять неравенству
1
 mN 1 . (2.8)
2
Один из стандартных форматов для чисел с плавающей точкой включает 32 разряда
и имеет следующий вид:
разряд: 31 30 . . . 23 22 ... 0
Sgm eN mN

В этом стандартном формате мантисса mN представлена в прямом коде, причем цифра


знака Sgm находится в старшем разряде. Порядок eN представляется в дополнительном
коде. Таким образом, порядок может принимать значения в интервале -128  eN 127.
Учитывая соотношение (2.8),  минимальное значение числа в вышеуказанном формате
десятичная точка
равно
Nmin=(0.100...0)2-128=2-12-128=2-129,

а максимальное

Nmax=(0.111...1)2127=(1-2-23)2127 2127.

2.3. Сложение двоичных чисел с фиксированной точкой

Операция сложения двоичных кодовых слов является ключевой операцией в любой


цифровой системе. В двоичной системе счисления сложение двоичных цифр выполняется
согласно следующим правилам: 0+0=0, 0+1=1, 1+0=1. Сумма двух цифр 1 есть 11=10, то
есть равняется основанию системы счисления. Поэтому, при сложении двух двоичных
цифр 1 имеем: 11=0 плюс единица переноса, которую следует учитывать при сложении
двоичных цифр в следующем разряде. Проиллюстрируем сложение двух двоичных слов:

перенос: 11
00110  6(10 ) 
00011    3(10 ) 

 
01001 9 (10 ) 

Сложение двоичных чисел, представленных в форме с фиксированной точкой,


можно выполнять в прямом, дополнительном и обратном кодах. Рассмотрим особенности
сложения двоичных чисел в каждом из трех кодов.
Сложение в прямом коде. Правила сложения двоичных чисел в прямом коде не
отличаются от вышеуказанных. Если оба слагаемых (операнда) имеют одинаковые знаки,
то следует сложить разряды цифровой части, а сумме приписать знак одного из
операндов. Если знаки операндов разные, то из разрядов цифровой части большего по
модулю числа вычитается меньшее, а сумме приписывается знак большего числа. При
вычитании двоичных цифр следует соблюдать следующие правила: 0-0=0, 1-0=1, 1-1=0, 0-
1=1 с учетом единицы заема в старшем разряде.
Таким образом, для сложения чисел в прямом коде характерны два недостатка: 1)
знаковый и цифровые разряды операндов приходиться обрабатывать раздельно; 2)
выполнение операции сложения затруднено тем, что необходимо иметь в составе
вычислительного оборудования как суммирующее устройство, так и вычитающее
устройство. Из-за указанных недостатков прямой код для выполнения операции сложения
не используется, однако этот код удобен при реализации операции умножения.
Сложение в дополнительном коде. Из вышесказанного следует, что операцию
вычитания двух чисел желательно заменить сложением соответствующих чисел:

A-B=A(-B).

Нетрудно заметить, что замена вычитания сложением возможна в случае


представления отрицательного числа в дополнительном коде. В ВС отрицательные числа
представляются, в большинстве случаев, дополнительным кодом. Используя
представление чисел в дополнительном коде, операцию вычитания A-B выполняют путем
сложения числа A с дополнительным кодом числа B, то есть

A-B=ABCC.

При сложении двух чисел в дополнительном коде знаковый разряд и цифровая часть
обрабатываются как единое целое. Результат сложения получается в дополнительном
коде. Если результат суммирования лежит в диапазоне, определяемом разрядностью
обрабатываемых операндов, то полученный результат верный. Докажем это на
следующих примерах.
Пусть заданы два целых числа со знаком A и B. Будем полагать, что их значения
находятся в допустимом диапазоне представления 8-разрядных двоичных операндов.
Кроме того, будем считать что результат суммирования лежит в соответствующем
диапазоне.
Пусть A=+0110100 (52(10)) и B=+1000111(71(10)). Тогда

ACC= 00110100

BCC= 01000111

ACCBCC= 01111011=(AB)CC
Сумма получена в дополнительном коде и положительна (цифра знака 0).
Полученный результат верный, ибо 01111011(2)=123(10).
Пусть теперь A= -1001100 (-76(10)) и B=+1111111 (127(10)). Представляя исходные
числа в дополнительном коде, получаем:
ACC= 10110100

BCC= 01111111

ACCBCC= 100110011=(AB)CC
Если числа A, B имеют разные знаки, то их сумма всегда принадлежит диапазону
допустимых значений. Следовательно, если имеет место перенос из знакового разряда, то
цифра переноса игнорируется. Полученная сумма верна и положительна:
00110011(2)=51(10).
Пусть далее A=+0101010 (42(10)) и B= -1110000 (-112(10)). Представляя числа в
дополнительном коде, получаем:

ACC= 00101010

BCC= 10010000

ACCBCC= 10111010=(AB)CC

Результат отрицательный и представлен в дополнительном коде. Для изображения


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

исходное число : 10111010


инвертирование : 01000101
прибавление 1 : 01000110
абсолютное значение : 70(10)
десятичное представление
исходного числа : -70

Итак, полученная сумма верна.


Пусть необходимо сложить два отрицательных числа: A= -0101111 (-47(10)) и B=
-1001011 (-75(10)). Представляя исходные операнды в дополнительном коде и суммируя,
получаем:

ACC= 11010001

BCC= 10110101

ACCBCC= 110000110=(AB)CC
Так как сумма чисел A и B лежит в диапазоне допустимых значений, перенос из
знакового разряда игнорируется. Десятичное представление полученной суммы есть:

исходное число : 10000110


инвертирование : 01111001
прибавление 1 : 01111010
абсолютное значение : 122(10)
десятичное представление
исходного числа : -122

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


В приведенных примерах соблюдалось условие попадания суммы чисел A и B в
интервал допустимых значений. Это условие, как было отмечено выше, всегда
соблюдается при сложении двух чисел различного знака. При сложении двух чисел
одинакового знака возможно нарушение указанного условия. Приведем следующий
пример. Пусть заданы положительные целые числа A= +1011000 (88(10)) и B= +0110010
(50(10)). Суммируя дополнительные коды заданных чисел, имеем:
ACC= 01011000

BCC= 00110010

ACCBCC= 10001010(AB)CC
Полученный результат не совпадает с дополнительным кодом суммы чисел A и B,
так как имеет знак (отрицательный в данном случае) отличный от знака
просуммированных чисел. В таких ситуациях говорят что произошло переполнение
разрядной сетки. В приведенном примере AB=138(10), что превышает максимальное
значение равное 127(10).
Приведем другой пример. Пусть A= -0111100 (-60(10)) и B= -1000101 (-69(10)).
Суммируя дополнительные коды, получаем:

ACC= 11000100

BCC= 10111011

ACCBCC= 1 01111111 (AB)CC


Замечаем, что, как и в предыдущем примере, полученная сумма имеет знак
(положительный в данном случае) отличный от знака просуммированных чисел. И в этом
случае произошло переполнение разрядной сетки (AB=-129(10), но в случае 8-разрядного
дополнительного кода минимальное значение равно - 128(10)).
Из последних двух примеров следует, что при сложении двух чисел одинакового
знака, представленных в дополнительном коде, признаком переполнения является отличие
знака полученной суммы от знаков слагаемых. В случае сложения двух положительных
чисел, переполнение разрядной сетки сопровождается появлением переноса в знаковый
разряд суммы при отсутствии переноса из знакового разряда. В этом случае имеет место
положительное переполнение. В случае сложения двух отрицательных чисел,
переполнение разрядной сетки сопровождается появлением переноса из знакового разряда
суммы при отсутствии переноса в знаковый разряд. В этом случае имеет место
отрицательное переполнение.
Сложение в обратном коде. В обратном коде, как и в дополнительном коде,
операция вычитания заменяется операцией алгебраического сложения. При этом знаковый
разряд и цифровая часть операнда обрабатываются так же, как единое целое. Правильный
знак суммы получается автоматически в процессе суммирования цифр знаковых разрядов
операндов и единицы переноса из цифровой части, если она появляется. Характерной
особенностью сложения в обратном коде является наличие циклического переноса (если
он возникает) из знакового разряда в младший разряд цифровой части, в результате чего
получается правильная сумма.
При сложении чисел одинакового знака может возникнуть переполнение разрядной
сетки. Как и в случае сложения дополнительных кодов, признаком переполнения является
отличие знака результата от знаков суммируемых чисел.
Для обнаружения переполнения разрядной сетки при алгебраическом сложении
двоичных чисел в дополнительном и обратном кодах можно использовать
модифицированный дополнительный или обратный коды. Представление числа, в
котором используется два знаковых разряда, называется модифицированным.
Модифицированный код положительного числа содержит в поле знака два нуля. В случае
отрицательных чисел, в поле знака присутствуют две единицы. Признаком переполнения
разрядной сетки, при использовании модифицированного кода, является наличие разных
цифр в знаковых разрядах результата.

2.4. Сдвиг двоичных чисел

При выполнении в цифровых устройствах определенных операций, может


возникнуть необходимость сдвигать цифры двоичного кода. Операции сдвига могут быть
логического, арифметического и циклического типов. Двоичное число может быть
сдвинуто влево или вправо. Сдвиг влево на один разряд соответствует умножению на 2, а
сдвиг вправо на один разряд соответствует делению на 2. Сдвиг двоичных чисел
необходим при выполнении таких операций, как умножение и деление, сложение чисел с
плавающей точкой.
Приведем примеры выполнения операций сдвига влево/вправо на один разряд.
 Логический сдвиг. Пусть задано двоичное число A=00100110 (38(10)).

SHL(A)=01001100 (76(10)) – логический сдвиг влево;


SHR(A)=00010011 (19(10)) – логический сдвиг вправо.

Замечание: В случае логического сдвига влево теряется цифра в левом (старшем)


разряде, а в случае логического сдвига вправо теряется цифра в младшем разряде.
 Арифметический сдвиг. В случае арифметического сдвига цифра знака
сохраняется. При сдвиге влево теряется цифра следующая за знаковой, а в случае сдвига
вправо цифра знака дублируется и теряется цифра в младшем разряде. Ниже даны
примеры арифметического сдвига чисел, представленных в дополнительном коде:
ACC  00010101 (21(10)), ASL(A CC ) =00101010 (42 (10));
ACC 11011111 (-33(10)), ASL(A CC ) =10111110



(-66(10)). арифметический
сдвиг влево;
ACC  00010101 (21(10)), ASR(ACC ) = 00001010 (10(10)); 
ACC 11011111 (-33 (10)), ASR(ACC) =11101111


(-17(10)).

арифметический
сдвиг вправо.
Заметим, что арифметический сдвиг можно выполнять в модифицированном
дополнительном или обратном кодах.
 Циклический сдвиг. При таком типе сдвига не теряется ни одна цифра сдвигаемого
числа. Это объясняется наличием кольцевой связи между старшим и младшим разрядами
числа. Пусть задано число A=11010010.

ROL(A)=10100101 –циклический сдвиг влево;


ROR(A)=01101001 –циклический сдвиг вправо.

2.5. Сложение двоичных чисел с плавающей точкой

eA eB
Пусть имеются два числа A  m A 2 и B  m B 2 , представленных в форме с
плавающей точкой. Рассмотрим операцию сложения операндов А и В, мантиссы которых
отвечают условию нормализации (2.8). Обозначим через X  m x 2 e x число, получаемое в
результате сложения операндов А и В. Предположим, что ВА. Тогда, операция
сложения чисел А и В, представленных в форме с плавающей точкой, описывается
следующим выражением:
m
Х= A+B  m 2
A
eA eB eA
 m B 2 2 ( m A  B
(eA e B )
) = m x 2 ex .
2
(2.9)

Анализ (2.9) показывает, что при сложении нормализованных чисел с плавающей


точкой можно выделить четыре этапа.
На первом этапе выполняется вычитание порядков исходных чисел.
На втором этапе уравниваются порядки слагаемых: меньший порядок увеличивается
до большего, а мантисса преобразуемого числа сдвигается вправо на соответствующее
количество разрядов. С этой целью используется результат вычитания порядков. Знак и
модуль разности будут определять соответственно, какое из слагаемых нужно
преобразовывать и на сколько разрядов следует сдвинуть их мантиссу. При этом младшие
разряды мантиссы могут пропадать, вследствие чего в слагаемое, сдвигаемое вправо,
вносится погрешность.
На третьем этапе выполняется сложение мантисс по правилам
сложения чисел с фиксированной точкой. При сложении, мантиссы слагаемых удобно
представлять в одном из модифицированных кодов: дополнительном либо обратном.
На четвертом этапе производится нормализация результата (в случае
необходимости), к которому приписывается общий порядок слагаемых.
В зависимости от абсолютных величин мантисс слагаемых сумма может
получиться: нормализованной, денормализованной вправо, денормализованной влево
(переполнение). Несовпадение цифр в знаковых разрядах свидетельствует о
денормализации влево (переполнение), а совпадение цифр в разряде переполнения
знаковой части и старшем разряде мантиссы — о нарушении нормализации вправо.
При переполнении (денормализации результата влево) мантисса результата
сдвигается на один разряд вправо, а порядок увеличивается на единицу, так как сумма
двух мантисс может быть денормализована влево не более чем на 1 разряд. В то же время
при денормализации вправо мантисса сдвигается влево до появления в старшем разряде 1,
при значении знака 0, или 0 при 1 в знаковом разряде, а из порядка вычитается число
единиц, равное числу сдвигов мантиссы. Такой порядок действий обусловливается тем,
что количество разрядов, на которое может нарушиться нормализация вправо, ничем не
ограничено.
Обычно количество сдвигов влево ограничивают числом разрядов
сумматора, так как процесс сдвигов при таком порядке действий может
оказаться бесконечным, если в результате алгебраического сложения
мантисс получен нуль. В этом случае после выполнения предельного
числа сдвигов мантиссу результата представляют машинным нулем.
Мантиссу результата представляют также машинным нулем, если в
процессе ее сдвига влево порядок числа окажется меньше допустимого, т. е. абсолютная
величина результата будет меньше, чем минимально возможное машинное число. Однако
приравнивание результата нулю при отрицательном переполнении порядка допустимо
только в отдельных случаях, когда результат должен складываться со значительно
большей величиной. Если исчезновение (антипереполнение) порядка не отмечается
каким-то образом, то могут возникнуть неожиданные ситуации, обусловленные
ограниченностью разрядной сетки мантиссы и округлением результатов.
При сложении может произойти истинное переполнение разрядной сетки числа, т. е.
переполнение разрядной сетки порядка. В этом случае минимум одно из слагаемых
должно иметь максимальный порядок, а мантисса результата должна получиться
денормализованной влево. При этом в вычислительном устройстве формируется сигнал
переполнения порядка.
Таким образом, после суммирования мантисс обоих слагаемых с выравненными
порядками сначала следует проверить, не нарушена ли нормализация влево, и если
нарушена, то восстановить нормализацию. Если нормализация влево не нарушена,
необходимо проверить, нет ли нарушения нормализации вправо, и в случае
необходимости восстановить нормализацию.
Выполнение операции вычитания отличается от сложения тем, что в начале
операции знак второго операнда меняется на противоположный.
Пример 1. Заданы А=0,11000·21; В=0,11000·21. Определить Х=А+В. Дальнейшие
действия производятся полагая, что используется представление мантиссы в прямом коде
и порядка в дополнительном.
[mA]cd = 0.11000; [eA]cc = 00001; [mB]cd = 0.11000; [eB]cc = 00001.

1. eA – eB = eA + (– eB): 00001 +
11111
00000
2. Выравнивание порядков отсутствует, так как разность порядков равна 0.
3. Складываем мантиссы, представленные в модифицированном дополнительном коде:
[mA]ссм = 00.11000 +
[mB]ссм = 00.11000
01.10000
Замечаем, что мантисса результата денормализована влево.
4. Производим нормализацию результата. При этом, единственный сдвиг мантиссы
результата вправо на один разряд сопровождается соответствующей (увеличением на 1)
коррекцией порядка:
[mХ]ссм = 00.11000; 00001 +
00001
[eХ]cc = 00010
[mХ]сd = 0.11000. Следовательно, Х=0,11000·22.
Пример 2. Заданы А=0,10101·2-2; В= -0,10010·2-3. Определить Х=А+В.
[mA]cd = 0.10101; [eA]cc = 11110; [mB]cd = 1.10010; [eB]cc = 11101.
1. eA – eB = eA + (– eB): 11110 +
00011
00001
2. Разность порядков равна +1, поэтому еА становится общим порядком; число В есть
меньшее слагаемое и его мантиссу нужно сдвинуть вправо на один разряд:
[mB]ccм = 11.01110; [mB]ccм = 11.10111.
3. 00.10101 +
11.10111
00.01100
Замечаем, что мантисса результата денормализована вправо.
4. Производим нормализацию результата. При этом, каждый сдвиг мантиссы результата
влево на один разряд (в данном примере после одного сдвига мантисса результата
оказывается нормализованной) сопровождается соответствующей коррекцией общего
порядка (вычитание единицы заменяется сложением с дополнительным кодом числа
минус 1):
[mХ]ссм = 00.11000; 11110 +
11111
[eХ]cc = 11101
[mХ]сd = 0.11000. Следовательно, Х=0,11000·2-3.

2.6. Умножение двоичных чисел с фиксированной точкой

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


арифметических операций. Умножение выполняется суммированием сдвинутых на один
или несколько разрядов частичных произведений, каждое из которых является
результатом умножения множимого на соответствующий разряд (разряды) множителя.
При точном умножении двух чисел количество значащих цифр произведения может
в пределе достичь двойного количества значащих цифр сомножителей. Еще сложнее
возникает ситуация при умножении нескольких чисел. Поэтому в произведении только в
отдельных случаях используют двойное количество разрядов, обычно же ограничиваются
количеством разрядов, которое имели сомножители. Здесь
учитывается то обстоятельство, что правила приближенных вычислений рекомендуют
оставлять в произведении столько же значащих цифр, сколько их содержится в наименее
точном из сомножителей. Младшие разряды результата при этом отбрасываются, а
старшие обычно округляются по известным правилам с тем, чтобы ошибка произведения
стала знакопеременной и ее. математическое ожидание было равно 0 с учетом
равновероятности любых значений отброшенных младших разрядов.
Основными способами выполнения операции умножения являются:
1) умножение начиная с младших разрядов множителя;
2) умножение начиная со старших разрядов множителя.
Пример. Заданы А=1011 х Получить произведение A•В
В=1101 путем умножения с младших
1011 разрядов множителя В.
0000
1011
1011
10001111
А=1011 х Получить произведение путем
В=1101 умножения со старших разрядов
1011 множителя В.
1011
0000
1011
10001111
В обоих случаях операция умножения состоит из ряда последовательных операций
сложения частных произведений. Операциями сложения управляют разряды множителя:
при единичном разряде множителя к сумме частных произведений прибавляется
множимое с соответствующим сдвигом; если разряд множителя нулевой, то множимое не
добавляется. При этом полную сумму (произведение) можно получить
двумя путями:
1) сдвигом множимого на требуемое количество разрядов и добавлением полученного
очередного частного произведения к ранее накопленной сумме;
2) сдвигом суммы ранее полученных частных произведений на каждом шаге на один
разряд и последующим добавлением к сдвинутой сумме неподвижного множимого либо
нуля.
Основываясь на вышеизложенном можно предложить четыре алгоритма умножения:
1) умножение младшими разрядами множителя со сдвигом накапливаемой суммы
частичных произведений вправо;
2) умножение младшими разрядами множителя со сдвигом множимого влево;
3) умножение старшими разрядами множителя со сдвигом суммы частичных
произведений влево;
4) умножение старшими разрядами множителя со сдвигом множимого вправо.
Каждому алгоритму умножения можно поставить в соответствие концептуальную
схему машинного умножения (рис.2.1):

1) 2)
Множимое
Множимое
Множитель Схемы И

Множитель Схемы И
Сумматор
Сумматор
3) 4)

Множимое Множимое

Схемы И Множитель Схемы И Множитель

Сумматор Сумматор

Рис.2.1. Концептуальные схемы умножения

2.6.1. Умножение двоичных чисел в прямом коде

Наиболее просто операция умножения в вычислительных устройствах выполняется


в прямом коде. При этом на первом этапе определяется знак произведения путем
сложения знаковых цифр сомножителей по модулю 2. Затем производится перемножение
модулей сомножителей по одному из рассмотренных в параграфе 2.6 алгоритмов
умножения. Результату присваивается полученный знак.
Пример 1. Пусть заданы множимое А=0.10011 и множитель В=0.10111. Получить их
произведение в прямом коде.
Представим сомножители в прямом коде: Acd=0.10011; Bcd=0.10111.
1. Определим знак произведения: 0  0=0.
2. Перемножим модули сомножителей по первому алгоритму:

Множитель Сумматор
0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 1 +А 1 0 0 1 1
0 1 0 0 1 1 0 0 0 0 0
Сдвиг 0 0 1 0 0 1 1 0 0 0 0
Сдвиг 0 1 0 1 1 +А 1 0 0 1 1
0 1 1 1 0 0 1 0 0 0 0
Сдвиг 0 0 1 1 1 0 0 1 0 0 0
Сдвиг 0 0 1 0 1 +А 1 0 0 1 1
1 0 0 0 0 1 0 1 0 0 0
Сдвиг 0 1 0 0 0 0 1 0 1 0 0
Сдвиг 0 0 0 1 0 +0 0 0 0 0 0
0 1 0 0 0 0 1 0 1 0 0
Сдвиг 0 0 1 0 0 0 0 1 0 1 0
Сдвиг 0 0 0 0 1 +А 1 0 0 1 1
0 1 1 0 1 1 0 1 0 1 0
Сдвиг 0 0 1 1 0 1 1 0 1 0 1

Замечание: Сумматор содержит вспомогательный разряд переполнений. Если при


суммировании возникает единица переноса из старшего разряда сумматора, то ее следует
фиксировать.
Ответ: Рcd=0.0110110101.
2.7. Умножение двоичных чисел с плавающей точкой
Пусть заданы двоичные числа А и В, представленные в форме с плавающей точкой:
A=mA2eA и B=mB2eB. Тогда их произведение
Р=АВ= mA mB2(eА +eВ) = mР2eР . (2.15)

Умножение по формуле (2.15) предполагает выполнение следующих действий:


1. Определение знака произведения путем сложения по модулю два знаковых цифр
мантисс сомножителей (предполагаем, что умножение мантисс выполняется в прямом
коде).
2. Алгебраическое сложение порядков сомножителей с целью определения порядка
произведения.
3. Умножение модулей мантисс сомножителей по правилам умножения двоичных
чисел с фиксированной точкой.
4. Если мантисса результата денормализована, то выполнить нормализацию. Так как
перемножаемые мантиссы должны отвечать условию нормализации, то очевидно, что
денормализация мантиссы произведения возможна только на один разряд вправо. Она
устраняется путем сдвига мантиссы результата на один разряд влево, сопровождаемого
внесением коррекции (вычитание единицы) порядка результата.
5. Присвоение знака результату.
При выполнении операции умножения двоичных чисел с плавающей точкой могут
возникнуть две особые ситуации – антипереполнение (отрицательное переполнение)
порядка и переполнение (положительное) порядка. В случае антипереполнения порядка
результат интерпретируется как машинный нуль (если не предусмотрена специальная
обработка данной ситуации). Если переполнение порядка имеет место наряду с
получением денормализованной мантиссы произведения, то прежде всего следует
нормализовать мантиссу результата. Если после нормализации мантиссы переполнение
порядка не устраняется, то вычислительное устройство должно выработать признак
переполнения порядка.

2.8. Деление двоичных чисел с фиксированной точкой

Деление в цифровых устройствах сводится к выполнению последовательности


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

2.8.1. Деление двоичных чисел в прямом коде

В отличие от умножения двух чисел, где не может возникнуть переполнение


разрядной сетки, при делении такое переполнение возможно. Признаком переполнения
является появление единицы в знаковом разряде частного.
Частное определяется путем деления модулей исходных чисел. При этом должно
соблюдаться условие: АВ, где А – делимое и В – делитель. В противном случае
возникнет переполнение. Деление чисел в прямом коде по схеме без восстановления
остатков со сдвигом остатков влево включает следующие шаги:
1. Определение знака частного путем сложения по модулю 2 знаковых цифр делимого и
делителя. Получение модулей делимого и делителя.
2. Выполнение так называемого пробного вычитания делителя из делимого. Если
получаемый остаток положительный, то в псевдознаковом разряде частного
проставляется 1, при появлении которой формируется признак переполнения
разрядной сетки и операция деления прекращается. Если полученный остаток
отрицательный, то в псевдознаковый разряд частного записывается 0 и деление
возможно, так как АВ. Результатом пробного вычитания является первый
текущий остаток.
3. Анализ знака текущего остатка: при отрицательном знаке выполнить сдвиг текущего
остатка влево, к которому прибавить делитель; при положительном знаке выполнить
сдвиг текущего остатка, из которого затем вычесть делитель. Вычитание делителя
заменяется алгебраическим сложением в дополнительном коде.
4. Знак очередного текущего остатка определяет очередную цифру частного: при
положительном остатке цифра частного равна 1, при отрицательном остатке цифра
частного равна 0. Другими словами, очередная цифра частного является инверсией
знаковой цифры очередного текущего остатка.
5. Выполнение пунктов 3 и 4 до получения требуемого количества цифр частного. При
m-разрядной цифровой части операндов необходимо получить (m+1) цифр частного.
6. Округление частного прибавлением 1 в младший разряд частного.
7. Представление m-разрядного результата частного в прямом коде с присвоением ему
знака, полученного на шаге 1.

Пример. Заданы делимое А=-0.1000 и делитель В=0.1010. Получить частное Q.


Запишем операнды в прямом коде: Аcd= 1.1000, Вcd=0.1010.
1. Определим знак частного: 1  0=1,
и возьмем модуль от делимого и делителя: А=0.1000, В=0.1010.
26. Выполним деление модулей операндов:

Сумматор Цифры
частного
Пробное 0 1 0 0 0
вычитание: 1 0 1 1 0
+(-В)
1 1 1 1 0 0
Сдвиг 1 1 1 0 0
+В 0 1 0 1 0
0 0 1 1 0 0 1
Сдвиг 0 1 1 0 0
+(-В) 1 0 1 1 0
0 0 0 1 0 0 1 1
Сдвиг 0 0 1 0 0
+(-В) 1 0 1 1 0
1 1 0 1 0 0 1 1 0
Сдвиг 1 0 1 0 0
+В 0 1 0 1 0
1 1 1 1 0 0 1 1 0 0
Сдвиг 1 1 1 0 0
+В 0 1 0 1 0
0 0 1 1 0 0 1 1 0 0 1
1
Округление 0 1 1 0 1 0

7. Ответ: Модуль частногоQ=0.1101. Частное в прямом коде Qcd=1.1101.

Если делимое и делитель имеют по m цифровых разрядов, то для практической


реализации схемы деления без восстановления остатков со сдвигом остатков влево
необходимы m-разрядный регистр делителя; (m+1)-разрядный регистр частного со
сдвигом влево и m-разрядный сумматор со сдвигом влево. Сумматор производит сдвиг
текущего остатка влево и алгебраическое сложение его с делителем. Дополнительный
разряд в регистре частного используется для округления результата.
На практике схема деления без восстановления остатков со сдвигом остатков влево
получила широкое применение, так как требует меньших аппаратурных затрат.

2.9. Деление двоичных чисел с плавающей точкой

Пусть заданы двоичные числа А и В, представленные в форме с плавающей точкой:


A=mA2eA и B=mB2eB. Операция деления выполняется согласно выражению
Q=А/В= (mA / mB)2(eА - eВ) = mQ2eQ . (2.16)

Деление по формуле (2.16) предполагает выполнение следующих действий:


1. Определение знака частного путем сложения по модулю два знаковых цифр мантисс
операндов.
2. Если делитель отличен от нуля, то производится деление модулей мантисс операндов
по правилам деления двоичных чисел с фиксированной точкой. При этом, после пробного
вычитания деление выполняется и в случае получения 1 в псевдознаковом разряде. Если
делитель равен нулю, то операция деления прекращается и необходимо выработать
сообщение о попытке деления на ноль.
3. Определение порядка частного путем вычитания порядка делителя из порядка
делимого.
4. Если мантисса результата денормализована, то выполнить нормализацию. Так как
мантиссы делимого и делителя должны отвечать условию нормализации, то очевидно, что
денормализация мантиссы результата возможна только на один разряд влево. Она
устраняется путем сдвига мантиссы результата на один разряд вправо, сопровождаемого
внесением коррекции (прибавление единицы) порядка частного.
5. Присвоение знака мантиссе частного.
При выполнении операции деления двоичных чисел с плавающей точкой может
возникнуть переполнение (положительное) порядка, которое нельзя устранить. Поэтому, в
случае возникновения переполнения порядка вычислительное устройство должно
выработать соответствующий признак. Может также произойти антипереполнение
(отрицательное переполнение) порядка. Если антипереполнение порядка имеет место
наряду с получением денормализованной мантиссы частного, то прежде всего следует
нормализовать мантиссу результата. Если после нормализации мантиссы
антипереполнение порядка не устраняется, то результат деления интерпретируется как
машинный нуль (если не предусмотрена специальная обработка данной ситуации).

3. ПРОЕКТИРОВАНИЕ КОМБИНАЦИОННЫХ ЛОГИЧЕСКИХ СХЕМ

Комбинационными логическими схемами (КЛС) называются схемы, состоящие из


логических элементов того или иного функционально полного базиса, не .способные к
запоминанию информации. КЛС можно описать двумя способами: с помощью таблиц
истинности или с помощью логических выражений. Если КЛС имеет больше двух входов
и выполняет сложные функции, она может быть реализована различными комбинациями
логических элементов.
Проектирования КЛС включает несколько последовательно выполняемых этапов:
 Табличное или аналитическое описание функционирования КЛС;
 Получение минимальной ДНФ (минимизация);
 Преобразование полученной МДНФ посредством формул де Моргана с целью
перехода к выбранному или заданному логическому базису (И-НЕ, ИЛИ-НЕ);
 Синтез КЛС в соответствующем базисе логических элементов.
К КЛС относятся преобразователи кодов, дешифраторы и шифраторы, мультиплексоры
и демультиплексоры, компараторы, а также сумматоры. В принципе любое цифровое
устройство преобразует некоторый входной код в некоторый выходной, т. е. является
кодовым преобразователем. Однако по традиции к преобразователям кодов относят
устройства, которые изменяют вид кодирования данных. Рассмотрим кратко вопрос
реализации двух видов преобразований.
Как известно, двоичные числа могут быть представлены в прямом, обратном или
дополнительном кодах. Преобразование прямого кода в обратный реализуется сложением
по модулю 2 значений кода данного разряда и сигнала управления преобразователем. При
этом нулевое значение сигнала управления обеспечивает прохождение на выход
устройства прямого кода числа. При единичном значении сигнала управления каждый
разряд выходного кода будет инверсией соответствующего разряда входного кода.
Очевидно, в качестве сигнала управления преобразователем прямого кода в обратный
может быть непосредственно использовано значение знакового разряда.
Преобразование прямого кода в дополнительный реализуется сложнее. В этом
случае операция преобразования не является поразрядной, и для определения значения
кода в каком-либо разряде требуется анализ значений других разрядов. Известно, что для
получения дополнительного кода нужно проинвертировать все разряды преобразуемого
кода и затем прибавить к результату 1.
Сопоставление прямого и дополнительного кодов показывает, что последний
отличается от первого инвертированием старших разрядов от n-1 до i+1 включительно,
где i – номер первого справа разряда, содержащего 1. Остальные разряды остаются
неизменными. Например, для прямого кода 10011010 дополнительным будет код
01100110. Аналитически это правило записывается в виде выражения
хвых i = хвх i  (хвх i-1  хвх i-2 … хвх 0),
согласно которому для получения i–го разряда дополнительного кода необходимо
сложить по модулю 2 исходный код этого разряда с дизъюнкцией всех предыдущих
(младших) разрядов. Знаковый разряд преобразуемого кода можно использовать в
качестве управляющего сигнала.

Синтез преобразователей кода


Преобразователи кода - это комбинационные функциональные элементы, предназначенные для
преобразования одного двоичного кода в другой: мы можем представить его как КЛС с n входами и m
выходами. Переменные n и m могут быть разными или равными. Число n соответствует количеству рангов
кода на входе, м- количество рангов кода на выходе.
Обычно преобразователи кода с разным количеством входов и выходов являются те, которые выполняют
преобразование чисел из одной системы счисления в другую или из одного типа кода в другой тип кода.
Синтез преобразователей кода происходит следующим образом:
I) На 1-м этапе проводится разработка таблицы истинности. Количество элементов таблицы истинности
равно числу рядов входного кода, который представляют собой переменные не входе функции. Количество
функции на выходе равно числу рангов кода на выходе. Nr. комбинации равны 2n, но f в таблице истинности
может быть частично определено, то есть в 2n комбинациях часть может быть неиспользованной, в этом
случае логический f будет минимизирован как частично определенный f.
II) Минимизация функций.
III) Нахождение общих терминов минимальных форм всех ЛФ для использования одних и тех же элементов
при получении в логической схеме различных функций.
IV) Реализация минимальных форм, полученных для доступных логических элементов.

Ex.:
843(-2) 441(-2)
x4x3 00 01 11 10
x2x1
00 *
01 * 1 * 1
11 *
10 1 1 * *
y1  x2 x1  x2 x1
X1 X2 X3 X4 Y1 Y2 Y3 Y4
0 0 0 0 0 0 0 0 0 x4x3 00 01 11 10
1 0 0 1 1 0 0 1 0 x2x1
2 0 1 0 1 0 1 0 1 00 *
3 0 0 1 0 0 1 1 1 01 * *
4 0 1 0 0 0 1 0 0 11 1 1 * 1
5 0 1 1 1 1 0 1 0 10 1 1 * *
6 1 0 0 1 1 1 0 1 y 2  x2
7 0 1 1 0 1 1 1 1 y3  x4  x3 x2  x2 x1
8 1 0 0 0 1 1 0 0
y 4  x 4  x 2 x3
9 1 0 1 1 1 1 1 0

x4x3 00 01 11 10
x2x1
00 * 1
01 * * 1
11 1 * 1
10 1 * *

Дешифраторы

Дешифратором или декодером (decoder) чаще всего называют кодирующее устройство, преобразующее
двоичный код в унарный. Из всех m выходов дешифратора активный уровень имеется только на одном, а
именно на том, номер которого равен поданному на вход двоичному числу. На всех остальных выходах
дешифратора уровни напряжения неактивные.
Если декодер имеет n входов, m выходов и использует все возможные наборы входных переменных, то m=
. Такой дешифратор называют полным
Если m дешифратор называют неполным

x3 x2 x1 y0 y1 y2 y3 y4 y5 y6 y7  
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 0 1 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1
y0  x3 x2 x1
y1  x3 x2 x1
y2  x3 x2 x1
y3  x3 x2 x1
y4  x3 x2 x1
y5  x3 x2 x1
y6  x3 x2 x1
y7  x3 x2 x1
Reprezentarea grafica

DC 0 x0
1 x1
2 x2
x0 0
3 x3
x1 1 x4
4
x2 2 x5
5
6 x6
7 x7
v
x3 x2 x1

y0

y1

y2

y3

y4

y5

y6

y7

Шифраторы
Шифратор — это комбинационное устройство, преобразующее десятичные числа в
двоичную систему счисления, причем каждому входу может быть поставлено в
соответствие десятичное число, а набор выходных логических сигналов соответствует
определенному двоичному коду. Шифратор иногда называют «кодером» (от англ. coder) и
используют, например, для перевода десятичных чисел, набранных на клавиатуре
кнопочного пульта управления, в двоичные числа.
Если количество входов настолько велико, что в шифраторе используются все возможные
комбинации сигналов на выходе, то такой шифратор называется полным, если не все, то
неполным. Число входов и выходов в полном шифраторе связано соотношением n= 2m, где
n— число входов, m— число выходов.

3.4. Сумматоры

Сумматоры включаются в класс комбинационных логических схем, в которых


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

Реализация структуры любого сумматора основывается на двух одноразрядных


логических схемах суммирования, которые в специальной литературе известны как схема
полусумматора, соответственно схема полного сумматора. Практически работают со
схемой полного сумматора, имеющего два входа данных и вход для переноса из младшего
разряда и вырабатывающего на выходе бит суммы и цифру переноса в следующий
(старший) разряд. Таблица истинности, описывающая функционирование сумматора, и
его условное обозначение представлены на рис. 3.17.
В i-ом разряде суммируются цифры ai и bi , которые присутствуют на входах
данных сумматора, и цифра переноса ci из младшего разряда. На выходах сумматора
вырабатываются две цифры si и ci+1 , представляющие сумму складываемых разрядов и
перенос в старший разряд. С учетом таблицы истинности система булевых функций,
описывающая функционирование сумматора запишется в виде
si  ai bi ci  ai bi ci  ai bi ci  ai bi ci  ai  bi  ci ;
(3.1)
c  ai bi  ai ci  bi ci
i1
ai bi
ai bi ci si Ci+1
0 0 0 0 0


0 0 1 1 0
0 1 0 1 0 ci ci+1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
si
a) б)
Рис. 3.17. Полный сумматор: таблица истинности и условное обозначение.

На основе полного сумматора можно просто реализовать структуру сумматора на n


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

a0 b0 a1 b1 a2 b2 a3 b3

cIN c1 c2 c3 cOUT

s0 Рис. 3.18 Структура сумматора с последовательным переносом


s1 s2 s3
Основное применение сумматоров относится к вычислительной технике. Поэтому
быстродействие сумматоров является первостепенным критерием качества. Для
  
повышения быстродействия сумматоров были предложены и реализованы различные
меры как технологического, так и архитектурного характера. Меры, предпринятые в 
технологическом плане (логические элементы, через которые распространяется перенос,
проектируются так чтобы сократить время распространения; использование схемы
сумматора с черезразрядной инверсией в тракте переноса), не являются однако
достаточными в случае проектирования сумматоров большой разрядности. В этом случае
решение представляется архитектурным и предполагает отказ от последовательного
переноса в пользу ускоренного переноса. Это в действительности означает
переопределение логической функции, описывающей работу той части сумматора,
которая вырабатывает сигнал переноса.
Выражение для определения переноса можно записать в виде
c  ai bi  ai ci  bi ci  ai bi  (ai  bi )ci (3.2)
i1
Обозначив Gi  ai bi и Pi  ai  bi , выражение для переноса примет вид
c  Gi  Pi ci (3.3)
i1
Функция генерации переноса Gi=1 указывает на то, что полный сумматор в i-м
разряде вырабатывает перенос ci+1=1 если ai=bi=1. Функция распространения переноса
Pi=1 указывает на то, что перенос ci в i-й разряд сумматора распространяется через
суммирующую ячейку i-го разрядa и появляется на ее выходе как перенос в соседний
старший разряд ci+1.
Структура сумматора с ускоренным переносом состоит из двух узлов: узла для
суммирования, состоящего из конечного числа суммирующих ячеек (полных
сумматоров) и схемы ускоренного переноса (СУП), которая одновременно генерирует
все переносы. На рис.3.19,а дана блок-схема 4-разрядного сумматора с ускоренным
переносом. Схема ускоренного переноса дана на рис.3.19,б. Генерирование сигналов
переноса задается следующими выражениями:
c1  G0  P0c IN
c2  G2  P1G0  P1P0cIN (3.4)

c3  G2  P2G1  P2 P1G0  P2 P1P0cIN


Полное время суммирования на сумматоре с ускоренным переносом состоит из
времени суммирования в одноразрядном полном сумматоре и времени срабатывания
схемы ускоренного переноса, и не зависит от количества разрядов.
cIN
a0
b0 & c1
a0 b0
a0 cIN
b0 p0 1
1 p0
S0 a1


b1
&
a0
b0 a0
b0
a1 a1 b1 p1
&
b1 cIN
c1 S1 a1 p1 p0
b1 1
p1

a2
С c2
a2
У & 1
b2 b2
a2 b2
a3 П a1
b1
b3 c2 S2 p2 &
p2 a0

 a2
b2
1 b0
p1
p2
a3 b3 &
cIN
p0
c3 p1
S3 p2

 &

a) б)
c3
COUT 1
&

&

Рис.3.19. Структура сумматора с ускоренным переносом:


a) блок-схема; б) схема ускоренного переноса.
3.5. Компараторы

Компараторы выступают в качестве КЛС, которые обеспечивают сравнение


двоичных чисел. Простейший компаратор представляет собой простую комбинационную
схему, способную обнаруживать факт равенства двух двоичных чисел на входах данных,
вырабатывая на выходе соответствующее значение специального бита равенства.
Очевидно, что числа на входах данных могут и не быть равными. Если желательно
сравнение двух входных чисел как в отношении равенства, так и в отношении
больше/меньше необходимо построить более сложный компаратор (magnitude comparator),
который может вырабатывать три выходных сигнала: биты равно, больше и меньше.
Синтез компараторов классическими методами практически невозможен.
Предположим, что необходимо построить схему сравнения на равенство двух 8-разрядных
чисел. Классический метод синтеза потребовал бы построить таблицу истинности с
числом строк 2(8+8)=65536. В таких случаях решение находится методом декомпозиции
задачи, который предполагает разбиение решаемой задачи на более мелкие подзадачи.
Поясним сказанное на примере синтеза компаратора с тремя выходами.
Пусть требуется сравнить двоичные числа A=a3a2a1a0 и B=b3b2b1b0. Прямой синтез
потребовал бы запись канонических форм для трех функций FA=B – равенства, FAB –
большинства, FAB – меньшинства по таблице истинности, число строк которой 2 (4+4) = 256.
Практически синтез реализуется раздельным сравнением цифр в разрядах 3, 2, 1, 0. С этой
целью необходимо выполнить синтез одноразрядной схемы равенства на три выхода. Для
этих выходов получим функции fe – равенства, fs - большинства и fi - меньшинства. Затем
на базе одноразрядной схемы равенства построим 4-разрядный компаратор.
Таблица 3.3
ai bi fe ai bi fs ai bi fi
0 0 1 0 0 0 0 0 0
0 1 0 0 1 0 0 1 1
1 0 0 1 0 1 1 0 0
1 1 1 1 1 0 1 1 0

В табл.3.3 даны таблицы истинности для функций fe, fs и fi. Несложно заметить, что
соответствующие функции описываются следующими выражениями:
f e  ai bi  ai bi ; f s  ai bi ; f i  ai bi . (3.5)
Используя формулы (3.5) можем записать три логические функции, в соответствии с
которыми работает 4-разрядный компаратор:
- отношение равенства A=B выражается функцией

FA=B = fe3 fe2 fe1 fe0 , (3.6)


так как отношение A=B предполагает, что a3=b3, a2=b2, a1=b1 и a0=b0;
- отношение большинства AB предполагает a3b3; или a3=b3 и a2b2; или a3=b3 и a2=b2 и
a1b1; или a3=b3 и a2=b2 и a1=b1 и a0b0 что приводит к логической функции
F f f f f f f f f f f (3.7)
A B s3 e3 s2 e3 e2 s1 e3 e2 e1 s0
- отношение меньшинства AB предполагает a3b3; или a3=b3 и a2b2; или a3=b3 и a2=b2 и
a1b1; или a3=b3 и a2=b2 и a1=b1 и a0b0 откуда следует функция
F f f f f f f f f f f (3.8)
AB i3 e3 i2 e3 e2 i1 e3 e2 e1 i0
Схема компаратора, реализующего функции (3.6), (3.7), (3.8) представлена на
рис.3.20 (через Ci обозначена одноразрядная схема сравнения в i –ом разряде).

a3 b3 a2 b2 a1 b1 a0 b0

C3 C2 C1 C0

fi3 fs3 fe3 fi2 fs2 fe2 fi1 fs1 fe1 fi0 fs0 fe0

fe3
fs2 & fe3 &
fi2
fe3
fs3
fe2 fe3 fi3
fe3 1
& FAB fe2
fe2 FA=B fs1 1
& fi1 & FAB
fe1 fe3
fe3 fe2
fe0 fe2 fe1
fe1 fi0
fs0

& &

Рис.3.20 4-разрядный компаратор

Другой способ синтеза компаратора основывается на реализации операции (A-B) на


сумматоре с последующим анализом полученного результата. Как известно, сумматоры
выполняют операцию вычитания через суммирование вычитателя с дополнительным
кодом вычитаемого. Поэтому входное слово А следует подавать на один из входов данных
сумматора. Для получения дополнительного кода входного слова В его следует подать в
инверсном виде на второй вход данных сумматора. При этом на вход переноса
необходимо подать сигнал логической 1.
Пусть требуется сравнить два 4-разрядных числа A и B. Выполним операцию
вычитания а затем проанализируем полученный результат для трех случаев: AB, A=B,
AB.
AB A=B AB
A=11(10)=1011(2) A=11(10)=1011(2) A=9(10)=1001(2)
B=10(10)=1010(2) B=11(10)=1011(2) B=12(10)=1100(2)
(A-B) 1011 (A-B) 1011 (A-B) 1001
+ 0101 + 0100 + 0011
1 1 1
1 0001 1 0000 0 1101
Cout S Cout S Cout S

Из представленного примера следует что:


- отношение большинства AB имеет место когда выходной перенос Cout=1 и
сумма S0;
- отношение равенства A=B имеет место при S=0.
- отношение меньшинства AB справедливо если выходной перенос Cout=0.
Используя выводы проведенного анализа можно построить схему компаратора
(рис.3.21).

a0 &
s0 AB
a1 1
a2 s1
a3 1 A=B


s2
b0
s3
b1
b2 Cout
b3
1 AB

cIN
(“1”)

Рис.3.21. 4-разрядный компаратор

Оценить