Искусство схемотехники. Том 2 (Изд.4-е) - Хоровиц Пауль (читать книги бесплатно полностью без регистрации .txt) 📗
Упражнение 8.2. Преобразуйте в десятичный код следующие числа: а) 1110101,01102, б) 11,010101012, в) 2АН. Преобразуйте в двоичный код следующие числа: а) 102310, б) 102316. Преобразуйте в шестнадцатеричный код следующие числа: а) 102310, б) 1011101011012, в) 6145310.
Числа со знаком. Прямой (знаковеличинный) код. Рано или поздно возникнет необходимость представлять отрицательные числа в двоичном коде; в первую очередь это потребуется в устройствах, которые выполняют вычислительные операции. Самое простое — отвести один разряд (скажем, старший) под знак числа, а остальные использовать для представления его величины. Этот способ называется знаковеличинным или прямым кодом и соответствует обычной записи числа со знаком (табл. 8.1).
Он используется при выводе чисел на индикацию, а также в некоторых аналого-цифровых преобразователях (АЦП). Вообще же это не лучшая форма представления чисел со знаком, особенно при выполнении вычислений, так как в данном случае операции вычитания и сложения выполняются по-разному (т. е. сложение «не работает» для чисел со знаком). Кроме того, здесь могут присутствовать нули двух типов (+0 и —0), поэтому при выборе нужного из них следует быть очень внимательным.
Смещенный код. Смещенный код является вторым методом представления числа со знаком. Чтобы получить смещенный код какого-либо числа, нужно к этому числу, представленному в прямом коде, прибавить половину наибольшего возможного числа (табл. 8.1).
Последовательность всех чисел благодаря этой операции, начиная с наибольшего отрицат. числа и кончая наибольшим положит, числом, представляет простую двоичную прогрессию и может быть сформирована с помощью двоичных счетчиков. Информацию о знаке здесь также несет старший разряд, но нуль становится однозначным. Смещенный код используется в АЦП и ЦАП (преобразователях), однако он еще неудобен для выполнения вычислений.
Дополнительный код. При выполнении операций над целыми числами чаще используется представление чисел в форме дополнения до двух, или, иначе, в дополнительном коде. В такой системе положительные числа записываются просто как двоичные без знака, а отрицательные выражаются таким числом, которое, будучи добавлено к положительному числу той же величины, даст в результате нуль. Чтобы получить отрицательное число, нужно для каждого бита положительного числа сформировать дополнение до 1, или обратный код (т. е. вместо каждого 0 записать 1 и наоборот), и затем к полученному результату прибавить 1 (это даст дополнительный код). Из табл. 8.1 видно, что числа в дополнительном коде отличаются от чисел в смещенном коде инверсным значением старшего значащего разряда (СЗР). Точно так же как и при других формах представления, СЗР несет информацию о знаке. Здесь имеется только один нуль, который удобно представляется нулевыми состояниями всех разрядов (при очистке счетчика или регистра в них заносится нулевое значение).
Арифметика в дополнительном коде. Арифметические операции в дополнительном коде выполняются довольно просто. Чтобы получить сумму двух чисел, достаточно сложить соответствующие разряды (с учетом переноса), например
Чтобы вычесть В из А, нужно взять дополнительный код числа В и прибавить его к числу А (т. е. прибавить отрицательное число):
Умножение в дополнительном коде выполняется также непосредственно. Попробуйте сделать следующие упражнения.
Упражнение 8.3. Используя 3-разрядный дополнительный код, произведите двоичное умножение +2 на -3. Подсказка: ответ равен -6.
Упражнение 8.4. Покажите, что дополнительный код числа -5 равен +5.
Дополнительный код благодаря естественности вычислений в нем повсеместно используется в ЭВМ для выполнения арифметических операций над целыми числами (но следует отметить, что числа с «плавающей запятой» обычно используются в знаковеличинной форме, называемой знак-порядок-мантисса).
Код ГРЕЯ. Код, рассматриваемый ниже, используется в механических шифраторах угла поворота вала, а также в других устройствах. Он носит название кода Грея и обладает тем свойством, что при переходе от любого его состояния к следующему изменяется лишь один разряд (бит), что позволяет предотвратить ошибки, поскольку в данном случае при переходе между двумя закодированными значениями все разряды никак не могут измениться одновременно. Если бы использовался чисто двоичный код, то при переходе, например, от 7 к 8 на входе можно было бы получить число 15. Для формирования состояний кода Грея существует простое правило: начинать нужно с нулевого состояния, а затем для получения каждого следующего нужно выбрать самый младший разряд, изменение которого приводит к образованию нового состояния, и взять его инверсное значение.
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
Коды Грея могут содержать любое число разрядов. Они применяются при «параллельном кодировании» — методе быстродействующего аналого-цифрового преобразования (будет рассмотрен ниже). В следующем разделе мы покажем взаимные соответствия между кодом Грея и двоичным кодом.
8.04. Вентили и таблицы истинности
Комбинационная и последовательная (последовательностная) логика. Сущность цифровой электроники - выработка выходных цифровых сигналов в соответствии с входными. Например, сумматор может принять на свои входы два 16-разрядных числа и сформировать на выходе 16-разрядную сумму (плюс перенос). Можно сделать также схему для умножения двух чисел. Такого типа операции должен уметь выполнять процессор ЭВМ. Другая задача — сравнение двух чисел с целью удостовериться в том, что «все системы действуют нормально». Возможно, вы захотите дополнить паритетным битом число, подлежащее передаче по каналу связи, так, чтобы общее количество «единиц» в нем стало четным: проверка паритета на приемной стороне обеспечивает простой контроль правильности передачи. Еще одна типичная задача заключается в том, чтобы взять какие-либо числа, выраженные в двоичном коде, а затем воспроизвести их на экране, отперфорировать или отпечатать в виде десятичных знаков. Состояние выхода (или выходов) во всех этих задачах является предопределенной функцией состояния входа или входов. Задачи, относящиеся к этому классу, называются «комбинационными» и могут быть решены с помощью вентилей — устройств, которые выполняют операции булевой алгебры в системах с двумя состояниями (двоичных).
Существует другой класс задач, которые нельзя решить лишь путем формирования комбинационных функций текущих значений входных сигналов и которые требуют знания их прежнего состояния. Для решения этих задач необходимо применять «последовательные» схемы. К задачам такого типа относится преобразование строки двоичных разрядов из последовательной формы (один разряд следует за другим во времени) в параллельную группу разрядов, подсчет числа единиц, распознавание заданной определенной кодовой комбинации и последовательности битов, или, например, формирование одного выходного импульса после поступления четырех входных. Для решения всех этих задач требуется в какой-либо форме цифровая память. Основным устройством для построения этой памяти служит триггер (или мультивибратор с двумя устойчивыми состояниями). Рассмотрим вначале вентили и комбинационную логику, так как они являются основой для построения любых цифровых схем. При переходе к последовательным логическим устройствам мир цифровой техники станет значительно более интересным, однако и вентили сами по себе также весьма любопытны.