Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КЛЕВО_FPGA

.pdf
Скачиваний:
38
Добавлен:
14.04.2015
Размер:
8.21 Mб
Скачать

Глава 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