2.7 ПРЕОБРАЗОВАТЕЛИ КОДА

Преобразователи кодов (ПК) могут быть весовыми и невесовыми. Весовые ПК преобразуют информацию из одной системы счисления в другую. Основное назначение невесовых - преобразование информации для ее дальнейшего отображения. В качестве примера рассмотрим  преобразователь двоично-десятичного кода в код для семисегментных светодиодных индикаторов (рис.24). На рисунке также показан фрагмент подключения одного сегмента к выходу схемы с общим эмиттером и приведены начертания первых пяти цифр.

ris24.gif (3634 bytes)

Такой преобразователь должен иметь четыре входа, т.к. для кодирования десятичных цифр от 0 до 9 достаточно четырех двоичных, и семь выходов, по одному на каждый сегмент.Таблица истинности преобразователя, она же таблица, в соответствии с которой, например в цифре 0 должны светиться все сегменты за исключением сегмента G. В цифре 1 светятся только два сегмента B и C и т.д. Весовые коэффициенты bi двоично-десятичных разрядов равны 2i (8,4,2 и 1). На рис.25 слева дана таблица истинности. В таблице заполнена только колонка для сегмента A. Нули в ней проставлены для тех цифр, в которых сегмент A не светится.

ris25.gif (5020 bytes)

В общем случае для синтеза этого ПК требуется составить семь уравнений. Найдем одно, для сегмента A, заполнив сначала для него таблицу Карно. Слева, на рис.25-1 приведена ТК прямого значения функции сегмента A. Когда в таблице нулевых клеток значительно меньше и они компактно сгруппированы, полезнее искать алгебраическое выражение инверсной логической функции, т.е. ~Ya, ее таблица дана справа. Функция при этом может получиться значительно проще, т.е. содержать меньше переменных и слагаемых. Шесть двоичных наборов начиная с 1010 в таблице не определены из-за отсутствия десятичных цифр больших девятки, поэтому для минимизации выгоднее считать некоторые из них единицами. Из таблицы найдем:  ~Ya = x2*~x1*~x0 + ~x3*~x2*~x1*x0.

ris25-1.gif (4517 bytes)

Тогда искомое выражение будет иметь вид: Ya = ~(x2*~x1*~x0 + ~x3*~x2*~x1*x0). Соответствующая ему реализация на элементе И-ИЛИ-НЕ типа 1533ЛР4 будет одной из самых простых (рис.25.справа). Промышленность выпускает микросхемы преобразователей 514ИД2 с открытым коллектором и 514ИД1 с открытым эмиттером.

 

2.8 СУММАТОРЫ

Сумматор осуществляет арифметическое суммирование n-разрядных кодов X=(x(n-1),..,x0) и Y=(y(n-1),..,y0). Правила сложения двух одноразрядных двоичных чисел:

0 (+) 0 = 0
0 (+) 1 = 1 (+) 0 = 1
1 (+) 1 = 0 и перенос 1 в старший разряд.

Операция (+) называется - сумма по модулю два (переключательная функция F6). Устройство реализующее эти правила называется одноразрядным полусумматором и имеет два входа и два выхода . Сложение трех одноразрядных чисел производится следующим образом:

0 (+) 0 (+) 0 = 0
0 (+) 0 (+) 1 = 1
0 (+) 1 (+) 1 = 0 и перенос 1 в старший разряд
1 (+) 1 (+) 1 = 1 и перенос 1 в старший разряд.

Устройство реализующее эти правила называется одноразрядным полным сумматором (ОПС) и имеет три входа и два выхода. Таблица истинности ОПС приведена на рис.26, слева.

ris26.gif (4407 bytes)

xi,yi - одноименные двоичные разряды чисел X и Y, ci - перенос из предыдущего разряда, si - частичная сумма по модулю два и c(i+1) - перенос в следующий разряд. Значения c(i+1) совпадают со значениями функции мажоритарности , поэтому воспользуемся готовым решением:

c(i+1) = xi*yi + xi*ci + yi*ci.     (18)

Таблица Карно для si приведена на рис.26 справа. Из таблицы находим: si = xi*~yi*~ci + ~xi*~yi*ci + xi*yi*ci+ ~xi*yi*~ci = ~yi(xi*~ci + ~xi*ci) + yi(xi*ci + ~xi*~ci) = ~yi(xi (+) ci) + yi(xi*ci + ~xi*~ci). Выражение в последней скобке необходимо преобразовать, используя соотношение двойственности.

                           
                   -------------------     ------------------

xi*ci + ~xi*~ci = ~(xi*ci) * ~(~xi*~ci) = (~xi+~ci) * (xi+ci) = 

---------------------------------   ---------------

~xi*xi + ~xi*ci + ~ci*xi + ~ci*ci = ~xi*ci + xi*~ci = 
~(xi (+) ci) = ~F6 = F9.

С учетом последнего выражения

si = ~yi(xi (+) ci) + yi~(xi (+) ci) = 
yi (+) (xi (+) ci) = yi (+) xi (+) ci.     (19)
         

Схема одноразрядного полного сумматора соответствующая уравнениям (18) и (19) и ее условное обозначение приведены на рис.27.

ris27.gif (4069 bytes)

Сумматор с последовательным переносом для сложения n- разрядных двоичных чисел показан на схеме (рис.28.). К его недостатку относится большое время задержки, в наихудшем случае, когда от сложения x0,y0 возникает сквозной перенос через все разряды до выхода s(n-1). При двухъярусной схеме одноразрядного сумматора, задержка сигнала от входов до выходов составит 2tзд.р., если считать задержку в каждом ярусе одинаковой. Суммарная величина задержки будет равна:

tзд.р.посл.сумматора = n*2tзд.р.   (20)

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

ris28.gif (2964 bytes)

В ЭВМ сумматор является центральным узлом арифметико-логического устройства (АЛУ) и от его быстродействия зависит производительность компъютера. Поэтому применяются сумматоры с параллельной схемой переноса. Выражение (18) для младшего разряда можно преобразовать, используя тождество для для функции ИЛИ: x + y = ~x*y + x*~y + xy. В правой части равенства СДНФ ф-ии ИЛИ. Тогда

c1 = x0*y0 + x0*c0 + y0*c0 = x0*y0 + c0(x0 + y0) =

x0*y0 + c0(~x0*y0 + x0*~y0 + x0*y0) =

x0*y0(с0 +1) + c0(~x0*y0 + x0*~y0) =

x0*y0 + с0(x0 (+) y0).     (21)

Уравнениям (19) и (21) соответствует схема на рис.29.

ris29.gif (3267 bytes)

Если в каждом разряде сумматора использовать такой одноразрядный сумматор, то никакого выигрыша в скорости не будет. Узел обведенный точками называется узлом переноса (УП), а функции gi и pi называются функциями генерации переноса и распространения переноса. С учетом этого можно записать:

c1 = g0 + p0*c0, с2 = g1 + p1*c1 =                   (22)

     = g1 + p1*g0 + p1*p0*c0,                             (23)

с3 = g2 + p2*c2 =                                               (24)

     = g2 + p2*g1 + p2*p1*g0 + p2*p1*p0*c0,   (25)

......, и так далее. Выражения (22,24) - это еще последовательный сумматор, т.к. c3 зависит от c2,c2 зависит от c1, а c1 зависит от c0. Выражения (23,25) соответствуют уже параллельному, т.к. величина ci снимается с выхода предыдущего разряда, в котором она формируется параллельно из всех первичных переменных. Схемы узлов переноса УП1 и УП2 приведены на рис.30.

ris30.gif (3585 bytes)

Из рис.29 и 30 видно, что узел сложения в каждом разряде остается неизменным, а изменяется только узел переноса, причем задержка сигнала от входов xi, yi до c(i+1) остается неизменной и для 3-ярусной схемы равна 3tзд.р.. Суммарная задержка в каждом разряде увеличится на время прохождения сигнала от входа ci до si, т.е. на величину tзд.р., и составит: tзд.р.паралл.сумматора = 4tзд.р. независимо от количества разрядов. За это приходится платить усложнением узла переноса от разряда к разряду.

 

2.9 СХЕМА СРАВНЕНИЯ КОДОВ


Два кода X и Y считаются равными, если попарно равны  их одноименные разряды. Можно ввести функцию F(X==Y), которая равна 1, если xi=yi для всех i, иначе ее значение равно нулю. В качестве примера возьмем два двухбитовых числа X=(x1,x0) и Y=(y1,y0).Таблица Карно для этих чисел приведена на рис.31, справа.

ris31-32.gif (6379 bytes)

F(X==Y) = ~y1*~x1*~y0*~x0 + ~y1*~x1*y0*x0 + y1*x1*~y0*~x0 + y1*x1*y0*x0 = ~y1*~x1(~y0*~x0 + y0*x0) + y1*x1(~y0*~x0 + y0*x0) = ~(x0 (+) y0)*~(x1 (+) y1) =
F9(x0,y0)*F9(x1,y1) = ~(F6(x0,y0)+F6(x1,y1)). Преобразования в последних двух строчках сделаны с учетом, того что ~F6(x,y) = F9(x,y) и наоборот (см.раздел сумматоры). Одна из
возможных реализаций приведена на рис.31,слева. Практические схемы дополняются функциями "больше/меньше", как например в микросхеме 555СП1, которая сравнивает два четырехразрядных числа. На рис.32 показано соединение двух таких схем, для увеличения разрядности сравниваемых чисел до восьми.  Для правильного результата сравнения чисел X = (x7,x6,...,x0) и Y=(y7,y6,...,y0) на вход X =  необходимо подать 1. Схема сравнения входит в состав АЛУ микропроцессора и часто называется цифровым компаратором.


2.10 СХЕМА КОНТРОЛЯ ЧЕТНОСТИ (НЕЧЕТНОСТИ)



Схема применяется для выявления одиночных ошибок, вызванных помехами в линии связи или в блоках памяти. Метод основан на подсчете числа единиц в передаваемой в линию или направляемой в память на хранение порции информации, причем если число единиц четное - функция четности P(arity) равна нулю. Для четырехразрядного двоичного числа таблица Карно, схемная реализация и условное обозначение приведены на рис.33.

ris33.gif (3691 bytes)

Символом M2 обозначена операция - "сумма по модулю два". Четыре строки таблицы Карно
дают 4 составляющих: P = ~x3*~x2*F6(x1,x0) + ~x3*x2*~F6(x1,x0) + x3*x2*F6(x1,x0) + x3*~x2*~F6(x1,x0) = F6(F6(x3,x2),F6(x1,x0)) = (x3 (+) x2) (+) (x1 (+) x0). Рассмотрим пример на рис.34.

ris34.gif (2738 bytes)

Пусть по n-проводной линии связи передается параллельный двоичный код x(n-1),
x(n-2),...,x1,x0, а принимается код x'(n-1),x'(n-2),..., x'1,x'0. Тогда величина P1 = x0 (+) x1 (+) .. (+) x(n-1) .

На приемном конце линии связи P2 = x'0(+) x'1(+) ... (+) x'(n-1) (+) P1. Подставляя в последнюю формулу выражение для P1 и группируя переменные в одноименные пары, получим: P2 = (x0 (+) x'0) (+) (x1 (+) x'1) (+) (x2 (+) x'2)(+)... Из последнего выражения следует, что если передача прошла без искажений, то xi=x'i и xi (+) x'i =0, а P2=0! При искажении одного и в общем случае нечетного числа бит функция P2=1. Аналогично протекает процесс контроля и при последовательной передаче по одной линии связи n-бит и одного бита четности.

 

2.11 ЗАДАЧИ И УПРАЖНЕНИЯ

  

Задача 1. Нажмите на кнопку "ЗАДАНИЕ", преобразуйте HEX код в двоичный эквивалент, введите ответ в правое окно и нажмите кнопку "ОТВЕТ ГОТОВ". Например:

ЗАДАНИЕ 5C ОТВЕТ ГОТОВ 01011100


Задача 2. Внимательно проработайте пример.

zad1dc.gif (13774 bytes)

А теперь нажмите кнопку ЗАДАНИЕ и найдите код на выходах y7y6..y1y0 при заданных значениях a2,a1,a0 и OE3=1,~OE2=0,OE1=1. Пример ответа 00010000

Введите ответ и нажмите на кнопку "ОТВЕТ ГОТОВ".


Задача 3. Разберите следующий пример.

zad0cd.gif (5101 bytes)

ПОЯСНЕНИЯ: Из текста к рисунку видно, что активизирован вход X5=1, следовательно на выходе должен появиться двоичный код 101. ( 101(BIN) = 5(DEC)).

А теперь найдите код на выходах y2,..y1,y0 при заданных значениях x7,..x1,x0. Пример ответа 110

Введите ответ и нажмите на кнопку "ОТВЕТ ГОТОВ".


Задача 4.


zad0cdpr.gif (5366 bytes)

ПОЯСНЕНИЯ: Из рисунка видно, что активизированы входы X6=1, X5=1, X4=1, X2=1, следовательно на выходе должен появиться двоичный код 110. (Максимальный номер активного входа = 110(BIN) = 6(DEC)).

А теперь найдите код на выходах y2,..y1,y0 при заданных значениях x7,..x1,x0. Пример ответа 010

Введите ответ и нажмите на кнопку "ОТВЕТ ГОТОВ".


Задача 5.

 

zad0mux.gif (8649 bytes)

ПОЯСНЕНИЯ: Из рисунка видно, что мультиплексор имеет инверсный вход разрешения ~OE, и следовательно информация с информационных входов Xi будет передаваться на выход когда ~OE=0, т.е. в первые четыре временных интервала. Отмечаем также, что и выход MUX'a инверсный. Для интервала "1" A2,A1,A0 = 100(BIN) = 4(DEC), следовательно к выходу будет подключен сигнал X4=1, что после инверсии даст на выходе Y=0. Аналогично находим, что в моменты 2,3,4 на выходе будут 111. Далее видим, что выход мультиплексора имеет третье состояние (ромб с поперечной чертой). Для интервалов 5,6 замечаем, что сигнал ~OE=1 и выход Y станет пассивным ( для указанной схемы перейдет в третье состояние), поэтому две последние позиции отмечаем буквой z.

Введите ответ и нажмите на кнопку "ОТВЕТ ГОТОВ".