Преобразователи кодов (ПК) могут быть весовыми и невесовыми. Весовые ПК преобразуют информацию из одной системы счисления в другую. Основное назначение невесовых - преобразование информации для ее дальнейшего отображения. В качестве примера рассмотрим преобразователь двоично-десятичного кода в код для семисегментных светодиодных индикаторов (рис.24). На рисунке также показан фрагмент подключения одного сегмента к выходу схемы с общим эмиттером и приведены начертания первых пяти цифр.
Такой преобразователь должен иметь четыре входа, т.к. для кодирования десятичных цифр от 0 до 9 достаточно четырех двоичных, и семь выходов, по одному на каждый сегмент.Таблица истинности преобразователя, она же таблица, в соответствии с которой, например в цифре 0 должны светиться все сегменты за исключением сегмента G. В цифре 1 светятся только два сегмента B и C и т.д. Весовые коэффициенты bi двоично-десятичных разрядов равны 2i (8,4,2 и 1). На рис.25 слева дана таблица истинности. В таблице заполнена только колонка для сегмента A. Нули в ней проставлены для тех цифр, в которых сегмент A не светится.
В общем случае для синтеза этого ПК требуется составить семь уравнений. Найдем одно, для сегмента A, заполнив сначала для него таблицу Карно. Слева, на рис.25-1 приведена ТК прямого значения функции сегмента A. Когда в таблице нулевых клеток значительно меньше и они компактно сгруппированы, полезнее искать алгебраическое выражение инверсной логической функции, т.е. ~Ya, ее таблица дана справа. Функция при этом может получиться значительно проще, т.е. содержать меньше переменных и слагаемых. Шесть двоичных наборов начиная с 1010 в таблице не определены из-за отсутствия десятичных цифр больших девятки, поэтому для минимизации выгоднее считать некоторые из них единицами. Из таблицы найдем: ~Ya = x2*~x1*~x0 + ~x3*~x2*~x1*x0.
Тогда искомое выражение будет иметь вид: Ya = ~(x2*~x1*~x0 + ~x3*~x2*~x1*x0). Соответствующая ему реализация на элементе И-ИЛИ-НЕ типа 1533ЛР4 будет одной из самых простых (рис.25.справа). Промышленность выпускает микросхемы преобразователей 514ИД2 с открытым коллектором и 514ИД1 с открытым эмиттером.
Сумматор осуществляет арифметическое суммирование 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, слева.
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.
Сумматор с последовательным переносом для сложения n- разрядных двоичных чисел показан на схеме (рис.28.). К его недостатку относится большое время задержки, в наихудшем случае, когда от сложения x0,y0 возникает сквозной перенос через все разряды до выхода s(n-1). При двухъярусной схеме одноразрядного сумматора, задержка сигнала от входов до выходов составит 2tзд.р., если считать задержку в каждом ярусе одинаковой. Суммарная величина задержки будет равна:
tзд.р.посл.сумматора = n*2tзд.р. (20)
При сложении многоразрядных чисел задержка выходного сигнала на выходе последнего разряда становится недопустимо большой.
В ЭВМ сумматор является центральным узлом арифметико-логического устройства (АЛУ) и от его быстродействия зависит производительность компъютера. Поэтому применяются сумматоры с параллельной схемой переноса. Выражение (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.
Если в каждом разряде сумматора использовать такой одноразрядный сумматор, то никакого выигрыша в скорости не будет. Узел обведенный точками называется узлом переноса (УП), а функции 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.
Из рис.29 и 30 видно, что узел сложения в каждом разряде остается неизменным, а изменяется только узел переноса, причем задержка сигнала от входов xi, yi до c(i+1) остается неизменной и для 3-ярусной схемы равна 3tзд.р.. Суммарная задержка в каждом разряде увеличится на время прохождения сигнала от входа ci до si, т.е. на величину tзд.р., и составит: tзд.р.паралл.сумматора = 4tзд.р. независимо от количества разрядов. За это приходится платить усложнением узла переноса от разряда к разряду.
Два кода X и Y считаются равными, если попарно
равны их одноименные разряды. Можно ввести
функцию F(X==Y), которая равна 1, если xi=yi для всех i,
иначе ее значение равно нулю. В качестве примера
возьмем два двухбитовых числа X=(x1,x0) и Y=(y1,y0).Таблица Карно для этих
чисел приведена на рис.31, справа.
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. Схема сравнения входит в
состав АЛУ микропроцессора и часто называется
цифровым компаратором.
Схема применяется для выявления одиночных
ошибок, вызванных помехами в линии связи или в
блоках памяти. Метод основан на подсчете числа
единиц в передаваемой в линию или направляемой в
память на хранение порции информации, причем
если число единиц четное - функция четности P(arity)
равна нулю. Для четырехразрядного двоичного
числа таблица Карно,
схемная реализация и условное обозначение
приведены на рис.33.
Символом 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.
Пусть по 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-бит и одного бита
четности.