00 Проектирование цифровых устройств
.pdf11
1.Словесное описание алгоритма функционирования КЦ, т. е. описание работы устройства в понятийной форме (на обычном языке).
2.Оценка размерности задачи и решение вопроса о проектировании КЦ в целом или по частям, чему предшествует разделение (условное) КЦ на составные части. В отдельных случаях для снижения трудоемкости и громоздкости задачи проектирования КЦ разбивается на ряд более простых устройств (узлов), в совокупности реализующих требуемый алгоритм функционирования, проектирование которых не составляет особых сложностей.
3.Переход от словесного к формализованному заданию алгоритма функционирования КЦ с помощью логических (булевых) функций.
4.Минимизация логических функций.
5.Преобразование минимальных форм логических функций к виду, реализуемому ЛЭ заданного функционально полного набора.
6.Построение схемы КЦ по полученным на этапах 1 – 5 логическим функциям.
1.2. Преобразователи кодов
1.2.1. Преобразователь двоичного кода в двоично-десятичный
В цифровых устройствах, где основная часть операций связана не с обработкой и хранением информации, а с самим ее вводом и выводом на какие-либо устройства отображения с десятичным представлением полученных результатов, имеет смысл проводить вычисления в десятичной системе счисления. Но ЭВМ требует информацию только в двоичной форме. Следовательно, десятичные цифры нужно кодировать каким-либо легко реализуемым и быстрым способом. Для этих целей используется двоично-десятичный код, в котором каждая десятичная цифра 0, 1, ..., 9 изображается соответствующим 4-разрядным числом – тетрадой (от 0000 до 1001). Такой код называется еще кодом 8-4-2-1 (цифры, соответствующие весам двоичных разрядов). Обычно данная система счисления используется в ЭВМ при вводе и выводе информации. В некоторых типах ЭВМ в составе арифметико-логического устройства (АЛУ) имеются специальные блоки десятичной арифметики, выполняющие
12
операции над числами в двоично-десятичном коде. Это позволяет в ряде случаев существенно повышать производительность ЭВМ.
В качестве примера рассмотрим восьмиразрядный двоичный код. Он соответствует значениям чисел от 0 до 255. Следовательно, для представления этих чисел в двоично-десятичном коде требуется десять двоичных разрядов: два для сотен и по четыре для десятков и единиц.
Пример 1.1
Двоичный код |
|
|
x7 |
x6 |
x5 |
x4 |
x3 |
|
x2 |
x1 |
|
x0 |
Вес двоичного разряда |
|
|
128 |
64 |
32 |
16 |
8 |
|
4 |
2 |
|
1 |
|
|
|
Старшая тетрада |
|
Младшая |
|
||||||
|
|
|
|
|
|
|
|
|
тетрада |
|
||
Двоичное число |
|
|
0 |
1 |
1 |
1 |
1 |
|
1 |
0 |
|
1 |
01111101(2) = 125(10) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Двоично-десятичный |
y9 |
Y8 |
y7 |
y6 |
y5 |
y4 |
y3 |
|
y2 |
y1 |
|
y0 |
код |
|
|
|
|
|
|
|
|
|
|
|
|
Вес двоичного разряда |
200 |
100 |
80 |
40 |
20 |
10 |
8 |
|
4 |
2 |
|
1 |
Десятичные разряды |
Сотни |
|
Десятки |
|
|
Единицы |
|
|||||
Двоично-десятичное |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
|
1 |
0 |
|
1 |
число 125 |
|
|
|
|
|
|
|
|
|
|
|
|
Существуют различные способы преобразования кодов, основанные либо на синтезе комбинационных схем, построенных на логических элементах и ИС средней степени интеграции, или реализации в форме таблиц на программируемых ИС. Рассмотрим пример проектирования устройства преобразования 8-разрядного двоичного кода в двоично-десятичный код, в котором применяется сочетание табличной и алгоритмической форм преобразования. Сначала производится преобразование старшей тетрады двоичного кода (16 комбинаций) в двоично-десятичный код, а затем к полученному числу прибавляется младшая тетрада двоичного кода с применением десятичной коррекции.
13
Таблица 1.1. Таблица истинности разрядов двоично-десятичного кода
x7 |
x6 |
x5 |
x4 |
Эквив |
z9 |
z8 |
z7 |
z6 |
z5 |
z4 |
z3 |
z2 |
z1 |
z0 |
128 |
64 |
32 |
16 |
число |
200 |
100 |
80 |
40 |
20 |
10 |
8 |
4 |
2 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
16 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
32 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
48 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
64 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
80 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
96 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
112 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
128 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
144 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
160 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
176 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
192 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
208 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
224 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
240 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
На рисунке 1.4 приведена карта с указанием веса каждой ячейки в координатах разрядов старшей тетрады двоичного кода.
x4
0 16 48 32
64 80 112 96 x6 192 208 240 224
128 144 176 160 x7
x5
Рис. 1.4. Карта весов старших переменных
Схема преобразователя (см. рис.1.5) содержит комбинационную цепь КЦ 1, которая вырабатывает промежуточный двоично-
14
десятичный код без учета младшей тетрады двоичного кода, группу двоичных сумматоров и две комбинационные цепи КЦ 2 и КЦ 3, формирующие коды десятичной коррекции двоичных кодов декад единиц и десятков соответственно.
Таблица истинности КЦ 2
p1 |
s3 |
s2 |
s1 |
s0 |
Комментарий |
α3 |
α2 |
α1 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
Числа s3s2s1s0 от 0 до 9 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
не требуют |
|
|
|
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
|
|
|
|
|
|
десятичной коррекции |
|
|
|
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
1 |
1 |
|
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
|
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
Для десятичной |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
коррекции чисел |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
s3s2s1s0 от 10 до 15 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
нужно прибавить |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
число шесть (0110) |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
|
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
После переноса к |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
остатку s3s2s1s0 чисел |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
от 16 до 19 нужно |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
прибавить число |
0 |
1 |
1 |
|
|
|
|
|
шесть (0110) |
|
|
|
1 |
0 |
1 |
0 |
0 |
Для коррекции |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
остатков s3s2s1s0 от |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
чисел больше 19 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
нужно прибавить |
1 |
1 |
0 |
|
|
|
|
|
число двенадцать |
|
|
|
|
|
|
|
|
(1100) |
|
|
|
|
|
|
|
|
|
15 |
|
|
|
|
Таблица истинности КЦ 3 |
|
|
|
|
|
|
|
|
|
s7 |
s6 |
s5 |
s4 |
|
Комментарий |
β |
0 |
0 |
0 |
0 |
|
Числа s7s6s5s4 от 0 до 9 не требуют |
0 |
0 |
0 |
0 |
1 |
|
десятичной коррекции |
0 |
0 |
0 |
1 |
0 |
|
|
0 |
0 |
0 |
1 |
1 |
|
|
0 |
0 |
1 |
0 |
0 |
|
|
0 |
0 |
1 |
0 |
1 |
|
|
0 |
0 |
1 |
1 |
0 |
|
|
0 |
0 |
1 |
1 |
1 |
|
|
0 |
1 |
0 |
0 |
0 |
|
|
0 |
1 |
0 |
0 |
1 |
|
|
0 |
1 |
0 |
1 |
0 |
|
Для десятичной коррекции чисел |
1 |
1 |
0 |
1 |
1 |
|
s7s6s5s4 от 10 до 15 нужно прибавить |
1 |
1 |
1 |
0 |
0 |
|
число шесть (0110) |
1 |
1 |
1 |
0 |
1 |
|
|
1 |
1 |
1 |
1 |
0 |
|
|
1 |
1 |
1 |
1 |
1 |
|
|
1 |
Пример 1.2
Число 143(10) в двоичном коде имеет вид 1000 1111, а в двоичнодесятичном коде должно быть 01 0100 0011.
На выходе КЦ 1 вырабатывается код 01 0010 1000 ~ 128(10). После прибавления к числу z3z2z1z0 = 1000 числа x3x2x1x0 = 1111
получается перенос р1 в разряд десятков и остается остаток s3s2s1s0 = 0111. Для десятичной коррекции к остатку нужно прибавить число α3α2α1α0 = 1100. В результате в разряде единиц остается код 0011, и образуется еще один перенос в разряд десятков (р2). Две единицы от переносов р1 и р2 суммируются с числом 0010 и окончательно получается код 01 0100 0011.
200 100 z9 z8
0 |
0 |
SM |
SM |
y9 |
y8 |
x7 |
x6 |
x5 |
x4 |
|
|
|
|
128 |
64 |
32 |
16 |
|
|
|
|
80 |
40 |
20 |
10 |
КЦ 1 |
|
|
|
8 |
4 |
2 |
1 |
||||
z7 |
z6 |
z5 |
z4 |
z3 |
z2 |
z1 |
z0 |
0 |
0 |
0 |
|
x3 |
|
x2 |
x1 |
SM
SM
SM
SM 
s7 |
s6 |
s5 |
s4 |
|
0 |
|
|
|
0 |
SM |
SM |
SM |
SM |
0 |
|
||||
y7 |
y6 p3 |
y5 |
y4 |
|
|
s7 |
s5 |
|
|
КЦ 3
SM
SM
SM
SM 
p1 |
s3 |
|
s2 |
s1 |
|
s0 |
|
|
α3 |
α2 |
α1 |
||
|
SM |
SM |
SM |
|
SM |
|
p2 |
y3 |
|
y2 |
y1 |
|
y0 |
|
|
|
p1 s3 |
s2 |
||
|
|
|
|
|
|
|
|
|
|
|
КЦ 2 |
|
|
|
|
|
|
|
|
|
|
|
|
α3 |
α2 |
α1 |
|
16
x0
0
0
0
Рис.1.5. Схема преобразователя двоичного кода в двоично-десятичный код на одноразрядных сумматорах
17
Другой вариант преобразователя представлен на рисунке 1.6. Сигнал каждого разряда двоичного кода можно разложить на соответствующие значения двоичных разрядов единиц, десятков и сотен двоично-десятичного кода:
x7 |
~ 128 = 100 + |
20 |
+ |
|
8, |
x6 |
~ 64 = |
40 + 20 |
+ |
|
4, |
x5 |
~ 32 = |
20 |
+ 10 |
+ |
2, |
x4 |
~ 16 = |
|
10 |
+ |
4 + 2, |
x3 |
~ 8 = |
8, |
x2 |
~ 4 = |
4, |
x1 |
~ 2 = |
2, |
x0 |
~ 1 = |
1. |
x7 |
|
0 0 |
|
|
0 x6 x7 x6 x5 x4 |
|
|
|
x7 x3 x6 x4 x5 x4 |
x1 x0 |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p1 |
|
|
|
|
|
|
|
|
|
|
|
Σ |
|
|
Σ |
|
|
Σ |
|
|
Σ |
|
|
Σ |
|
|
Σ |
|
Σ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s7 |
s6 |
s5 |
s4 |
|
p2 |
|
s3 |
α3 |
s2 |
α2 |
s1 |
α1 |
x2 |
||||||||
|
|
0 |
0 |
|
x5 |
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
Σ |
Σ |
|
Σ |
|
Σ |
|
|
|
Σ |
|
|
Σ |
|
Σ |
|
|
|
||||
|
|
r7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
p4 |
r6 |
r5 |
r4 |
|
|
|
r3 |
|
|
r2 |
|
r1 |
|
|
|
|||||||
|
0 |
δ2 |
δ1 |
|
|
|
|
|
0 |
|
β2 |
|
β1 |
|
|||||||||
|
|
|
|
|
|
|
|
|
|
||||||||||||||
p5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
p3 |
|
|
|
|
|
|
|
|
|
|
Σ |
|
Σ |
|
|
Σ |
|
|
|
|
Σ |
|
|
Σ |
|
Σ |
|
|
|
||||
Σ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
y9 y8 |
|
y7 |
y6 |
y5 |
y4 |
|
|
|
|
y3 |
|
y2 |
|
y1 |
y0 |
||||||||
Рис.1.6. Схема преобразователя двоичного кода в двоично-десятичный код на четырехразрядных сумматорах
18
Необходимо сложить значения бит входного кода в каждом двоичном разряде выходного кода, выполняя при необходимости десятичную коррекцию, если в десятичном разряде возникает число больше 9.
Сигналы десятичной коррекции. В схеме на рисунке 1.6
коррекция дважды осуществляется в декаде единиц и один раз в разряде десятков. На рисунке 1.7 представлена таблица истинности первого сигнала коррекции в разряде единиц, а на рисунке 1.8 – второго сигнала коррекции единиц и коррекции в десятках.
p1 |
s3(s2Vs1Vx2) |
α3 |
α2 |
α1 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
0 |
1 |
0 |
1 |
1 |
|
|
|
|
|
1 |
0 |
0 |
1 |
1 |
|
|
|
|
|
1 |
1 |
1 |
1 |
0 |
|
|
|
|
|
Рис.1.7. Сигналы первой десятичной коррекции единиц
Перенос р1 вычитает из десятичного разряда единиц число 16, поэтому при наличии сигнала р1 необходимо вернуть число 6, т. е. код коррекции α2α1. В случае, когда перенос р1 отсутствует, но остаток s3s2s1s0 вместе с х2 превышает число 9, код коррекции тоже должен быть α2α1. Если же имеется сигнал р1 и при этом остаток s3s2s1s0 вместе с х2 превышает число 9, необходимо для десятичной коррекции прибавить число 12, следовательно, код коррекции α3α2. И, наконец, когда и переноса р1 нет, и остаток s3s2s1s0 вместе с х2 меньше 10, десятичная коррекция не требуется.
а)
r3(r2Vr1Vx2) |
β2 |
β1 |
0 |
0 |
0 |
|
|
|
1 |
1 |
1 |
|
|
|
б)
r7(r6Vr5) |
δ2 |
δ1 |
0 |
0 |
0 |
|
|
|
1 |
1 |
1 |
|
|
|
Рис.1.8. Сигналы десятичной коррекции единиц (а) и десятков (б)
19
1.2.2. Преобразователь двоично-десятичного кода в двоичный
Входное слово имеет 10 двоичных разрядов: x9x8 – сотни; x7x6x5x4 – десятки; x3x2x1x0 – единицы. Условимся, что значение числа x9x8 x7x6x5x4 x3x2x1x0 не превышает 255.
Таблица разложения двоичных разрядов двоично-десятичного кода
|
|
y7 |
y6 |
y5 |
y4 |
y3 |
y2 |
y1 |
y0 |
|
Вес |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
x9 |
200 |
x9 |
x9 |
|
|
x9 |
|
|
|
x8 |
100 |
|
x8 |
x8 |
|
|
x8 |
|
|
x7 |
80 |
|
x7 |
|
x7 |
|
|
|
|
x6 |
40 |
|
|
x6 |
|
x6 |
|
|
|
x5 |
20 |
|
|
|
x5 |
|
x5 |
|
|
x4 |
10 |
|
|
|
|
x4 |
|
x4 |
|
x3 |
8 |
|
|
|
|
x3 |
|
|
|
x2 |
4 |
|
|
|
|
|
x2 |
|
|
x1 |
2 |
|
|
|
|
|
|
x1 |
|
x0 |
1 |
|
|
|
|
|
|
|
x0 |
Двоичный код получаем сложением двоичных цифр в каждом столбце таблицы:
+ |
x9 |
x9 |
x8 |
x7 |
x9 |
x8 |
x4 |
x0 |
|
0 |
x8 |
x6 |
x5 |
x6 |
x5 |
x1 |
0 |
||
+ |
|||||||||
+ |
0 |
x7 |
0 |
0 |
x4 |
x2 |
0 |
0 |
|
|
0 |
0 |
0 |
0 |
x3 |
0 |
0 |
0 |
|
= y7 |
y6 |
y5 |
y4 |
y3 |
y2 |
y1 |
y0 |
||
Схема преобразователя на двоичных сумматорах представлена на рисунке 1.9.
20
x9 |
x9 |
x8 |
x7 |
|
x9 |
|
x8 |
x4 |
x0 |
||
|
x8 |
x6 |
|
x5 |
x6 |
x5 |
x1 |
||||
SM |
SM |
SM |
SM |
|
SM |
|
SM |
SM |
0 |
||
|
x7 |
0 |
|
|
|
|
x4 |
|
|
||
|
SM |
SM |
SM |
|
SM |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
x2 |
x2 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SM |
|
|
SM |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
y7 |
y6 |
y5 |
y4 |
|
y3 |
|
y2 |
y1 |
y0 |
||
Рис.1.9. Схема преобразователя двоично-десятичного кода в двоичный код
Пример 1.3
Входной код 01 0110 1001 соответствует десятичному числу 169. Двоичные числа, расположенные в строках таблицы, равны
00100101(2) ~ 37(10),
01111100(2) ~ 124(10),
00000000(2),
00001000(2) ~8(10),
что в сумме составляет 10101001(2) ~ 169(10).
1.2.3. Преобразователь кода Грея в двоичный код
На рисунке 1.10 приведены весовые значения кодовых комбинаций (ячеек) в коде Грея и двоичном коде 8-4-2-1 для первых пяти разрядов. Часто возникает потребность преобразовать один из этих кодов в другой. Для удобства работы приведем таблицу, в которой показаы соответствия всех 32-х комбинаций одного и другого кодов.
