кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
Скачать 6.11 Mb.
|
Входы Выходы D Clk Q Q 1 0 0 1 Когда значение входного сигнала Clk изменяется с 0 на 1, выходной сиг- нал Q становится равным входному сигналу D. Входы Выходы D Clk Q Q 0 ↑ 0 1 1 ↑ 1 0 Поскольку выходной сигнал Q изменяется на 0, входной сигнал D также поменяется на 0. Теперь входной сигнал Clk станет равен 1. Входы Выходы D Clk Q Q 1 0 0 1 1 ↑ 1 0 0 1 1 0 Входной сигнал Clk возвращается к 0, не влияя на значения выходных сигналов. Входы Выходы D Clk Q Q 1 0 0 1 1 ↑ 1 0 0 1 1 0 0 0 1 0 196 Код Теперь значение входного сигнала Clk снова изменяется на 1. Поскольку входной сигнал D равен 0, выходной сигнал Q становится равным 0, а выход- ной сигнал Q — 1. Входы Выходы D Clk Q Q 1 0 0 1 1 ↑ 1 0 0 1 1 0 0 0 1 0 0 ↑ 0 1 Таким образом, входной сигнал D также становится равным 1. Входы Выходы D Clk Q Q 1 0 0 1 1 ↑ 1 0 0 1 1 0 0 0 1 0 0 ↑ 0 1 1 1 0 1 То, что здесь происходит, можно описать очень просто: каждый раз, ког- да значение входного сигнала изменяется с 0 на 1, значение выходного сигна- ла Q меняется либо с 0 на 1, либо с 1 на 0. Ситуацию может прояснить сле- дующий график. D/Q Clk Q Когда входной сигнал Clk изменяется с 0 на 1, значение на входе D (ко- торое совпадает со значением на выходе Q) передается на выход Q, при этом также изменяется значение Q и D до следующего перехода значения входного сигнала Clk от 0 к 1. Глава 14. Обратная связь и триггеры 197 Если частота осциллятора равна 20 герц (20 циклов в секунду), частота выхода Q в два раза меньше — 10 герц. По этой причине такая схема, в кото- рой выход Q соединен со входом триггера «Данные», также называется дели- телем частоты. Разумеется, выход делителя частоты может являться входом Clk другого делителя частоты для повторного деления частоты. На следующем изображе- нии показана схема, состоящая из трех делителей частоты. Q Q Q Q Clk D Clk Q D Clk Q D Clk Q Clk Q 1 Q 2 Q 3 Давайте рассмотрим четыре сигнала, которые я обозначил в верхней час- ти схемы. Clk Q 1 Q 2 Q 3 Признаю, что я выбрал самые подходящие точки начала и окончания этой диаграммы, однако ничего нечестного в этом нет: этот шаблон повторяется в данной схеме снова и снова. Не кажется ли она знакомой? Подскажу: обозначим эти сигналы нулями и единицами. 198 Код Clk Q 1 Q 2 Q 3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 Не догадались? Попробуйте повернуть диаграмму на 90 градусов по ча- совой стрелке и прочитать 4-битные числа по горизонтали. Каждое из них со- ответствует десятичному числу от 0 до 15. Двоичное число Десятичное число 0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 8 1001 9 1010 10 1011 11 1100 12 1101 13 1110 14 1111 15 Эта схема производит подсчет в двоичном формате, и чем больше триг- геров добавляем в схему, тем большую сумму можно получить с ее помощью. В главе 8 я указал, что в последовательности возрастающих двоичных чисел каждый столбец цифр чередуется между 0 и 1 с частотой вдвое меньшей, чем столбец справа от него. Этот счетчик имитирует эту закономерность. При каж- дом положительном переходе сигнала Clk значения выходных сигналов счет- чика увеличиваются на 1, это и называется приращением или инкрементом. Глава 14. Обратная связь и триггеры 199 Давайте объединим восемь триггеров и поместим их в общий корпус. Clk 8-битный сквозной счетчик Q 7 Q 6 Q 5 Q 4 Q 3 Q 2 Q 1 Q 0 Схема называется сквозным счетчиком, потому что выход каждого триг- гера становится входом Clk следующего. Изменения сигнала проходят после- довательно через все триггеры, а изменения триггеров, находящихся в конце, могут происходить с небольшой задержкой. Более сложные счетчики — син- хронные, в них все выходные сигналы изменяются одновременно. Я обозначил выходы буквами от Q 0 до Q 7 . Они расположены так, что выход первого триггера в цепочке (Q 0 ) является крайним справа. Если вы подключи- те к этим выходам лампочки, сможете прочитать 8-битное число. Временнáя диаграмма такого счетчика может отображать все восемь выходов отдельно или вместе следующим образом. Clk 00000000 00000001 00000010 00000011 00000100 Q При каждом положительном переходе сигнала Clk некоторые выходы Q могут измениться, некоторые — нет, однако вместе они отражают последова- тельность возрастающих двоичных чисел. Ранее в этой главе я говорил, что мы найдем способ определения часто- ты осциллятора. Итак, если вы подключите осциллятор к входу Clk 8-битного счетчика, последний покажет, сколько колебаний совершил осциллятор. Ко- гда общее число достигнет 11111111 (255 в десятичной системе счисления), счетчик вернется к 00000000. Вероятно, самый простой способ определения частоты осциллятора заключается в том, чтобы подключить восемь лампо- чек к выходам 8-битного счетчика. Теперь подождите, пока значения всех вы- ходов не станут равны 0, то есть пока не погаснут все лампочки, и запустите секундомер. Остановите секундомер, когда все лампочки погаснут снова. Это время, необходимое для 256 колебаний. Скажем, для этого требуется десять секунд. Таким образом, частота осциллятора составляет 256 / 10 = 25,6 герца. 200 Код С появлением в триггерах дополнительных функций они становятся бо- лее сложными. На следующем рисунке изображен D-триггер с предустановкой и очисткой, срабатывающий по фронту. Q Q Clr Pre D Clk Входы_Выходы_Pre_Clr_D_Clk_Q_Q'>Входы Pre (от «рreset» — «предустановка») и Clr обладают более высоким приоритетом, чем входы Clk и «Данные». Обычно эти два входа равны 0. Когда вход Pre равен 1, выход Q становится равным 1, а выход Q — 0. Когда вход Clr равен 1, выход Q — 0, а выход Q — 1. Как и в случае со входами S и R RS-триг- гера, входы Pre и Clr не должны одновременно быть равными 1. В остальном этот триггер ведет себя как обычный D-триггер со срабатыванием по фронту. Входы Выходы Pre Clr D Clk Q Q 1 0 X X 1 0 0 1 X X 0 1 0 0 0 ↑ 0 1 0 0 1 ↑ 1 0 0 0 X 0 Q Q D-триггер с предустановкой и очисткой, срабатывающий по фронту, обо- значается следующим образом. Глава 14. Обратная связь и триггеры Q D Clk Q Pre Clr Теперь наши телеграфные реле умеют складывать, вычитать и произво- дить подсчет в двоичном формате. Это значительное достижение, особенно учитывая то, что используемое оборудование было доступно более ста лет на- зад. Впереди у нас еще множество открытий. Однако давайте немного отдох- нем от конструирования схем и вернемся к системам счисления. Помимо упомянутых RS- и D-триггеров, существуют еще два основных вида: JK-триггеры (Jerk/Kill, внезапное включение / внезапное отключение) и Т-триггеры (Toggle, переключатель; он же счетный триггер). Таблица истин- ности JK-триггера отличается от таковой для RS-триггера наличием перехода при J = K = 1, где ввод J аналогичен вводу S, а ввод K — вводу R. Таким обра- зом, это отличие можно записать следующим образом. Входы Выходы Q(t − 1) J K Q(t) Q(t) 0 1 1 1 0 1 1 1 0 1 Получается, J = K = 1 инвертирует предыдущее состояние триггера. Во всем остальном принцип работы аналогичен RS-триггеру. Принцип действия Т-триггера заключается в том, что он инвертирует входной сигнал. Входы Выходы Q(t − 1) Т Q(t) Q(t) 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 1 202 Глава 15 Байты и шестнадцатеричные числа Две усовершенствованные счетные машины, описанные в предыдущей главе, хо- рошо иллюстрируют концепцию потоков данных. Восьмибитные значения пе- ремещаются по цепи от одного компонента к другому. Эти значения подаются на входы сумматоров, защелок и селекторов, а также появляются на выходах этих устройств. Кроме того, 8-битные значения задаются с помощью переключателей и отображаются рядом лампочек. Таким образом, поток данных в этих схемах име- ет ширину восемь бит. Но почему? Почему не шесть, не семь, не девять и не десять? Можно было бы ответить, что основой наших усовершенствованных счет- ных машин является исходный сумматор из главы 12, работающий с 8-битными значениями. Однако нет никаких особых причин конструировать эту машину именно так. Просто при ее создании мы сочли эту величину удобной. Как бы то ни было, признаю, что схитрил, поскольку с самого начала знал (возможно, и вы тоже), что восемь бит данных соответствуют одному байту. Слово «байт» (byte) возникло в компании IBM примерно в 1956 году. Оно произошло от слова bite («кусок»), но его было решено писать через букву y, чтобы не путать со словом bit («бит»). В течение некоторого времени слово «байт» обозначало просто число битов в конкретном потоке данных. Однако в середине 1960-х, в связи с разработкой семейства компьютеров System/360 в компании IBM, это слово стало обозначать группу из восьми бит. Как 8-разрядное число, байт может принимать значения в диапазоне от 00000000 до 11111111. Эти значения могут описывать положительные це- лые числа от 0 до 255, а при использовании дополнения до двойки для пред- ставления отрицательных чисел они могут отображать как положительные, так и отрицательные целые числа в диапазоне от −128 до 127. Кроме того, кон- кретный байт может просто представлять одну из 2 8 , или 256, разных вещей. Глава 15. Байты и шестнадцатеричные числа 203 Число 8 оказалось весьма удобной величиной. Компания IBM отдала пред- почтение 8-битным байтам в связи с простотой хранения чисел в формате BCD (о котором я расскажу в главе 23). Однако, как мы увидим далее, байт идеально подходит для хранения текста, поскольку бóльшую часть языков мира (за исключением идеограмм, использующихся в китайском, японском и корейском) можно представить менее чем 256 символами. Кроме того, байт идеально подходит для представления оттенков серого на черно-белых фото- графиях, поскольку человеческий глаз различает примерно 256 оттенков это- го цвета. А там, где не хватает одного байта (например, для представления выше упомянутых идеограмм китайского, японского и корейского языков), как правило, можно использовать два байта, которые позволяют выразить 2 16 , или 65 536, различных элементов. Половина байта, то есть четыре бита, иногда называется тетрадой, од- нако это слово употребляется гораздо реже, чем «байт». Поскольку байты часто используются при описании работы компьюте- ров, нам требуется как можно более лаконичный способ записи их значения. Например, запись числа, состоящего из восьми двоичных цифр 10110110, без- условно, является корректной, но едва ли лаконичной. Разумеется, мы всегда можем обращаться к байтам, используя их десятич- ные эквиваленты, но это потребует преобразования двоичного числа в деся- тичное, что хоть и несложно, но весьма обременительно. В главе 8 я продемон- стрировал один довольно простой подход. Поскольку каждая двоичная цифра соответствует степени 2, мы можем просто записать цифры двоичного числа, а под ними — степени 2, после чего перемножить числа в каждом столбце и сло- жить результаты. Далее представлен процесс преобразования числа 10110110. × 128 + × 64 × 32 × 16 × 8 × 4 × 2 × 1 + + + + + + = 1 0 1 1 0 1 1 0 128 0 32 16 0 4 2 0 182 Процесс преобразования десятичного числа в двоичное менее удобен и предполагает деление десятичного числа на убывающие степени двойки. Частное от каждого деления — двоичная цифра, а остаток делится на следую- щую в порядке убывания степень двойки. Вот как десятичное число 182 пре- образуется в двоичное. 1 0 1 1 0 1 1 0 182 54 54 22 6 6 2 0 : 128 : 64 : 32 : 16 : 8 : 4 : 2 : 1 204 Код В главе 8 эта техника описана подробно. Тем не менее для преобразова- ния двоичных чисел в десятичные и обратно обычно требуется бумага, каран- даш и практика. Мы уже узнали о восьмеричной системе счисления — системе счисления с основанием 8, где используются только цифры 0, 1, 2, 3, 4, 5, 6 и 7. Преобра- зовать восьмеричное число в двоичное легко. Все, что нужно, — это запомнить 3-битный эквивалент каждой восьмеричной цифры. Двоичное число Восьмеричное число 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 Если у вас есть двоичное число (например, 10110110), начинайте преоб- разование с правого края. Каждая группа из трех бит соответствует восьме- ричной цифре. 10 110 110 2 6 6 Таким образом, байт 10110110 можно выразить в виде восьмеричного чис- ла 266. Это выражение, безусловно, является более лаконичным, значит, вось- меричная система действительно подходит для представления байтов. Однако у нее есть небольшой недостаток. В двоичной системе байты выражаются значениями в диапазоне от 00000000 до 11111111, в восьмеричной — значениями в диапазоне от 000 до 377. Как было показано в предыдущем примере, средней и крайней справа восьмерич- ным цифрам соответствуют группы из трех бит, однако крайней слева восьме- ричной цифре соответствуют только два бита. Это означает, что восьмеричное представление 16-разрядного числа не совпадает с восьмеричными представ- лениями двух байтов, составляющих это 16-разрядное число. 1 011 001 111 000 101 1 3 1 7 0 5 10 110 011 2 6 3 11 000 101 3 0 5 Глава 15. Байты и шестнадцатеричные числа 205 Чтобы согласовать представления многобайтных значений с представ- лениями отдельных байтов, нужна система, в которой каждый байт делится на равное количество битов. Следовательно, нам требуется разделить каж- дый байт на четыре значения по два бита каждое (система счисления с осно- ванием 4) или на два значения по четыре бита каждое (система счисления с основанием 16). Систему счисления с основанием 16 мы еще не рассматривали, и на то есть причины. Система счисления с основанием 16 называется шестнадцатерич- ной *, — даже название труднопроизносимо. В десятичной системе счисления считаем так: 0 1 2 3 4 5 6 7 8 9 10 11 12 … В восьмеричной системе, как вы помните, не используются цифры 8 и 9: 0 1 2 3 4 5 6 7 10 11 12 … В системе с основанием 4 не требуются цифры 4, 5, 6 и 7: 0 1 2 3 10 11 12 … Наконец, в двоичной системе достаточно только 0 и 1: 0 1 10 11 100 … Однако шестнадцатеричная система отличается тем, что в ней использу- ется больше цифр, чем в десятичной. В шестнадцатеричной системе подсчет происходит примерно так: 0 1 2 3 4 5 6 7 8 9 ? ? ? ? ? ? 10 11 12 … В данном случае 10 соответствует числу 16 ДЕСЯТЬ . Вопросительные знаки говорят о том, что нам нужны еще шесть символов для представления шест- надцатеричных чисел. Что это за символы? Откуда их брать? Что ж, поскольку * Шестнадцатеричная система счисления используется для обозначения МАС-адресов (уникальных физических адресов сетевого оборудования) и для записи сетевых (IP) адресов в современном протоколе IPv6. С этим вы можете столкнуться при настройке доступа в интернет на своем компьютере. Прим. науч. ред. 206 Код они не достались нам в наследство, подобно другим традиционным числовым символам, мы можем придумать их самостоятельно, например такие. В отличие от символов, используемых для обозначения большинства чи- сел, у этих обозначений есть преимущество: они легко запоминаются и отож- дествляются с теми величинами, которые представляют. Существует так на- зываемая десятигаллонная ковбойская шляпа, мяч для американского футбола (11 игроков в команде), дюжина пончиков (12 штук), черная кошка (с которой ассоциируется несчастливое число 13), полная луна (появляется на небе через 14 дней после новолуния) и кинжал (напоминающий об убийстве Юлия Цеза- ря в 15-й день марта). Каждый байт можно выразить в виде двух шестнадца- теричных цифр. Другими словами, шестнадцатеричная цифра эквивалентна четырем битам, или одной тетраде. В следующей таблице показаны соответ- ствия двоичных, шестнадцатеричных и десятичных чисел. Двоичное число Шестнадца- теричное число Десятичное число Двоичное число Шестнадца- теричное число Десятичное число 0000 0 0 1000 8 8 0001 1 1 1001 9 9 0010 2 2 1010 10 0011 3 3 1011 11 0100 4 4 1100 12 0101 5 5 1101 13 0110 6 6 1110 14 0111 7 7 1111 15 Глава 15. Байты и шестнадцатеричные числа 207 Вот как можно представить двоичное число 10110110 в шестнадцатерич- ной системе. 1011 0110 6 И не важно, имеем ли мы дело с многобайтными числами. 1100 0101 5 1011 0110 6 Один байт всегда представляется парой шестнадцатеричных цифр. К сожалению (а может быть, к счастью), мы не собираемся использовать футбольные мячи и пончики для записи шестнадцатеричных чисел, хотя они, безусловно, могли бы сгодиться для этой цели. Вместо них в шестнадцатерич- ной системе применяются обозначения, приводящие многих в замешательство. Дело в том, что шесть недостающих шестнадцатеричных цифр представляют шестью первыми буквами латинского алфавита: 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 … В следующей таблице показано реальное соответствие между двоичными, шестнадцатеричными и десятичными числами. |