Шапка

10.1 Основные принципы работы логических схем

==703

10.1.1 Цифра против аналога

До настоящего момента преимущественно рассматривались схемы ( RC цепи, усилители, интеграторы ), входные и выходные сигналы которых менялись в некотором непрерывном диапазоне величин. Это естественное положение вещей, когда надо работать с непрерывными сигналами, например, со звуком или данными с датчиков.

Но существуют ситуации, когда сам входной сигнал имеет дискретную природу, скажем, выход детектора частиц или «битовые» данные с переключателя. В таком случае естественным и удобным становится использование цифровой электроники, которая имеет дело только с разными сочетаниями нулей и единиц. Более того, часто оказывается удобнее преобразовать непрерывный ( аналоговый ) сигнал в цифровое представление и обратно с помощью аналого-цифрового ( АЦП ) и цифро-аналогового ( ЦАП ) преобразователя. Это может потребоваться для обработки или хранения аналоговых величин в виде массива чисел. Типичным примером может служить микропроцессор, который наблюдает за экспериментом или производственным процессом и меняет режим функционирования оборудования на основе полученных данных, а их самих сохраняет для дальнейшего анализа.

Другим интересным примером возможностей цифровой техники является передача аналоговых сигналов без потери качества от наводок и шума. Аналоговый аудио- и видеосигнал легко набирает сторонние шумы при передаче по кабелю или радиоканалу в естественной форме. Шум, попавший в состав сигнала, удалить позднее не получится. Зато сигнал можно преобразовать в набор чисел, хранящих сведения об амплитуде в последовательные моменты времени. Теперь возможно передавать полученные числа как цифровой сигнал. С помощью ЦАПа на приёмной стороне можно восстановить исходную форму напряжения. Каких-либо ошибок от шума в канале связи не будет до тех пор, пока этот шум не мешает различать нули и единицы. Данная техника носит название PCM и особенно привлекательна, когда канал передачи содержит много промежуточных звеньев - репетиров, т.к. цифровые данные могут быть восстановлены в каждом промежуточном узле, что позволяет исключить шум канала. Данные и удивительные изображения, полученные космическим зондом PIONEER 10 в окрестностях Юпитера в 1973 г. сохранялись и передавались в формате PCM. Цифровой звук и телевизионное изображение присутствуют сегодня в каждом доме, как минимум в формате 12-сантиметровых звуковых лазерных дисков _1 . Данные на них сохраняются в виде значений со стерео каналов в виде двух 16-разрядных чисел каждые 23 микросекунды ( 1.4 Mbit/s ). Общий объём сохраняемых данных достигает 6 Gbit , что по сегодняшним стандартам является низкоскоростным носителем малой ёмкости. Соответствующие цифры для DVD и BD ( Blu-ray ) 10 и 48 Mbit/s (max), а информационная ёмкость - 38 и 200 Gbit на один слой.

Фактически цифровая аппаратура стала настолько мощной, что задачи ранее, решавшиеся аналоговыми методами, в настоящий момент проще реализовать цифровым способом. Например, аналоговый термометр может дополняться микропроцессором, который увеличит точность, компенсируя отклонения датчика от линейной характеристики. Аналогично устроены и бытовые напольные весы. Широкое распространение микроконтроллеров ценой менее доллара позволяет вставлять их практически в каждое устройство. Дома буквально набиты вещами, имеющими внутри процессор. Каждый музыкальный плеер, телеприёмник, сотовый телефон, посудомоечная машина, сушилка, факс, копировальный аппарат, микроволновая печь, кофе-машина... Список очень длинен и способен преподнести сюрпризы _2 . Чем пытаться назвать все области приложения цифровой электроники, лучше займёмся изучением её самой. Области использования будут появляться по ходу знакомства.

==704

10.1.2 Логические состояния

Под «цифровой электроникой» подразумеваются схемы, составленные из элементов только с двумя ( обычно ) состояниями, например, транзистор может находиться в насыщении или в отсечке. Как обычно, при описании используются напряжения, а не токи, причём уровни называются ВЫСОКИЙ и НИЗКИЙ. Два состояния могут быть представлены любым возможным «битом» - бинарным информационным элементом, в качестве которого могут выступать: одноразрядные двоичные числа, состояния электрического выключателя, наличие или отсутствие сигнала, нахождение некоторой аналоговой величины выше или ниже некоторого порогового уровня, факт регистрации какого-либо события или факт завершения некоторого действия и т.д.

10.1.2.A ВЫСОКИЙ и НИЗКИЙ уровни

ВЫСОКИЙ и НИЗКИЙ уровни напряжения представляют логические состояния ИСТИНА и ЛОЖЬ в булевой алгебре некоторым заранее оговоренным способом. Если в некоторой точке ВЫСОКИЙ уровень напряжения соответствует логическому значению ИСТИНА, то такой сигнал называется «активным высоким» ( или «высоким истинным» ) и наоборот. Поначалу это несколько сбивает с толку. На рис. 10.1 приведён пример. Состояние «ключ ЗАМКНУТ» является ИСТИННЫМ, т.е., когда на выходе НИЗКИЙ уровень, это «активный низкий» (или «низкий истинный»). Маркировать его следует в соответствии с надписью на рисунке. Горизонтальная линия над именем означает инверсию, т.е. на линии ВЫСОКИЙ уровень, когда ключ НЕ замкнут. Здесь просто надо запомнить, что наличие или отсутствие знака инверсии над именем говорит об уровне напряжения в линии, когда указанное состояние истинно _3 . В первый момент такая нотация кажется неестественной . Кажется, что будет проще отказаться от дополнительной инверсии и представлять сигналы в прямых обозначениях. Но из дальнейшего станет понятно, что «неестественный» путь бывает иногда удобнее.

Рис. 10.1 Активный низкий логический уровень

Цифровые элементы «знают», что за сигнал к ним приходит, откуда он. Здесь всё в точности, как в аналоговых схемах, где известно, что делает выход конкретного ОУ. Но цифровые компоненты вносят в эту картину определённое разнообразие. Цифровые линии могут передавать данные, имеющие различную интерпретацию в различные моменты времени (мультиплексирование), или менять направление передачи. Для выполнения подобных действий требуется дополнительная информация - биты статуса или направления. Примеры этой очень удобной возможности можно будет увидеть позднее. На данный момент условимся, что каждое конкретное устройство собрано, чтобы выполнять некоторую определённую задачу, и известно, что это за задача, откуда приходят данные и куда они уходят.

Чтобы свести новизну к простому случаю, введём термины «0» и «1». Эти символы используются в булевой логике для обозначения понятия «ЛОЖЬ» и «ИСТИНА» соответственно и иногда работают в электронике именно так. К сожалению, есть и другое представление, когда «0» = НИЗКИЙ, а «1» = ВЫСОКИЙ. В данной книге сделана попытка снять неоднозначность использованием для обозначения логических состояний термина «ВЫСОКИЙ» ( или символа «H» ) и «НИЗКИЙ» ( «L» ). Символы «0» и «1» будут употребляться только в случае отсутствия неоднозначности.

10.1.2.B Диапазоны напряжений для НИЗКОГО и ВЫСОКОГО уровня

В цифровых схемах потенциалы, представляющие ВЫСОКИЙ и НИЗКИЙ уровень, должны попадать в некоторый диапазон, определяемый конкретным логическим семейством _4 . Например, скоростная КМОП логика ( семейство «HC» ), которая работает при питании +5V , будет интерпретировать все входные потенциалы между землёй и +1.5 V как НИЗКИЙ уровень, а все напряжения между +3.5 и +5V , как ВЫСОКИЙ _5 . На входы обычно подают сигналы с выходов других микросхем, и выходные уровни у всех у них должны быть 0V для НИЗКОГО и +5V для ВЫСОКОГО с точностью до десятых долей вольта. Выход определяется насыщающимся транзистором, подтягивающим вывод к нужной шине питания ( см. рис. 10.25 ). Такие границы упрощают учёт производственного разброса, температурных колебаний, просадок под нагрузкой и при изменении питающего напряжения, а также допускают некоторый уровень «шума» и случайного «мусора» на сигнальных линиях, который складывается с полезным сигналом на логическом входе. Шум и мусор могут быть следствием емкостных или магнитных наводок, интерференции с внешними цепями и т.д. Схема, принимающая сигнал расценивает его как ВЫСОКИЙ или НИЗКИЙ уровень с учётом наложения перечисленных факторов _6 . До тех пор, пока шум не может изменить логическое состояние, всё нормально, и шум исключается из сигнала на каждом этапе преобразования, а «чистый» уровень сигнала восстанавливается. При таком примитивном уровне рассмотрения цифровую электронику можно считать свободной от шума и идеальной.

==705

Термин помехоустойчивость используется для описания максимального уровня постороннего сигнала ( в худшем сочетании ), при котором ещё возможна безошибочная работа логического элемента. Например, популярное некогда семейство «транзисторно-транзисторной логики» ( TTL ) имело именно эту проблему. Её помехоустойчивость составляла всего 0.4 V . ТТЛ вход расценивал напряжение ниже +0.8 V в качестве НИЗКОГО уровня, а любое напряжение выше +2.0 V в качестве ВЫСОКОГО, в то время как выходные уровни для наихудшего случая составляли всего +0.4 и +2.4 V соответственно ( см. врезку с описаниями логических уровней ). На практике помехоустойчивость была выше 0.4 V , потому что типичные логические уровни составляли +0.2 и +3.4 V , а порог переключения располагался в районе +1.3 V . Но в хорошей разработке надо ориентироваться на наихудшее сочетание параметров. Полезно учитывать, что различные семейства имеют различную помехоустойчивость. У КМОП она выше, чем у ТТЛ, а у сверхскоростной эмиттерно-связанной логики ( ECL ) она ниже. [*] Восприимчивость конкретной схемы к шуму зависит от многих факторов. Среди них амплитуда самого шума, которая зависит от жёсткости выходного каскада, индуктивности шин питания, наличия протяжённых линий связи, скорости переключения из одного логического состояния в другое. При быстром переключении возникают импульсные токи в шинах питания и, соответственно, выбросы напряжения на них, вызванные индуктивностью проводников и ёмкостным характером нагрузки. Эти проблемы подробно обсуждаются в Части 12 ( «Сопряжение логических сигналов» ).

[* Здесь стоит заметить, что хотя напряжения и в самом деле отличаются не сильно, но НИЗКИЙ уровень ТТЛ определяется низкоомным источником, который обязан принять ток со входа. То же можно сказать об ЭСЛ. Короче, всё у ТТЛ хорошо с помехоустойчивостью. ]

10.1.3 Кодирование чисел

Большая часть числовых данных, использовавшаяся до настоящего момента, не требовала дополнительных пояснений. Но вопрос с представлением чисел с помощью логических уровней достаточно сложный и интересный предмет. Скажем иначе: ранее отдельные биты использовались в качестве индикатора , а теперь требуются группы битов для представления чисел .

В десятичной системе ( с основанием 10 ) числа - просто цепочка цифр, каждая из которых умножается на соответствующую степень числа 10 , а потом эти произведения складываются вместе. \[ 137.06 = 1×10\space^2 + 3×10\space^1 + 7×10\space^0 + 0×10^{-1} + 6×10^{-2}. \]

[* Авторы путают понятие «десятичная» и «позиционная» система счисления и объясняют последнюю, называя её «десятичной». Но основание системы полностью независимо от метода представления числа, что они же с успехом и продемонстрируют на примере двоичной системы (с основанием 2 ). ]

Здесь требуются десять символов от «0» до «9» и множители в виде степеней 10 , причём множитель выбирается в зависимости от позиции цифры относительно десятичной точки. Если требуются числа, использующие два символа ( «0» и «1» ), то нужна двоичная система счисления или система с основанием 2 . Каждый 0 и 1 такого числа умножается на соответствующую степень числа 2 . \[ 1101\space_2 = 1×2\space^3 + 1×2\space^2 + 0×2\space^1 + 1×2\space^0 = 13\space_{10}. \]

Индивидуальные нули и единицы представляют один разряд ( бит ) двоичного числа. Нижний индекс при числе сообщает основание системы счисления и всегда выражается десятичным числом, чтобы избежать многозначности, ведь цифры-то все одинаковые.

Метод преобразования двоичных чисел в десятичные показан выше. Для преобразования в обратном направлении число последовательно делится на 2 [* или иное требуемое основание степени ] с получением остатков от деления [* они всегда меньше основания системы счисления ] . Таким образом, для преобразования \(13\space_{10}\) в двоичное представление надо:

 13/2 = 6  остаток  1  ,
  6/2 = 3  остаток  0  ,
  3/2 = 1  остаток  1  ,
  1/2 = 0  остаток  1  . 

Получили \(13\space_{10}=1101\space_2\). Примечательно, что ответ получен в обратном порядке - от младшего значащего разряда ( LSB ) к старшему ( MSB ).

10.1.3.A Шестнадцатеричное представление

Двоичное представление является естественным выбором для систем с двумя состояниями ( но это не единственный вариант, что будет показано ниже ). Двоичные числа получаются довольно длинными [* а главное унылыми - одни лишь нули и единицы - никакого разнообразия ] , поэтому их часто записывают в шестнадцатеричной форме, т.е. с основанием 16 . Каждой позиции итогового числа соответствует степень числа 16 , каждый шестнадцатеричный символ принимает значение от \(0\) до \(15\space_{10}\) (привычные цифры дополняются символами \(A_{16}\)...\(F_{16}\) для «цифр» \(10\space_{10}\) ...\(15\space_{10}\) ). Чтобы перевести двоичное число в шестнадцатеричной форме, надо разбить двоичные разряды, начиная с LSB, в группы по 4 бита и записать шестнадцатеричный эквивалент для каждой группы: \[ 707\space_{10} = 1011000011\space_2 \space (= 10\space 1100\space 0011\space_2) = 2C3\space_{16}\space. \]

==706

Шестнадцатеричное представление _7 хорошо подходит для популярного кратного «байту» ( 8 битам ) деления разрядной сетки современных вычислительных машин. Чаще всего можно встретить 8-, 16-, 32- и 64-разрядные процессорные слова ( 1, 2, 4 и 8 байт ). В шестнадцатеричном представлении на каждый байт нужно две цифры. Скажем, для микроконтроллера, имеющего 65536 байт памяти ( «64K» ), требуется 2-байтный адрес, т.к. 216=65536 . Младший адрес при этом равен 0x0000 , а старший - 0xFFFF , вторая половина адресного пространства начинается с 0x8000 , а последняя четверть - с 0xC000 .

Байт данных в памяти компьютера может представлять число или его часть, но, кроме того, он может означать нечисловые понятия. Примером может служить ASCII код для алфавитно-цифрового набора символов ( см.##§14.7.8 ). Строчная латинская «a» в нём представляется числом 0x61 ( 0110 0001 ), «b» - 0x62 и т.д., поэтому слово «four» можно сохранить в последовательных байтах памяти со значениями «0x66, 0x6F, 0x75, 0x72».

10.1.3.B Двоично-десятичные числа

Ещё одним способом представления чисел является двоичная кодировка каждой отдельной десятичной цифры. Метод носит название «двоично-десятичное кодирование» ( BCD ) и требует 4 двоичных разряда для одного десятичного. Например, \[ 137\space_{10} = 0001\space0011\space0111\space_{BCD}\space. \]

ЛОГИЧЕСКИЕ УРОВНИ

Рис. 10.2 показывает диапазоны напряжений, соответствующих двум логическим состояниям ( НИЗКОЕ и ВЫСОКОЕ ) для популярных семейств цифровой логики. Для каждого семейства необходимо указать допустимые величины входных и выходных напряжений для НИЗКОГО и ВЫСОКОГО состояния. Закрашенные области над шкалой напряжений указывает специфицированный диапазон вЫходных напряжений, которые выдаст микросхема в соответствующем состоянии, а пара стрелок показывает типичные уровни, встречающиеся на практике. Закрашенные области под шкалой указывают диапазон, в котором сигнал гарантированно будет воспринят как НИЗКИЙ или ВЫСОКИЙ, а стрелка отмечает типичное значение порога переключения , т.е. границы между НИЗКИМ и ВЫСОКИМ уровнем. Во всех случаях ВЫСОКИЙ уровень положительнее НИЗКОГО. Дополнительные сведения по упомянутым логическим семействам можно найти в табл. 10.1 и на рис. 10.26 , а детальное описание приводится в Части 12 .

Рис. 10.2 Напряжения логических уровней некоторых популярных семейств

Смысл терминов «минимальный», «типичный» и «максимальный» из электронных спецификаций требует некоторых пояснений. Дело в том, что производитель компонента гарантирует, что его параметры попадут в «вилку» минимум-максимум и будут группироваться возле «типичного» значения. Это значит, что типичные значения являются лишь приблизительными и всего лишь влияют на разработку устройства. Схема должна работать правильно в широком диапазоне специфицируемых значений от минимума до максимума, которые определяются технологическими возможностями производства. Хорошо спроектированная схема должна функционировать при самом плохом сочетании максимальных и минимальных значений. Такой подход известен под названием консервативная разработка ( для наихудших или гарантированных производителем параметров ). Именно так надо проектировать приборы, рассчитанные на сборку из обычных компонентов, не проходящих входной отбор.

Table 10.1 Selected Logic Families Family CO 0 =3 O 03 4— =3 C 03 Supply voltage (Vcc) Vin max fpd @ (ns, typ) Vcc (V) Available packages min (V) max (V) CL Q 1- if) o CM u 74HC00 9 2 6 Vcc 9 5 • • • 74AC00 5 3 6 Vcc 6 5 • • - 74AHC00 2 2 5.5 Vcc 3.7 5 • • • 74LV00 2 1.2a 5.5 5.5 3.6 5 • • • 74LVC00 4 1.7 3.6 5.5 3.5 _Q CO CO - • • 74ALVC00 3 1.7 3.6 3.6 2 3.3c - • - 74AUC00 1 0.8 2.7 3.6 0.9 1.8 - • • Notes: (a) NXP only (TI specs to 2V only). (b) 6ns @ 1.8 V. (c) 2.7ns @ 1.8 V.

==707

Отметим, что BCD кодировка - не то же самое, что двоичная, которая для предложенного примера будет \(137\space_{10} = 10001001\space_2\) . В BCD каждый разряда числа, начиная с LSB, соответствует следующему ряду значений: 1, 2, 4, 8, 10, 20, 40, 80, 100... Видно, что BCD относится к информационной ёмкости довольно расточительно, потому что 4 разряда могут представлять числа от 0 до 15 , а в BCD верхней границей является 9 . Тем не менее, BCD - идеальный формат, если требуется индицировать десятичные цифры, т.к. число в таком формате достаточно подать на дешифратор индикатора группами по 4 бита [* оно не требует перевода из одного основания в другое ] . По этой причине BCD часто используется при вводе-выводе числовой информации [*] . К сожалению, перевод из двоичного представления в BCD и обратно достаточно сложен. Поэтому, с учётом более удобной арифметики для чисто двоичных чисел, современные компьютеры конвертируют BCD в двоичное представление сразу после получения, а обратное преобразование ведут непосредственно перед выводом данных. Прикиньте, сколько бы выгоды получил homo sapiens , оперируя числами в 8- ( или 16- ) ричной системе _8 .

[*]
[* Личный опыт. Требовалось организовать легко читаемый вывод нескольких многоразрядных десятичных чисел, которые надо было заносить в лабораторный журнал в «естественной» ( десятичной ) форме. BCD кодировка оказалась чрезвычайно удобной для отображения сама по себе без каких-либо дополнительных преобразований.

Индикатор ( 4 линии по 12 цифр в BCD кодировке с возможностью увеличения ) прожил более 20 лет и пережил несколько полных переделок лабораторной электроники. Каждый десятичный разряд ( горизонтальное расположение, старшие разряды слева ) индицировался столбиком из четырёх лампочек ( сверху 8 , снизу 1 ), отвечающих за двоичные разряды. Получился очень простой индикатор с естественным расположением и десятичных, и двоичных разрядов, простой ( из-за отсутствия декодера и специального дисплея ), дешёвый, очень надёжный и чётко читаемый. Так как реализовано это всё было на обычных двоично-десятичных счётчиках пульсаций ( см. §10.5.2.B ), наращивать разрядную сетку можно было без труда. Использовалось это чудо в некоем физическом оборудовании в качестве многоканального регистратора событий. Дополнительным плюсом был примитивизм накопительного счёта-отображения ( без каких-либо стробов - только общий сигнал очистки ). В результате заполнение счётчика выглядело как цепочка светящихся столбиков, растущих в область старших разрядов, скорость мигания которых позволяла оценить интенсивность наблюдаемого процесса. ]

Упражнение 10.1
Преобразуйте в десятичную систему: (a) \(1110101.0110\space_2\), (b) \(11.01010101...\space_2\) (c) \(2A\space_{16}\) .
Преобразуйте в двоичное представление (a) \(1023\space_{10}\), (b) \(1023\space_{16}\) .
Преобразуйте в шестнадцатеричную систему: (a) \(1023\space_{10}\), (b) \(101110101101\space_2\), (c) \(61453\space_{10}\) .

10.1.3.C Числа со знаком

Прямой код со знаком
Раньше или позже в вычислительном устройстве потребуется как-то выразить через двоичное представление отрицательные числа. В самом простом случае достаточно будет выделить один бит (например, старший) под знак, а в оставшихся битах записать абсолютную величину числа. Такая форма называется «прямой код со знаком» и соответствует естественной форме записи чисел со знаком ( см. табл. 10.2 [* и §13.1.2 ] ). Данный формат применяется при выводе цифр на индикатор и в некоторых АЦП. В общем случае это не лучший выбор для представления чисел со знаком ( если исключить числа с плавающей запятой ), особенно если они будут участвовать в расчётах. Причин несколько. Сложная математика, и разные процедуры сложения и вычитания ( т.е. сложение не будет работать с отрицательными числами ). Кроме того, имеется два нуля ( +0 и –0 ), и надо учитывать данный факт, выбирая что-то одно.
Двоичный код со смещением
Вторым методом представления отрицательных чисел служит «код со смещением» . В нём из числа вычитается половина максимального представимого значения ( табл. 10.2 ). Преимуществом такого формата является сквозное изменение кода от самого отрицательного значения к самому положительному в виде простой арифметической прогрессии, как она реализована в обычном двоичном счётчике. MSB по-прежнему хранит информацию о знаке, а нулевое значение встречается только один раз. Код со смещением часто используется в аналого-цифровых преобразователях, но всё ещё неудобен для расчётов.
Код с дополнением до двух
Чаще всего используемый в двоичных арифметических устройствах код называется «дополнением до двух» . В нём положительное число представляется «как есть» - двоичным числом без знака. Изменения касаются представления отрицательных значений. Они выражаются двоичным числом, которое надо прибавить к положительному числу такой же величины [* по модулю ] , чтобы получить нуль. Для этого надо инвертировать все разряды положительного числа ( т.е. нули в каждом разряде заменяются единицами и наоборот, операция называется «дополнение до единицы» ) и добавить к результату единицу ( получается «дополнение до двух» ) _9 . По табл. 10.2 легко заметить, что «дополнение до двух» совпадает с «кодом со смещением» с точностью до MSB: он инвертирован. Как и в других кодовых схемах MSB хранит информацию о знаке. Здесь есть только один нуль, имеющий, к тому же, привычное представление - нули во всех разрядах ( как после операции «сброса» счётчика или регистра ). «Дополнение до двух» позволяет арифметическому устройству работать с положительными и отрицательными числами одинаковым образом, поэтому данная схема повсеместно используется при целочисленных расчётах 10 .

Table 10.2 4-Bit Signed Integers in Three Systems of Representation

Integer   Sign-magnitude  Offset binary     2's comp
  +7          0 111          1 111            0 111
  +6          0 110          1 110            0 110
  +5          0 101          1 101            0 101
  +4          0 100          1 100            0 100
  +3          0 011          1 011            0 011
  +2          0 010          1 010            0 010
  +1          0 001          1 001            0 001
   0          0 000          1 000            0 000
  -1          1 001          0 111            1 111
  -2          1 010          0 110            1 110
  -3          1 011          0 101            1 101
  -4          1 100          0 100            1 100
  -5          1 101          0 011            1 011
  -6          1 110          0 010            1 010
  -7          1 111          0 001            1 001
  -8            -            0 000            1 000
 (-0)         1 000            -                - 

==708

10.1.3.D Арифметика в формате с дополнением до двух

Арифметика в формате «с дополнением до двух» проста. Чтобы сложить числа, их просто надо поразрядно ( с переносом ) сложить:

5+(–2)=3 :
  0101  | +5
 +1110  | –2
 =0011  | +3 

Чтобы вычесть B из A , надо взять дополнение до двух от B и сложить его с A :

2–5=–3 :
 0010  | +2
+1011  | –5
=1101  | –3 

Отметим, что в последнем примере +5 =0101 , поэтому его поразрядная инверсия ( «дополнение до единицы» ) равно 1010 , а дополнение до двух (+1) 1011 . Умножение с числами в формате «с дополнением до двух» также работает правильно.

Упражнение 10.2
Проведите умножение +2 на –3 , где –3 представлено в виде «дополнения до двух».
Подсказка : ответ «–6».

Упражнение 10.3
Покажите, что дополнение до двух для –5 равно +5 .

При сложении или вычитании чисел можно получить переполнение [* число большее максимального ] или антипереполнение [* число меньшее минимального ] . Беззнаковое целое длиной n бит может принимать значения от 0 до 2(n-1) , а n-разрядное знаковое целое в коде «с дополнением до двух» может хранить числа от –2(n-1) до +2(n-1)–1 . Для 8 разрядов это диапазон 0...255 и –128...+127 . Чтобы понять вызывает ли операция над беззнаковыми числами переполнение (т.е. корректно ли действие), надо посмотреть, будет ли перенос из MSB. При знаковых операциях в формате «с дополнением до двух» ситуация несколько сложнее. Если знаковый разряд MSB изменяется переносами , т.е., если перенос в MSB не уравновешивается переносом из него, то результат ошибочен.

Упражнение 10.4
Проверьте это необычное условие, выполнив сложение в коде «с дополнением до двух» для каждой из предложенных знаковых пар, используя 4-разрядные слова: 7+(–6);  7+7;  7+4;  –7+(–8). Повторите те же действия с 5-разрядными словами. Во втором случае все ответы умещаются в разрядную сетку.

10.1.3.E Код Грея

Этот код среди прочего используется в механических линейных и угловых энкодерах и некоторых АЦП и носит название «кода Грея» 11 . Основное его свойство заключено в изменении только одного разряда при переходе из любого состояния к одному из двух соседних. Данное свойство гарантирует от появления случайного некорректного состояния битов при таком переходе. В противном случае в выходном потоке возможно появление промежуточных ошибочных состояний, т.к. невозможно гарантировать одновременность переключения всех разрядов одновременно на границе между двумя числами. При использовании простого двоичного кода возможно кратковременное появление на выходе состояния «7» при переключении из состояния «3» в состояние «4». Для создания кода Грея есть простое правило. Надо начать с кода «все нули». Для получения следующего состояния надо переключить самый младший бит, который позволит получить ещё не использовавшееся сочетание разрядов.

State   Binary    Gray
  0      000      000
  1      001      001
  2      010      011
  3      011      010
  4      100      110
  5      101      111
  6      110      101
  7      111      100 

На рис. 10.3 показан угловой энкодер с кодом Грея, который позволяет исключить появление ошибочных сочетаний при переходах. Код Грея можно составить для любого числа разрядов. Он находит применение и в «параллельных кодировщиках» ( их ещё зовут флэш-конверторы ) - скоростных АЦП, которые появятся в Части 13 . Разговор о взаимном преобразовании двоичного кода и кода Грея будет чуть дальше при разборе схемной реализации на рис. 10.10 .

Рис. 10.3 Два варианта 3-разрядных угловых энкодеров. Белые и чёрные сектора соответствуют нулевым и единичным состояниям разрядов 1 , 2 и 4 в выходном коде. В двоичном коде возможно появление ошибочных состояний, подобных переходу «1» → «2» (показан пунктиром), когда возможно одновременное изменение состояния нескольких битов. В коде Грея данная проблема отсутствует

10.1.4 Логические элементы и таблицы истинности

10.1.4.A Комбинационная логика и логика последовательного действия

Цифровая электроника - это игра, в которой надо собрать цифровой выход из цифровых же входов. Например, сумматор может получить на входе два 16-разрядных слагаемых и выдать 16-разрядную сумму и бит переноса. Или можно собрать умножитель. Всё это различные виды операций, которые должно выполнять арифметическое устройство. Другой задачей является сравнение двух чисел, для выяснения, какое из них больше, или сравнение константы со входным набором битов, чтобы понять, что «всё работает, как надо». А может, нужен бит чётности, чтобы добавить его к числу и получить чётное число единиц при передаче по каналу связи. На приёмном конце чётность может быть проверена и тем самым выяснена корректность данных. Ещё одной типовой задачей служит преобразование двоичного числа в десятичную форму для последующего вывода. Это всё примеры конкретных действий, в которых выход или выходы является заданной функцией от набора входов. Их общее название - комбинационные задачи 12 . Выполняться данные действия могут с помощью «комбинационной логики» - наборов логических элементов или вентилей , выполняющих элементарные действия в двоичных системах (с двумя состояниями).

==709

Есть ещё один класс задач, который не может быть решён комбинационной логикой из одного только набора входных сигналов, но нуждается в сведениях о предыстории текущего состояния. Разрешение данного затруднения требует использования «логики последовательного действия». Типичной задачей для таких компонентов может служить преобразование параллельных данных в последовательную форму (один после другого) или сохранение числа единиц в последовательности, либо обнаружение нужного сочетания битов, выдача одного импульса на четыре входных. Все эти задачи требуют какого-то элемента памяти. Базовым элементом такого типа является триггер или «бистабильный мультивибратор».

Знакомство начнётся с комбинационной логики, потому что это основа всех остальных её видов. Тему чуть оживит появление элементов последовательного действия, но особое удовольствие от самих логических элементов получить сложно.

10.1.4.B Элемент «ИЛИ»

На выходе элемента «ИЛИ» будет ВЫСОКИЙ уровень, если хотя бы один вход будет в ВЫСОКОМ состоянии. Данное условие можно записать в виде таблицы истинности , как на рис. 10.4 , где приводится такая таблица для 2-входового элемента «ИЛИ». В общем случае входов может быть сколь угодно много, но, если ограничиться корпусом стандартной логической микросхемы, то можно выбрать между двумя и одиннадцатью входами 13 . Например, для 4-входового «ИЛИ» выход будет ВЫСОКИМ, если ВЫСОКИЙ уровень имеется на любом из четырёх входов (или на нескольких входах одновременно).

Рис. 10.4 2-входовой элемент «ИЛИ» и его таблица истинности

В булевой алгебре для операции «ИЛИ» отведён символ «+». «A ИЛИ B» записывается как «A+B» в текстовой форме или как «A|B» в формате языков Verilog и Си.

10.1.4.C Элемент «И»

Выход элемента «И» Будет ВЫСОКИМ, только если все его входы имеют ВЫСОКОЕ состояние. Логический символ и таблица истинности приведены на рис. 10.5 . Так же, как и в случае схемы «ИЛИ», вентили «И» могут иметь 2, 3, 4 и более входов. Например, 8-входовой элемент «И» переведёт выход в ВЫСОКОЕ состояние, когда ВЫСОКИЙ уровень будет на всех восьми входах.

Рис. 10.5 2-входовой элемент «И» и его таблица истинности

В булевой алгебре для «И» используется символ точки (•). Он может быть опущен, и чаще всего опускается. «A И B» записывается «A•B» или просто «AB», а в Verilog или Си «A&B».

10.1.4.D Элемент «НЕ» (инвертор)

Часто требуется получить логическое дополнение некоторого состояния. Именно для этого и нужен инвертор - вентиль с одним входом и одним выходом (рис. 10.6 ).

Рис. 10.6 Схемный символ инвертора и его таблица истинности

==710

В булевой алгебре операция «НЕ» обозначается горизонтальной чертой над символом, а иногда знаком ('). «НЕ A» записывается как «\(\bar{A}\)» или «\(A'\)». Для удобства набора символ горизонтальной черты может заменяться прямым слэшем (/), минусом (-) и звёздочкой (*). Таким образом, «НЕ A» может записываться в форме «A'», «—A», «*A», «/A», «A*», «A/». Для конкретного документа обычно выбирается что-то одно. В данной книге инверсию обозначает слэш «/A». В языках программирования используются символы «!» или «~».

Смежная тема: время распространения.

В реальном мире логические элементы не меняют состояние выхода мгновенно при изменении состояния входа. Новости добираются со входа на выход за время, называемое «временем распространения» ( \(t_{pd}\) ). На рис. 10.7 даётся реальная картина для инверторов из пяти логических семейств, на вход которых подаётся один импульс длительностью 15 ns . Самые быстрые - новые низковольтные семейства «74AUC» и «74ALVC». Они имеют задержку распространения менее 2 ns .

Рис. 10.7 Физическим логическим элементам требуется некоторое время, чтобы отразить изменения на входе. На входы инверторов из нескольких популярных логических семейств были поданы активные НИЗКИЕ импульсы, чтобы оценить время задержки. Самое медленное семейство ( «74HCT» на входе сигнал с размахом 5V ) показало задержку 9 ns от нисходящего ( переднего ) фронта и 5 ns от восходящего ( заднего ). В итоге у него оказался самый короткий выходной импульс. По горизонтали 4 ns/div , по вертикали 5 V/div

10.1.4.E Элементы «И-НЕ», «ИЛИ-НЕ»

Инверсия может комбинироваться с другими логическими функциями и образовывать элементы «И-НЕ» и «ИЛИ-НЕ» (рис. 10.8 ), которые популярны больше, чем простые «И/ИЛИ». Дело в том, что инверсия позволяет строить на этих элементах любую логическую функцию, о чём позднее ещё будет разговор.

Рис. 10.8 Схемный символ «И-НЕ» и «ИЛИ-НЕ» и их таблицы истинности

10.1.4.F Элемент «ИСКЛЮЧАЮЩЕЕ-ИЛИ»

«ИСКЛЮЧАЮЩЕЕ-ИЛИ» ( XOR ) - очень интересная функция (рис. 10.9 ), хотя и не столь основополагающая, как «И» и «ИЛИ». Выход элемента «ИСКЛЮЧАЮЩЕЕ-ИЛИ» будет ВЫСОКИМ, если ВЫСОКИЙ любой из входов, но не оба вместе. Иначе говоря, выход ВЫСОКИЙ, если на входах различные состояния. У этого элемента бывает только два входа 14 . Элемент «ИСКЛЮЧАЮЩЕЕ-ИЛИ» идентичен сумматору «по-модулю-2». В булевой алгебре он имеет символ «⊕», а в языках программирования Verilog и Си обозначается знаком «⋀» 15 .

Рис. 10.9 Схемный символ «ИСКЛЮЧАЮЩЕЕ ИЛИ» и его таблица истинности

Упражнение 10.5
Покажите, как можно использовать «ИСКЛЮЧАЮЩЕЕ-ИЛИ» в качестве «управляемого инвертора», т.е. элемента, который инвертирует сигнал или передаёт его без инверсии в зависимости от состояния управляющего вывода.

Упражнение 10.6
Покажите, что схема 10.10 преобразует двоичное представление в код Грея и обратно.

Рис. 10.10 Преобразователи параллельных кодов: двоичного в код Грея и код Грея в двоичный

==711

10.1.4.G Языки описания аппаратуры

До настоящего момента для базовых логических функций использовались графические символы . Но когда вместо цифровых микросхем малой степени интеграции используются программируемые логические микросхемы (PLD, ##Часть_11), приходится описывать нужные логические функции текстом. Делается это с помощью языков описания аппаратуры ( HDL ). Обычно в этом качестве выступают Verilog и VHDL. Специальное программное обеспечение разбирает и преобразует текстовое описание и выдаёт файл, пригодный для загрузки в микросхему (или, если речь идёт о больших объёмах выпуска, то для изготовления заказных кристаллов). Таблица на рис. 10.11 показывает синтаксические различия в описании базовых логических операций между несколькими языками, используемыми для таких задач.

Рис. 10.11 Синтаксические различия в обозначении логических операций в исходных текстах языков описания аппаратуры и в книжном тексте. Язык CUPL использует те же обозначения, что и ABEL. Альтернативные символы для «И» «A•B», для «НЕ» - что-нибудь из списка «A'», «A*», «*A», «/A», «A/», «-A»

В качестве простого примера приведём описание схемы 10.10B , преобразующей код Грея в двоичный код на языке Verilog:

assign b3 = g3;
assign b2 = g2 ⋀ g3;
assign b1 = g1 ⋀ (g2 ⋀ g3);
assign b0 = g0 ⋀ (g1 ⋀ (g2 ⋀ g3)); 

10.1.5 Схемная реализация логических элементов

Прежде чем переходить к использованию логических микросхем, посмотрим, как можно реализовать логические функции на дискретных компонентах. На рис. 10.12 показана схема элемента «И». Если какой-то из входов подключить к НИЗКОМУ уровню, то на выходе будет НИЗКИЙ уровень. Выход перейдёт в ВЫСОКОЕ состояние, только если оба входа имеют ВЫСОКИЕ уровни. Схема рабочая, но недостатков у неё много.

Рис. 10.12 Схема «И» на диодах

  1. НИЗКИЙ вЫходной уровень на одно падение на диоде выше НИЗКОГО входного уровня. Очевидно, использовать несколько таких элементов последовательно не выйдет.
  2. У схемы отсутствует понятние «коэффициент разветвления» ( возможность подключения нескольких входов к одному выходу ), т.к. любая нагрузка на вЫходе видна источнику сигнала на входе.
  3. Схема медленная, т.к. сделана на резистивной подтяжке.

Вариант 10.13 исправляет некоторые недостатки. С помощью пары ключей на npn транзисторах делается вентиль «ИЛИ-НЕ», а дополнительный инвертор позволяет получить чистое «ИЛИ» 16 . ВЫСОКИЙ уровень на одном или двух входах включает какой-то из входных транзисторов и переводит их общий выход в НИЗКОЕ состояние. Т.к. получившийся логический элемент инвертирует сигнал, на выход добавлен ещё один инвертор.

Рис. 10.13 Резисторно-транзисторная логика. Из элемента «ИЛИ-НЕ» и дополнительного инвертора можно собрать «ИЛИ»

Логические схемы на биполярных транзисторах практически полностью вытеснены МОП логикой. На рис. 10.14 показан тот же элемент «ИЛИ», но с ключами на n-канальных МОП транзисторах. МОП вариант не потребляет ток по входу, но его входная ёмкость потребует обеспечить ток перезарядки при смене состояния. Но и у такой схемы остаются недостатки. Скорость по-прежнему ограничена, а потребляемая мощность велика ( из-за резистивной подтяжки ). Обе проблемы красиво решает комплементарная МОП ( КМОП ) схема в симметричном включении ( см. обсуждение в ##§3.4.4.A ).

Рис. 10.14 Логический элемент «ИЛИ» на n-МОП транзисторах. Разработчики цифровых схем упростили символ МОП транзистора и не рисуют вывод подложки. Вдобавок они рисуют символ затвора по центру, а вместо стрелки указывают кружок - символ инверсии, что можно наблюдать на нижних транзисторах пар на рис.##3.6

==712

Показанная схема на дискретных транзисторах проста для понимания, но вряд ли найдёт применение в жизни 17 из-за имеющихся недостатков. Исключая экзотические случаи, собирать логические схемы из дискретных компонентов не требуется, т.к. очень широкая номенклатура отличных логических элементов доступна в виде готовых микросхем. Сегодня практически все логические ИМС выпускаются по КМОП технологии. Посмотрите на рис.##3.91, чтобы вспомнить конструкцию КМОП элемента «И-НЕ».

10.1.6 Примеры схем на логических вентилях

Давайте изобразим схему, которая предлагалась в качестве примера в Части _1 и _2 . Она подаёт сигнал об открытой двери, если водитель занял своё место. Схема станет очевидна, если сформулировать задачу правильно: «Выдать ВЫСОКИЙ уровень, если левая ИЛИ правая дверь открыта И водитель сидит». Получаем Q=(L+R)S . В виде схемы решение показано на рис. 10.15 . Выход элемента «ИЛИ» принимает ВЫСОКОЕ состояние, если какая-либо ( или обе ) дверь открыта. В этом случае и при сидящем водителе выходной сигнал Q станет ВЫСОКИМ. Дополнительный транзистор поможет запустить таким сигналом звуковой излучатель или активировать реле 18 .

Рис. 10.15 Пример с автомобильными дверями. Схема для активных высоких сигналов

На практике кнопки, выдающие входные сигналы, скорее всего, замыкают соответствующую линию на землю, чтобы сократить, помимо прочего, число проводов. Это означает, что входной сигнал принимает НИЗКОЕ состояние, когда дверь открыта. Другими словами, имеем «активные низкие» сигналы. Давайте переделаем пример с учётом этого условия, а входные сигналы назовём /L, /R и /S .

Во-первых, надо знать, что какой-то сигнал от дверей имеет НИЗКОЕ состояние, т.е. нам требуется отлавливать состояние «оба входа ВЫСОКИЕ». Значит, требуется элемент «И». Подаём /L и /R на входы элемента «И». Его выход будет принимать НИЗКОЕ состояние, если какой-либо вход НИЗКИЙ. Назовём этот сигнал «/Какая-то-дверь». Теперь требуется, чтобы выполнялось условие /Какая-то-дверь= НИЗКИЙ и /S=НИЗКИЙ, т.е. требуется отлавливать состояние «оба сигнала НИЗКИЕ». Это элемент «ИЛИ». Схема показана на рис. 10.16 . Используется элемент «ИЛИ-НЕ», вместо вентиля без инверсии, чтобы на выходе схемы сигнал повторял логику схемы 10.15 : линия Q переходит в ВЫСОКОЕ состояние, когда заданное условие выполняется. Схема выглядит довольно странно: вместо «ИЛИ» стоит «И» и наоборот, если сравнивать со схемой 10.15 . Этот запутанный вопрос прояснит §10.1.7 , но сначала разберитесь с упражнением.

Рис. 10.16 Пример с автомобильными дверями. Активный низкий сигнал затрудняет прочтение схемы

==713

Упражнение 10.7
Разберитесь, что делают схемы на рис. 10.17

Рис. 10.17 Варианты включения логических элементов для упражнения 10.7

10.1.6.A Взаимные преобразования логических элементов

При создании цифровых схем учитывайте, что один вентиль можно переделать в другой. Например, требуется один элемент «И», но в наличии только половина 74LVC00 ( счетверённый вентиль «2И-НЕ» ). Его можно включить как на рис. 10.18 и получить искомое. Элемент на выходе работает в качестве простого инвертора, делая из «И-НЕ» просто «И». Следующие упражнения помогут закрепить материал.

Рис. 10.18 Превращение двух элементов «И-НЕ» в один «И»

Упражнение 10.8
Покажите, как, используя любое число 2-входовых элементов, сделать:
(a) инвертор из «ИЛИ-НЕ»;
(b) «ИЛИ» из «ИЛИ-НЕ» и
(c) «ИЛИ» из «И-НЕ».

Упражнение 10.9
Покажите, как сделать:
(a) 3-входовый «И» из 2-входовых «И»;
(b) 3-входовый «ИЛИ» из 2-выходвых «ИЛИ»;
(c) 3-входовый «ИЛИ-НЕ» из 2-выходовых «ИЛИ-НЕ» и
(d) 3-входовый «И» из 2-входовых «И-НЕ».

В общем случае для построения любой комбинационной функции достаточно одного типа инвертирующих вентилей ( например, «И-НЕ» [* имеет собственное имя «штрих Шеффера» и наряду со «стрелкой Пирса» - функцией «ИЛИ-НЕ» является базовым блоком для построения логических схем любой сложности, причём данный факт доказан математически ] ). Для неинвертирующих вентилей это утверждение неверно, потому что сделать из них элемент «НЕ» нельзя. Возможно, в этом кроется секрет большей популярности вентилей «И-НЕ» и «ИЛИ-НЕ».

10.1.7 Именование сигналов в соответствии с логикой высказываний

В вентиле «И» выход принимает ВЫСОКОЕ состояние, если оба входа имеют ВЫСОКИЙ уровень. Значит, если ВЫСОКИЙ означает «ИСТИННЫЙ», то выход переходит в ИСТИННОЕ состояние, только если оба входа ИСТИННЫЕ. Другими словами, в случае активной высокой логики вентиль «И» выполняет функцию «И». То же можно сказать и об «ИЛИ».

Что случится, если за ИСТИНУ будет принят НИЗКИЙ уровень? Элемент «И», на любом входе которого ИСТИННЫЙ ( НИЗКИЙ ) уровень выдаст ИСТИННЫЙ ( НИЗКИЙ ) на выход. Но это же функция «ИЛИ»?! Аналогично, вентиль «ИЛИ» выдаст ИСТИННЫЙ ( НИЗКИЙ ), только когда оба входа в ИСТИННОМ ( НИЗКОМ ) состоянии, т.е. работает как «И». Как это всё запутано!

Есть два пути решения проблемы. Первый - описанный ранее - выбрать вентиль, исходя из требуемого выходного уровня. Например, если требуется знать, что хотя бы один вход из трёх НИЗКИЙ, то надо брать 3-входовой элемент «И-НЕ». Кое-кто даже проектирует так схемы. В таком случае рисуется элемент «И-НЕ», хотя на самом деле выполняется операция «ИЛИ-НЕ» для активных низких входов. В этом случае схема будет выглядеть как на рис. 10.19 . Здесь /CLEAR, /MR и /RESET могут быть активными низкими сигналами, приходящими из разных точек схемы. Выход CLR - активный высокий, на котором появляется ВЫСОКИЙ уровень, когда какой-нибудь из входных сигналов переходит в НИЗКОЕ ( ИСТИННОЕ ) состояние.

Рис. 10.19 Затеняющее суть изображение элемента, выполняющего функцию «ИЛИ» для активных низких сигналов

Другим путём решения проблемы активных низких сигналов является переход к «логике высказываний» . Если вентиль выполняет функцию «ИЛИ» для активных низких входов, то и в схеме надо рисовать «ИЛИ» ( рис. 10.20 ). 3-входовый элемент «ИЛИ» с инвертированными входами функционально идентичен 3-входовому «И-НЕ». Данная эквивалентность в свою очередь является одним из логических тождеств, вытекающих из теоремы ДеМоргана ( DeMorgan ). Они будут озвучены позднее, сейчас достаточно знать, что можно превращать «И» в «ИЛИ» и обратно, если инвертировать все входные и выходные сигналы ( см. табл. 10.3 ). Логика высказываний выглядит поначалу отталкивающе, потому что уродует симпатичные изображения логических элементов. Но на самом деле она лучше, потому что в таком виде логическая функция вентиля выявляется чётче. Она вам понравится через некоторое время, и переходить на что-то другое не захочется.

Рис. 10.20 Использование символов инверсии на активных низких входах

==714

Давайте переделаем пример с автомобильными дверями, но уже с учётом логики высказываний ( рис. 10.21 ). Левый вентиль с активным низким выходом выясняет в ИСТИННОМ ли, т.е. в НИЗКОМ ли, положении L или R . Правый вентиль выставляет ВЫСОКИЙ уровень, если L или R и одновременно S в ИСТИННОМ, т.е. в НИЗКОМ, состоянии. Из теоремы ДеМоргана следует, что левый вентиль «И», а правый - «ИЛИ-НЕ», в точности, как в предыдущем варианте. Два важных замечания.

Рис. 10.21 Ещё раз про автомобильные двери. Логика высказываний исправляет сбивающую с толку схему 10.16

  1. Активный низкий ( или истинный низкий ) иногда называют «отрицательным истинным» , но это не означает, что логические уровни определяются отрицательным напряжением 19 . Это означает, что более низкий из двух уровней принят за значение «ИСТИНА»
  2. Схемное изображение вентиля предполагает активные высокие сигналы. Элемент «И-НЕ» может использоваться как «ИЛИ» для активных низких сигналов. Его можно рисовать как «И-НЕ» или, что лучше, в формате логики высказываний, т.е. как «НЕ-ИЛИ» со значками инверсии на входе ( с кружочками ). В последнем случае кружки воспринимаются как признак инверсии входных сигналов перед выполнением логической функции, следующей из символа вентиля. В нашем случае «ИЛИ», но уже для активных высоких сигналов 20 .

Возможно, правильнее было бы спросить, почему бы ни вести разработку, используя только активные высокие сигналы? Иногда выбор лимитирован самими используемыми компонентами ( например, чаще всего сброс в микроконтроллерах выполняется активным низким сигналом ), а случается, что, как в случае с дверями, удобнее использовать сигналы, замыкаемые на общую шину земли. И в любом случае надо уметь ориентироваться в цифровом мире, где есть и активные низкие, и активные высокие сигналы.

1 И их видео вариантами - DVD и BD (Blu-ray) дисками <-

2 Историю победы цифровых методов над аналоговыми можно было бы обозначить следующими этапами. 1970-е годы. Фотоизображения других планет, но домашняя жизнь продолжает оставаться в основном аналоговой. 1980-е годы. Цифровой звук ( CD ) и появление в домах компьютеров. 1990-е. Цифровое видео ( DVD ), сотовые телефоны, MP3. 2000-е. HDTV, беспроводная цифровая связь, цифровая фото- и видеосъёмка, скоростные интернет-каналы, Google. 2010-е. ( Ну, да. «Трудно предсказывать, особенно будущее» ). Повсеместное проникновение цифровых методов и сращивание информации и среды её доставки. <-

3 В дальнейшем будут встречаться термины «положительная истинность» и «отрицательная истинность» . Они используются для состояний ВЫСОКИЙ=ИСТИНА и НИЗКИЙ=ИСТИНА соответственно. Это вполне обычные термины, но смущают поначалу, особенно если отрицательных напряжений в системе нет. <-

4 Семейство - обычная форма реализации цифровых ИМС. Оно характеризуется рабочим напряжением, напряжениями логических уровней и быстродействием. По историческим причинам наименование большей части логических семейств начинается с префикса «74», за которым следует несколько букв, указывающих семейство, и несколько цифр, сообщающих логическую функцию. Логические функции были одинаковыми во всех семействах [* с префиксом «74» или «54» ] . Например, «74LVC08» - вентиль «И» с двумя входами ( четыре штуки в одном корпусе ), относится к низковольтному КМОП семейству ( «LVC» ), а «74» обозначает логическую микросхему, работающую в стандартном температурном диапазоне. <-

5 На врезке «Логические уровни» [* на стр. 706 ] есть дополнительные примеры. <-

6 Иногда цифровые сигналы передают по дифференциальным парам [* где логический уровень определяется разницей потенциалов двух линий, а не абсолютной величиной напряжения, как в несимметричном варианте ( SE ) ] . Такой способ очень популярен при дальней передаче высокочастотных сигналов и для линий, выходящих за пределы устройства, например, в быстрых последовательных шинах USB, Firewire или SATA. Так же раздаются высокочастотные тактовые сигналы. Популярным дифференциальным форматом является LVDS , в котором дифференциальные сигналы амплитудой ∼0.3 V группируются вокруг среднего уровня +1.25 V . <-

7 Шестнадцатеричные числа чаще всего представляются в следующих формах ( для \(2C3_{16}\) ): 2C3H и 0x2C3 без учёта регистра символов. [* Первый - ассемблерный, второй ( наиболее распространённый ) – «сишный». Во всех случаях число должно начинаться с легальной десятичной цифры, т.е. в «сишной» нотации выполняется всегда, а в ассемблерной требует лидирующего нуля перед числами, начинающимися с цифр \(A_{16}\)...\(F_{16}\) ] . <-

8 В первом варианте проще счёт, но длиннее запись. <-

9 Или иначе, можно рассматривать их в качестве простых беззнаковых величин, а MSB считать признаком отрицательного числа. <-

10 Но «числа с плавающей запятой» представляются в виде «знак величина», а именно знак-экспонента-мантисса . <-

11 Фрэнк Грей ( Frank Gray ) из Bell Telephone Laboratories получил патент на импульсную кодовую модуляцию ( PCM ) в 1953г. В нём был обнародован «новый код» для аналого-цифровых преобразований, который Грей назвал «зеркальный двоичный код» . Сейчас этот код зовут «кодом Грея» . Но на самом деле код был открыт ранее самим Эмилем Бодо ( из его фамилии вышел «бод» ), который применил его в телеграфии в 1878г. <-

12 Иногда называемые комбинаторными . <-

13 Альтернативой стандартной логике является «программируемая логика». В ней в одной недорогой микросхеме можно создавать свою схему из сотен или даже тысяч вентилей. Подробнее тема рассматривается, начиная с §10.5.4 и в ##Части_11. <-

14 Бывают и исключения. Элемент ’1G386 заявляется в качестве «3-входового элемента ИСКЛЮЧАЮЩЕЕ-ИЛИ». Его можно назвать 3-входовым генератором чётности. <-

15 В исходных текстах употребляется неудобный символ «^». Возможно, потому что он есть на клавиатуре. Обычно его используют для всяких модификаторов букв в иностранных языках, но изобретательные отцы языков программирования постоянно находят для него иное применение. В листингах будет применяться более симпатичный символ «⋀» и плевать на вой поклонников рафинированного Си. <-

16 Такая схема использовалась в резисторно-транзисторной логике, которая была популярна в 1960-х годах, но сейчас полностью вышла из употребления. <-

17 В некоторых промышленных устройствах, где первостепенное значение придаётся надёжности и простоте, можно обнаружить схему, подобную 10.13 , собранную на обычных транзисторах. В таких местах можно использовать транзисторы с интегрированными базовыми резисторами (или делителями). Такие компоненты называют «цифровыми транзисторами» , «транзисторами с заданным смещением» или просто «транзистор с резистором в базе» . Это очень дешёвые компоненты ( до $0.02 в количествах ). Выпускаются ON semiconductor, Diodes Inc., Rohm и др. <-

18 Конкретно эта логическая схема как раз выпускается, имеет компактный корпус и называется 74LVC1G3208 – «3-входовой положительный ИЛИ-И элемент». Только не думайте, что такой сервис доступен для всех нужных вам вентилей. <-

19 Неправильное прочтение может привести к серьёзным неприятностям. Одному неопытному студенту была выдана микросхема синтезатора частоты. Он прочёл руководство, после чего подал –5V на входы программирования. Восстановление сгоревшей платы заняло довольно много времени. <-

20 Функции «И» и «ИЛИ» из формальной логики не следует путать с юридическими конструкциями. В увесистом томе под названием «Слова и фразы» более 40 страниц отведено описанию ситуаций, в которых «И» может трактоваться как «ИЛИ». Среди прочего отыскалось настоящее сокровище:

«ИЛИ может толковаться как И, а И толковаться как ИЛИ в соответствии с требованиями конкретной ситуации» .


Это не то, о чём говорит теорема ДеМоргана! <-

Previous part:

Next part: