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

1.

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

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


В вычислительных системах (ВС) существует два вида преобразования информации:
преобразования, определяемые правилами выполнения арифметических операций, и
логические преобразования (логические операции).
Разработанный математический аппарат является разделом математической логики и
называется алгеброй логики, или булевой алгеброй. Основным понятием алгебры логики
является высказывание. Под высказыванием понимается всякое предложение, которое
либо истинно, либо ложно, и притом только одно из двух. В алгебре логики принято
отождествлять истинность высказывания с символом 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 Y= X
1
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 ИЛИ х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, б.

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

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


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

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


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

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 –
–-–-–- – – (х 1 v х2 ) (х1 v х2 ) = х1
х1 v х2 = х1 х2 –-–- – – Склеивание
х1 х2 = х1 v х2
Де Моргана

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

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

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


содержит m+n – столбцов и 2n – рядов. Где n количество переменных, а m
количество функций. В таблицу истинности включаются все возможные комбинации
переменных и значение функций для каждой комбинации.
Представление логических функций аналитическим методом
функции представляются логическими операциями (конъюнкцией, дизъюнкцией и
инверсией). Аналитические выражения представляются 2 формами:
1. Совершенной Дизъюнктивной Нормальной Формой СДНФ - состоит из
элементарных конъюнкций, соединенных знаками дизъюнкции . Конъюнкцию называют
элементарной, если в нее не входит по нескольку одинаковых букв. Число элементарных
конъюнкций в СДНФ обязательно равно числу единичных значений функции в таблице
истинности.
В каждую элементарную конъюнкцию
СДНФ входят обязательно все аргументы функции, каждый из которых может быть
представлен либо в прямой, либо в инверсной форме и представляют собой
отрицание конституент единицы (минтерм).
2. Совершенная Конъюнктивная Нормальная Форма - это конъюнкция простых
дизъюнкций, где под термином простая дизъюнкция имеется в виду дизъюнкция
переменных или их отрицаний. В СКНФ простые дизъюнкции содержат все переменные в
своей прямой или инверсной форме и представляют собой отрицание конституент нуля
(макстерм).
Конституент единицы (минтерм) – элементарная функция равная 1, которая
представляет собой логическое умножение всех переменных.
Конституент нуля (макстерм) – элементарная функция равная 0, которая
представляет собой логическое сложение всех переменных.
8 форм представления логических функций
Представление логических функций используя логические схемы

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

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


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

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


содержащие число клеток, являющееся степенью 2. Получающееся новое элементарное
произведение определяется как произведение переменных, не меняющих своего значения
на всех склеиваемых наборах. Число m оставшихся переменных в элементарном
произведении определяется легко:
m = n - log2 M,
где п — число переменных функции; М — число склеиваемых наборов (клеток). Метод
широко используется на практике, благодаря простоте и удобству. Минимизация булевой
функции заключается в нахождении минимального покрытия всех единиц
диаграммы блоками из единиц (указанной конфигурации), расположенных в соседних
клетках диаграммы. При этом всегда считается, что левый край диаграммы Карно
примыкает к ее правому краю, а верхний край диаграммы примыкает к нижнему ее краю.
После получения минимального покрытия всех единиц диаграммы Карно, минимальная
ДНФ булевой функции записывается как дизъюнкция элементарных
конъюнкций, соответствующих выделенным блокам единиц в диаграмме.
Диаграмма Карно для функций с 5-ю переменными

000 001 011 010 110 111 101 100


00
01
11
10

Метод Квайна-МакКласки. Минимизация методом Квайна-МакКласки включает


следующие шаги:
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 .

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

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


необходимо минимизировать, определяются частично. Это означает, что из
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 1 1 0
0 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 x 4 3
 x x x
4 2 1
 xxx
4 3 1

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 - 1 bn - 2 ... b1 b0 ; N  0
Ncd =  (2.5)
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

Отсюда следует, что диапазон значений целых чисел в дополнительном коде задается
неравенством:
-2n  NCC  2n-1. - мах значение

Например, 32-разрядное целое число будет принимать значения в диапазоне -231;


(231-1).
- min значение
Когда десятичная точка неявно фиксирована слева, максимальное и минимальное
значения числа в дополнительном коде будут:

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

1 0 0 ... 0

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

-1  NCC  1-2-m.
- min значение
• Представление двоичных чисел в обратном коде: Обратный код положительного
числа совпадает с прямым кодом этого числа. Обратный код отрицательного числа
получается путем инвертирования цифровых разрядов и проставляя 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(ACC)=00101010 (42(10)); 



 арифметический сдвиг влево;
ACC=11011111 (-33(10)), ASL(ACC)=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.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.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.10. Двоично-десятичная арифметика

Операции над десятичными числами реализуются как в мощных ВС, так и в


электронных калькуляторах. Поэтому изучение алгоритмов выполнения двоично-
десятичных арифметических операций является безусловной необходимостью.
В двоично-кодированном представлении десятичного числа каждая десятичная
цифра изображается тетрадой двоичных символов bi ={ß4ß3ß2ß1}i, где bi - десятичная
цифра i-ro разряда; ßj - двоичная цифра i-й тетрады. Полученный таким образом
десятичный код, кодированный двоичными символами, для краткости называют
Д-кодом.
Имеется некоторое множество Д-кодов. Оно обусловливается наличием всего 10
разрешенных из 16 возможных комбинаций, которые допускает тетрада. Наличие
запрещенных комбинаций в Д-кодах отличает их от обычных позиционных систем
счисления, в которых все комбинации - разрешенные. Из всего множества известных
Д-кодов наибольшее распространение в вычислительной технике получили код Д1 (8421)
и код Д2 с избытком 3 (8421 + 3).

2.10.1. Правила сложения в Д-кодах

Из-за запрещенных комбинаций, при сложении чисел в любом из Д-кодов возникают


необходимость в коррекции результата и трудности в формировании десятичного
переноса в следующую тетраду. Особенности сложения чисел в каждом из Д-кодов
различны, поэтому рассмотрим их раздельно. При этом будем считать, что заданы числа
А=аnаn-1…а1а0 и B=bnbn-1…b1b0, где аi, bi - двоично-кодированные десятичные цифры
(тетрады). Необходимо получить сумму S= А + В.
Далее выведем правила сложения в кодах Д1 и Д2. При этом через сi-1 будем
обозначать перенос, который может возникнуть из младшей тетрады при суммировании
чисел.
При сложении чисел в коде Д1 могут возникнуть следующие случаи:
1. Если аi+bi+сi-1<10, то при выполнении действий над разрядами тетрады по правилам
двоичной арифметики сразу получается правильный результат.
2. Если аi+bi+сi-110, то возникает десятичный перенос. При этом признаком
неправильного результата является в одном случае появление запрещенной комбинации,
если 15аi+bi+сi-1 10, во втором - возникновение по тетрадного переноса равного 16, что
превышает значение десятичного переноса на 6. В любом из этих случаев необходимо
скорректировать результат в данной тетраде введением поправки +01102.
Таким образом, если в i-й тетраде сумма цифр с переносом из (i-1)-й тетрады меньше
десяти, то сложение производится без поправок. Если же суммирование цифр с переносом
приводит к появлению запрещенной комбинации или к возникновению переноса в
старшую тетраду, то происходит коррекция результата тетрады введением поправки
+01102. Перенос, который возникает во время коррекции i-й тетрады, прибавляется к
содержимому (i+1)-й тетрады.
При этом, если в нескольких тетрадах, начиная с (i+1)-й, разрядная сумма равна
10012, то перенос приведет к формированию запрещенной комбинации в (i+1)-й тетраде. В
результате этого потребуется коррекция, которая приведет к запрещенной комбинации в
(i+2)-й тетраде и т. д. Следовательно, из-за последовательного распространения
потетрадных переносов время сложения в коде Д1 составит в худшем случае п тактов, где
п - количество тетрад. Обычно схемы строят таким образом, чтобы перенос, возникающий
при прибавлении тетрадной поправки, проходил сквозь тетрады, в которых
предварительная сумма равна 910=10012 и сбрасывал их в 0. При
этом сумма всегда формируется за два такта.
Пример 1. Сложить числа А=3810 и В=5910.

В коде Д1 А=0011 1000 и В=0101 1001. Тогда


0011 1000 +
0101 1001
1001 0001 +
0110 коррекция
1001 0111 : 9710=3810 +5910
Коррекция потребовалась вследствие возникновения потетрадного переноса.
Пример 2. Сложить числа А=37510 и В=57610.
0011 0111 0101 +
0101 0111 0110
1000 1110 1011 +
0110 0110 коррекция
1001 0101 0001 : 95110=37510 +57610
Коррекция потребовалась вследствие появления запрещенных комбинаций.
При сложении чисел в коде Д2 возможны следующие случаи с учетом того, что
ai =ai +3; bi+3=bi +3, где ai+3 и bi+3 - тетрады в коде Д2:
+3

1. Если аi+bi+сi-1<10, то
ai+3 +bi+3 +сi-1 = аi+3+bi+3+сi-1 = аi+bi+сi-1 +3+3=si +3+3= si+3 +3,
следовательно, результат необходимо скорректировать путем вычитания кода 00112.
2. Если аi+bi+сi-110, то si+3 = аi+bi+сi-1 +3+3, что приведет к возникновению десятичного
переноса, который уносит с собой из данной тетрады на шесть единиц больше.
Следовательно, необходима коррекция результата прибавлением кода 00112.
При сложении в коде Д2 не возникает проблемы сквозного переноса и операция
сложения выполняется в два такта. Это объясняется тем, что если в нескольких тетрадах
сумма до прибавления поправки равна 910=11112, то при поступлении переноса из (i-1)-й
тетрады в i-ю, ее содержимое сбросится в 0 и перенос пойдет в (i+1)ю тетраду в этом же
такте суммирования. В i-ю же тетраду во втором такте
суммирования будет прибавлена поправка +0011. Поэтому коррекция результата
осуществляется потетрадно с блокировкой цепей потетрадных переносов. Таким образом,
в коде Д2 всегда производится коррекция промежуточного результата, полученного путем
сложения цифр слагаемых по правилам двоичной арифметики. При этом, если при
сложении i-x тетрад не возникает переноса, то производится коррекция результата на
величину (-00112). Если же возникает потетрадный перенос, то коррекция результата
тетрады выполняется прибавлением кода 00112. Вычитание кода 00112 заменяется
сложением с кодом 11012.
Пример 1. Сложить числа А=2610 и В=4910.
0101 1001 +
0111 1100
1101 0101 +
1101 0011 коррекция
1010 1000 =7510 (перенос игнорируется)
Пример 2. Сложить числа А=07510 и В=02810.
0011 1010 1000 +
0011 0101 1011
0111 0000 0011 +
1101 0011 0011 коррекция
0100 0011 0110 =10310
2.10.2. Сложение чисел в дополнительном и обратном Д-кодах

Для выполнения операции сложения (вычитания) чисел в Д-кодах необходимо


отрицательные числа представлять в прямом, обратном и дополнительном кодах. Пусть
А=-0. а1 а2…аm, где аi - тетрады десятичного числа. Тогда
Acd =1. а1 а2…аm ;
Aci =1. ã1 ã2 …ãm ;
Acc =1. ã1 ã2 …(ãm+1),
где ãi есть дополнение до 10-1=9 во всех тетрадах; в младшей тетраде (ãm+1) есть
дополнение до 9+1=10. Следовательно, ãi +аi =9. Последнее означает, что для получения
обратного кода числа в коде Д2 необходимо всего лишь проинвертировать цифры тетрад
(вследствие свойств кода Д2). В коде Д1 прямое инвертирование цифр тетрад означает
получение дополнения до 24-1=15. Поэтому для получения обратного кода числа в коде
Д1 во все тетрады числа следует прибавить вначале код 01102,
после чего необходимо проинвертировать цифры тетрад. Дополнительный код получают
из обратного прибавлением 1 в младшую тетраду числа.
При сложении чисел в обратном коде необходимо учитывать возможный циклический
перенос. Сложение чисел в дополнительном и обратном Д-кодах требует коррекции
результата, которая выполняется по ранее изложенным правилам. При этом следует
помнить, что на шаге выполнения коррекции цепи переноса между тетрадами
блокируются для кода Д2. В случае же кода Д1, возникающие на шаге коррекции
межтетрадные переносы необходимо учитывать.
Пример. Сложить в кодах Д1 и Д2 числа А=0,96110 и В=-0,98910.
а) сложение в обратном коде Д1: А=0.1001 0110 0001; В=-0.1001 1000 1001;
Aci=0.1001 0110 0001; Вci=1.0000 0001 0000.

0.1001 0110 0001 +


1.0000 0001 0000
1.1001 0111 0001

Sci=1.1001 0111 0001; Scd =1.0000 0010 1000.


б) сложение в дополнительном коде Д1: Acс=0.1001 0110 0001; Вcс=1.0000 0001 0001.
0.1001 0110 0001 +
1.0000 0001 0001
1.1001 0111 0010

Scс=1.1001 0111 0010; Scd =1.0000 0010 1000.


в) сложение в обратном коде Д2: А=0.1100 1001 0100; В=-0.1100 1011 1100;
Aci=0.1100 1001 0100; Вci=1.0011 0100 0011.

0.1100 1001 0100 +


1.0011 0100 0011
1.1111 1101 0111 +
1101 1101 1101 коррекция
1.1100 1010 0100

Sci=1.1100 1010 0100; Scd =1.0011 0101 1011.


г) сложение в дополнительном коде Д2: Acс=0.1100 1001 0100; Вcс=1. 0011 0100 0100.
0.1100 1001 0100 +
1.0011 0100 0100
1.1111 1101 1000 +
1101 1101 1101 коррекция
1.1100 1010 0101

Scс=1.1100 1010 0101; Scd =1.0011 0101 1011.

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 *
X1 X2 X3 X4 Y1 Y2 Y3 Y4 01 * 1 * 1
0 0 0 0 0 0 0 0 0 11 *
1 0 0 1 1 0 0 1 0 10 1 1 * *
2 0 1 0 1 0 1 0 1
3 0 0 1 0 0 1 1 1
y1 = x2 x1  x2 x1
4 0 1 0 0 0 1 0 0
5 0 1 1 1 1 0 1 0 x4x3 00 01 11 10
x2x1
6 1 0 0 1 1 1 0 1
00 *
7 0 1 1 0 1 1 1 1
01 * *
8 1 0 0 0 1 1 0 0
11 1 1 * 1
9 1 0 1 1 1 1 1 0
10 1 1 * *
y2 = x2

x4x3 00 01 11 10
x2x1
00 1 * 1
01 * 1 * 1
11 * 1
10 1 1 * *
y3 = x4  x3 x2  x2 x1

x4x3 00 01 11 10
x2x1
00 * 1
01 * * 1
11 1 * 1
10 1 * *
y4 = x4  x2 x3

Дешифраторы

Дешифратором или декодером (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 x3
3
x1 1
4 x4
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 = aibi ci  aibi ci  aibi ci  aibi ci = ai  bi  ci ;
(3.1)
c = aibi  ai ci  bi ci
i+1 a bi
i

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
i+1
(3.2)

Обозначив G = a b и P = a  b , выражение для переноса примет вид


i i i i i i
c = Gi  Pi ci
i+1
(3.3)

Функция генерации переноса Gi=1 указывает на то, что полный сумматор в i-м
разряде вырабатывает перенос ci+1=1 если ai=bi=1. Функция распространения переноса
Pi=1 указывает на то, что перенос ci в i-й разряд сумматора распространяется через
суммирующую ячейку i-го разрядa и появляется на ее выходе как перенос в соседний
старший разряд ci+1.
Структура сумматора с ускоренным переносом состоит из двух узлов: узла для
суммирования, состоящего из конечного числа суммирующих ячеек (полных
сумматоров) и схемы ускоренного переноса (СУП), которая одновременно генерирует
все переносы. На рис.3.19,а дана блок-схема 4-разрядного сумматора с ускоренным
переносом. Схема ускоренного переноса дана на рис.3.19,б. Генерирование сигналов
переноса задается следующими выражениями:
c1 = G0  P0cIN
c2 = G2  P1G0  P1P0cIN (3.4)
c3 = G2  P2G1  P2 P1G0  P2 P1P0cIN
Полное время суммирования на сумматоре с ускоренным переносом состоит из
времени суммирования в одноразрядном полном сумматоре и времени срабатывания
схемы ускоренного переноса, и не зависит от количества разрядов.

cIN
a0
b0 & c1
a0 b0
a0
b0 p0 1
1 cIN
S0 p0

a0  a1
&

b0 b1
a1 b1
a1 a0
b0 &
c1 S1 a1 p1 p1
b1 1
b1
a2 С
 cIN
p0
& 1
c2

У p1
b2 a2 b2
П a2
a3 b2
c2 S2 &
p2 a1


b3
a2 1 b1
b2 p2
a0
b0
a3 b3 &
p1
p2
c3
S3 cIN

 p0
p1
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. Несложно заметить, что
соответствующие функции описываются следующими выражениями:
fe = a b a b ; fs = a b ; f = a b . (3.5)
i i i i i i i i i
Используя формулы (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 b 2 a1 b1 a0 b0

C3 C2 C1 C0

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

fe3
fs2 & fe3 &
fi2

fs3
fe3 fe3 fi3
fe3 1
& fe2 FAB fe2
fe2 FA=B 1
fi1 FAB
fs1 & &
fe1
fe3
fe0 fe2
fe3 fe1
fe2 fi0
fe1
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
1


a3 s2 A=B
b0 s3
b1
b2 Cout
b3
1 AB

cIN
(“1”)

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

4. АНАЛИЗ И СИНТЕЗ ПОСЛЕДОВАТЕЛЬНОСТНЫХ СХЕМ

Текущее состояние последовательностных логических схем (ПЛС) в отличие от состояния


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

4.1. Триггеры

На уровне одного двоичного разряда физической основой памяти ПЛС служит триггер.
Триггер является элементарным автоматом, содержащим элемент памяти (фиксатор) и схему
управления им. Простейшим триггером является триггер типа RS, функционирование которого
описывается логической функцией

Q = R (S  Qt ), (4.1)
t +1
при условии
RS = 0, (4.2)
где Qt - выход в исходном состоянии; Q - выход после воздействия управляющего
t +1
сигнала; S и R – входы управляющих сигналов для установки триггера в единичное
состояние (Set) и, соответственно, в нулевое (Reset) – сброс триггера.
В большинстве приложений используется синхронный RS триггер (рис.4.1). Логические
элементы 1 и 2 образуют фиксатор, а логические элементы 3 и 4 служат синхронизации триггера,
для чего на вход CLK следует подавать синхросигнал. Единичное значение синхросигнала
разрешает воздействие по входам установки и сброса. При этом элементы 3 и 4 становятся
инверторами и схема фиксатора получает нулевой сигнал установки или сброса от того входа (S
или R), на котором действует логическая 1. При отсутствии единицы на каком-либо из
управляющих входов триггер сохраняет прежнее состояние. При нулевом значении синхросигнала
на выходах элементов 3 и 4 устанавливаются единичные уровни напряжения и фиксатор не
изменяет своего состояния. Таким образом, переключение триггера разрешается только после
подачи логической единицы на вход синхронизации триггера.

3 1
S
& & Q
S T
CLK
C
R 4 2 Q
& R
& a) б)
Рис.4.1 Синхронный RS триггер: a – логическая схема; б – условное обозначение
На основе RS триггера можно построить схему триггера типа D. При условии
S=R требование (4.2) исключается и значение выходного сигнала будет совпадать со
значением входного сигнала. Функционирование D триггера описывается соотношением
Q =D (4.3)
t +1
где D – вход данных. Соотношение (4.3) отражает способность D триггера хранить
данные. Поэтому основное назначение триггера типа D – хранение двоичных слов.
Простейшая схема синхронного D триггера приводится на рис.4.2. То обстоятельство,
что информация со входа данных передается на выход а затем вход для данных
блокируется привело к тому, что D триггер называют триггером типа защелка.

D
S T T
D
Q
CLK C
Q
C
R
1 a) б)
Рис.4.2. Синхронный D триггер: a – схема; б – условное обозначение
R

Необходимость соблюдения требования (4.2) затрудняет процесс проектирования


цифровых устройств. По этой причине широкое применение получил триггер типа JK. JK
триггер сохраняет свою функциональность и тогда, когда RS=1. Логическая функция,
описывающая функционирование JK триггера, имеет вид
Q = JQt  K Qt , (4.4)
t +1
Когда J=1 (при K=0) триггер устанавливается в состояние логической 1. Если же
K=1 (при J=0), то триггер устанавливается в состояние логического нуля. При J=K=0
триггер хранит прежнее состояние. Следовательно, входы J и K можно рассматривать как
входы S и R соответственно. При J=K=1 триггер ведет себя особым образом, изменяя
значение прежнего состояния на противоположное (0→1, соответственно 1→0).
Практическая схема реализации JK триггера известна под названием ведущий-ведомый
(master-slave). Схема JK триггера типа ведущий-ведомый (рис.4.3) состоит из двух
триггеров типа RS. Анализируя функционирование схемы на рис.4.3 можно заметить, что
входные данные передаются на выход триггера по срезу синхросигнала, т.е. в момент
изменения значения синхросигнала с 1 на 0. Подобные схемы получили название
триггеров типа flip-flop.
JK триггер является универсальным и имеет множество применений. Как было показано, JK
триггер может работать в режиме триггера типа RS. Если входы J, K подключаются к входу,
соответственно к выходу элемента НЕ схема работает как триггер типа D, причем линия J является
входом D. На основе JK триггера можно построить триггер типа T, для чего необходимо соблюсти
условие J=K=1. Отличительной особенностью счетного T триггера является изменение значения
выходного сигнала на противоположное при поступлении очередного синхросигнала. Это
свойство JK триггера делает его пригодным для использования в схемах счета импульсов и
деления частоты.
J & & S T J TT

1 C C

CLK R K
K &
&
a) б)
Рис.4.3. Триггер типа JK: a – схема; б – условное обозначениеR

4.2. Регистры

Регистры предназначены для хранения и обработки двоичных слов. Общая структура


регистра может быть представлена как на рис.4.4. Видно, что обобщенно регистр содержит n
триггеров Т (обычно типа D), для синхронизации которых используется общий вход CLK. Вход
сброса CLR , с активным нулевым уровнем, присутствует в большинстве регистров и служит для
асинхронной установки в 0 всех n триггеров. Входы s1 и s0 управляют n логическими
коммутаторами К, обеспечивая выбор того или иного режима работы регистра. В зависимости от
выбранного режима работы коммутаторы обеспечивают подключение входов триггеров тремя
способами: к выходу триггера слева, справа или к соответствующему входу данных D. Выбор того
или иного подключения входов триггеров определяет возможность параллельной или
последовательной загрузки двоичного слова в регистр.

Qn-1 Qi+1 Qi Qi-1 Q0

CLR

CLK Тn-1 Тi+1 Тi Тi-1 Т0

S1
… …
S0 SLD
Кn-1 Кi+1 Кi Кi-1 К0
SRD

Dn-1 Di+1 Di Di-1 D0

Рис.4.4. Общая структура регистра

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


данных Dn-1, …, D0 – порт ввода. Записанное слово присутствует (до занесения другого
слова) на выходах Qn-1, …, Q0 – порт вывода. Занесение данных в регистр происходит по
сигналу синхронизации.
В режиме последовательной загрузки двоичное слово можно сдвигать вправо либо
влево. Последовательная загрузка производится по входам сдвига вправо SRD,
соответственно влево SLD. Регистр, в котором имеется возможность сдвигать данные как
влево, так и вправо, называется реверсивным регистром сдвига. Нетрудно заметить, что в
режиме сдвига данных регистр не только хранит двоичное слово, но и может
использоваться для обработки данных: сдвиг вправо на i разрядов эквивалентен операции
деления двоичного слова на 2i а сдвиг влево – операции умножения на 2i .
Двоичное n-разрядное слово, заносимое в регистр по входу SRD, соответственно
SLD в течение n тактов, теряется последовательно бит за битом на выходе Q0,
соответственно Qn-1 в течение последующих n тактов. Однако, если соединить выход Q0 со
входом SRD, соответственно выход Qn-1 со входом SLD, то будет получена структура
кольцевого регистра. В кольцевом регистре однажды записанное слово можно циклически
сдвигать влево либо вправо.
Покажем как можно выполнить синтез 4-разрядного регистра с параллельной
загрузкой и реверсивным сдвигом. Предположим, что синтезируемый регистр должен
обеспечивать и режим хранения загруженного в регистр слова. Таким образом,
представленная на рис.4.4 структура остается в силе, причем число триггеров равно
четырем. Для обеспечения режима хранения коммутатор в i-ом разряде должен иметь
дополнительный вход, который следует подключить к выходу триггера i-го разряда.
Функционирование синтезируемого регистра описывается таблицей 4.1.
Таблица 4.1.
Входы Выходы
Режим работы s1 s0 Di SLD Q3 Q2 Q1 Q0 t
S
RD
Сохранение 0 0 x x x Q3 Q2 Q1 Q0
Сдвиг влево 0 1 x x SLD Q2 Q1 Q0 SLD
Сдвиг вправо 1 0 x SRD x SRD Q3 Q2 Q1 t+1
Параллельная загрузка 1 1 Di x x D3 D2 D1 D0

Обозначим через Si, Ri входы установки, соответственно сброса триггеров, имеющих


выходы Qi . Тогда, учитывая таблицу 4.1, логические выражения, которые описывают
функционирование регистра в требуемых режимах работы, можно представить в виде:
_ _ _ _ _
S3=R3=s1 s0 Q3 v s1 s0 Q2 v s1 s0 SRD v s1 s0 D3 ,
_ _ _ _ _
S2=R2=s1 s0 Q2 v s1 s0 Q1 v s1 s0 Q3 v s1 s0 D2 ,
(4.5)
_ _ _ _ _
S1=R1=s1 s0 Q1 v s1 s0 Q0 v s1 s0 Q2 v s1 s0 D1 ,
_ _ _ _ _
S0=R0=s1 s0 Q0 v s1 s0 SLD v s1 s0 Q1 v s1 s0 D0 .

Логические выражения (4.5) удобно реализовать на мультиплексорах. В результате


получается несложная схема регистра, которую полезно построить самостоятельно.

4.3. Счетчики

Счетчики представляют очень важный класс ПЛС и предназначены для регистрации


количества импульсов, поступающих на вход синхронизации счетчика, а также для
деления частоты. Схема счетчика имеет M состояний. Переход между соседними
состояниями происходит в результате прихода импульса на вход синхронизации счетчика.
После поступления М импульсов счетчик возвращается в исходное состояние (например,
в нулевое состояние). Число М представляет модуль счета счетчика. В схеме счетчика с
модулем M реализуется последовательность переходов из одного состояния в другое в
прямом либо обратном направлении. Двоичная кодировка состояний может быть
взвешенной или произвольной. Схема, обеспечивающая как прямой, так и обратный счет,
называется реверсивным счетчиком. Наконец, схемы счетчиков могут быть синхронными
либо асинхронными.
Пусть M=23=8. Последовательность состояний счетчика по модулю 8,
реализующего прямой и обратный счет, приводится в таблице 4.2. Анализ
последовательности цифр в разряде 0 наводит на мысль, что соответствующая
последовательность цифр может быть реализована на триггерах типа T, которые
изменяют свое состояние после каждого синхроимпульса. Другими словами, T триггер
является счетчиком по модулю 2. Из анализа табл.4.2 в разрядах 1, 2, … следует, что
счетчик по модулю M=2n можно построить путем последовательного соединения n
триггеров типа T. При таком последовательном соединении каждый Т триггер в момент
перехода в исходное (нулевое) состояние должен вырабатывать синхросигнал,
управляющий входом синхронизации Т триггера в соседнем старшем разряде. При этом
регистрируемые импульсы должны подаваться на вход синхронизации Т триггера в
младшем разряде.
Таблица 4.2.

К-во Прямой счет Обратный счет


импульсов разряд разряд
2 1 0 2 1 0
0 0 0 0 1 1 1
1 0 0 1 1 1 0
2 0 1 0 1 0 1
3 0 1 1 1 0 0
4 1 0 0 0 1 1
5 1 0 1 0 1 0
6 1 1 0 0 0 1
7 1 1 1 0 0 0
8 0 0 0 1 1 1

Схема счетчика по модулю 8, использующая последовательное соединение трех


триггеров, которые работают в режиме Т триггера, дана на рис.4.5. По срезу первого
счетного импульса выход Q0 переключится с 0 в 1, Q1 и Q2 сохраняют значение
логического 0. По срезу второго счетного импульса выход Q0 переключится с 1 в 0. Так
как выход Q0 управляет синхровходом триггера в соседнем старшем разряде, по срезу
сигнала на выходе Q0 происходит переключение выхода Q1 из 0 в 1, Q2 при этом
сохраняет значение логического 0. Таким образом, замечаем, что по срезу входного
счетного импульса переключается Q0, Q1 переключается по срезу сигнала на выходе Q0, а
Q2 переключается по срезу сигнала на выходе Q1. При этом имеет место прямой счет. Для
реализации обратного счета соединение триггеров на рис.4.5 выполняется так чтобы
инверсный выход триггера в данном разряде управлял входом синхронизации триггера в
соседнем старшем разряде. Счетчик на рис.4.5 асинхронный, так как переключение
триггеров схемы происходит последовательно во времени. Асинхронные счетчики
характеризуются простой структурой, однако частота счетных импульсов относительно
мала вследствие последовательного переключения триггеров.
“1”

J TT J TT J TT
CLK

C C C

K K K
CLR

R Q0 R Q1 R Q2

Рис.4.5. Асинхронный счетчик по модулю 8

В синхронных счетчиках счетные импульсы поступают одновременно на входы


синхронизации всех триггеров, вследствие чего выходы триггеров переключаются
синхронно. При этом для каждого триггера должно удовлетворяться условие
переключения T=1 (J=K=1). Из анализа прямой последовательности состояний (см. табл.
4.2) видно, что триггер в данном разряде должен переключаться только тогда, когда
триггеры во всех предыдущих младших разрядах находятся в единичном состоянии.
Условия переключения триггеров синхронного счетчика по модулю 16 следующие:

T0=1, T1=Q0, T2=Q0Q1, T3=Q0Q1Q2. (4.6)


T0
“1” T1 T2 T3
J TT J TT J TT J TT
CLK
C C C C

K K K K
CLR
R R R R

&
Рис.4.6. Синхронный счетчик с параллельным переносом
&

Q0 Q1 Q2 Q3

Схема счетчика показана на рис.4.6. В счетчике на рис.4.6 имеет место параллельное


распространение переноса.
Условия (4.6) можно переписать в следующем виде:
T0=1, T1=T0Q0=Q0, T2=T1Q1, T3=T2Q2. (4.7)
Реализация условий (4.7) приводит к структуре синхронного счетчика с
последовательным переносом. В таком счетчике используются только двухвходовые
логические элементы И, которые, однако, соединяются последовательно.

Если необходимо обеспечить реверсивный счет, то счетчик должен иметь вход


направления счета Up/Down (рис.4.7). Единичный/нулевой уровень сигнала на указанном
входе будет определять прямой/обратный счет путем выбора прямого/инверсного выхода
триггера в данном разряде с целью управления синхровходом триггера в следующем
разряде. Как видно из рис.4.7 структуру реверсивного счетчика легко получить, если на
выходе каждого триггера включить простую схему логической коммутации на элементах
И-ИЛИ.
Представленные выше асинхронные и синхронные счетчики характеризуются
модулем счета M=2n. Ниже рассмотрим синтез счетчиков по модулю K, 2n-1K2n.
Структуру асинхронного счетчика по модулю K получают путем добавления
дешифратора в схему асинхронного счетчика по модулю 2n. При этом на выходе
дешифратора должен вырабатываться строб сброса триггеров после наступления
состояния счетчика, двоичное значение которого равно K(10) . На рис.4.8 приводится схема
асинхронного счетчика по модулю 10.

“1”

J TT J TT
CLK
& 1
C
C
&
K
K
CLR
UP/DOWNR
R
Рис.4.7. Реверсивный асинхронный счетчик

1
&
“1”

J TT J TT J TT J TT

CLK C C C C

K K K K

R R R R

C
LR Q0 Q1 Q2 Q3

Рис.4.8. Асинхронный счетчик по модулю 10

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


является по сути автоматом Мура, у которого значения выходных сигналов определяются только
совокупностью состояний триггеров схемы. Поэтому синтез синхронного счетчика по модулю K
выполняется в следующей последовательности:
• Для счетчика, который должен иметь m состояний, определяется число триггеров:
n=[log2 m].
• Составляется таблица переходов счетчика, в столбцах которой записываются текущие
и следующие состояния счетчика. Кроме того, заполняется столбец, отражающий
функции возбуждения триггеров счетчика. Значения функций возбуждения должны
проставляться так чтобы в процессе работы счетчика обеспечивалось требуемое
переключение каждого из триггеров. Конкретные значения этих функций берутся из
таблицы переходов используемого типа триггера (обычно используется JK триггер).
• По таблице переходов счетчика строятся диаграммы Вейча-Карно для функций
возбуждения, которые затем минимизируются.
• На последнем этапе выполняется реализация минимизированных функций
возбуждения в заданном базисе логических элементов. В результате получают схему
счетчика.
В счетчике по модулю K из 2n возможных состояний не используются (2n-K)
состояний. Это запрещенные состояния, которые на диаграммах Вейча отражаются как
безразличные. Следует, однако, учесть, что при запуске или под воздействием
определенных помех счетчик может оказаться в одном из запрещенных состояний. При
этом, если после нескольких тактов работы счетчик переходит в разрешенное состояние,
то его дальнейшая работа корректна. С другой стороны, возможна ситуация когда счетчик
не может самостоятельно выйти из последовательности запрещенных состояний а только
путем перезапуска. Если подобная ситуация имеет место, то необходимо заново
выполнить синтез. При этом в таблицу переходов счетчика записываются все возможные
состояния, причем для запрещенных состояний следующим указывается исходное
состояние (обычно нулевое).
Пример. Выполнить на JK триггерах синтез синхронного счетчика по модулю 10,
обеспечивающего режим прямого счета.
Так как счетчик должен иметь m=10 состояний, то для его построения потребуется
n=[log210]=4 триггера типа JK.
Строим таблицу переходов счетчика, используя при этом таблицу переходов JK триггера
(рис.4.9).

Состояние выходов Функции возбуждения


(Q3Q2Q1Q0) t (Q3Q2Q1Q0) t+1 J3 K3 J2 K2 J1 K1 J0 K0 Qt Qt+1 J K
0000 0001 0 X 0 X 0 X 1 X 0 0 0 X
0001 0010 0 X 0 X 1 X X 1 0 1 1 X
0010 0011 0 X 0 X X 0 1 X 1 0 X 1
0011 0100 0 X 1 X X 1 X 1 1 1 X 0
0100 0101 0 X X 0 0 X 1 X
0101 0110 0 X X 0 1 X X 1 b)
0110 0111 0 X X 0 X O 1 X
0111 1000 1 X X 1 X 1 X 1
1000 1001 X 0 0 X 0 X 1 X
1001 000 0 X 1 0 X 0 X X 1
a)
Рис.4.9. a – таблица переходов счетчика; b – таблица переходов JK триггера

По таблице переходов счетчика строим диаграммы Вейча-Карно для функций


возбуждения. В рассматриваемом примере неиспользуемым (запрещенным) состояниям
1010, 1011, 1100, 1101, 1110 и 1111 поставлены в соответствие безразличные значения
функций возбуждения с целью их максимального упрощения. На рис.4.10 показаны
диаграммы Вейча-Карно для функций возбуждения J3 и K3.

Q1Q0 Q1Q0
Q3Q2 00 01 11 10 Q3Q2 00 01 11 10
00 00 x x x x
01 1 01 x x x x
11 x x x x J3=Q2 Q1 Q0 11 x x x x K3=Q0
10 x x x x 10 1 x x

Рис.4.10. Диаграммы Вейча-Карно для функций J3 и K3

Построив соответствующие диаграммы можно получить остальные выражения:


__
J2=K2=Q1Q0; J1=Q3Q0; K1=Q0; J0=K0=1.
Реализуем полученные выражения. Схема счетчика приведена на рис.4.11.
Q3 Q2 Q1 Q0

J TT J TT J TT J TT

CLK C C C C

K K K K

R R R R
CLR

“1”
& & &

Рис.4.11. Синхронный счетчик по модулю 10


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