
КЛЕВО_FPGA
.pdfГлава 2. Кодирование и системы счисления
В этом примере мы видим, что остаток равен 0. Но не обяза тельно так всегда бывает. В нормальном случае дробная часть экви валентного двоичного числа имеет бесконечно большое количество разрядов. В этом случае необходимо удовольствоваться определен ным числом разрядов после запятой и ограничить этим точность. В нашем случае 0,375io точно соответствует 0,0112.
На основе целочисленной и дробной частей получаем искомое двоичное число 10110,0112-
2.3.Арифметические операции с фиксированной запятой в двоичной системе
вданной главе описываются арифметические операции с числами с фиксированной запятой. Арифметические операции с фиксирован ной запятой означают, что в них запятая всегда стоит на фиксиро ванном месте. Нри этом место, на котором стоит запятая, ориенти руется на позицию в ЗУ, на которой находится число. В этом случае нет необходимости реализовать запятую в аппаратуре компьютера. Она существует только в голове программиста. Мы ограничиваемся постоянной длиной слова п, как это имеет место в компьютерах. На основе этого можно обсудить проблему переполнения допустимой области.
2.3.1.Целочисленное сложение в двоичной системе
Целочисленное сложение двух чисел А и В производится в двоичной системе точно так же, как и в десятичной системе — по разрядам. Как и там, в каждом разряде должны быть просуммированы обе двоичных цифры an и Ьп и перенос из предыдущего разряда Cn-i- При сложении возникают (табл. 2.2) новая сумма Sn и новый пе
ренос Сп- В этой таблице дискретной линией разделены входные и выход
ные величины. Например:
01111110
^00110101
- 1 0 1 1 0 0 1 1
перенос |
1 1 1 1 1 0 0 |
Необходимо следить, чтобы в приведенном вьппе примере сумми ровались два числа длиной по 8 бит и чтобы итог тоже имел длину 8 бит, чтобы не было переполнения допустимой зоны.
2.3. Арифметические операции с фиксированной запятой
Таблица 2.2. Сложение в двоичной системе со слагаемыми атг,ЬпИ перено сом из предыдущего разряда Сп-\- Сумма равна Ьп 5 новый перенос Си-
^п |
Ьп |
С п - 1 |
Сп |
Sn |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
2.3.2.Сложение чисел с фиксированной запятой
Вэтом случае, когда суммируются два числа с фиксированной за пятой, важным моментом является то, чтобы аналогично обычной процедуре в десятичной системе обе запятые стояли друг над дру гом. Так, при сложении двух чисел длиной в 8 бит запятая у обоих чисел должна стоять, например, на третьем месте.
Например:
0 1 1 0 0 , 0 1 0
0 0 1 1 0 , 1 1 1
= 1100,110 перенос 100 11,001
2.3.3. Представление с помощью обратного кода
Ц^ля того, чтобы иметь малые затраты на аппаратурную часть (hard ware) компьютера, были предприняты усилия по сведению к одно му алгоритму вычитания и сложения. Этого можно добиться, если применять двоичные цифры в их дополняющей форме. Различают единичное дополнение (обратный код, поразрядное дополнение) и двойное дополнение (точное дополнение).
Поразрядное дополнение формируется путем замены всех нулей на единицы и обратно. Следовательно, поразрядным дополнением (one's complement) 0001 является 1110. Ниже поразрядное дополне ние двоичного числа А обозначено -^А. Очевидно, что при предста влении п-битового слова имеем:
.А + Л - 2^ - 1 |
(2.3) |
24 Глава 2. Кодирование и системы счисления
Например, при представлении 8-битового слова имеем:
10110011 + 01001100 = 11111111 - 2 ^ - 1
Можно так преобразовать уравнение (2.3), чтобы получить фор мулу р^ля расчета поразрядного дополнения:
-.А = 2^ - 1 - А |
(2.4) |
2.3.4.Представление с помощью двойного дополнения (точное дополнение, two's complement)
Точное дополнение Ак2 образуется из поразрядного дополнения -^А путем прибавления 1:
Ак2 = --АЛ-1 |
(2.5) |
Следовательно, с учетом (2.4) будет справедливо:
Ак2 ^Т -А |
(2.6) |
Мы видим, что в данном представлении содержится «—А», благо даря чему оно удобно для проведения вычитания. Учтем также, что Т^ в двоичном представлении имеет п Л-\ разрядов. Ниже пример точного дополнения J\A^ 10101100:
Ак2 - - Л + 1 = 01010011 + 1 - 01010100
Представление 4-битовых двоичных слов в круговой форме, при веденное на рис. 2.1, позволяет показать числовой диапазон. Соот ветствующее данным значениям набольшее представляемое положи тельное число равно 7/), соответствующее данным значениям наи большее отрицательное число равно —8^). Следовательно, числовой диапазон построен несимметрично, поскольку отрицательное число занимает больше места, чем положительное. Наибольшее и наимень шее представляемые числа можно выразить как:
^тах ^^ ^ |
\^' * ) |
На рис. 2.1 можно видеть, что малые числа, сформированные на основе точного дополнения, содержат много ведущих единиц, ко гда они отрицательны, и содержат много ведущих нулей, когда они
2.3. Арифметические операции с фиксированной запятой
положительны. Соответствующие данным значениям большие чи сла, сформированные на основе точного дополнения, содержат да леко влево отстоящий нуль, когда они отрицательны, и далеко вле во отстоящий нуль, когда они положительны. Их собственным точ ным дополнением является число 1000^ (—8/)). Важно установить, что при представлении на основе точного дополнения имеем толь ко один 0. Это облегчает запрос, равен ли результат 0. Напротив, при представлении на основе поразрядного дополнения имеют ме сто двоичное число 0000^, соответствующее -i-Oo и двоичное число 1111^, соответствующее —0/^.
0000
1111 _ - # - - _ 0001
0010
2
1100 1 ^ |
л^от |
1001 |
• |
0111 |
|
1000 |
|
Рис . 2.1. Представление 4-битовых слов с помощью 4-битового дополнения.
2.3.5.Вычитание при представлении с помощью точного дополнения
Пусть должны были вычтены одно из другого два положительных двоичных числа А и В, При условии применения точного дополне ния в соответствии с уравнением (2.6) вычитание можно провести следующим образом:
А-В = А-В + Вк2-Вк2 = А-В-{-Вк2-{2''-В) |
(2.9) |
Раскрытие скобок в правой части уравнения дает:
А-В = А + Вк2-2'' |
(2.10) |
Что означает вычитание 2'^? Поясним это на примере операции вычитания 7—3 = 4 в 4-битовой двоичной системе. Сумма двоичного
Глава 2. Кодирование и системы счисления
эквивалента числа 7 и дополнение двоичного эквивалента числа 3 равняется:
, 0 1 1 1 |
7io |
1101 |
- Зю |
-1 0 1 0 0
-1 0 0 0 0
=0100 tio
Вычитание числа 10000^, проведенное в соответствии с уравне нием (2.10), дает правильный результат 0100^. Это может произой ти в 4-битовом компьютере просто потому, что высший результат игнорируется. Итак, при проведении вычитания с помош;ью точно го дополнения нет необходимости учитывать высший перенос С4. Но необходимо соблюдать осторожность в связи с переполнением числового диапазона. Исследуем это ниже.
2.3.6. Переполнение числового диапазона
Исходя из вышесказанного возникает необходимость рассмотрения проблемы переполнения числового диапазона (overflow) в связи с представлением на основе точного дополнения. Переполнение число вого диапазона может происходить только в двух случаях. А имен но, когда суммируются два положительных числа либо суммируют ся два отрицательных числа. В связи с этим рассмотрим несколько примеров, относяш;ихся к 4-битовому представлению.
•Пример переполнения числового диапазона при сложении двух положительных чисел:
0 1 0 1 |
5io |
0 1 0 1 |
5io |
= 1010 |
-610 |
Очевидно, что результат является неправильным. Ошибка воз никает за счет переноса 3-го разряда на место 4-го разряда, что приводит к симуляции отрицательного числа. Этот пере нос сз в представлении, используюш;ем п бит, обычно обозна чается как Сп-1- Перенос с^ (в обш;ем случае с^) из разряда 4 в разряд 5 называется Carry {Су). В этом примере данный перенос не имеет места.
2,3. Арифметические операции с фиксированной запятой
•Пример переполнения численного диапазона при сложении от рицательных чисел:
+ |
1011 |
-5io |
1011 |
-5io |
|
- ( 1 ) 0 1 1 0 |
6io |
В этом примере также появляется неправильный результат. Имел место не перенос Cn-i из разряда 3 в разряд 4, а перенос Сп ИЗ разряда 4 в разряд 5.
•Для сравнения проведем сложение двух отрицательных чисел без переполнения числового диапазона:
+11111101 —3io
=(1)1100 -4io- l i o
Имели место переносы Сп и c^-i.
Сведем эти результаты вместе с другими, здесь не показанны ми случаями, в таблицу. На основе результатов, представленных в табл. 2.3, для двух двоичных чисел Л и Б, которые лежат в чи словом диапазоне, определяемом п-битовом представлением на базе точного дополнения, можно установить перенос переполнения при сложении.
Таблица 2.3. Перенос переполнения при сложении в случае п-битового представления на основе точного дополнения.
|
Правильный результат |
Перенос переполнения |
|
А-\-В |
Сп = 0, C n - l = 0 |
Сп ~ 0, Сп - 1 = 1 |
|
А-В |
Сп = |
Сп—\ |
невозможен |
-А-В |
Сп = 1, |
Сп - 1 = 1 |
Сп ^^ -L) Сп — 1 ^^^ vJ |
Следовательно, правильный результат имеет место тогда, когда Сп = c^i-i, неправильный результат — когда Сп ф Cn-i-
2.3.7. Умножение
Умножение выполняется так же, как и для десятичной системы. Рас смотрим пример умножения на основе двоичной системы для чисел
Глава 2. Кодирование и системы счисления
IOD X UD = IIOD:
1010
""ion
1010
1 0 1 0
10 1 О
11 1 ОНО
Наибольший из ожидаемых результатов Е умножения двух п- битовых слов представляет собой:
£; = (2^ - 1) . {2'' -I) = 2^"" - 2''"'^ + 1 < г^"" - 1
Следовательно, результат умножения двух п-битовых чисел име ет длину 2п бит. Но он меньше, чем максимальное представляемое с помош;ью 2п бит двоичное число 2^^ — 1.
Сказанное выше справедливо для умножения положительных чи сел. При вычислениях с использованием представления на основе точного дополнения могут быть применены специальные алгорит мы [20], или следует числа на основе точного дополнения перед умно жением преобразовать обратно в исходные значения, а результат перевести в соответствии со знаком в желаемое представление.
При умножении чисел с фиксированной запятой вначале числа умножаются без учета запятой. Затем запятая вводится в соответ ствии с правилом: умножение двух чисел с п и А; разрядами после запятой даст произведение с п -f /с разрядами после запятой.
2.3.8. Деление
Для деления можно использовать тот же самый алгоритм, что и в десятичной системе. Продемонстрируем это на примере уравнения lOi^ : 2г> = 5D:
1 0 |
1 0 |
1 |
0 |
0 |
1 0 |
~ 1 0 |
|
|
1 |
0 |
1 |
0 1 0
10
о
Соответственно при делении числа с п разрядами после запятой на число с к разрядами после запятой частное имеет п — к разрядов
2.4' Шестнадцатеричный код 29
после запятой. Так в соответствии с верхним примером имеем:
10,10-101,1 = 1101,110
Деление чисел с точным дополнением также можно свести к умножению и сложению [20].
2.4. Шестнадцатеричный код
На практике наряду с двоичным кодом внедрился шестнадцатерич ный код, поскольку он обеспечивает лучшее обозрение длинных дво ичных чисел. Шестнадцать шестнадцатеричных цифр определены в табл. 2.4. Шестнадцатеричные цифры больше девяти представлены буквами A-F. Для преобразования двоичных в шестнадцатеричные числа объединяют по четыре цифры двоичного числа, которые ин терпретируются как шестнадцатеричный разряд. Благодаря этому шестнадцатеричное число занимает только четверть разрядов, за нимаемых двоичным числом одинаковой величины.
Например:
ОНО 1100 1111
G С
Итак, справедливо выражение 0110011001III2 = GCFi^.
Таблица 2.4. Шестнадцатеричные числа. |
|
|
||||
десятичные |
двоичные |
шестнадца |
десятичные |
двоичные |
шестнадца |
|
теричные |
теричные |
|||||
|
|
|
|
|||
0 |
0000 |
0 |
8 |
1000 |
8 |
|
1 |
0001 |
1 |
9 |
1001 |
9 |
|
2 |
0010 |
2 |
10 |
1010 |
А |
|
3 |
ООП |
3 |
11 |
1011 |
В |
|
4 |
0100 |
4 |
12 |
1100 |
С |
|
5 |
0101 |
5 |
13 |
1101 |
D |
|
6 |
ОНО |
6 |
14 |
1110 |
Е |
|
7 |
0111 |
7 |
15 |
1111 |
F |
В качестве обозначения шестнадцатеричного числа использует ся индекс Н, Преобразование шестнадцатеричного числа в десятич ное число и обратно проще всего производить через соответствую щее двоичное число. Также возможно производить преобразование с помощью алгоритма, как при преобразовании двоичного числа в
30 Глава 2. Кодирование и системы счисления
десятичное число. Обратное преобразование производится анало гично представленному уравнением (2.2).
2.5. Восьмеричный код
Восьмеричный код применяется аналогично шестнадцатеричному, только объединяются лишь по 3 разряда двоичного числа. Для вось меричного кода применяются цифры десятичного кода от О до 7, он обозначается индексом 0.
Например:
110 101 100 011
Следовательно, справедливо 110101000112 = 65438-
2.6, Код Грея
Часто в цифровой технике требуется для числового кода схема ко дирования, в соответствии с которой при переходе от одного числа к следующему изменялась бы только одна цифра. Выполнение это го условия необходимо, когда вследствие технических неточностей момент переключения не может быть точно выдержан. При пере ключении двух цифр из-за этого могут возникнуть неправильные коммутационные операции. В качестве примера подобной ошибки рассмотрим переключение от lio к 2io в двоичном коде:
0001 — ^ — ^
I |
0000 |
ООП |
0010 |
^ — ^ |
^ ^ |
При этом переключении изменяются биты О и 1 при одновремен ном переключении непосредственно достигается новое число. Если вначале изменяется бит О, то появляется число 0000, и только когда изменяется бит 1, получаем правильное число 0010. Если же снача ла изменяется бит 1 и потом изменяется бит О, то в промежутке возникает число ООН. Коды Грея позволяют избежать этой очень серьезной ошибки за счет того, что при переходе от одного кодово го слова к следуюш;ему изменяется только один разряд. В табл. 2.5 представлен 4-разрядный код Грея. В дополнение к вышесказанно му показанный код имеет свойство, которое заключается в его ци кличности, так как также и при переходе от высшего числа (15D)
2.7, Двоично-десятичный код
низшему числу изменяется только один разряд. Циклические коды Грея могут быть сконструированы р^ля всех прямых длин периодов.
Таблица 2.5. Пример 4-разрядного кода Грея.
Десятичные (числа) |
Код Грея |
Десятичные (числа) |
Код Грея |
0 |
0000 |
8 |
1100 |
1 |
0001 |
9 |
1101 |
2 |
ООП |
10 |
1111 |
3 |
0010 |
11 |
1110 |
4 |
ОНО |
12 |
1010 |
5 |
0111 |
13 |
1011 |
6 |
0101 |
14 |
1001 |
7 |
0100 |
15 |
1000 |
2.7. Двоично-десятичный код
Если мы хотим подвести к десятичным цифрам некоторые отмет ки, то для этого подойдет код, в котором отдельным десятичным цифрам приданы двоично-кодированные кодовые слова. Этот код обозначается как двоично-десятичный код (BCD-код). Подходящая возможность реализации заключается в том, чтобы представить че рез соответствующую каждой из них 4-разрядную двоичную цифру. Поскольку отдельные разряды имеют веса 8, 4, 2 и 1, данный код называют кодом типа 8-4-2-1. Существует также возможность по строить двоично-десятичный код 2, 4, 2, 1 (Aiken-Code). К другим двоично-десятичным кодам относятся код с избытком три (3-Excess- Code) и двоично-десятичный код Грея (BCD-Gray-Code) [5].
Таблица 2.6. Двоично-десятичный код.
Десятичная цифра |
Код типа 8-4-2-1 |
Десятичная цифра |
|
0 |
0000 |
1 |
^ |
1 |
0001 |
|
6 |
2 |
0010 |
|
7 |
3 |
ООН |
|
8 |
4 |
0100 |
|
9 |
Код типа 8-4-2-1 0101 ОНО 0111 1000 1001