Основные логические понятия
8.01. Цифровые и аналоговые сигналы
Мы рассматривали до сих пор главным образом схемы, входные и выходные напряжения которых могли изменяться в определенном диапазоне значений: RC-цепи, интеграторы, выпрямители, усилители и т. п. Когда сигналы, с которыми приходится иметь дело, либо являются непрерывными по самой своей природе (например, звуковые), либо представляют собой непрерывно меняющиеся напряжения, поступающие от измерительных приборов (например, от устройств для измерения температуры или обнаружения светового излучения, биологических или химических зондов), это естественно.
Входной сигнал по своей природе может быть и чисто дискретным, например импульсы в детекторе частиц или «биты» информации, поступающие от ключа, клавиатуры или ЭВМ. В подобных случаях естественно и удобно использовать цифровую электронику, т. е. схемы, которые имеют дело с информацией, представленной в виде «единиц» или «нулей». Для того чтобы непрерывную (аналоговую) информацию можно было обрабатывать на ЭВМ или хранить в виде чисел, ее необходимо преобразовать в цифровую форму и наоборот (с помощью цифро-аналоговых ЦАП и аналого-цифровых АЦП-преобразователей). Характерным примером служит ситуация, в которой микропроцессор или ЭВМ воспринимает сигналы от экспериментальной или промышленной установки, на основе полученных данных управляет параметрами эксперимента и хранит полученные результаты для последующего использования в процессе эксперимента.
Другим интересным примером, который демонстрирует возможности цифровых методов, является передача аналоговых сигналов без искажений, связанных с воздействием помех. Например, звуковые и видеосигналы, передаваемые по кабелю или с помощью радиоволн, воспринимают «шум», который потом нельзя отделить от полезного сигнала. Если же передаваемый сигнал преобразовать в ряд чисел, определяющих его амплитуду в последовательные моменты времени, а затем эти числа передавать в виде цифровых сигналов, то аналоговый сигнал, восстановленный на приемной стороне (с помощью ЦАП), не будет содержать ошибок, если уровень шума в канале связи не настолько высок, чтобы помешать правильному распознаванию «единиц» и «нулей». Этот метод, известный под названием импульсно-кодовой модуляции (ИКМ), особенно эффективен в том случае, когда сигнал должен проходить через ряд ретрансляторов, например, при межконтинентальной телефонной связи, так как восстановление цифрового сигнала в каждом пункте ретрансляции гарантирует помехоустойчивую передачу. Космические зонды с помощью ИКМ передают на землю данные и изображения. Цифровая звукозапись в вашем доме размещается на 12-см оптических «компакт-дисках», которые хранят стереомузыкальные произведения в виде 16 разрядов каждые 23 мкс, порядка 6 млрд. бит информации на все.
Возможности цифровой аппаратуры настолько велики, что задачи, предназначенные, казалось бы, исключительно для аналоговых методов, гораздо лучше зачастую решаются цифровым путем. Например, в аналоговом измерителе температуры можно установить микропроцессор и память, в результате этого повысится точность измерений за счет компенсации нелинейности прибора. Подобные применения микропроцессоров стали обычным делом. Ввиду их широкой доступности. Однако вместо того, чтобы пытаться перечислить все случаи, где может применяться цифровая электроника, лучше перейдем к ее изучению, в процессе которого примеры будут возникать сами собой.
8.02. Логические состояния
Под цифровой электроникой мы имеем в виду схемы, для каждой точки которых можно определить, как правило, только два состояния, например транзистор может быть либо закрыт, либо насыщен. В качестве параметра обычно выбирают не ток, а напряжение, уровень которого может быть ВЫСОКИМ или НИЗКИМ. Эти два состояния могут представлять различные «биты» (binary digits — двоичные разряды) информации, например, следующим образом: один бит числа: ключ замкнут или разомкнут, присутствует или отсутствует сигнал, уровень аналогового сигнала выше или ниже заданного предела, некоторое событие произошло или не произошло, требуется или не требуется выполнять некоторые действия и т. п.
Высокий и низкий уровни. Состояния ВЫСОКОГО и НИЗКОГО уровней определяют некоторым заданным образом «истинные» и «ложные» значения в булевой алгебре. Если в какой-либо точке схемы истинное значение определяет ВЫСОКИЙ уровень, то говорят, что эта сигнальная линия использует «положительную логику» и наоборот. Пример «отрицательной логики» показан на рис. 8.1.
Рис. 8.1.
Когда состояние КЛЮЧ ЗАМКНУТ истинно, выход имеет НИЗКИЙ уровень. Выходной сигнал таким образом соответствует «отрицательной логике» (более правильным было бы название «нулевая логика», поскольку отрицательное напряжение в схеме отсутствует) и может быть обозначен, как показано на рисунке. (Черта над символом означает операцию НЕ, т. е. данная линия имеет ВЫСОКИЙ уровень, когда ключ не замкнут.) Запомните, что наличие или отсутствие черты отрицания над обозначением говорит о том, какой уровень (ВЫСОКИЙ или НИЗКИЙ) будет иметь данный провод, когда заданное условие (КЛЮЧ ЗАМКНУТ) истинно.
Цифровая схема «знает», что за сигнал она представляет по тому, откуда поступает этот сигнал, так же как в аналоговой схеме выход какого-либо операционного усилителя «представляет» определенную величину. Цифровые схемы, однако, обладают дополнительной гибкостью: иногда одни и те же сигнальные линии используются для передачи различных видов информации и для посылки ее в разных направлениях в различные моменты времени. Для того чтобы выполнить это «мультиплексирование», необходимо посылать дополнительную информацию (адресные биты или биты состояния). Далее будет показано много примеров, в которых используется это полезное свойство цифровой электроники, а пока будем считать, что любая схема предназначена для выполнения одной заданной функции и она «знает», откуда поступают входные и куда идут выходные сигналы.
Введем понятия 1 и 0, внеся некоторую путаницу в эту простую по существу операцию. Эти символы используются в булевой алгебре для обозначения утверждений ИСТИНА и ЛОЖЬ соответственно. В том же значении они иногда используются и в электронике, но, к сожалению, здесь они применяются также и в другом смысле, а именно: 1 означает ВЫСОКИЙ уровень, а 0 — НИЗКИЙ уровень. В этой книге мы постараемся избежать какой либо двусмысленности, будем использовать для обозначения логических состояний слова ВЫСОКИЙ уровень (или символ В) и НИЗКИЙ уровень (или символ Н) метод, который широко используется в электронной промышленности, а обозначения 1 и 0 будут применяться лишь в тех случаях, где их двусмысленное толкование исключается.
Диапазон напряжений высокого и низкого уровней. Как упоминалось в разд. 1.10, значения напряжений, соответствующих ВЫСОКИМ и НИЗКИМ уровням, могут колебаться в некотором диапазоне. Например, для высокоскоростной КМОП («НС») логики входные напряжения от уровня земли до 1,5 В представляются как НИЗКИЙ уровень, а напряжения в пределах 1,5 В от напряжения питания +5 В — как ВЫСОКИЙ уровень. Типичные напряжения НИЗКОГО и ВЫСОКОГО состояний составляют десятую долю В выше 0 и ниже 5 В соответственно (остаточное напряжение одного МОП-транзистора).
Такие широкие диапазоны выбраны для того, чтобы изготовитель микросхем имел в своем распоряжении определенный допуск, в пределах которого параметры схемы могли бы колебаться за счет изменения температуры, нагрузки, напряжения питания, а также под воздействием шумов, т. е. разнообразных паразитных сигналов, которые добавляются к рабочему сигналу при его прохождении через схему (за счет емкостных связей, внешних наводок и т. п.). Схема, получив сигнал, определяет, каков его уровень (ВЫСОКИЙ или НИЗКИЙ), и действует соответствующим образом. Если помеха не превращает 1 в 0 или наоборот, то все прекрасно и любые помехи отсеиваются на каждой ступени, поскольку на выходе схемы восстанавливаются «чистые» значения 1 или 0. Цифровая электроника в этом смысле не подвержена влиянию помех и является идеальной.
Термин помехоустойчивость используется здесь для обозначения максимального уровня помехи, которая, будучи добавлена к логическому сигналу при самых неблагоприятных условиях, не будет еще приводить к ошибочной работе схемы. Например, для элементов ТТЛ помехоустойчивость составляет 0,4 В, так как любой сигнал ниже 0,8 В интерпретируется ими как НИЗКИЙ уровень, а любой сигнал выше 2,0 В — как ВЫСОКИЙ, в то время как уровни выходных сигналов составляют в самом неблагоприятном случае +0,4 и +2,4 В соответственно (см. таблицу логических уровней в гл. 1). В действительности помехоустойчивость этих схем значительно выше приведенной величины, поскольку типичные значения ВЫСОКОГО и НИЗКОГО напряжений составляют +0,2 и 3,4 В, а входной порог принятия решения равен ~ 1,3 В. Однако необходимо помнить, что хорошая схема рассчитана на самый неблагоприятный случай. Не следует также забывать о том, что различные семейства логических элементов обладают различной помехоустойчивостью. Элементы КМОП имеют по сравнению с ТТЛ более высокую помехоустойчивость, а быстродействующие элементы ЭСЛ — более низкую. Конечно, восприимчивость к шуму цифровых систем зависит также от амплитуды шума, которая в свою очередь зависит от таких факторов, как параметры выходной ступени индуктивности проводников земли, существования длинных линий «шин», скорости нарастания на выходе во время логического перехода (когда из-за емкостной нагрузки возникают переходные токи, вызывающие выбросы напряжения линии земли). Мы будем касаться некоторых из этих проблем в разд. 9.11-9.13.
Логические уровни
Диаграмма на рис. 8.1, а показывает диапазоны напряжений, которые соответствуют двум логическим состояниям (ВЫСОКИЙ и НИЗКИЙ) для самых популярных семейств цифровой логики. Для каждого логического семейства необходимо определить допустимые значения как входных, так и выходных напряжений, соответствующих состояниям ВЫСОКИЙ и НИЗКИЙ. Закрашенная площадь выше линии показывает допустимый диапазон выходных напряжений, при котором гарантируются логические состояния НИЗКИЙ и ВЫСОКИЙ без ошибок, с двумя стрелками, указывающими типовые выходные значения (НИЗКИЙ и ВЫСОКИЙ), встречающиеся на практике. Закрашенная площадь ниже линии показывает диапазон входных напряжений, гарантирующий представление как НИЗКИЙ или ВЫСОКИЙ, со стрелкой, указывающей типовое напряжение логического переключения, т. е. линию, разделяющую уровни НИЗКИЙ и ВЫСОКИЙ. Во всех случаях логическое состояние ВЫСОКИЙ более положительно, чем логическое НИЗКИЙ.
Значения «минимальный», «типовой» и «максимальный» в электронных спецификациях требуют нескольких слов для пояснения. Наиболее просто, изготовитель гарантирует, что компоненты будут попадать в диапазон минимум-максимум с наибольшей вероятностью к «типовому». Это означает для типовых спецификаций, которые вы используете при проектировании схем, что эти схемы должны работать надежно внутри диапазона, задаваемого минимумом и максимумом. В частности, хорошо спроектированная схема должна функционировать при всех возможных комбинациях минимальных и максимальных значений (даже на самый плохой случай).
Рис. 8.1, а
8.03. Числовые коды
В большинстве случаев рассмотренные выше условия, которые могут быть представлены цифровыми уровнями, просты и наглядны. Более сложный и интересный вопрос заключается в том, как с помощью цифровых уровней представить часть числа.
Десятичное (с основанием 10) число представляет собой строчку из цифр и (при этом) подразумевается, что они должны быть умножены на последовательные степени числа 10 для образования индивидуальных произведений, а затем вместе сложены. Например, 137,06 = 1·102 + 3·101 + 7·100 + 0·10-1 + 6·10-2. Для записи числа требуется десять символов (от 0 до 9), а степень числа 10, на которую должна быть умножена цифра, определяется ее положением по отношению к десятичной запятой. Если мы хотим представить число с помощью только двух символов (0 и 1), то такая система счисления будет называться двоичной или системой с основанием 2. В этом случае каждая 1 или 0 будет умножаться на последовательные степени числа 2. Например,
11012 = 1·23 + 1·22 + 0·21 + 1·20 = 1310.
Отдельные «единицы» и «нули» в записи, представляющей двоичное число, называются «битами» (от слов binary digits — двоичный разряд). Индекс (записываемый всегда по основанию 10) указывает, какая используется система счисления. Он часто бывает нужным для того, чтобы избежать путаницы, так как все символы выглядят одинаково. Только что описанным методом мы преобразовали число из двоичной формы в десятичную. Для того чтобы произвести обратное преобразование, десятичное число нужно последовательно делить на 2, каждый раз записывая остаток. Для преобразования числа 1310 в двоичное нужно произвести следующие операции: 13/2 = 6, остаток 1; 6/2 = 3, остаток 0; 3/2 = 1, остаток 1; 1/2 = 0, остаток 1; это дает 1310 = 11012. Заметим, что ответ образуется, начиная с младшего значащего разряда (МЗР).
Шестнадцатеричное представление чисел. Для описания систем только с двумя состояниями естественно применять двоичные числа. Однако, как будет показано ниже, это не единственный способ.
Поскольку двоичные числа имеют большую длину, для их записи используется шестнадцатеричное (с основанием 16) представление. Для записи двоичного числа в шестнадцатеричном коде его разбивают на группы по 4 бит, каждая из которых может принимать значения от 0 до 15. Поскольку для обозначения каждой шестнадцатеричной позиции мы хотим использовать один символ, величины 10–15 будем обозначать буквами латинского алфавита от А до F:
70710 = 10110000112 = (10110000112) = 2С316.
Шестнадцатеричное представление лучшим образом соответствует байтовой (1 байт = 8 бит) структуре ЭВМ, которая чаще всего реализуется в виде 16- или 32-разрядных машинных «слов», при этом каждое слово состоит из 2 или 4 байтов. Буквенно-цифровые знаки (буквы, цифры или символы) представляются в виде одного байта. Таким образом, каждый байт в шестнадцатеричной системе состоит из двух шестнадцатеричных цифр, 16-разрядное машинное слово из 4-х шестнадцатеричных цифр и т. д.
Например, в широко используемом коде ASCII (см. разд. 10.19) малое «а» в ASCII-представлении есть 01100001 (61 в шестнадцатеричном коде, который записывается как 61Н), «Ь» есть 62Н и т. д. Таким образом, слово "nerd" может быть сохранено в двух 16-битных словах, которые имеют значения 6D65H и 7274Н. Как другой пример, размещение памяти в компьютере с памятью 64К (65536 байт) может определяться 2-байтным адресом, поскольку 216 = 65536, наинизший адрес есть 0000Н, наивысший — FFFFH, вторая половина памяти начинается с 8000Н, а четвертая четверть памяти — с СОООН. Вы случайно можете встретить «восьмеричную» запись (основание 8), к сожалению, в ранних ЭВМ были приняты 12- и 32-разрядные слова, которые использовали 6-разрядное представление буквенно-цифровых знаков. Поскольку 6-разрядные знаки было логично представлять в восьмеричном коде, внедрилась эта система счисления. Она сохранилась до настоящего времени и с успехом применяется для записи двоичных чисел, однако зачастую может создавать определенные неудобства.
Упражнение 8.1. Запишите восьмеричное представление в коде ASCII символов " а " и " Ь ", используя шестнадцатеричное значение, приведенное ранее. Затем запишите восьмеричное представление 16-разрядного Слова, составленного из двух байт вместе " ab "». Почему они различаются? Определите, каким будет восьмеричное представление 16-разрядного слова, содержащего сочетание " Ьа " в коде ASCII.
Двоично-десятичный код. Другим методом представления чисел является двоичное кодирование каждой десятичной, цифры, записываемой в виде группы из 4 двоичных разрядов. Например, 13710 = 0001 00110111 (двоично-десятичный код). Заметим, что двоично-десятичное представление числа не эквивалентно двоичному, которое в данном случае будет иметь вид: 13710 = 100010012. Можно считать, что разряды двоично-десятичного кода, начиная с правого, выражают числа 1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800 и т. д. Очевидно, что двоично-десятичное кодирование с точки зрения использования двоичных разрядов не экономично, поскольку каждая группа из 4 бит способна представлять числа от 0 до 15, но используется для записи числа, не превышающего 9 (за исключением редкого случая записи цифровой информации с четным паритетом на 7-дорожечную магнитную ленту). Двоично-десятичное кодирование очень удобно в тех случаях, когда требуется воспроизвести число в десятичной форме, так как в этом случае каждый двоично-десятичный символ нужно лишь преобразовать в соответствующее десятичное число, а затем вывести его на индикацию. (Для выполнения этой функции существуют специальные ИМС; в одном небольшом корпусе с простой топологией они содержат дешифратор двоично-десятичного кода, формирователи сигналов, буферный регистр и индикатор. На вход такой схемы нужно лишь подать логические уровни двоично-десятичного символа, после этого на ней высвечивается соответствующая цифра). По этой причине двоично-десятичное кодирование используется обычно при вводе и выводе цифровой информации. К сожалению, преобразование между двоично-десятичным и чисто двоичным кодом сложно, так как каждая десятичная цифра зависит от состояния почти всех двоичных разрядов и наоборот. Тем не менее двоичная арифметика настолько эффективна, что в большинстве ЭВМ вся входная информация преобразуется в двоичную форму, а обратное преобразование производится лишь при ее выводе. Представьте себе, сколько усилий было бы сэкономлено, если бы Homo sapiens имел 8 или 16 пальцев!
Упражнение 8.2. Преобразуйте в десятичный код следующие числа: а) 1110101,0110 2 , б) 11,01010101 2 , в) 2А Н . Преобразуйте в двоичный код следующие числа: а) 1023 10 , б) 1023 16 . Преобразуйте в шестнадцатеричный код следующие числа: а) 1023 10 , б) 101110101101 2 , в) 61453 10 .
Числа со знаком. Прямой (знаковеличинный) код. Рано или поздно возникнет необходимость представлять отрицательные числа в двоичном коде; в первую очередь это потребуется в устройствах, которые выполняют вычислительные операции. Самое простое — отвести один разряд (скажем, старший) под знак числа, а остальные использовать для представления его величины. Этот способ называется знаковеличинным или прямым кодом и соответствует обычной записи числа со знаком (табл. 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-разрядную сумму (плюс перенос). Можно сделать также схему для умножения двух чисел. Такого типа операции должен уметь выполнять процессор ЭВМ. Другая задача — сравнение двух чисел с целью удостовериться в том, что «все системы действуют нормально». Возможно, вы захотите дополнить паритетным битом число, подлежащее передаче по каналу связи, так, чтобы общее количество «единиц» в нем стало четным: проверка паритета на приемной стороне обеспечивает простой контроль правильности передачи. Еще одна типичная задача заключается в том, чтобы взять какие-либо числа, выраженные в двоичном коде, а затем воспроизвести их на экране, отперфорировать или отпечатать в виде десятичных знаков. Состояние выхода (или выходов) во всех этих задачах является предопределенной функцией состояния входа или входов. Задачи, относящиеся к этому классу, называются «комбинационными» и могут быть решены с помощью вентилей — устройств, которые выполняют операции булевой алгебры в системах с двумя состояниями (двоичных).
Существует другой класс задач, которые нельзя решить лишь путем формирования комбинационных функций текущих значений входных сигналов и которые требуют знания их прежнего состояния. Для решения этих задач необходимо применять «последовательные» схемы. К задачам такого типа относится преобразование строки двоичных разрядов из последовательной формы (один разряд следует за другим во времени) в параллельную группу разрядов, подсчет числа единиц, распознавание заданной определенной кодовой комбинации и последовательности битов, или, например, формирование одного выходного импульса после поступления четырех входных. Для решения всех этих задач требуется в какой-либо форме цифровая память. Основным устройством для построения этой памяти служит триггер (или мультивибратор с двумя устойчивыми состояниями). Рассмотрим вначале вентили и комбинационную логику, так как они являются основой для построения любых цифровых схем. При переходе к последовательным логическим устройствам мир цифровой техники станет значительно более интересным, однако и вентили сами по себе также весьма любопытны.
Вентиль ИЛИ . Выход вентиля ИЛИ имеет ВЫСОКИЙ уровень, если хотя бы на одном из его входов присутствует ВЫСОКИЙ уровень. Это можно выразить с помощью «таблицы истинности», представленной на рис. 8.2, где показан вентиль ИЛИ на 2 входа. В общем случае число входов не ограничено, однако в стандартном корпусе микросхемы обычно размещаются четыре 2-входовых вентиля, три 3-входовых или два 4-входовых. Например, на выходе 4-входового вентиля ИЛИ ВЫСОКИЙ уровень будет присутствовать в том случае, если он подан на любой из его входов. Для обозначения операции ИЛИ в булевой алгебре используется символ +. Функция «А ИЛИ В» записывается как А + В.
Рис. 8.2.
Вентиль И . Выход вентиля И имеет высокий уровень только в том случае, если ВЫСОКИЙ уровень присутствует на обоих его входах. Символическое изображение вентиля и его таблица истинности даны на рис. 8.3. Вентили И, выпускаемые промышленностью также как и вентили ИЛИ, могут иметь 3, 4, а иногда и большее число входов. Например, 8-входовой вентиль И вырабатывает на выходе ВЫСОКИЙ уровень только в том случае, если на всех его входах действует ВЫСОКИЙ уровень. Для обозначения операции И в булевой алгебре используется точка (·), которая может быть опущена, функция «А и В» записывается как А·В, или просто АВ.
Рис. 8.3.
Инвертор (функция НЕ ). Иногда бывает нужно получить дополнение (инверсию) логического сигнала. Эту функцию выполняет инвертор — вентиль, который имеет только один вход (рис. 8.4). Для обозначения операции НЕ в булевой алгебре используется черта над символом или апостроф; «НЕ А» записывается как А¯ или А'. Для удобства вместо " для указания отрицания часто используются символы /, *, —, '; таким образом, НЕ А можно записать любым из следующих способов: А', —А, *А, /А, А*, А/. Мы используем в этой книге запись А'.
Рис. 8.4.
И-НЕ и ИЛИ-НЕ . Вентили могут совмещать инвертирование с выполнением функций И и ИЛИ. Далее будет показано, что такие вентили имеют более широкое распространение, чем просто И и ИЛИ (рис. 8.5).
Рис. 8.5.
Исключающее ИЛИ . Большой интерес представляет логическая функция «Исключающее ИЛИ», хотя она не относится к числу основных (рис. 8.6). На выходе вентиля «Исключающее ИЛИ» ВЫСОКИЙ уровень сформируется в том случае, если он будет подан на один из его входов (но не на оба одновременно). Другими словами, ВЫСОКИЙ уровень действует на выходе тогда, когда входы имеют различное состояние. Этот вентиль может иметь только два входа. Операция «Исключающее ИЛИ» подобна сложению двух бит по модулю 2.
Рис. 8.6.
Упражнение 8.5. Покажите, как вентиль «Исключающее ИЛИ» может быть использован в качестве «модифицируемого инвертора», который в зависимости от уровня на управляющем входе, может либо инвентировать входной сигнал, либо передавать его на выход без инверсии (буферировать).
Упражнение 8.6. Проверьте, действительно ли схемы, изображенные на рис. 8.7, преобразуют двоичный код в код Грея и наоборот.
Рис. 8.7. Параллельные преобразователи двоичного, кода в код Грея ( а ) и кода Грея в двоичный ( б ).
8.05. Схемы вентилей на дискретных элементах
Прежде чем перейти к вопросу использования вентилей, рассмотрим, как они строятся с помощью дискретных элементов. На рис. 8.8 показан диодный вентиль И.
Рис. 8.8.
Если на каком-либо его входе действует НИЗКИЙ уровень, то он будет действовать и на выходе, а ВЫСОКИЙ уровень на выходе возникает только в том случае, если он будет присутствовать на обоих входах. Эта схема обладает рядом недостатков: а) НИЗКИЙ уровень на выходе выше НИЗКОГО уровня на входе на величину падения на диоде. Естественно, слишком много диодов ставить нельзя, б) отсутствует «разветвление по выходу», т. е. возможность питать одним выходом несколько входов, так как выходная нагрузка действует на входной сигнал, в) низкое быстродействие, обусловленное резисторной нагрузкой. Вообще логические схемы, построенные на дискретных элементах, не обладают теми свойствами, которые присущи ИМС. Преимущества логических схем на ИМС связаны отчасти с применением специальной технологии (например, ионная имплантация), которая позволяет получать хорошие характеристики.
Простейшая схема транзисторного вентиля ИЛИ-НЕ показана на рис. 8.9.
Рис. 8.9.
Эта схема использовалась в семействе логических элементов РТЛ (резисторно-транзисторная логика), которые из-за низкой стоимости были популярны в 1960-х годах, но в настоящее время они совершенно не употребляются. ВЫСОКИЙ уровень, действующий по любому входу (или по обоим одновременно), откроет хотя бы один транзистор и на выходе возникнет НИЗКИЙ уровень. Поскольку по своей сути такой вентиль является инвертирующим, то для того, чтобы получить из него вентиль ИЛИ, к нему нужно добавить инвертор, как показано на рисунке.
8.06. Пример схемы с вентилями
Теперь попробуйте создать схему, которая решала бы логическую задачу, приведенную в качестве примера в гл. 1 и 2: гудок автомобиля должен включаться, когда открыта любая дверь, а водитель сидит в машине. Ответ будет очевидным, если сформулировать эту задачу таким образом: «На выходе действует ВЫСОКИЙ уровень, если открыта левая ИЛИ правая дверь И водитель сидит в машине», т. е. Q = (L + R)S. Как решать эту задачу с помощью вентилей, показано на рис. 8.10.
Рис. 8.10.
Выход ИЛИ имеет ВЫСОКИЙ уровень, когда одна ИЛИ другая дверь (или обе вместе) открыты. Если это так И водитель сидит в машине, Q имеет высокий уровень. Добавив транзистор, можно сделать так, чтобы эта схема включала гудок или замыкала контакт реле.
В реальных устройствах ключи, которые вырабатывают входные сигналы, обычно замыкают цепь на землю. (Это делается для сокращения монтажных связей, а также по другим причинам, которые, в частности, связаны с использованием широко распространенных логических элементов типа ТТЛ и вскоре будут рассмотрены.) Это означает, что при открывании дверей сигналы на входах будут иметь НИЗКИЙ уровень, т. е. мы будем иметь входы, использующие отрицательную логику. С учетом этого построим для данного примера новую схему, обозначим ее входы через L', R' и S'. Сначала здесь нужно определить, действует ли НИЗКИЙ уровень на каком-либо из входов (L', R'), связанных с дверцами автомобиля, т. е. состояние «оба входа имеют ВЫСОКИЙ уровень» нужно отличать от остальных. Это выполняется с помощью схемы И, следовательно, сигналы L и R' нужно подать на входы вентиля И. Выход будет иметь НИЗКИЙ уровень, когда любой из входов имеет НИЗКИЙ уровень. Назовем эту функцию ЛЮБОЙ'.
Теперь определим состояние, когда сигналы ЛЮБОЙ' и S' имеют НИЗКИЕ уровни, т. е. нужно отличить от остальных состояние, когда «оба входа имеют НИЗКИЙ уровень». Эта операция выполняется с помощью вентиля ИЛИ. Полученная схема показана на рис. 8.11.
Рис. 8.11.
Вместо вентиля ИЛИ мы пользовались вентилем ИЛИ-НЕ для того, чтобы иметь такой же выход, как и в предыдущей схеме, т. е. ВЫСОКИЙ уровень Q при желаемом состоянии. Но здесь произошло что-то странное: по сравнению с предыдущей схемой вместо вентиля И мы воспользовались вентилем ИЛИ (и наоборот). Этот случай подробно рассмотрим в разд. 8.07.
Упражнение 8.7. Определите, какие функции выполняют схемы, изображенные на рис. 8.12.
Рис. 8.12.
Взаимозаменяемость вентилей. При построении цифровых схем надо помнить, что из вентиля одного типа можно получить вентиль другого типа. Например, если вам нужен вентиль И, а у вас есть половина стандартной ИМС 7400 (4 И-НЕ на два входа), то вы можете произвести замену, как показано на рис. 8.13.
Рис. 8.13.
Второй вентиль используется в качестве инвентора, в результате этого получается функция И. Лучше понять эту идею вам помогут следующие упражнения.
Упражнение 8.8. Покажите, как сделать с помощью 2-входовых вентилей: а) НЕ из вентилей ИЛИ-НЕ, б) ИЛИ из вентилей ИЛИ-НЕ и в) ИЛИ из вентилей И-НЕ.
Упражнение 8.9. Покажите, как сделать: а) 3-входовую схему И с помощью схемы И на два входа, б) 3-входовую схему ИЛИ с помощью схемы ИЛИ на два входа, в) 3-входовую схему ИЛИ-НЕ с помощью схем ИЛИ-НЕ на два входа, г) 3-входовую схему И с помощью схемы И-НЕ на 2 входа.
Путем многократного использования инвентируемого вентиля (например, И-НЕ) одного типа можно реализовать любую комбинационную функцию. Однако это не относится к неинвентирующему вентилю, так как с его помощью функцию НЕ никаким способом получить нельзя. Именно по этой причине скорее всего вентили И-НЕ получили наибольшее распространение в логических схемах.
8.07. Логические обозначения при заданных уровнях
Вентиль И будет иметь ВЫСОКИЙ уровень на выходе, когда ВЫСОКИЙ уровень будет действовать на обоих его входах. Если ВЫСОКИЙ уровень обозначает «истину», то «истина» будет на выходе в том случае, если она присутствует на всех входах. Другими словами, при использовании положительной логики вентиль И выполняет логическую функцию И. То же самое касается и вентиля ИЛИ. Что произойдет, если «истину» будет обозначать НИЗКИЙ уровень, как это было в предыдущем примере? Вентиль И даст на выходе НИЗКИЙ уровень, если на любом из его входов была «истина» (НИЗКИЙ уровень), но это функция ИЛИ. С другой стороны, вентиль ИЛИ сформирует НИЗКИЙ уровень лишь в том случае, если «истина» будет на обоих его входах. Но это функция И! Какая путаница!
Существует два пути для разрешения этой проблемы. Первый заключается в том, что уяснив себе суть данной задачи цифрового проектирования, разработчик выбирает такой тип вентиля, который позволит получить требуемый выход, что и было сделано нами ранее. Например, если вам нужно определить, имеет ли один из трех входов НИЗКИЙ уровень, используйте 3-входовой вентиль И-НЕ. По всей вероятности, этим методом пользуется большинство разработчиков цифровых схем. Следуя этим путем, вы начертите вентиль И-НЕ, даже если по отношению к своим входам он выполняет функцию ИЛИ-НЕ (при отрицательной логике). Вероятно, вы при этом обозначите входы, как показано на рис. 8.14.
Рис. 8.14.
В данном примере сигналы сброса — СБРОС' (CLEAR)', ОС' — ОБЩИЙ СБРОС, MR' (master reset) и УСТАНОВКА В «0» (RESET), поступающие из различных точек схемы, будут иметь уровни отрицательной логики. Выходной сигнал СБРОС, представленный в положительной логике, будет подаваться на различные устройства, которые должны сбрасываться, если любой из сигналов установки в исходное состояние имеет НИЗКИЙ уровень («истина»).
Другой способ решения задачи сигналов отрицательной логики состоит в использовании метода «заданных уровней». Если вентиль И выполняет функцию ИЛИ, используя на входах отрицательную логику, то изобразите его, как показано на рис. 8.15.
Рис. 8.15.
Вентиль ИЛИ на 3 входа с отрицательными входными сигналами аналогичен по выполняемой функции 3-входовому вентилю И-НЕ. Эта эквивалентность представляет собой важный принцип — свойство логических цепей, который называется теоремой Моргана. Ниже мы кратко рассмотрим некоторые полезные соотношения, идентичные цепи, а сейчас вам достаточно знать, что вы можете заменять И на ИЛИ и наоборот, проинвертировав при этом выход и все входы. На первый взгляд логика заданных уровней может показаться малопривлекательной, поскольку при ее использовании начертание вентилей приобретает странный вид. Но она лучше, чем рассмотренный выше способ, так как логические функции в такой схеме ясно обозначены, применяя эту схему в течение некоторого времени, вы найдете, что она весьма удобна, и не захотите использовать ничего другого. Попробуйте снова решить пример с автомобильной дверцей с помощью логики заданных уровней (рис. 8.16).
Рис. 8.16.
Левый вентиль определяет, когда L или R имеют «истинное» значение (т. е. НИЗКИЙ уровень), и вырабатывает выходной сигнал в отрицательной логике. Второй вентиль дает на выходе ВЫСОКИЙ уровень, если оба входных сигнала (L + R) имеют «истинное» значение, т. е. НИЗКИЙ уровень. Согласно теореме Моргана (через некоторое время она вам уже не потребуется, так как вы будете опознавать эти вентили как равноценные), первый вентиль представляет собой И, а второй вентиль ИЛИ точно так же, как и в ранее изображенной схеме. Следует отметить здесь два важных момента:
1. Термин «отрицательная логика» не означает, что логические уровни имеют отрицательную полярность. Он лишь говорит, что «истинное» утверждение определяется тем из двух состояний, которое имеет меньший уровень (НИЗКИЙ).
2. При символическом изображении вентиля предполагается, что он использует положительную логику. Выполняющий функцию ИЛИ для сигналов отрицательной логики вентиль И-НЕ, может изображаться либо как И-НЕ, либо с использованием логики заданных уровней с обозначением в форме ИЛИ с символами инверсии на входах (маленькие кружки). В последнем случае эти кружки обозначают инверсию входных сигналов, которые поступают на вентиль ИЛИ, работающий при положительной логике, согласно первоначальному определению.
Примечание. Логические функции И и ИЛИ не следует путать с указанными в законах эквивалентными понятиями. В увесистом томе правил, известном под названием «Слова и фразы», свыше 40 страниц посвящается ситуациям, в которых И можно использовать как ИЛИ.
Например, «ИЛИ в случае необходимости можно трактовать как И, а И как ИЛИ». Однако это не имеет ничего общего с теоремой Моргана!
ТТЛ
и
КМОП
ТТЛ (транзисторно-транзисторная логика) и КМОП (комплементарные МОП-структуры) представляют собой в настоящее время два наиболее распространенных семейства логических элементов. Огромное количество ИМС обоих семейств, выполняющих самые разнообразные функции, выпускаются по меньшей мере десятью фирмами. С помощью этих семейств можно удовлетворить все потребности, которые возникают при построении цифровых схем и устройств. Исключение может составить область схем большой степени интеграции (БИС), в которой преобладают МОП-структуры и сверхбыстродействующая логика, в которой господствуют приборы из арсенида галлия и эмиттерно-связанная логика (ЭСЛ). В дальнейшем в основном будут рассматриваться эти семейства.
8.08. Каталог идентичных вентилей
В табл. 8.2 приведены идентичные вентили, которые существуют в семействах логических элементов ТТЛ и КМОП. Каждый вентиль изображается в своей нормальной форме (для положительной логики), и кроме того, показано, как он выглядит при использовании отрицательной логики. В последней строке приведен вентиль И-ИЛИ-НЕ.
Небольшие пояснения: цифровая логика представлена в 10 популярных «субсемействах» (КМОП: 4000В, 74С, 74НС, 74НСТ, 74АС, 74АСТ; И ТТЛ: 74LS, 74ALS, 74AS, 74F), каждое из которых выполняет одни и те же функции и имеют хорошую совместимость между собой.
Различаются они по быстродействию, рассеиваемой мощности, нагрузочной способности и логическим уровням (см. разд. 8.09 и 9.02). Наилучшим для большинства применений является семейство «высокоскоростная КМОП-логика», обозначаемая буквами НС после цифр 74, например 74НСОО. Там, где требуется совместимость с существующими биполярными ТЛ-схемами, вы должны использовать НСТ (или, возможно, LS) — ceмейство. Для простоты мы в дальнейшем в книге будем опускать буквы (и префикс 74-), обозначая типы цифровых ИМС с апострофом (`), например `00 для обозначения 2-входового вентиля И-НЕ. Отметим, что стандартные элементы ТТЛ (без этих букв) в настоящее время почти полностью вышли из употребления. Мы опишем интересную историю этих семейств в разд. 9.01.
8.09. Принципиальные схемы вентилей на ИМС
В обоих семействах (ТТЛ и КМОП) идентичные вентили, например И, выполняют одинаковые операции, тем не менее их логические уровни, а также другие характеристики (быстродействие, входной ток и т. д.) совершенно различны. В общем случае нельзя смешивать два типа логических семейств. Для того чтобы понять различия между ними, рассмотрим принципиальные схемы вентилей И, которые представлены на рис. 8.17.
Рис. 8.17. Маломощный ТТЛШ-вентиль И-НЕ ( а ); КМОП-вентиль И ( б ).
КМОП-вентиль построен на полевых МОП-транзисторах обоих полярностей, которые работают в режиме усиления и соединены как ключи, а не как повторители. Открытый полевой транзистор подобен низкоомному резистору, подключенному к шине питания. Для того чтобы открыть последовательно включенную пару транзисторов Т 3 , Т 4 и закрыть нагрузочные транзисторы Т 1 и Т 2 , на оба входа надо подать ВЫСОКИЙ уровень. Это приведет к тому, что на выходе будет вырабатываться НИЗКИЙ уровень, т. е. получается вентиль И-НЕ. Транзисторы Т 5 и Т 6 образуют простой КМОП-инвертор, благодаря которому мы получаем вентиль И. Этот пример показывает как строятся вентили И, И-НЕ, ИЛИ и ИЛИ-НЕ на любое число входов.
Упражнение 8.10. Начертите схему 3-входового ΚΜΟΠ-вентиля ИЛИ.
Биполярный LS (маломощная Шоттки технология) ТТЛ-вентиль И-НЕ, в основном содержит диодно-резисторную логику (рис. 8.8), управляющую транзисторным инвертором, нагруженным на двухтактный выход. Если на обоих входах ВЫСОКИЙ уровень, то через резистор 20 кОМ протекает базовый ток, открывающий транзистор Т 1 , что приводит к появлению на выходе НИЗКОГО уровня из-за насыщения Т 4 и выключения Дарлингтоновской пары Т 2 -Т 3 . Если затем на один из входов подать НИЗКИЙ уровень, то транзистор Т 1 выключится, а на выходе будет ВЫСОКИЙ уровень. Диоды и транзисторы с переходами Шоттки используются для повышения скорости переключения.
Заметим, что и ТТЛ-, и КМОП-вентили обеспечивают «активный выход» с питанием нагрузки от шины положительного источника. Рассмотренные выше дискретные вентили этой способностью не обладают.
8.10. Характеристики ТТЛ и КМОП
Давайте сравним характеристики двух семейств:
Напряжение питания: +5 В ±5 % для ТТЛ, в то время как семейства КМОП имеют более широкий диапазон: от +2 до +6 В для НС и АС, от +3 до 4-15 В для серий 4000В и 74С. Семейства НСТ и ACT, разработанные для совместимости с биполярными ТТЛ, требуют напряжения питания +5 В.
Вход. Вход вентиля ТТЛ в состоянии НИЗКОГО уровня представляет собой токовую нагрузку для управляющего им источника сигнала (типовое значение 0,25 мА для серии LS), следовательно, для поддержания на входе НИЗКОГО уровня необходимо обеспечить отвод тока. Поскольку выходные каскады схем ТТЛ обладают хорошей нагрузочной способностью, сопряжение между собой элементов ТТЛ не представляет проблемы, но она может возникнуть, когда требуется подключить входы ТТЛ к схемам другого типа. Наоборот, вентиль КМОП не имеет входного тока.
Логический порог ТТЛ определяется падением напряжения на двух диодах по отношению к земле (порядка 1,3 В), в то время как для элементов КМОП значение входного порога равно приблизительно половине напряжения питания, но может колебаться в широких пределах (типично от 1/3 до 2/3 напряжения питания). КМОП-семейства НСТ и ACT спроектированы с низким порогом срабатывания для совместимости с ТТЛ, поскольку биполярные ТТЛ не допускают отклонения в питании +5 В (см. ниже).
Входы КМОП элементов чувствительны к статическому электричеству и могут выходить из строя при манипуляциях с ними.
В обоих семействах на неиспользуемые входы в зависимости от ситуации следует подавать ВЫСОКИЙ или НИЗКИЙ уровни (далее об этом будет сказано).
Выход. Выходной каскад вентиля ТТЛ в состоянии НИЗКОГО уровня ведет себя как насыщенный транзистор, напряжение на котором близко к потенциалу земли, а в состоянии ВЫСОКОГО уровня — как повторитель с высоким выходным напряжением, равным примерно напряжению питания U + минус падение напряжения на двух диодах. Для всех КМОП-семейств (включая НСТ и ACT) выход представляет собой открытый полевой транзистор, подключенный к земле или к шине питания. Обычно быстродействующие семейства (F, AS, AC, ACT) имеют более высокую нагрузочную способность, чем медленные (LS, 4000В, 74С, НС, НСТ).
Быстродействие и мощность. Биполярные ТТЛ-семейства потребляют значительный ток покоя — тем больший, чем быстрее семейства (AS и F) при соответствующих скоростях от 25 МГц (для LS) до 100 МГц (для AS и F). Все КМОП-семейства потребляют нулевой ток. Однако их рассеиваемая мощность линейно возрастает с ростом частоты (требуется ток для переключения емкостной нагрузки), и КМОП-элементы, работающие на наивысшей частоте, рассеивают часто такую же мощность, как эквиваленты ТТЛ (рис. 8.18). Диапазон быстродействия КМОП-элементов простирается от 2 МГц (для 4000В/74С при 5 В) до 100 МГц (для АСТ/АС).
Рис. 8.18. Зависимость мощности рассеивания от частоты.
В основном замечательные характеристики КМОП-семейств (ничтожная потребляемая мощность, хорошая помехозащищенность) делают эту логику привлекательной, и мы рекомендуем семейство НС для большинства новых проектов. Однако при увеличении быстродействия используйте семейство АС; для широкого диапазона питания, где не нужна высокая скорость, используйте 74С или 4000В, используйте НСТ (или даже LS) для совместимости с биполярными ТТЛ-выходами, если вам не нужно быстродействие ACT (или AS, или F). В некоторых применениях с высокой плотностью размещения (память, микропроцессоры), КМОП-устройства предпочтительней, ввиду их относительно высокой мощности рассеяния. А для сверхвысокоскоростных применений (выше 100 МГц) вы вынуждены использовать ЭСЛ-элементы, которые работают до частот 500 МГц, или использовать приборы из арсенида галлия, которые функционируют до 4 ГГц. Смотрите разд. 14.15 и табл. 9.1 для полного обсуждения логических КМОП.
В пределах одного логического семейства выходы элементов легко стыкуются с входами и обычно не стоит беспокоиться о пороговых уровнях, входном токе и т. п. Например, выходы элементов семейств ТТЛ или КМОП могут работать не менее чем на 10 входов (характеристика носит название коэффициента разветвления по выходу: для ТТЛ коэффициент разветвления по выходу равен 10), таким образом, для обеспечения совместимости не требуется применение специальных мер. В следующей главе будут рассмотрены вопросы сопряжения между различными логическими семействами, а также между логическими схемами и внешними устройствами.
8.11. Элементы с тремя состояниями и с открытым коллектором
Вентили ТТЛ и КМОП, которые мы сейчас рассматриваем, имеют двухтактные выходные схемы: высокий или низкий уровень подается на выход через открытый биполярный или МОП-транзистор. Такую схему, называемую активной нагрузкой, а в ТТЛ называемую также столбовым выходом, используют почти все логические элементы. Схема обеспечивает низкое выходное сопротивление в обоих состояниях, имеет малое время переключения и обладает более высокой помехоустойчивостью по сравнению с одиночным транзистором, который использует пассивный резистор в качестве коллекторной нагрузки. В случае КМОП применение активного выхода, кроме всего прочего, позволяет понизить рассеиваемую мощность.
Но существуют ситуации, при которых активный выход оказывается неудобным. Представим себе компьютерную систему, в которой несколько функциональных блоков должны обмениваться данными. Центральный процессор (ЦП), память и различные периферийные устройства должны иметь возможность передавать и получать 16-разрядные слова. И, мягко говоря, было бы неудобно использовать для соединения каждого устройства с каждым индивидуальный 16-жильный кабель. Для разрешения этой проблемы используется так называемая шина (или магистраль) данных, т. е. один 16-жильный кабель, доступный для всех устройств. Такая структура аналогична телефонному каналу коллективного пользования: в каждый момент времени «говорить» («передавать данные») может только одно устройство, а остальные могут только «слушать» («принимать данные»).
Если используется шинная система, то необходимо иметь соглашение о том, кому разрешено «говорить». В связи с этим употребляются такие термины, как «арбитр шины», «задатчик шины» и «управление шиной».
Для возбуждения шины нельзя использовать вентили (или другие схемы) с активным выходом, так как их нельзя отключить от общих информационных линий (в любой момент времени выходы устройств, подключенные к шине, будут находиться в состоянии высокого или низкого уровня). В этом случае необходим вентиль, выход которого может находиться в «обрыве», т. е. быть отключенным. Такие устройства выпускаются промышленностью и имеют две разновидности, которые носят названия «элементы с тремя состояниями» и «элементы с открытым коллектором».
Логические схемы с тремя состояниями. Логические элементы с тремя состояниями, также называемые TRI-STATE (товарный знак National Semiconductors Corp., создавшей их) представляют элегантное решение. Название этих схем может ввести в заблуждение, поскольку на самом деле они не являются логическими элементами с тремя уровнями напряжений. Это обычные логические схемы, которые имеют третье состояние выхода — «обрыв» (рис. 8.19).
Рис. 8.19. ΚΜΟΠ-вентиль И-НЕ с 3-м состоянием: а — поясняющая схема; б — реализация с использованием внутренних КМОП-вентилей.
Они имеют отдельный вход разрешения, с помощью которого могут устанавливаться либо в состояние обычных активных выходов, либо переходить в «третье» (обрыва) состояние независимо от того, какие сигналы присутствуют на других входах. Выходы с тремя состояниями имеются во многих ИМС: счетчиках, защелках, регистрах и т. п., а также в вентилях и инверторах.
Устройство с выходом на 3 состояния функционирует подобно обычной логике с активным выходом, когда подан сигнал разрешения, при этом на выходе существует либо высокий, либо низкий уровень. Когда на входе разрешения пассивный уровень, схема отключает свой выход, так что другие устройства могут работать на ту же самую линию. Давайте рассмотрим это на примере.
Взгляд вперед: шины данных. Драйверы с тремя состояниями широко используются для возбуждения шины данных компьютера. Каждое устройство (память, периферия и т. п.), которому необходимо выставить данные на шину, связывается с ней через вентили с тремя состояниями (или через более сложные элементы, такие, как регистры). Дела так умно устраиваются, что только одно устройство выдает разрешение своим драйверам (формирователям), все другие устройства, получив запрет, переходят в третье состояние. Обычно выбранное устройство «узнает» о том, что оно должно выдавать данные на шину, опознав свой адрес на адресных и управляющих шинах (рис. 8.20).
Рис. 8.20. Шина данных.
В этом наипростейшем случае устройство подключается как порт 6. Получив свой адрес (например, 6) и импульс чтения, устройство выводит данные на шину D 0 -D 3 . Такой шинный протокол используется для многих простых систем. Нечто подобное имеет место в большинстве микрокомпьютеров, как мы увидим в гл. 10 и 11.
Заметим, что должна быть некоторая внешняя логика, которая обеспечивала надежность того, что устройства с тремя состояниями, подключенные к одним и тем же выходным линиям, не будут пытаться передавать в одно и то же время (что равносильно условию, официально называемому «соглашение шины»). В этом случае все хорошо, когда каждому устройству соответствует свой адрес.
Логика с открытым коллектором. Предшественником логики с 3 состояниями была логика с открытым коллектором, которая позволяет вам подключиться к одиночной линии среди других выходов нескольких формирователей. Выход с открытым коллектором просто не включает транзистор активной нагрузки в выходном каскаде (рис. 8.21).
Рис. 8.21. Маломощный ТТЛШ-вентиль И-НЕ с открытым коллектором.
Название «открытый коллектор» превосходно. Когда вы используете такие вентили, вы должны подключать к источнику питания внешний нагрузочный резистор. Его значение не критично: при малых значениях резистора обеспечиваются повышенные быстродействие и помехоустойчивость, однако повышается рассеиваемая мощность и нагрузочный ток выходного каскада. Для ТТЛ типичными являются значения в пределах от нескольких сотен до нескольких тысяч ом. Если вы захотели возбуждать шину с помощью вентилей с открытым коллектором (рис. 8.20), вы должны заменить драйверы с тремя состояниями на двухвходовые вентили И-НЕ с открытым коллектором, подключив один выход каждого вентиля к высокому уровню разрешения подключения к шине. Заметим, что данные на шине при этом включении будут инвертированы. Каждую линию шины необходимо через нагрузочный резистор подключить к +5 В. К недостаткам логики с открытым коллектором следует отнести пониженные быстродействие и помехоустойчивость по сравнению с обычными схемами, использующими активную нагрузку. Вот почему драйверы с тремя состояниями являются основными для реализации шин в компьютерах. Однако существуют три ситуации, в которых вы должны использовать устройство с открытым коллектором: управление внешними нагрузками, «проводное ИЛИ» и внешние шины. Давайте рассмотрим их внимательно.
Управление внешней нагрузкой. Логика с открытым коллектором является пригодной для управления внешней нагрузкой, которая подключается к источнику положительного напряжения, превышающего напряжение питания ИМС. Может, в частности, потребоваться включить маломощную 12-вольтовую лампочку или сформировать логический перепад 15 В с помощью резистора, установленного между выходом вентиля и источником +15 В (рис. 8.22).
Рис. 8.22.
Например, схема `06 представляет собой шесть инверторов с максимальным выходом +30 В, а схема КМОП 40107 представляет собой сдвоенный И-НЕ-буфер с открытым коллектором с выходным током до 120 мА. Серия 75450 «сдвоенных периферийных драйверов» может выдавать в нагрузку ток до 300 мА при напряжении питания +30 В, а серия UHP/UDN фирмы Sprague расширяет эти пределы до 1 А и до 80 В. Более подробно об этом в следующей главе.
Проводное ИЛИ . Если вы объедините вместе несколько вентилей с открытым коллектором, как показано на рис. 8.23, то получите так называемую схему «про- водное ИЛИ», соединение, которое ведет себя подобно большому вентилю И-НЕ, выдающему на выходе низкий уровень, если какой-либо вход имеет высокий уровень.
Рис. 8.23. Монтажное ИЛИ .
Такое объединение недопустимо при использовании схем с активной нагрузкой из-за возникновения режима соперничества, если между всеми вентилями не будет согласовано, каким должен быть выходной сигнал. Объединять можно схемы ИЛИ-НЕ, И-НЕ и т. п. Это соединение также иногда называют «проводное И», поскольку высокий уровень на выходе возникает лишь тогда, когда он действует на выходе каждого вентиля (состояние разомкнутого, или открытого выхода. Оба этих названия описывают одну и ту же схему, которая представляет собой проводное И при положительной логике и проводное ИЛИ-при отрицательной. Это будет более понятно для вас, когда вы узнаете о теореме Моргана в следующем разделе.
Проводное ИЛИ пользовалось скоротечной популярностью в ранние дни цифровой электроники, но и сегодня оно используется довольно редко за двумя исключениями: а) в логических семействах, известных как ЭСЛ (эмиттерсвязанная логика, выходы у которой можно назвать «открытый эмиттер»), элементы могут безболезненно объединяться по проводному ИЛИ и б) существуют несколько частных линий в компьютерных шинах (наиболее значительная линия называется прерывание), функциями которых являются не передача информационных бит, а просто индикация того, что хотя бы одно устройство требует внимания. В этом случае вы используете проводное ИЛИ, поскольку оно дает то, что вы хотите, и не требуется дополнительной внешней логики для предотвращения споров.
Внешние шины. В приложениях, где скорость не очень важна, вы иногда видите драйверы с открытым коллектором, используемые для возбуждения шин. Наиболее частый случай для шин — это выдача данных из компьютеров. Общими примерами являются шины, используемые для связи компьютера с дисководом, и инструментальная шина IEEE-488 (также называемая "HPIB" или "GPIB"). Подробнее об этом в гл. 10 и 11.
Комбинационная логика
Как мы обсуждали ранее в разд. 8.04, цифровые логические схемы разделяются на комбинационные и последовательностные (последовательные). Комбинационные схемы — это такие логические устройства, в которых состояние выхода зависит только от текущего состояния их выходов в некотором предопределенном виде. Выходное состояние последовательностной схемы определяется как состояние входов на данный момент, так и ее предыдущим состоянием. Комбинационные схемы могут быть построены с применением одних лишь вентилей, в то время как последовательностные схемы требуют наличия памяти в какой-либо форме (триггер). В последующих разделах мы рассмотрим возможности комбинационной логики, после чего отправимся в беспокойный мир последовательностных схем.
8.12. Логические тождества
Любое обсуждение комбинационной логики будет неполным, если мы не рассмотрим логические тождества, представленные в табл. 8.3. Из этих соотношений большинство очевидны, а два последних составляют теорему Моргана, наиболее важную для построения схем.
Таблица 8.3. Логические тождества
АВС = ( АВ ) С = А ( ВС )
АВ = ВА
АА = А
А1 = А
А0 = 0
А ( В + С ) = АВ + АС
А + АВ = А
A + BC = ( A + B )( A + С )
A + B + C = ( A + B ) + C = A + (B + С )
A + В = В + А
А + А = А
А + 1 = 1
А + 0 = А
1' = 0
0' = 1
А + А' = 1
АА' = 0
( А' ) ' = А
А + А'В = А + В
( А + В ) ' = А'В'
( АВ ) ' = А' + В'
Пример: вентиль Исключающее ИЛИ.
На следующем примере проиллюстрируем использование логических тождеств: попробуем построить схему Исключающее ИЛИ с помощью обычных вентилей. Таблица истинности для Исключающего ИЛИ представлена на рис. 8.24. Изучив ее и поняв, что 1 на выходе существует только тогда, когда (А, В) = (0, 1) или (1, 0), мы можем написать А В = А¯В + АВ¯
Рис. 8.24. Таблица истинности вентиля Исключающее ИЛИ .
Соответствующая схемная реализация представлена на рис. 8.25.
Рис. 8.25. Реализация вентиля Исключающее ИЛИ .
Однако эта реализация не является единственной. Используя логические тождества, мы находим, что
Α В = АА¯ + АВ¯ + ВА¯ + ВВ¯ (АА¯ = ВВ¯ = 0)
= А(А¯ + В¯) + В(А¯ + В¯)
= А(А¯В¯) + В(В¯А) = (А + В)(А¯В¯)
(На первом шаге мы прибавили две величины, равные нулю, а на третьем применили теорему Моргана). Схемная реализация для этого случая показана на рис. 8.26.
Рис. 8.26. Реализация вентиля Исключающее ИЛИ .
Существуют и другие способы построения схемы Исключающее ИЛИ. Рассмотрим следующие упражнения:
Упражнение 8.11. Покажите, что
с помощью логических преобразований. В справедливости этих соотношений легко убедиться, просмотрев таблицу истинности.
Упражнение 8.12. Чему равны следующие соотношения:
а) 0·1, б) 0 + 1, в) 1·1, г) 1 + 1, д) А ( А + В ), е) А ( А ' + В ), ж) Α А , з) Α Α' .
8.13. Минимизация и карты Карно
Поскольку логическую функцию, даже такую простую, как Исключающее ИЛИ, можно реализовать различными способами, часто бывает нужно найти для нее самое простое решение, или, возможно, наиболее удобное схемное решение. Над этой проблемой бились многие светлые умы и в настоящее время существует несколько способов ее разрешения, включая алгебраические методы, реализуемые с помощью ЭВМ. При числе входов, не превышающем четырех, наилучшим методом является составление карты Карно. Этот метод позволяет также найти логическое выражение (если оно заранее неизвестно) по таблице истинности. Проиллюстрируем этот метод с помощью примера.
Предположим, что требуется построить схему для мажоритарного подсчета голосов при баллотировке. Будем считать, что имеются три входа, работающие в положительной логике (на любом из них может быть 1 или 0) и выход (0 или 1). Выход равен 1, если 1 присутствует не менее чем на двух входах.
Шаг 1. Составим таблицу истинности
Здесь должны быть представлены все возможные сочетания и соответствующие им состояния выхода (или выходов). В том случае, когда состояние входа не оказывает влияния на выход, ставится X (любое значение).
Шаг 2. Составим карту Карно. Она представляет собой нечто очень близкое к таблице истинности, но содержит переменные, которые расположены по двум осям. Переменные должны быть расположены таким образом, чтобы при переходе от каждого квадрата к соседнему менялось бы состояние только одного входа (рис. 8.27).
Рис. 8.27. Карта Карно.
Шаг 3. Отметим на карте группы, содержащие 1 (можно также использовать и группы, содержащие 0). Три овала на рис. 8.27 определяют логические выражения АВ, АС и ВС. Далее получим требуемую функцию
Q = АВ + АС + ВС,
схемная реализация ее показана на рис. 8.28.
Рис. 8.28.
Этот результат кажется очевидным, когда он уже получен. Можно было бы составить выражение для нулей и вместо этого получить
Q = А'В' + А'С + В'С.
Это выражение может оказаться полезным для случая, когда в каких-либо точках схемы имеются дополнения А', В' и С.
Некоторые комментарии к картам Карно.
1. Ищите группы, содержащие 2, 4, 8 и т. д. квадратов. Они имеют простые логические выражения.
2. Логика будет тем проще, чем крупнее блок вы опишете.
3. Состыкуйте края карты Карно. Например, карта на рис. 8.29 описывается выражением Q = В'С.
Рис. 8.29.
4. Блок «единиц», содержащий один или два «нуля», лучше всего описывается с помощью группировки, показанной на рис. 8.30. Этому блоку соответствует логическое выражение Q = A(BCD)'.
Рис. 8.30.
5. Места, содержащие X (любое значение), представляют собой «карт-бланш». Записывайте в них «нули» или «единицы» так, чтобы можно было получить простейшую логику.
6. Карта Карно может и не привести к лучшему решению. Иногда более сложное логическое выражение имеет более простую схемную реализацию, например в случае, когда некоторые члены выражения уже сформированы схемой в виде логических сигналов, которые можно использовать в качестве входных. Кроме того, реализации Исключающего ИЛИ не очевидны из карты Карно. Наконец, при выборе логической структуры схемы определенную роль играют ограничения, связанные с конструкцией ИМС (например, когда в одном корпусе содержатся четыре 2-входовых вентиля). Когда используются такие программируемые логические устройства как ПМЛ для конструирования логических функций, внутренняя структура (программируемые вентили И и фиксированные вентили ИЛИ) сдерживает реализацию, которая могла бы быть применена.
Упражнение 8.13. Нарисуйте карту Карно для логики, которая позволит определить, является ли 3-разрядное двоичное число «главным», считая при этом, что главными не являются числа 0, 1 и 2. Дайте схемную реализацию на 2-входовых вентилях.
Упражнение 8.14. Найдите логическое выражение, с помощью которого можно было бы умножить два 2-разрядных двоичных числа и получить 4-разрядный результат. Рекомендации: для каждого выходного бита пользуйтесь отдельными картами Карно.
8.14. Комбинационные функциональные схемы, реализованные на стандартных ИМС
С помощью карт Карно можно построить логику, чтобы выполнять достаточно сложные функции, такие, как, например, двоичное сложение и сравнение величин, контроль по паритету, мультиплексирование (выбор одного из нескольких входов, который определяется двоичным адресом) и т. п. В реальности сложные функции, которые используются наиболее часто, реализуются в виде функциональных ИМС средней степени интеграции (до 100 вентилей в корпусе). Хотя в состав многих из этих СИС входят триггеры, которые мы скоро будем рассматривать, большинство из них выполняют чисто комбинационные функции и состоят целиком из одних вентилей. Давайте посмотрим, «какие звери населяют зоопарк, именуемый комбинационные интегральные схемы средней степени интеграции.»
Счетверенная 2-входовая схема выборки. Весьма полезным устройством является счетверенная 2-входовая схема выборки. Она фактически представляет собой 4-полюсный двухпозиционный переключатель логических сигналов. Основная идея такого переключателя иллюстрируется рис. 8.31.
Рис. 8.31. Счетверенный 2-входовый селектор.
Когда вход ВЫБОР (SELECT-SEL на рисунке) имеет низкий уровень, сигналы на выходах Q поступают с соответствующих входов А, при высоком уровне на входе ВЫБОР — со входов В. Когда высокий уровень действует на входе РАЗРЕШЕНИЕ (ENABLE-E на рисунке), все выходы устройства принудительно устанавливаются в состояние низкого уровня. Несколько позже мы рассмотрим эту важную идею более подробно, а сейчас приведем лишь таблицу истинности, в которой X означает, что состояние данного входа не имеет значения, В — высокий уровень, Η — низкий уровень.
Схема на рис. 8.31 и ее таблица истинности соответствуют схеме `157. Та же самая функция реализуется также с инверсным выходом (`158) и с выходом на 3 состояния (прямые выходы; `257; инверсные: `258).
Упражнение 8.15. Покажите, как с помощью вентилей И-ИЛИ-НЕ построить 2-входовую схему выборки.
Хотя в некоторых случаях функцию выборки можно реализовать с помощью механического переключателя, тем не менее по ряду причин предпочтительнее использовать вентили. Вентильная схема обладает следующими преимуществами: а) она дешевле; б) коммутация всех каналов производится быстро и одновременно; в) с помощью логических сигналов, сформированных в устройстве, можно производить переключение практически мгновенно; г) даже тогда, когда управление выборкой осуществляется от переключателя, расположенного на передней панели устройства, для того чтобы избежать воздействия помехи и снижений уровней за счет влияния емкостей, логические сигналы лучше не пропускать через кабели и переключатели. Так как избираемый вентиль отпирается уровнем постоянного напряжения, логические сигналы управления могут быть взяты с той же платы, на которой он расположен. Это позволяет сократить внешние связи (достаточно одной линии с нагрузкой, коммутируемой на землю с помощью однополюсного тумблера). Такой способ управления логической схемой с помощью внешних уровней постоянного напряжения называют «холодной коммутацией». Он оказывается более предпочтительным, чем непосредственное управление сигналами от ключей, потенциометров и т. п. Кроме прочих преимуществ холодная коммутация позволяет вести управляющие линии, шунтированные конденсаторами, подавляя тем самым взаимные наводки, в то время как сигнальные линии в общем случае шунтировать конденсаторами нельзя. Некоторые примеры холодной коммутации нам еще встретятся в дальнейшем.
Передающие вентили. Как уже указывалось в разд. 3.11 и 3.12, с помощью элементов КМОП можно построить «передающий вентиль». Это — два параллельно включенных комплементарных ключа на полевых МОП-транзисторах, через которые входной (аналоговый) сигнал, лежащий в пределах от 0 до U СС , может либо непосредственно подаваться на выход через низкое сопротивление (несколько сотен омов), либо отрываться (выходное сопротивление фактически равно бесконечности). Как вы, наверное, помните, такие устройства являются двунаправленными и для них не имеет значения, какой из выходов используется в качестве входа, а какой в качестве выхода.
Передающие вентили прекрасно работают с цифровыми уровнями КМОП и широко применяются в КМОП-схемах. На рис. 8.32 показана структурная схема счетверенного двухстороннего КМОП-ключа типа 4066. Каждый ключ имеет индивидуальный управляющий вход, высокий уровень на котором замыкает ключ, а низкий — размыкает.
Рис. 8.32. Счетверенный двусторонний ключ.
Отметим, что передающие вентили являются просто ключами, и поэтому не обладают способностью к разветвлению по выходу, т. е. они просто пропускают входной логический уровень, не обеспечивая дополнительную нагрузочную способность без дополнительной возможности усиления. С помощью передающих вентилей можно построить схемы выборки на 2 и более входов для цифровых уровней КМОП и аналоговых сигналов. Связку передающих вентилей можно использовать для того, чтобы производить выбор одного из нескольких входов (вырабатывая управляющие сигналы с помощью дешифратора, как будет показано ниже).
Эта логическая функция настолько широко используется, что получила официальное название «мультиплексора», который будет рассмотрен в следующем разделе.
Упражнение 8.16. Покажите, как с помощью передающих вентилей построить схему выборки на два входа. Здесь нужно использовать инвертор.
Мультиплексоры. Вентиль выборки на два входа известен также под названием 2-входового мультиплексора. Промышленностью выпускаются также мультиплексоры на 4, 8 и 16 входов (устройства на 4 входа выпускаются сдвоенными, т. е. по 2 в одном корпусе). Двоичный адрес служит для выбора входа, сигнал с которого должен поступать на выход. Например, мультиплексор, имеющий 8 информационных входов, использует для адресации к ним 3-разрядный адресный вход. Это показано на рис. 8.33, где представлен цифровой мультиплексор типа `151.
Рис. 8.33. 8-входовый мультиплексор.
Он имеет стробирующий (или разрешающий) вход Е, работающий в отрицательной логике, а также прямой и инверсный выходы. Если устройство закрыто (на входе Ε действует высокий уровень), выход Q будет иметь низкий уровень, a Q' — высокий независимо от состояния адресных и информационных входов.
В семействе КМОП имеются два типа мультиплексоров. Первый применяется только для работы с цифровыми сигналами, имеет входной порог и регенерирует на выходе «чистые» уровни, которые соответствуют входному состоянию. Таким же образом работают все функциональные элементы ТТЛ. Примером является микросхема `153 — ТТЛ-мультиплексор. К другому типу устройств относятся аналоговые и двунаправленные КМОП мультиплексоры, которые фактически представляют собой набор передающих вентилей, КМОП-мультиплексоры 4051 и 4053 работают таким образом (помните, что логика, выполненная из передающих вентилей, не может разветвляться). Так как передающие вентили являются двунаправленными, эти мультиплексоры могут использоваться в качестве «демультиплексоров или дешифраторов», которые мы рассмотрим в следующем разделе.
Упражнение 8.17. Покажите, как построить мультиплексор на 4 входа, используя а) обычные вентили, б) вентили с тремя состояниями и в) передающие вентили. При каких обстоятельствах будет предпочтительным вариант в)?
Иногда при разработке логических устройств может оказаться, что потребуется производить набор из большего числа входов, чем имеются в мультиплексоре. Этот вопрос относится к общей задаче расширения микросхем, которое заключается в использовании нескольких микросхем с небольшими индивидуальными возможностями, и применяется для построения дешифраторов, памяти, регистров сдвига, арифметически-логических и других устройств. Как видно из рис. 8.34, расширение выполняется очень просто. Здесь показано, как имея два мультиплексора на 8 входов 74LS51 построить мультиплексор на 16 входов.
Рис. 8.34. Наращивание мультиплексора.
Конечно, в схемах имеется дополнительный адресный бит, который вы используете для выбора одного устройства или другого. На невыбранном мультиплексоре `151 выход Q поддерживается на низком уровне, что позволяет произвести объединение через вентиль ИЛИ. Если выходы имеют три состояния, то расширение производится еще проще: для этого достаточно непосредственно объединить выходы.
Демультиплексоры и дешифраторы. Входной сигнал принимается демультиплексором и направляется им на один из нескольких выходов в соответствии с двоичным кодом, действующим на адресных входах. Остальные выходы в этом случае находятся либо в неактивном состоянии, либо в состоянии разомкнутой цепи. Аналогично работает и дешифратор. Единственное отличие состоит в том, что на входы подается только адрес, возбуждающий один из n возможных выходов. На рис. 8.35 показан такой пример.
Рис. 8.35. Дешифратор «1 из 8».
Дешифратор `138 — "1 из 8" имеет низкий уровень на выходе, который соответствует входному 3-разрядному коду (адресу), а на остальных выходах — высокий уровень. В частности этот дешифратор имеет три входа разрешение, все из которых должны быть активны (два — низкого и один — высокого уровня), иначе все выходы имеют высокий уровень. Основное применение дешифратора — заставить происходить различные события, которые зависят от состояния «счетчика», который управляет этим (скоро об этом тоже поговорим подробно).
Дешифраторы обычно используются при сопряжении с микропроцессором, когда необходимо выполнить различные действия в зависимости от адреса. Мы будем рассматривать это детально в гл. 10.
Другим применением общего использования дешифратора является организация (разрешение) последовательности действий, согласно достигнутого адреса, заданного выходом двоичного счетчика (разд. 8.25). В заключение, о «брате» схемы `138 — схеме `139, которая представляет сдвоенный дешифратор "1 из 4" с раздельным одиночным разрешением по низкому уровню. На рис. 8.36 показано, как использовать два дешифратора `1 из 8' типа `138 для получения дешифратора "1 из 16". Как видно из рисунка, при этом не требуются внешние элементы, поскольку схема `138 имеет входы разрешения обеих полярностей (низкого и высокого уровней).
Рис. 8.36. Наращивание дешифратора.
Упражнение 8.18. Большое расширение: постройте дешифратор "1 из 64" на девяти устройствах ` 138. Подсказка: используйте один из них для разрешения подключения других.
В КМОП-логике мультиплексоры, которые используют передающие вентили, также являются демультиплексорами, поскольку передающие вентили являются двунаправленными. Когда они используются таким образом, важно сознавать, что выходы, которые не выбраны, отключены. Нагрузочный резистор, или эквивалентный ему, должны быть использованы для обеспечения правильного функционирования логики с такими выходами (те же самые требования, что и с ТТЛ-вентилями с открытым коллектором).
Существует другой тип дешифраторов, который обычно входит в состав всех логических семейств. Примером такого дешифратора служит преобразователь двоично-десятичного кода в семисегментный с формирователями для управления цифровым индикатором `47. Эта схема в соответствии с двоично-десятичным кодом, действующим на входе, формирует сигналы на всех выходных линиях, связанных со входами семисегментного цифрового индикатора, воспроизводящего десятичный символ. Устройство такого типа фактически является преобразователем кодов, но в обычной практике используется название дешифратор. В табл. 8.6 в конце главы представлено большинство применяемых дешифраторов.
Упражнение 8.19 . Используя вентили, постройте преобразователи двоично-десятичного кода в десятичный ("1 из 10").
Приоритетный шифратор. Приоритетный шифратор формирует на выходе двоичный код, соответствующий входу с наивысшим номером (приоритетом), который возбуждается. Наиболее часто эта схема используется в аналого-цифровых преобразователях с параллельным преобразованием (см. следующую главу) и в проектировании микропроцессорных систем. Примерами устройств такого типа являются схема `148 — 8-входовый (3 выходных разряда) приоритетный шифратор и схема `147 — 10-входовый.
Упражнение 8.20. Спроектируйте простейший дешифратор, у которого 2-разрядный адрес на выходе будет указывать, какой из четырех входов имеет высокий уровень (все остальные входы должны иметь низкий уровень).
Сумматоры и другие арифметические устройства. На рис. 8.37 изображен 4-разрядный полный сумматор. Он прибавляет 4-разрядное двоичное число А i к 4-разрядному числу Вi и вырабатывает на выходе 4-разрядную сумму S i плюс разряд переноса П вых . Для суммирования больших величин сумматоры можно наращивать. Для этой цели предусмотрен вход П вх , на который поступает выходной сигнал переноса от предыдущего (младшего) сумматора.
Рис. 8.37. 4-разрядный полный сумматор.
На рис. 8.38 показано, как строится схема для суммирования двух 8-разрядных двоичных чисел.
Рис. 8.38. Наращивание сумматора.
Часто в качестве сумматоров используются арифметико-логические устройства (АЛУ). Эти устройства фактически предназначены для выполнения целого ряда различных функций. В частности, 4-разрядная АЛУ `181 (с возможностью расширения для обработки слов большей длины) может выполнять сложение, вычитание, сдвиг двоичных разрядов, сравнение величин и некоторые другие функции. Время выполнения арифметических операций в сумматорах и АЛУ находится в пределах от наносекунд до десятков наносекунд в зависимости от типа логического семейства.
Интегральные умножители выпускаются в конфигурациях 8 бит x 8 бит или 16 бит x 16 бит. Разновидностью умножителей, которые в основном используются для цифровой обработки сигналов, являются так называемые умножители-накопители, которые накапливают сумму произведений. Они также выполняются в размерах 32x32 с 64-битовым произведением плюс несколько дополнительных бит для сохранения суммы от переполнения. Умножители-накопители и умножители выпускаются с временем 25–50 нс; у ЭСЛ-умножителей время меньше — 5 нс (тип.) для умножителей 16x16.
Другим арифметическим устройством, которое используется в цифровой обработке сигналов, является коррелятор, который сравнивает соответствующие биты двух цепочек битов, вычисляя число совпавших битов. Типовой интегральный коррелятор сравнивает два 64-разрядных, которые могут сдвигаться во внутренних регистрах сдвига. Какой-либо набор бит может игнорироваться («маскироваться») в корреляции. Типовые времена составляют 30 нс, т. е. лента бит может тактироваться с частотой 35 МГц, с разрешением 7 бит в корреляции для каждого такта. Вычисляется отклонение (как в цифровом фильтре с КИХ) вместо суммы (с переносом) попарносвязанных произведений двух цепочек целых чисел.
Типичные размеры — целые числа от 4 до 10 бит при длине от 3 до 8 слов (конечно, имеющие возможность расширения). Наиболее сложными арифметическими кристаллами являются процессоры с плавающей запятой, которые осуществляют сравнение, суммирование, умножение, вычисление тригонометрических функций, экспонент и корней. Обычно они используются совместно с определенными микропроцессорами и приспособлены для работы в стандарте, известном как IEED754, который определяет размеры слов (до 80 бит), формат и т. д. Примерами таких устройств (плюс основные микропроцессоры) являются схемы 8087 (80848), 80287 (80286), 80387 (80386) и 68881 (68020/30). Они имеют действительно ошеломляющую производительность в 10 Мегафлопс (миллион операций с плавающей запятой в секунду) или более.
Компараторы. На рис. 8.39 показан 4-разрядный компаратор чисел, который определяет относительные значения чисел А и В и вырабатывает на выходе сигналы результатов сравнения: А < В, А = В и А > В. Входы допускают наращивание для обработки чисел длиной более 4 бит.
Рис. 8.39. Компаратор.
Упражнение 8.21. Сконструируйте компаратор, используя вентили «исключающее или», который будет сравнивать 4-разрядные числа А и В и определять, когда А = В .
Схема формирования и контроля бита паритета. Это устройство предназначено для выработки паритетного бита, который добавляется к информационному «слову» при передаче (или записи) данных, а также для проверки правильности паритета при восстановлении этих данных. Паритет может быть четным или нечетным (при нечетном паритете для каждого символа общее число битов (разрядов), содержащих 1, нечетно). Например, формирователь паритета 1280 принимает 9-разрядное слово и в соответствии с состоянием управляющего входа вырабатывает на выходе четный или нечетный бит. Конструктивно схема представляет собой набор вентилей «исключающее или».
Упражнение 8.22. Подумайте, как сделать формирователь паритета, используя вентили «исключающее или».
Программируемые логические устройства. Вы можете строить ваши собственные комбинационные (и даже последовательные) логические схемы на кристалле, используя ИС, которые содержат массив вентилей с программируемыми перемычками. Существуют несколько вариантов таких устройств, из которых наиболее популярными являются ПМЛ (программируемая матричная логика — PAL) и ПЛМ (программируемая логическая матрица — PLA). ПМЛ, в частности, стали крайне недорогими и гибкими устройствами, которые должны войти как часть инструмента каждого разработчика. Мы будем описывать комбинационные ПМЛ в следующем разделе.
Некоторые другие незнакомые функции. Существует много других комбинационных схем средней степени интеграции, представляющих несомненный интерес. Например, в семействе КМОП есть схема — «мажоритарная логика», которая говорит, что возбуждена большая часть входов. Имеется также двоично-десятичное устройство дополнения до 9, назначение которого не требует пояснений. Существует схема «барабан-сдвигатель», которая сдвигает входное число на n (задаваемое) разрядов и может наращиваться до любой длины.
8.15. Реализация произвольных таблиц истины
К счастью, большинство из проектов цифровых схем не состоит из стряпни безумных устройств на вентилях для реализации сложных логических функций. Однако временами, когда вам нужно связать несколько сложных таблиц истинности, число вентилей может стать слишком большим. Возникает вопрос, нельзя ли найти какой-то другой путь. Таких путей существует несколько. В этом разделе мы кратко рассмотрим, как использовать мультиплексоры и демультиплексоры для реализации произвольных таблиц истинности. Затем мы обсудим в общем более мощные методы, использующие программируемые логические кристаллы, в частности ПЗУ и ПЛМ.
Мультиплексоры в качестве реализаций обобщенных таблиц истинности. Нетрудно видеть, что n-входовый мультиплексор может быть использован для генерации любой таблицы истинности на n входов без применения каких-либо внешних компонентов, если просто на их входы подать соответствующие высокие и низкие уровни. Схема на рис. 8.40 говорит, является ли входное 3-разрядное двоичное число простым.
Рис. 8.40.
Не столь очевидно, что мультиплексор на n входов с помощью только одного инвертора может быть использован для генерации таблицы истинности на 2n входов. Например, рис. 8.41 показывает схему, которая определяет имеет или нет данный месяц года 31 день, где месяц (от 1 до 12) задается 4-битовым входом.
Хитрость в том, чтобы заметить, что для данного состояния адресных битов, прикладываемых к мультиплексору, выход (как функция оставшегося входного бита) должен быть равен H, L, А 0 или А' 0 ; соответственно вход мультиплексора связывается с логическим высоким, логическим низким, А или А' 0 .
Рис. 8.41.
Упражнение 8.23. Схема на рис. 8.41. Составьте таблицу, показывающую, имеет ли данный месяц 31 день, с двоичной адресацией месяца. Сгруппируйте месяцы в пары согласно старшим значащим 3-м битам адреса. Для каждой пары обозначение выхода Q («31 день») зависит от младшего значащего адресного бита А 0 . Сравните с рис. 8.41. Наконец, напрягитесь и проверьте, что схема делает на самом деле, если заданный месяц имеет 31 день.
Забавное примечание: оказывается, что данную таблицу истинности можно реализовать только с одним вентилем «исключающее или», если использовать для несуществующих месяцев знак X (любое значение)! Попытайтесь сделать это самостоятельно. Это даст вам возможность приобрести опыт в составлении карт Карно.
Дешифраторы как обобщенные таблицы истинности. Дешифраторы также позволяют упростить комбинационную логику, особенно в тех случаях, когда нужно получить несколько одновременно действующих выходных сигналов. В качестве примера попробуем составить схему преобразования двоично-десятичного кода в код с избытком 3. Таблица истинности для такого преобразования имеет вид:
Мы здесь используем 4-разрядный (в двоично-десятичном коде) вход как адрес для дешифратора, а выходы дешифратора (в отрицательной логике) служат в качестве входов для нескольких вентилей ИЛИ, формирующих выходные биты, как показано на рис. 8.42.
Заметим, что в этой схеме выходные биты не являются взаимно исключающими. Аналогичную схему можно использовать в качестве устройства для задания рабочих циклов в стиральной машине: при каждом состоянии входа выполняются различные функции (подача воды, заполнение, вращение барабана и т. д.). Вскоре вы увидите, каким образом вырабатывается последовательность двоичных кодов, следующих через равные промежутки времени. Индивидуальные выходы дешифратора носят название «минтермы» и соответствуют позициям на карте Карно.
Рис. 8.42. Преобразование кодов на уровне минтермов: преобразование двоично-десятичного кода в код с избытком 3 (устаревший код, сохранившийся с 1-го издания книги).
ПЗУ и программируемая логика. Эти ИС позволяют вам программировать их внутренние связи. В этом смысле они фактически являются устройствами с памятью и будут рассматриваться позднее, вместе с триггерами, регистрами и т. п. Однако после программирования они являются строго комбинационными, хотя существуют также последовательностные программируемые логические устройства (см. разд. 8.27), они так полезны, что будут обсуждаться сейчас.
ПЗУ. ПЗУ (постоянное запоминающее устройство) содержит битовый образ (обычно 4 или 8 разрядов, параллельный выход) для каждого конкретного адреса, приложенного ко входу. Например, 1Кx8 ПЗУ выдает восемь выходных бит на каждое из 1024 входных состояний, определяемых 10-разрядным входным адресом (рис. 8.43).
Рис. 8.43.
Любая комбинационная таблица истинности может быть запрограммирована в ПЗУ, обеспечивающем достаточное число входных линий (адреса). Например, ПЗУ 1Кx8 можно использовать для реализации умножителя 4x4; в этом случае ограничение на «ширину» (8 разрядов), не действует (так как имеется 10 разрядов).
ПЗУ (а также программируемые логические устройства) являются энергонезависимым устройством, т. е. хранимая информация остается даже тогда, когда питание пропадает. ПЗУ подразделяются на несколько типов, в зависимости от их метода программирования: а) «Масочно-программируемые ПЗУ» имеют свое битовое содержание, созданное во время изготовления. б) «Программируемые ПЗУ» (ППЗУ) программируются пользователем: ПЗУ имеют тонкие перемычки, которые могут пережигаться (подобно предохранителям) посредством подачи адреса и управляющих сигналов; они обладают высоким быстродействием (25–50 нс), относительно большим потреблением (биполярные 0,5–1 Вт), размерами от малых до средних (от 32x8 до 8Кx8). «Стираемые программируемые ПЗУ» (СППЗУ) хранят свои биты как заряды на плавающих МОП-вентилях; информация в них может стираться посредством облучения их интенсивным ультрафиолетовым светом в течение нескольких минут (они имеют прозрачное кварцевое стекло); выполняются по n-МОП и КМОП-технологии и значительно медленнее (200 нc) при низком потреблении (частично в режиме хранения), имеют достаточно большой размер (8Кx8 и 128Кx8). Современные КМОП СППЗУ достигают быстродействия биполярных ПЗУ (35 нс). Известен вариант — «однократно-программируемый» (ОКП), он содержит идентичный кристалл, но не имеет кварцевого окна для экономии и простоты, г) «Электрические стираемые программируемые ПЗУ» (ЭСППЗУ) подобны СППЗ, но могут программироваться и стираться электрически прямо в схеме с использованием стандартных напряжений питания (+5 В).
ПЗУ находят широкое использование в компьютерах и микропроцессорах, где они используются для сохранения законченных программ и таблиц данных; мы увидим их снова в гл. 11. Однако вы всегда должны помнить о небольших ПЗУ, как о замене сложных вентильных матриц.
Программируемая логика. ПМЛ (программируемая матричная логика; PAL-товарный знак фирмы Monolitic Memories Inc.) и ПЛМ (программируемые логические матрицы) являются двумя основными видами программируемой логики. Они являются ИС со многими вентилями, связи между которыми могут программироваться (подобно ПЗУ) для формирования желательных логических функций. Они выполняются как в биполярном, так и в КМОП-вариантах, первые используют прожигаемые перемычки (однократно-программируемые), вторые — плавающие вентильные КМОП схемы (ультрафиолетового или электрического стирания). Вы не можете запрограммировать любую связь, какую желаете — вы будете ограничены встроенной структурой. Рис. 8.44 показывает основные схемы комбинационных (не регистровых) ПЛМ и ПМЛ.
Рис. 8.44. Программируемая логика: а — ПЛМ; б — ПМЛ; в — фрагмент программируемых соединений с многовходовым вентилем И ; кружками обозначены плавкие перемычки или другие программируемые соединения.
Для простоты на этом рисунке вентили И или ИЛИ нарисованы с одним входом, хотя в действительности они являются много-входовыми вентилями с входом для каждого перекрестия. Каждый выход (с 3 состояниями) комбинационной ПМЛ выводится от вентиля ИЛИ, а каждый вход подсоединяется к вентилю И с дюжинами входов. Например, 16L8 (рис. 8.45) имеет восемь 7-входовых вентилей ИЛИ; каждый возможный сигнал достижим для каждого вентиля И, включая 10 входных контактов (и инверторы для них) и 8-выходных контактов (и инверторы к ним).
Рис. 8.45. Комбинационная ПМЛ 16L8 имеет 10 специальных входов, 2 специальных выхода и 6 двунаправленных линии входа/выхода (с 3-м состоянием). «16L8» означает 16 входов (макс), 8 выходов (макс.) (низкий уровень - истинное значение).
(с разрешения фирмы Advanced Micro Devices , Калифорния.)
Разрешение третьего состояния также устанавливается от 32-входового вентиля И. ПЛМ подобна ПМЛ, но обладает большей гибкостью — выходы вентилей И могут связываться со входами вентилей ИЛИ в любой комбинации (т. е. программироваться), что предпочтительней, чем жесткое присоединение, как в ПМЛ.
Заметим, что ПМЛ и ПЛМ, которые мы описывали, являются комбинационными устройствами (т. е. выполнены только на вентилях, без памяти). Другой разновидностью программируемой логики является последовательностная логика, т. е. имеющая память (регистры), подробно мы рассмотрим их в, следующем разделе. Для использования ПМЛ и ПЛМ вы должны иметь программатор, как часть аппаратного обеспечения, который знает, как прожигать перемычки (или другие типы программируемых средств) и проверить окончательный результат. Все программаторы имеют связь через последовательный порт с микрокомпьютером (стандартное средство связи на IBM PC или совместимой с ней), на котором вы работаете с программным обеспечением программатора. Некоторые из современных программаторов включают одноплатный компьютер, который работает с собственным программным обеспечением.
Простейшее программное обеспечение просто позволяет вам выбрать перемычки для прожигания; вы изображаете это в зависимости от того, какую логику вы хотите получить на уровне вентилей, затем перечисляете (или помечаете на графическом дисплее) эти перемычки. Рис. 8.46 показывает простой пример для функции исключающее ИЛИ на два входа на одном из выходов ПМЛ.
Рис. 8.46. Исключающее ИЛИ на ПМЛ.
Хорошие программаторы позволяют вам задавать буквы выражения (если они вам известны) или таблицы истинности; программное обеспечение затем делает остальное, включая минимизацию, моделирование и программирование. Хотя ПЛМ более гибкие, фаворитом в современном проектировании являются ПМЛ. Это из-за того, что они быстрее (так как сигнал проходит только через один массив перемычек), дешевле и обычно удовлетворяют задаче. Как мы увидим позже, новые ПМЛ, использующие «макроячейки» и «складную архитектуру» дают вам некоторую дополнительную гибкость в проектировании на ПМЛ с фиксированными ИЛИ-вентилями. Таким образом, ПМЛ представляют собой гибкую и компактную альтернативу ИС с фиксированными функциями и не должны выпадать из виду у серьезного проектировщика схем. Мы покажем, как (и где) применять программируемую логику с использованием полезных хитростей в разд. 8.27.
Последовательностная логика
8.16. Устройства с памятью: триггеры
Вся рассмотренная выше цифровая логика строилась на комбинационных схемах (т. е. наборах вентилей), в которых выход полностью определяется текущим состоянием входов. В этих схемах отсутствует «память», отсутствует предыстория. Жизнь цифровой логики станет более интересной, если устройства снабдить памятью. Это дает возможность конструировать счетчики, арифметические регистры и различные «умные» схемы, которые выполнив одну интересную функцию, начинают делать другую. Основным узлом таких схем является триггер, колоритное имя для описания устройств, которые в простейшей форме представлены на рис. 8.47.
Рис. 8.47. RS-триггер.
Предположим, что оба входа А и В имеют высокий уровень. Тогда, в каком состоянии будут выходы X и Y? Если X будет иметь высокий уровень, то последний будет присутствовать на обоих входах вентиля G 2 , и устанавливать Y в состояние низкого уровня. Это согласуется с состоянием выхода X (высокий уровень), следовательно, все правильно. Не правда ли?
Х = В, Y = H.
Неверно! Схема симметрична, следовательно, правомерно будет и состояние, при котором
Х = Н, Y = B.
Состояние, когда оба выхода X и Y имеют высокий (или низкий) уровень, невозможно (вспомним, что А = В = высокий уровень). Таким образом, триггер имеет два устойчивых состояния (иногда его называют «бистабильной» схемой). В каком из этих двух состояний он окажется, зависит от его предыстории, т. е. он обладает памятью. Для того чтобы в эту память что-то записать, достаточно на один из входов триггера кратковременно подать низкий уровень. Например, после кратковременной подачи низкого уровня на вход А триггер гарантированно установится в состояние
Х = В, Y = H.
независимо от того, какое состояние он имел прежде.
Подавление дребезга контактов. Рассмотренный нами триггер со входами S (установки в «1») и R (установки в «0» или сброса) оказывается весьма полезным для многих применений. На рис. 8.48 показан типичный пример его использования.
Рис. 8.48. «Дребезг» переключения.
По идее эта схема должна открывать вентиль и пропускать входные импульсы, если ключ разомкнут. Ключ связан с землей (а не с шиной +5 В) из-за особенности биполярных ТТЛ-схем (в противоположность КМОП-элементам), состоящей в том, что вы должны обеспечить отвод тока от входа ТТЛ в состоянии низкого уровня (0,25 мА для LSTTL), в то время как в состоянии высокого уровня входной ток близок к нулю. Кроме того, обычно в устройствах имеется шина земли, удобная для подсоединения к ней ключей и других органов управления. При использовании такой схемы возникает проблема, обусловленная «дребезгом» контактов ключа. За время порядка 1 мс после замыкания ключа его контакты входят в соприкосновение друг с другом обычно от 10 до 100 раз. Вы получите в итоге форму сигналов, указанную на рисунке; если бы выход подключался к счетчику или регистру сдвига, то они наверняка отреагировали бы на каждый дополнительный импульс, вызванный этим дребезгом контактов.
На рис. 8.49 показано, как разрешить эту проблему.
Рис. 8.49. Схема подавления дребезга.
При первом же соприкосновении контактов триггер изменит свое состояние и в дальнейшем уже не будет реагировать на последующий дребезг, поскольку двухпозиционный однополюсный ключ не может совершать колебания до противоположной позиции. В результате дребезг выходного сигнала будет отсутствовать, как и показано на диаграмме. Такая схема подавления дребезга широко используется; так, микросхема `279 имеет четыре SR-триггера в одном корпусе. К сожалению, такая схема имеет небольшой недостаток. Дело в том, что первый импульс, возникающий на выходе вентиля после того, как он откроется, может оказаться укороченным: это можно определить по моменту, замыкания ключа по отношению к входной серии импульсов. То же самое относится и к конечному импульсу последовательности (разумеется, что и ключи без подавления дребезга имеют те же проблемы). В тех случаях, когда этот нежелательный эффект может оказать какое-то значение, применяется схема синхронизатора, которая позволяет его устранить.
Многовходовые триггеры. На рис. 8.50 показана еще одна простая схема триггера. В ней использованы вентили ИЛИ-НЕ: высокий уровень на входе устанавливает соответствующий выход триггера в состояние низкого уровня. Устанавливать или сбрасывать триггер различными сигналами можно благодаря наличию нескольких входов. На этом схемном фрагменте нагрузочные резисторы не используются, поскольку входные сигналы формируются где-нибудь в другом месте (с помощью стандартных выходов с активной нагрузкой).
Рис. 8.50.
8.17. Тактируемые триггеры
Триггеры, выполненные на двух вентилях, как показано на рис. 8.47 и 8.50, обычно называют RS (от английских слов: set — «установка» и reset — «сброс»), или асинхронными триггерами. Посредством подачи соответствующего входного сигнала они могут быть установлены в то или иное состояние. RS-триггеры удобно использовать в схемах защиты от дребезга, а также во многих других случаях, однако более широкое применение получили триггеры, схема которых несколько отличается от рассмотренной. Вместо пары асинхронных входов они имеют один или два информационных входа и один тактирующий вход. В момент подачи тактирующего импульса выходное состояние триггера либо изменяется, либо остается прежним, в зависимости от того, какие сигналы действуют по информационным входам.
Простейшая схема тактируемого триггера приведена на рис. 8.51.
Рис. 8.51. Синхронизированный триггер.
От рассмотренной выше схемы она отличается наличием двух вентилей («SET» и «RESET»). Легко проверить, что таблица истинности для этого триггера будет иметь вид
где Q n + 1 — состояние выхода Q после подачи (n + 1)-го тактового импульса, а Q n — до его поступления. Главное отличие этой схемы от предыдущей состоит в том, что входы S и R в этом случае должны рассматриваться как информационные и сигналы, присутствующие на этих входах в момент поступления тактового импульса, и определяют, что произойдет с выходом Q.
У этого триггера есть один недостаток. Дело в том, что изменение выходного состояния в соответствии со входными сигналами может происходить в течение всего отрезка времени, на котором тактовый импульс имеет высокий уровень. В этом смысле он еще подобен асинхронному RS-триггеру. Эта схема известна также под названием «прозрачный фиксатор», потому что выход «насквозь просматривает» вход в течение интервала действия тактового сигнала.
Всесторонние возможности триггерных схем раскроются после введения новых, нескольких отличных от рассмотренных конфигураций, которые представляют собой триггер типа «ведущий-ведомый» (двухступенчатый) и триггер, запускаемый по фронту.
Триггеры типа «ведущий-ведомый» и триггеры, запускаемые по фронту. Эти типы триггеров наиболее распространены. Информация, поступившая на входные линии этого триггера к моменту возникновения перехода или «фронта» тактового сигнала, определяет, каким будет состояние выхода в последующий интервал времени. Такие триггеры выпускаются в виде недорогих ИМС и всегда используются в этом виде, но для того чтобы понять, как они работают, имеет смысл рассмотреть их внутреннюю структуру. На рис. 8.52 показаны принципиальные схемы так называемых D-триггеров.
Рис. 8.52. D -триггеры с пуском по фронту.
Информация, поступившая на D-вход, передается на выход Q после подачи тактового импульса. Рассмотрим принципы действия триггера типа ведущий-ведомый (рис. 8.52, a). Если тактовый сигнал имеет высокий уровень, разрешается работа вентилей 1 и 2, через которые ведущий триггер (вентили 3 и 4) устанавливается в состояние, соответствующее D-входу: Μ = D, Μ' = D'. Вентили 5 и 6 закрыты, поэтому ведомый триггер (вентили 7 и 8) сохраняет свое предыдущее состояние. Когда тактовый сигнал перейдет в состояние низкого уровня, входы ведущего триггера отключатся от D-входа, а входы ведомого подключатся к входу ведущего, в результате последний передаст свое состояние ведомому триггеру.
После этого никакие изменения на выходе произойти не смогут, так как ведущий триггер заблокирован. С приходом следующего тактового сигнала ведомый триггер отключится от ведущего, а ведущий воспримет новое состояние входа. С точки зрения внешних сигналов триггер, срабатывающий по фронту, ведет себя точно также, однако внутри он работает по-другому. Принцип его действия нетрудно разобрать самостоятельно. Схема, показанная на рис. 8.52, б, представляет собой распространенный D-триггер 74 семейства ТТЛ, срабатывающий на положительном перепаде. В рассмотренном ранее триггере типа «ведущий-ведомый» данные на выход передавались по отрицательному перепаду тактового импульса.
В номенклатуру стандартных ИМС, выпускаемых промышленностью, входят триггеры, срабатывающие как по одной, так и по другой полярности перепада. Кроме того, большинство триггеров имеют также асинхронные входы S и R. Они могут устанавливаться или сбрасываться как высоким, так и низким уровнем в зависимости от типа триггера. На рис. 8.53 показано несколько популярных триггеров.
Рис. 8.53. D - и JK -триггеры.
Стрелка обозначает динамический вход (срабатывание по фронту), а кружок — инверсию. Таким образом, изображенная на рисунке схема 74 представляет собой сдвоенный D-триггер, который срабатывает по положительному перепаду и имеет асинхронные входы S и R, активные по низкому уровню. Схема 4013 представляет собой сдвоенный D-триггер семейства КМОП, срабатывающий по положительному перепаду и имеющий асинхронные входы S и R, активные по высокому уровню. Интегральная схема 112 — это сдвоенный JК-триггер типа ведущий-ведомый, срабатывающий по отрицательному перепаду и имеющий асинхронные входы S и R, активные по низкому уровню.
JK-триггер. По принципу действия JK-триггер аналогичен D-триггеру, но имеет два информационных входа. Его таблица истинности имеет вид:
Если на входы поступают противоположные сигналы, то на очередном фронте тактового импульса выход Q воспроизводит значение J-входа. Если оба входа J и К имеют низкий уровень, то состояние выхода не изменится. И наконец, если на обоих входах высокий уровень, триггер будет совершать «переброс» (менять свое состояние на каждом тактовом импульсе), т. е. работать в счетном режиме).
Предупреждение. Некоторые старые типы JK-триггеров представляют собой «ловушку для единиц». Этот термин вы не найдете ни в одной документации, он означает явление, которое может привести неосведомленного человека к весьма неприятным последствиям. Дело в том, что если на интервале, когда ведомый триггер открыт тактовым сигналом, вход J и К (или оба одновременно) на какой-то момент изменит свое состояние, а затем до окончания тактового сигнала вернется в исходное, то это кратковременное состояние триггер запомнит и в дальнейшем он будет вести себя так, как если бы это состояние сохранилось. В результате триггер может переброситься на следующем тактовом перепаде, даже если сигналы, действующие в момент этого перепада на входах J и К подтверждают предыдущее состояние. Это может привести, мягко говоря, к своеобразному поведению. Проблема возникает из-за того, что эти триггеры были сконструированы в предположении, что тактовый импульс имеет очень короткую длительность, в то время как в действительности тактирование всегда производится сигналом конечной длительности. Если используется триггер типа «ведущий-ведомый», следует соблюдать меры предосторожности, либо вообще избегать их, применяя более надежные триггеры, работающие по фронту. Две хорошие альтернативы, которые используют истинно запуск по фронту, это приборы `112 и `109. Оба представляют собой сдвоенные (два в одном корпусе) JK-триггеры с асинхронными S- и R-входами, активными по низкому уровню. Устройство `112 срабатывает по отрицательному фронту тактового сигнала, а устройство `109 — по положительному.
Схема `109 имеет интересную особенность, а именно, K-вход у него инверсный, поэтому иногда его называют JK-триггер с запретом. Таким образом, если вы соедините входы J и К вместе, то получите D-триггер. Для перевода его в счетный режим вы заземляете вход К', а на входе J устанавливаете ВЫСОКИЙ уровень.
Делитель на 2. Легко построить схему делителя на 2, используя способность триггеров работать в счетном режиме. На рис. 8.54 показаны два способа построения такого делителя. JK-триггер работает в счетном режиме, когда оба входа имеют ВЫСОКИЙ уровень, производя на выходе сигнал, показанный на рисунке. Вторая схема также будет совершать перебросы, так как ее D-вход подключен к собственному выходу Q и в момент поступления тактового импульса на D-входе всегда действует инверсия по отношению к текущему состоянию триггера. Частота сигнала на выходе в любом случае будет равна половине входной частоты.
Рис. 8.54. Схемы деления на 2 .
Синхронизация информации и тактирование. В связи с последней схемой возникает интересный вопрос: не получится ли так, что триггер не сможет переброситься, так как состояние D-входа изменяется почти сразу же вслед за тактовым импульсом? Другими словами, не начнет ли схема сбиваться, если на ее входе происходят такие странные явления? Этот вопрос можно сформулировать и следующим образом: в какой точно момент по отношению к тактовому импульсу D-триггер (или какой-нибудь другой) анализирует состояние своего входа? Ответ такой: для любого тактируемого устройства существует определенное «время установления» t уст и «время удержания» t уд . Для того чтобы схема работала правильно, информация должна поступать на вход не позднее чем за время t уст до возникновения тактового перепада и оставаться неизменной по крайней мере в течение времени t уд после него. Например, для триггера 74НС74, t уст = 20 нc и t уд = 3 нc (рис. 8.55).
Рис. 8.55. Время установления данных и время удержания.
В рассмотренной схеме счетного триггера требование к времени установления будет сохраняться неизменным в течение как минимум 20 нc, предшествующих очередному тактовому перепаду. Может показаться, что при этом нарушается требование к времени удержания, но это не так. Минимальное время распространения сигнала с тактового входа на выход составляет 10 нc, и D-триггер, включенный в счетном режиме, будет иметь неизменное состояние D-входа в течение по меньшей мере 10 нc. Большинство современных устройств вообще не представляют требований ко времени удержания (имеют t уд = 0). Если сигнал на D-входе изменяется на интервале времени удержания, то может возникнуть любопытный эффект, носящий название «метастабильное состояние», при котором триггер не может определить, в какое состояние он должен перейти. Об этом явлении мы вскоре еще упомянем.
Деление на число, большее чем 2. С помощью каскадного соединения счетных триггеров (выход Q каждого предыдущего триггера подключен к тактическому входу последующего) легко получить «делитель на 2n », или двоичный счетчик. На рис. 8.56 показана схема четырехразрядного асинхронного счетчика и даны его временные диаграммы.
Рис. 8.56. 4-разрядный счетчик.
Заметим здесь, что если выход Q каждого триггера непосредственно действует на тактовый вход следующего, срабатывание триггеров должно происходить по спаду (заднему фронту) сигнала на тактовом входе (показано кружком инверсии). Эта схема представляет собой счетчик-делитель на 16: на выходе последнего триггера формируются прямоугольные импульсы, следующие с частотой, равной 1/16 частоты входного тактового сигнала. Схема называется счетчиком, поскольку информация, присутствующая на четырех входах Q, может рассматриваться как 4-разрядное двоичное число, которое изменяется от 0 до 15, увеличиваясь на единицу с каждым входным импульсом. Этот факт отражает временная диаграмма на рис. 8.56, б, на которой СЗР означает «старший значащий разряд», МЗР-«младший значащий разряд», а изогнутые стрелки, облегчающие понимание, указывают, какими перепадами вызываются изменения сигналов. Этот счетчик, как вы увидите в разд. 8.25, выполняет настолько важную функцию, что выпускается в виде большого числа модификаций, выполненных в виде однокристальных микросхем, включая такие форматы счета, как 4-разрядный, двоично-десятичный и многоцифровой. Соединяя эти счетчики каскадно и воспроизводя их содержимое с помощью цифрового индикатора (например, светодиодного) можно легко построить схему подсчета каких-либо событий. Если разрешить прохождение импульсов на вход счетчика в течение ровно 1 с, то получится счетчик частоты, который будет воспроизводить значение частоты путем подсчета числа периодов в секунду. В разд. 15.10 приводятся схемы этого простого, но очень полезного устройства. Промышленностью выпускаются однокристальные счетчики частоты, в состав которых входят дополнительно генератор, схемы управления и вывода на индикацию. Триггер такого устройства показан на рис. 8.71.
На практике простейшая схема каскадирования счетчиков посредством соединения каждого выхода Q со следующим тактовым входом имеет некоторые интересные проблемы, связанные с покаскадной задержкой распространения сигнала по цепочке триггеров. По этой причине лучше использовать схему, в которой один и тот же тактовый сигнал подается одновременно на все входы. В следующем разделе мы будем рассматривать эти синхронные тактируемые системы.
8.18. Последовательностная логика — объединение памяти и вентилей
После того как мы изучили свойства триггеров, посмотрим, что можно получить, если объединить их с рассмотренной ранее комбинационной (вентильной) логикой. Составленные из вентилей и триггеров схемы, представляют собой наиболее общую форму цифровой логики.
Синхронные тактируемые системы. Мы уже упомянули в предыдущем разделе, что последовательностные логические схемы, в которых для управления всеми триггерами используется общий источник тактовых импульсов, имеют ряд преимуществ. В таких синхронных системах все действия происходят сразу же после возникновения тактового импульса и определяются тем состоянием, которое имеет место непосредственно перед его возникновением. Общая структура подобной системы показана на рис. 8.57.
Рис. 8.57. Классическая последовательностная схема: регистры памяти и комбинационная логика. Эту схему можно легко реализовать с использованием однокристальных регистровых ПМЛ (см. разд. 8.27).
Все триггеры объединены в один общий регистр, представляющий собой не что иное, как набор D-триггеров, у которых тактовые входы соединены вместе, а индивидуальные D-входы и выходы Q выведены вовне. Каждый тактовый импульс вызывает передачу уровней, присутствующих на D-входах, на соответствующие выходы Q. Блок, состоящий из вентилей, анализирует состояние выходов регистра и внешних входов, вырабатывает новую комбинацию сигнала для D-входов регистра и выходные логические уровни.
Эта с виду простая схема обладает очень большими возможностями. Рассмотрим пример.
Пример: деление на 3. Попробуем построить схему синхронного делителя на 3 с помощью двух D-триггеров, тактируемых входным сигналом. В этом случае D 1 и D 2 будут входами регистра, Q 1 и Q 2 — eгo выходами, общая тактовая линия будет представлять главный тактовый вход (рис. 8.58).
Рис. 8.58.
1. Выберем три состояния:
Q 1 Q 2
______
0 0
0 1
1 0
0 0 (т. е. первое состояние)
2. Определим, что должно быть на выходах комбинационной схемы, для того чтобы получить последовательность этих состояний, т. е. что должно поступать на D-входы, для того чтобы получить требуемые состояния на выходах:
3. Построим вентильную схему, которая, с помощью имеющихся выходов, позволяла бы получить требуемые состояния на выходах. В общем случае можно использовать карту Карно, но для данного простого примера можно сразу увидеть, что D 1 = Q 2 , D 2 = (Q 1 + Q 2 )'. Этому соответствует схема на рис. 8.59.
Рис. 8.59. Схема деления на 3 .
Легко проверить, что эта схема работает так, как и было задумано. Так как она является синхронной, или тактируемой, сигналы на обоих выходах изменяются одновременно (если же выход первого триггера непосредственно подключить к тактовому входу второго, то получится асинхронный счетчик). В общем случае предпочитают использовать синхронные (или тактируемые) системы, так как они имеют более высокую помехоустойчивость. Это обусловлено тем, что к моменту возникновения тактового импульса триггеры находятся в установившемся состоянии, а на схемы, в которых входные сигналы анализируются только по фронтам тактовых импульсов, не действуют помехи, возникающие за счет емкостных связей от других триггеров или по каким-либо другим причинам. Еще одно преимущество состоит в том, что в тактируемых системах переходные состояния (вызванные задержками, в результате чего выходные сигналы изменяются не одновременно) не вызывают на выходах ложных сигналов, поскольку система не воспринимает никаких изменений, которые происходят после возникновения импульса. Далее мы проиллюстрируем это на ряде примеров.
Запрещенные состояния. Что произойдет со схемой деления на 3, если ее триггеры каким-то образом окажутся в состоянии (Q 1 , Q 2 ) = (1, 1)? Это может произойти при включении питания, так как начальное состояние триггеров предсказать невозможно. Из схемы видно, что первый тактовый импульс переведет ее в состояние (1, 0) и далее она будет функционировать как положено. В таких случаях важно производить проверку запрещенных состояний, поскольку схема может случайно оказаться в одном из них. (С другой стороны, все возможные состояния системы можно определить на начальном этапе разработки.) Диаграмма состояний, показанная для данного примера на рис. 8.60, может оказаться полезным диагностическим инструментом. Если в системе используются и другие переменные, то обычно для каждого перехода рядом со стрелкой записываются условия. Стрелки могут идти в обоих направлениях, а также из одного состояния к нескольким другим.
Рис. 8.60. Диаграмма состояний схемы деления на 3.
Упражнение 8.24. Постройте синхронную схему деления на 3 с помощью двух JK-триггеров. Это можно выполнить (16 различными способами) без использования вентилей или инверторов. Когда вы будете составлять таблицу требуемых значений для входов J 1, K 1 и J 2, К 2 , не забудьте, что для каждой точки J , К существуют две возможности. Например, если выход триггера переходит из 0 в 1, то J , К = 1, X (где Х — любое значение). Наконец, проверьте, не будет ли схема застревать в запрещенном состоянии (это наблюдается в четырех из 16 возможных решений этой задачи).
Упражнение 8.25. Постройте синхронный 2-разрядный реверсивный счетчик: он имеет тактовый вход и вход управления ( U / D' ); выходы являются выходами триггеров Q 1 и Q 2 . Если вход U / D имеет ВЫСОКИЙ уровень, то он работает как обычный двоичный счетчик, а если НИЗКИЙ, то он считает в обратном направлении — Q 2 Q 1 = 00, 11, 10, 01, 00…
Диаграмма состояний как инструмент проектирования. Диаграмма состояний может оказаться полезной при разработке последовательной логики, особенно в тех случаях, когда переходы из одного состояния в другое могут происходить различным путем. Создавая такую схему, нужно сначала выбрать совокупность единственных состояний системы и каждому из них присвоить собственное имя (т. е. двоичный адрес). Здесь потребуется не менее n триггеров, где n — наименьшее целое, для которого 2n больше или равно числу различных состояний системы. Далее устанавливают правила переходов из одного состояния в другое, т. е. все возможные условия для входа в каждое состояние и выхода из него. Таким образом, задача построения последовательной логики свелась к задаче построения комбинационной логики, которую всегда можно решить с помощью известных методов, например карты Карно. Реальный пример показан на рис. 8.61. Заметим, что здесь могут иметь место состояния, из которых нет перехода к другим состояниям (например, «получение диплома»).
Рис. 8.61. Диаграмма состояний.
Регистровые ПЛМ. Программируемые логические ИС (ПМЛ и ПЛМ, смотрите разд. 8.15) выпускаются как с вентилями, так и с синхронно тактируемыми D-триггерами на одном кристалле. Они известны как регистровые ПМЛ и ПЛМ и являются идеальными для построения последовательностных схем. Вы узнаете, как это делать в разд. 8.27.
8.19. Синхронизатор
Интересно использование триггеров в последовательных схемах в качестве синхронизаторов. Предположим, что в синхронную тактированную систему с триггерами поступает внешний управляющий сигнал и вы хотите использовать состояния этого сигнала для управления некоторым действием. Например, сигнал от измерительного прибора или экспериментальной установки может указывать, что данные готовы для передачи в ЭВМ. Так как экспериментальная установка и ЭВМ работают совершенно независимо друг от друга, т. е. асинхронно, необходимо иметь метод, который позволил бы установить порядок в работе двух систем.
Пример: синхронизатор импульсов. Еще раз рассмотрим в качестве примера схему, в которой триггер подавителя дребезга разрешает прохождение последовательности импульсов (разд. 8.16). Эта схема открывает вентиль всякий раз, когда ключ замкнут, независимо от фазы, подаваемой на него импульсной последовательности, в результате первый или последний импульс могут оказаться укороченными. Задача состоит в том, что замыкание ключа происходит асинхронно с последовательностью импульсов. В некоторых случаях важно, чтобы все тактовые импульсы имели только полные периоды, и тогда нужно использовать схему синхронизации, подобную представленной на рис. 8.62.
Рис. 8.62. Синхронизатор импульсной последовательности.
При нажатии кнопки «пуск» на выходе вентиля 1 возникает ВЫСОКИЙ уровень, но до появления заднего фронта очередного импульса на выходе Q триггера сохранится НИЗКИЙ уровень. В результате на выход вентиля 3 И-НЕ будут проходить только полные импульсы. На рис. 8.62 показаны временные диаграммы. Кривые со стрелками показывают, какие действия вызываются соответствующими перепадами. Как видно из диаграммы, изменения Q происходят сразу по заднему фронту входного сигнала.
Логические состязания и «всплески». Рассмотренный пример позволяет осветить тонкий, но предельно важный вопрос: что же произойдет, если для переброса триггера будет использоваться положительный перепад? Если вы тщательно проанализируете этот случай, то увидите, что с ПУСКОМ схемы все будет в полном порядке, но если кнопку СТОП нажать в тот момент, когда на входе действует НИЗКИЙ уровень, произойдет весьма неприятная вещь (рис. 8.63).
Рис. 8.63. Логические состязания могут вызвать появление коротких импульсов.
Так как последний (3) вентиль И-НЕ будет открыт до тех пор, пока на выходе триггера не установится НИЗКИЙ уровень (задержка для НС или LSTTЛ составляет приблизительно 20 нс), на выходе схемы возникает короткий «выброс» или «всплеск» (глитч). Это — классический пример «логического состязания». Принимая определенные меры предосторожности, подобных ситуаций можно избежать, что и показывает рассмотренный пример. «Всплески» — это страшная вещь, если они заведутся в ваших схемах. Кроме всего прочего, их невозможно увидеть на осциллографе и вы можете просто не узнать об их существовании. «Всплески» могут самым произвольным образом тактировать цепочки триггеров, они могут расширяться или сужаться до полного исчезновения, проходя через вентили и инверторы.
Упражнение 8.26. Покажите, что рассмотренная схема синхронизатора импульсов (рис. 8.62) не вырабатывает «всплески».
Упражнение 8.27. Спроектируйте схему, которая позволяет пропускать один полный отрицательный импульс (из входной последовательности импульсов) на выход после нажатия кнопки.
Несколько замечаний по поводу синхронизаторов: На D-вход триггера сигнал может поступать не только от ключа с подавителем дребезга, но также и от других логических схем. В средствах сопряжения с ЭВМ и других применениях часто бывает нужно передавать асинхронный сигнал в тактируемое устройство. Идеальным решением в этих случаях является использование тактируемых триггеров или синхронизаторов. В рассмотренной схеме, так же как и во всех других логических схемах, необходимо соответствующим образом подключить неиспользованные входы. В данном случае входы S и R нужно подключить так, чтобы они не влияли на работу схемы (для 74 соединить с ВЫСОКИМ уровнем, а для 4013 заземлить), Неиспользуемые входы, не влияющие на выход (например, входы незадействованных вентилей), можно оставлять неподключенными. Это не относится к элементам КМОП, у которых они должны заземляться, чтобы не появился ток в выходном каскаде (более подробно см. гл. 9). Промышленностью выпускается сдвоенный синхронизатор 74120, однако широкого распространения он не получил.
Моностабильные мультивибраторы
Моностабильный мультивибратор, или одновибратор, является разновидностью триггера (триггер иногда называют бистабильным мультивибратором), в котором выход одного из вентилей имеет емкостную связь со входом другого вентиля, в результате этого схема всегда возвращается в одно состояние. Если с помощью кратковременного входного импульса схему принудительно установить в другое состояние, то она вернется в исходное с задержкой, которая будет определяться величиной емкости и параметрами схемы (входным током и т. п.). Эта схема широко используется для формирования импульсов заданной длительности и полярности. Построение одновибраторов на вентилях и RС-элементах представляет собой довольно сложную задачу. Здесь надо учитывать конкретное выполнение входных вентильных схем, так как напряжение на емкости в одновибраторе может превышать напряжение питания. Чтобы не развивать у читателя дурных привычек, мы не будем давать примеры подобных схем и рассмотрим одновибратор, который выпускается в виде стандартного функционального блока. В реальных устройствах лучше всего использовать одновибраторы в интегральном использовании, создавать же схемы собственной конструкции имеет смысл лишь в случае крайней необходимости, например если на плате имеется свободный вентиль и нет ни одного места для дополнительной микросхемы. Однако, возможно, что это не имеет смысла даже в таком случае.
8.20. Характеристики одновибраторов
Входы. Одновибраторы срабатывают по положительному или отрицательному перепаду, который подан на соответствующие входы. Единственное требование к сигналу запуска состоит в том, что он должен обладать некоторой минимальной длительностью — обычно от 25 до 100 с. При этом он может быть как короче, так и длиннее выходного импульса. Обычно в схеме предусматривается несколько входов; это позволяет использовать для запуска схемы одновибратора несколько сигналов: один по отрицательному перепаду, другие по положительному (напомним, что отрицательный перепад означает переход с ВЫСОКОГО уровня на НИЗКИЙ, а не отрицательную полярность). Дополнительные входы могут также использоваться для запрета запуска. Четыре примера одновибраторных схем показаны на рис. 8.64.
Рис. 8.64. Четыре наиболее распространенных одновибратора и их таблицы истинности.
Стрелками в строках таблиц показаны направления перепадов на входах, при которых происходит запуск. Например, `121 запускается, когда на одном из входов А происходит перепад с ВЫСОКОГО уровня на НИЗКИЙ, при условии что на входе В и на другом входе А действует ВЫСОКИЙ уровень. Схема 4538 представляет собой сдвоенный одновибратор с вентилем ИЛИ на входе. Если используется только один вход, то другой должен быть заблокирован, как показано в таблице. Одновибратор `121 имеет три входа, которые связаны с комбинацией вентилей И и ИЛИ. На входе В установлен триггер Шмитта, что позволяет снизить требования к скорости нарастания входного сигнала и к уровню помех. В состав одновибратора входит также не слишком хороший внутренний времязадающий резистор, который вы можете использовать, если у вас нет желания подключать внешний резистор R. Схема `221 представляет собой сдвоенный вариант схемы `121. Пользователи КМОП-версий могут иметь только сдвоенные варианты схем. Популярная ИС `123 представляет собой сдвоенный одновибратор с вентилем И на входе; на неиспользуемые входы должны подаваться разрешающие сигналы. Заметим, в частности, что он срабатывает и по спаду сигнала на R-входе, если в этот момент на оба входа запуска поданы соответствующие сигналы. Это свойство не является для одновибраторов универсальным и может требоваться или не требоваться, в зависимости от конкретного использования (чаще всего оно не требуется). Схема `423 является той же самой схемой, что и `123, но без этой «особенности». На принципиальных схемах при изображении одновибраторов входной вентиль обычно не показывается. Это позволяет сэкономить место, но создает некоторую путаницу.
Перезапуск. Большинство одновибраторов, например упомянутые ранее `4538, `123 и `423, будут начинать новый цикл отсчета временного интервала, если за время действия выходного импульса на вход поступит новый запускающий импульс. Такие устройства называют одновибратором с перезапуском. Выходной импульс одновибратора будет шире, чем обычно, если перезапуск схемы происходит во время действия выходного импульса и заканчивается по истечении интервала номинальной длительности с момента поступления последнего запускающего сигнала. Одновибраторы `121 и `221 не имеют перезапуска; во время действия выходного импульса они не воспринимают перепады на входе. Большинство перезапускаемых одновибраторов можно включить таким образом, чтобы они не перезапускались. Простой пример подобной схемы показан на рис. 8.65.
Рис. 8.65. Схемы одновибраторов без перезапуска.
Сброс. Большая часть одновибраторов имеет вход сброса, который отменяет все остальные функции. Кратковременный сигнал по входу R обрывает выходной импульс. Этот вход может использоваться для предотвращения выработки выходного импульса в момент включения питания логической системы; однако учтите сделанные выше замечания по схеме `123.
Длительность импульса. С помощью стандартных одновибраторов можно получать импульсы длительностью от 40 нc до нескольких миллисекунд (и даже секунд) за счет подключения внешнего конденсатора, обычно в сочетании с резистором. С помощью устройства, подобного ИС555 (см. разд. 5.14) можно формировать импульсы и большей длительности, но его входные характеристики зачастую создают неудобства. Интервалы времени очень большой длительности лучше всего отсчитывать цифровым способом (см. разд. 8.23). В табл. 8.8 в конце главы приведены данные на большинство применяемых одновибраторов.
8.21. Пример схемы одновибратора
На рис. 8.66 показана схема генератора прямоугольных импульсов с независимой регулировкой частоты и скважности; схема позволяет с помощью внешнего сигнала закрывать выход по отрицательному перепаду выходного импульса.
Рис. 8.66. Самосинхронизирующийся генератор импульсов с внешним запуском.
Токовое зеркало T 1 —Т 3 формирует на С 1 нарастающее напряжение. Когда это напряжение достигает порога верхнего компаратора, равного 2/3 U + , запускается одно — вибратор, который вырабатывает положительный импульс длительностью 2 мкс и устанавливает n-канальный ПТ Т 4 в проводящее состояние и разряжает конденсатор. Таким образом, на С 1 формируется пилообразный сигнал, нарастающий до значения +8 со скоростью, которая задается потенциометром R 2 . Нижний компаратор из пилообразных импульсов вырабатывает прямоугольные импульсы со скважностью, которую с помощью потенциометра R5 можно линейно регулировать в пределах от 0,1 до 99 %. Оба компаратора имеют гистерезис порядка нескольких милливольт (R 8 и R 9 ), наличие которого позволяет предотвратить многократные переходы, возникающие под действием помех. В схеме применен сдвоенный компаратор типа LH393 с малым потреблением, который имеет на выходах схемы с открытым коллектором и диапазон синфазного сигнала на входе от нуля до напряжения питания.
Отличительное свойство этой схемы — ее способность синхронизироваться (работать в старт-стопном режиме) по внешнему управляющему сигналу. При наличии сигнала на входе ОСТАНОВ схема останавливает свой генератор по очередному отрицательному перепаду на выходе. Когда на входе ОСТАНОВ сигнал снова перейдет в состояние НИЗКОГО уровня, генератор сразу же начинает формировать полные периоды: как если бы задний фронт возник в момент снятия сигнала ОСТАНОВ. Дополнительный 3-й вход схемы И-НЕ, который соединен с выходом компаратора, служит для того, чтобы схема не «застревала» при заряженной емкости С 1 . Длительность импульса на выходе одновибратора выбирается достаточно большой, чтобы за это время С 1 мог полностью разрядиться.
8.22. Предостережения относительно одновибраторов
С одновибраторами связан целый ряд проблем, которые не встречаются в других цифровых схемах. Кроме того, существуют некоторые общие принципы, которыми необходимо руководствоваться при их использовании. Остановимся сначала на «патологии» одновибраторов.
Проблемы применения одновибраторов.
Длительность импульса. Для построения одновибраторов используется сочетание линейных и цифровых методов. Так как линейные схемы чувствительны к изменениям U бэ и h 21э от температуры и т. п., одновибраторы также реагируют на изменения температуры и напряжения питания дрейфом длительности выходного импульса. В типовых устройствах, например 4538, длительность выходного импульса колеблется в пределах нескольких процентов при изменении температуры в интервале 0-50 °C и при отклонениях напряжения питания +5 %. Кроме того, разброс параметров от устройства к устройству для ИМС данного типа составляет +10 %. При рассмотрении чувствительности к изменениям температуры и напряжения питания важно помнить, что кристалл (чип) микросхемы может обладать эффектом саморазогрева, а изменение напряжения питания во время действия выходного импульса (например, короткие «всплески» по шине питания) может существенно повлиять на его длительность (или вызвать ложный запуск).
Длинные импульсы. При формировании длинных импульсов емкость конденсатора может превышать несколько микрофарад, что приводит к необходимости использовать электролитические конденсаторы. В этом случае возникает проблема тока утечки (величина которого для конденсаторов малой емкости незначительна), особенно если учесть, что в большинстве одновибраторов во время действия выходного импульса к конденсатору прикладывается напряжение обоих полярностей. Для разрешения этой проблемы можно установить диод или транзистор, либо перейти на цифровые методы формирования задержек с использованием тактовых импульсов и триггерных каскадов, как показано в разд. 8.23. Использование внешнего диода или транзистора повышает чувствительность к температуре и снижает точность задания длительности импульса. Это может также затруднить перезапуск.
Скважность. В некоторых схемах одновибраторов длительность выходного импульса при высокой скважности уменьшается. Типичным примером являются элементы серии ТТЛ 9600–9602, у которых при скважности 60 % длительность выходного импульса постоянна, а при скважности 100 % уменьшается приблизительно на 5 %. Устройство `121 (прекрасное в других отношениях) в этом отношении еще хуже, так как при высокой скважности вообще ведет себя не устойчиво.
Запуск . Если для сигнала одновибраторов используются слишком короткие сигналы, то они могут вырабатывать на входе нестандартные, или «дрожащие», импульсы. Для запускающего импульса задается минимальная длительность, например, для прибора LS `121 она составляет 50 нc, а для 4098 - 140 нс при напряжении питания +5 В и 40 нс при питании +15 В (при повышенном напряжении питания элементы КМОП имеют более высокое быстродействие и повышенную нагрузочную способность).
Помехоустойчивость. Так как в состав одновибраторов входят линейные элементы, их помехоустойчивость обычно хуже, чем у других цифровых схем. Одновибраторы очень чувствительны к емкостным связям вблизи внешних времязадающих элементов R и С. Кроме того, некоторые одновибраторы склонны к ложному запуску от «всплесков» на шине земли или U + .
Паспортные данные. Не забывайте, что характеристики одновибратора (точность выдержки, времени, нестабильность по температуре и напряжению питания) могут значительно ухудшаться на краях рабочего диапазона. В паспортных данных на устройство обычно задается диапазон длительностей выходного импульса, в котором оно имеет хорошие характеристики, и это может ввести в заблуждение. Кроме того, могут наблюдаться различия в тех же самых номерах изделий, когда они выпускаются различными изготовителями. Читайте паспортные данные тщательно!
Развязка по выходу. Вообще, в любом цифровом устройстве, содержащем триггеры, выходы должны быть буферированы (с помощью вентиля, инвертора, возможно, интерфейсной схемы типа линейного формирователя — возбудителя или драйвера) до того, как они поступят на кабель или внешний прибор. Если устройство типа одновибратора подключается к кабелю непосредственно, то его работа может стать неустойчивой за счет влияния нагрузочной емкости и отражения сигналов в кабеле.
Общие соображения по применению одновибраторов. При использовании одновибраторов для формирования импульсной последовательности убедитесь в том, что на «концах» не будут вырабатываться дополнительные импульсы, т. е. что сигналы, разрешающие запуск одновибратора, сами не производят его запуск. Это легко сделать, если тщательно просмотреть таблицу истинности. Не увлекайтесь применением одновибраторов, хотя заманчиво ставить их везде, где только можно, и наблюдать, как импульсы от них разбегаются во все точки схемы.
Схемы, содержащие большое число одновибраторов, свидетельствуют о неопытности разработчика. Кроме указанных проблем существуют еще и дополнительные сложности, связанные с тем, что схема, насыщенная одновибраторами, не допускает существенной регулировки тактовой частоты, поскольку все выдержки времени в схеме настроены на определенный порядок возникновения событий. Если есть возможность выполнить те же функции без применения одновибраторов, ею надо воспользоваться. Пример такой схемы показан на рис. 8.67.
Рис. 8.67. Цифровая задержка ( б ) заменяет задержку на одновибраторах ( а ).
Предположим, что требуется сформировать по спаду входного сигнала импульс, а затем еще один, задержанный по отношению к первому. Эти импульсы могут использоваться для предварительной установки схемы и запуска операций, перед которыми требовалось выполнить некоторые предварительные действия, о завершении которых сообщает спад входного сигнала. Так как для управления остальной частью схемы скорее всего используются тактовые импульсы, будем предполагать, что сигнал на D-входе снимается синхронно с передним фронтом такта. В схеме на рис. 8.67, а входной перепад запускает первый одновибратор, который по концу своего выходного импульса запускает второй одновибратор.
В схеме на рис. 8.67, б то же самое делается при помощи D-триггеров, которые вырабатывают на выходе импульсы с длительностью, равной одному периоду тактовой частоты. В отличие от асинхронной схемы, в которой триггеры включаются каскадно, данная схема является синхронной. По ряду причин, в частности связанных с помехоустойчивостью, предпочтительнее применять синхронные системы. Если необходимо формировать импульсы большей длительности, можно использовать ту же самую схему, но взяв при этом другую тактовую частоту, которую можно получить путем деления основной (высокочастотной) тактовой последовательности с помощью цепочки счетных триггеров. В этом случае основной тактовый сигнал может использоваться для тактирования D-триггеров. Как правило, в синхронных системах имеется несколько серий тактовых импульсов, образованных в результате деления основной частоты.
8.23. Получение выдержки времени с помощью счетчиков
Как мы уже подчеркивали, существует целый ряд причин, по которым следует избегать применять одновибраторы в логических устройствах. На рис. 8.68 изображена еще одна схема, где триггер и счетчик заменяют одновибратор для формирования импульса большой длительности.
Рис. 8.68. Формирование длинных импульсов цифровым способом.
Интегральная схема 4060 представляет собой 14-разрядный двоичный счетчик (14 каскадно включенных триггеров) типа КМОП. Фронтом входного сигнала на выходе устанавливается высокий уровень, который разрешает работу счетчика. После отсчета 2n -1 импульсов на выходе Q n и возникает ВЫСОКИЙ уровень, в результате чего триггер и счетчик сбросятся. Данная схема позволяет с высокой точностью вырабатывать импульсы большой длительности, причем последняя может изменяться с коэффициентом 2. В состав счетчика 4060 входит также внутренний генератор, который заменяет внешний источник тактовых импульсов. Наш опыт говорит, что встроенный генератор имеет бедную частотную характеристику и может (даже в НС-версиях) плохо функционировать.
Вы можете использовать законченные интегральные схемы для задания временных интервалов с помощью счетчиков. Так, схемы фирмы Intersil ICM 7240/50/60 имеют встроенные 8-разрядный и двухдекадный счетчики и необходимую логику для формирования задержек, эквивалентных накопленному числу счета (1-255 или 1-99); устанавливать число Вы можете либо устанавливая перемычки, либо с помощью барабанных переключателей. Схема ICM7242 подобна им, но имеет счетчик с установленным жестко значением для деления на 128. Фирма Ехаr выпускает аналогичный прибор, именуемый XR2243, который имеет фиксированный счетчик-делитель на 1024.
Последовательные функции, реалзуемые на стандартных ИМС
Различные сочетания триггеров и вентилей, так же как и рассмотренные ранее комбинационные схемы, могут быть размещены на одном кристалле ИМС. В последующих разделах мы дадим обзор наиболее часто используемых типов ИМС в соответствии с выполняемыми функциями. Так же, как и в случае с небогатой комбинационной логикой, программируемые логические устройства (ПМЛ и GAL, в частности) создают притягательную альтернативу для использования жестких последовательных функций. Мы также об этом будем говорить после рассмотрения стандартных функций.
8.24. Фиксирующие схемы-защелки и регистры
Фиксирующие схемы-защелки и регистры позволяют запоминать комбинацию двоичных разрядов, которая подана на их входы, и хранить ее после изменения входных сигналов. Регистр можно построить с помощью набора D-триггеров, но в этом случае число входов и выходов у него будет больше, чем требуется обычно. Так как в данном применении нет необходимости использовать раздельно тактовые и установочные входы, эти цепи можно объединить для всех триггеров; это позволит сократить число выводов ИМС и даст возможность разместить в стандартном 20-контактном корпусе 8 триггеров. Так, например, популярная схема `574 представляет собой 8-разрядный D-регистр с фиксацией по положительному фронту и с выходами на три состояния; схема `273 подобна ей, но имеет возможность сброса вместо выходов на 3 состояния. На рис. 8.69 представлен 4-разрядный D-регистр с прямым и инверсными выходами.
Рис. 8.69. 4-разрядный D -триггер типа 74LS175
Термин «фиксатор» или «защелка» обычно служит для обозначения специального типа регистров, которые в открытом состоянии отслеживают на своих выходах входные сигналы, а в закрытом хранят их последнее значение. Так как термин «фиксатор» стал неоднозначным, часто для того, чтобы отличить друг от друга два очень сходных устройства, используют термины «прозрачный фиксатор» (собственно «защелка») и «регистр D-типа». Например, схема `573 представляет собой 8-разрядный «прозрачный фиксатор», эквивалентный `574 D-регистру.
Существуют некоторые вариации фиксаторов/регистров, такие как: а) запоминающие устройства с произвольной выборкой (ЗУПВ), которые позволяют вам как записывать, так и читать массив регистров (обычно большой), но только по раздельности. ЗУПВ имеют размеры от нескольких байт до 1 Мбайт и более и обычно используются в системах памяти микропроцессорных устройств (см. гл. 10 и 11); б) адресуемые защелки, устройства многоразрядной фиксации, которые позволяют осуществлять доступ к отдельным битам, не изменяя содержимого остальных; в) защелка или регистр, встраиваемые в большой кристалл, например цифро-аналоговый преобразователь; такое устройство необходимо, когда входные данные существуют не все время (в течение тактирующего фронта), поскольку внутренний регистр может хранить данные.
В табл. 8.9 в конце главы представлены данные большинства полезных регистров и защелок. Отметим такие особенности этих устройств, как: вход разрешения, сброс, выход на 3 состояния и «противоположное» расположение выводов (входы на одной стороне корпуса, а выходы - на другой). Последнее очень важно, когда вы используете для размещения печатную плату.
8.25. Счетчики
Как мы уже видели ранее, соединяя триггеры друг с другом, можно построить счетчик. Существует поразительное множество разнообразных устройств такого типа, выполненных в одном корпусе. Попытаемся выяснить некоторые их характерные особенности.
Объем или размер счетчика. Вы можете найти в популярной 4-разрядной серии как двоично-десятичные, так и двоичные (или шестнадцатеричные, делители на 16). Существуют счетчики и на большее число разрядов — до 24 (но не все доступны), а также счетчики «по модулю n», позволяющие производить деление на целое число n, которое задается с помощью входного слова. Для получения большего числа разрядов счетчики, в том числе и синхронные, можно соединять каскадно.
Тактирование. Среди выпускаемых промышленностью в виде стандартных ИМС счетчиков одни могут тактироваться положительным перепадом, а другие отрицательным. Более существенно, здесь то, является ли счетчик синхронным или асинхронным. В синхронных счетчиках тактирование всех триггеров происходит одновременно, а в асинхронных каждый последующий триггер тактируется выходом предыдущего. В асинхронных счетчиках имеют место переходные состояния, так как начальные триггерные ступени перебрасываются несколько раньше последующих: Например, при переходе от рис. 8.70.
Рис. 8.70. Сдвоенный двоично-десятичный счетчик со сквозным переносом типа 74LS390 .
Сдвоенный двоично-десятичный счетчик со сквозным переносом типа 74LS390. числа 7 (0111) к числу 8 (1000) асинхронный счетчик пройдет через состояния 6, 4 и 0. Это может привести к ложной работе схемы, воспринимающей текущее состояние счетчика, если в ней не будут предусмотрены соответствующие меры. В таких случаях желательно использовать что-либо подобное D-триггеру, чтобы анализировать состояние счетчика только по тактовому перепаду. Асинхронные счетчики работают медленнее синхронных, так как они накапливают задержку распространения. Для облегчения наращивания (путем подключения выхода Q одного счетчика к тактовому входу последующего) асинхронные счетчики должны иметь вход, который работает по заднему фронту, синхронные счетчики тактируются положительным перепадом.
Мы рекомендуем семейство `160-`163 4-разрядных синхронных счетчиков для большинства применений, где не требуется специальных особенностей. Схемы 590 и 582 являются хорошими 8-разрядными синхронными счетчиками. На рис. 8.70 показан сдвоенный двоично-десятичный счетчик типа 390.
Суммирование/вычитание. Некоторые счетчики могут считать в обоих направлениях. Для этого существует две возможности: а) отдельный управляющий вход (+/—), который устанавливает направление счета и б) два раздельных счетных входа для прямого и обратного счета. Например, схемы `191 и `193 соответственно. Схемы `569 и `579 являются 8-разрядными счетчиками, считающими в обоих направлениях.
Предварительная установка и очистка. Большинство счетчиков имеют информационные входы, которые позволяют предварительно заносить в них заданное число. Это, в частности, может потребоваться для построения счетчика по модулю n.
Загрузка может быть как синхронной, так и асинхронной: в устройствах `160-`163 используется синхронная загрузка. Это означает, что ввод данных в счетчик производится по очередному перепаду тактового импульса при условии, что на линии ЗАГРУЗКА действует разрешающий сигнал. Счетчики `190-`193 являются асинхронными, или асинхронно загружаемыми; это значит, что информация вводится в счетчик при наличии разрешающего сигнала «ЗАГРУЗКА» независимо от состояния тактовой цепи. Иногда используется термин «параллельная загрузка», так как все биты загружаются одновременно.
Функция СБРОС (или УСТАНОВКА в «0») является формой предустановки. В большинстве счетчиков вход СБРОС — асинхронный, хотя в некоторых типах используется синхронный СБРОС (например, `162/163).
Прочие особенности счетчиков. В некоторых схемах на выходных линиях используются фиксаторы, которые всегда являются «прозрачными фиксаторами», и следовательно, счетчик может использоваться так, как если бы защелки не было (следует помнить, что любой счетчик с параллельными входами может работать как защелка, однако при этом нельзя одновременно производить счет и хранить информацию). Иногда очень удобно иметь счетчик в сочетании с фиксатором, например в том случае, когда после начала нового цикла счета необходимо воспроизвести или вывести предыдущее значение. В частотомере это позволяет получить устойчивую индикацию с корректировкой после каждого цикла отсчета и не воспроизводить на индикаторе все текущие состояния счетчика, сбрасывая его в нуль после окончания каждого цикла.
Имеются счетчики с выходами на 3 состояния. Они незаменимы для применений, где цифры (или 4-разрядные группы) мультиплексируются на одну шину для отображения или передачи в другое устройство. Например, устройство 779 представляет собой 8-разрядный синхронный двоичный счетчик с выходами на 3 состояния, которые могут работать как параллельные входы. Посредством объединения линий ввода/вывода счетчик размещается в 16-контактном корпусе. Устройство `593 подобно предыдущему, но выполнено в 20-контактном корпусе.
Если вы захотите использовать счетчик вместе с индикатором, то к вашим услугам несколько устройств, объединяющих в одном кристалле счетчик, регистр, 7-сегментный дешифратор и формирователь уровней для управления индикатором. Например, серия 4-разрядных счетчиков 74С925-74С928. Выпускается также схема TIL 306/7, представляющая собой счетчик и индикатор на одном кристалле. Стоит посмотреть на этот прибор, который считает и высвечивает отдельные цифры! На рис. 8.71 показана очень удачная БИС счетчика, которая не требует большого числа дополнительных компонентов.
Рис. 8.71. 8-знаковый универсальный однокристальный счетчик на 10 мГц типа Intersil 7216
(с разрешения фирмы Intersil Inc .)
В табл. 8.10 в конце главы представлены данные большинства счетчиков-кристаллов, которые вы можете использовать. Многие из них находятся только в одном семействе (например, LS или F), так что обязательно проверьте по справочнику перед проектированием.
8.26. Регистры сдвига
Если несколько триггеров соединить так, что выход Q каждого предыдущего триггера будет управлять D-входом последующего, а все тактовые входы будут возбуждаться одновременно, то получится схема, которую называют «регистр сдвига». По каждому тактовому импульсу комбинация «нулей» и «единиц» в регистре будет сдвигаться вправо, а слева через D-вход первого триггера будет вводиться новая информация. Как и во всех триггерных схемах, информация на левом входе, присутствующая непосредственно перед возникновением тактового импульса, будет введена в регистр, и на выходе будет обычная задержка распространения. Таким образом, регистры можно объединить каскадно, не ожидая возникновения режима логических гонок.
Регистры сдвига широко используются для преобразования данных из параллельной формы (n бит поступает одновременно по n независимым линиям) в последовательную (биты один за другим передаются по информационной линии) и наоборот. Они также применяются в качестве запоминающих устройств, особенно в тех случаях, когда данные считываются и записываются всегда одинаковым образом. Регистры сдвига, как и счетчик, и фиксаторы, представлены большим числом разнообразных модификаций. Все наиболее важные моменты, связанные с регистром сдвига, будут рассмотрены ниже.
Объем. 4-разрядные и 8-разрядные регистры являются стандартными. Выпускаются также регистры и с большим объемом (64 бита и больше). Существуют даже регистры с переменной длиной (например, схема 4557 может изменять свою длину от 1 до 64 бит с помощью 6-разрядного входа управления).
Организация. Обычно регистры сдвига являются одиночными, однако выпускаются также сдвоенные, счетверенные и сшестеренные регистры. Большинство регистров сдвига производят сдвиг только вправо, но существуют и регистры со сдвигом в обоих направлениях, такие как `194' и `323', которые имеют вход «направление» (рис. 8.72). Остерегайтесь хитростей типа «двунаправленности» у схемы `95': регистр может сдвигать влево только, если соединить предварительно каждый выход с предыдущим входом, затем произвести параллельную загрузку.
Рис. 8.72. 4-разрядный реверсивный регистр сдвига типа 74LS194.
Входы и выходы. Небольшие регистры сдвига могут производить параллельный ввод и вывод, и обычно это делают, например, схема `395' является 4-разрядным регистром сдвига с параллельным вводом и выводом (ΡΙ/ΡΟ) с выходом на 3 состояния. Большие регистры могут осуществлять только последовательный ввод и вывод, т. е. только ввод в первый триггер или вывод из последнего допускается. В некоторых случаях выводятся несколько промежуточных выходов. Единственный способ разместить как параллельный ввод, так и параллельный вывод в одном малом корпусе — это использовать одни и те же контакты в качестве входов и выходов. Так, например, схема `299 представляет собой 8-разрядный регистр параллельного ввода/вывода (ΡΙ/ΡΟ) в 20-контактном корпусе. Некоторые сдвиговые регистры включают защелки (фиксаторы) на входе или выходе, так что сдвиг может происходить пока данные загружаются или выгружаются. Так же как и у счетчиков, параллельная ЗАГРУЗКА и ОЧИСТКА могут быть либо синхронными, либо асинхронными, например схема `323 подобна схеме `299, но с синхронной очисткой.
В табл. 8.11 в конце главы приводится список сдвиговых регистров. Как всегда, не все типы регистров присутствуют во всех логических семействах, проверяйте по справочникам.
ОЗУ в качестве сдвиговых регистров. Запоминающее устройство с произвольной выборкой можно всегда использовать как сдвиговый регистр (но не наоборот), используя внешний счетчик для генерации последовательных адресов. Эта идея показана на рис. 8.73.
Рис. 8.73. Регистр сдвига большой длины на ОЗУ и счетчике; косая черточка указывает на кратность линий, в данном случае имеется 4-разрядный канал данных ( а ); временная диаграмма для определения максимальной частоты синхронизации при наихудшем распределении временных параметров ( б ); вычисления, показывающие наихудшее распределение задержек в одном такте синхронизации ( в ).
8-разрядный синхронный реверсивный счетчик вырабатывает последовательность адресов для КМОП ОЗУ с организацией 256x4 бит. Такая комбинация ведет себя подобно четырем 256-бит сдвиговым регистрам с направлением сдвига вправо/влево, выбираемым управляющей линией ВВЕРХ/ВНИЗ счетчика. Все остальные входы, как показано на рисунке, служат для разрешения счета. Выбирая быстрые счетчики и память, мы можем достигнуть максимальной скорости 30 МГц (см. временную диаграмму), которая такая же, как и у интегральных (не на много меньше) сдвиговых регистров НС-типа. Этот метод может быть использован для получения очень большого регистра сдвига, если требуется.
Упражнение 8.28. В схеме на рис. 8.73 кажется, что входные данные поступают в ту же ячейку, что и выходные данные при чтении. Тем не менее схема ведет себя подобно классическому сдвиговому регистру на 256 слов. Объясните, почему.
8.27. Последовательностные ПМЛ
Комбинационные (только на вентилях) ПМЛ, которые мы рассматривали выше в разд. 8.15, входят в большое семейство, которое включает устройства с различным числом регистров D-типа на кристалле (называемые «регистровые ПМЛ»). Типичный из этих ПМЛ-16R8-показан на рис. 8.74.
Рис. 8.74. Регистровая ПМЛ 16R8 имеет 8 внешних входов, 8 выходов, линии синхронизации и управления 3-м состоянием. Выходы регистра можно также использовать как входы матрицы И .
(с разрешения фирмы Advanced Micro Devices , Калифорния.)
Программируемая — И/фиксированная ИЛИ матрица типовых комбинационных ПМЛ генерирует входные уровни для 8 синхронно тактируемых регистра D-типа с выходами на 3 состояния; выходы регистра (прямой и инверсный) как и стандартные входные контакты доступны как входы логической матрицы.
Если вы посмотрите снова на рис. 8.57, вы увидите, что ПМЛ с регистрами — это элемент последовательностной схемы общего назначения с определенными ограничениями на число регистров и вентилей, и вы можете конструировать, что хотите, но только в этих пределах. Например, вы можете сделать сдвиговой регистр или счетчик, или сразу оба. На практике вы можете сделать некоторый кусок логики как часть большой схемы, для которой альтернативой является дискретная логика, построенная на вентилях и триггерах. Посмотрим некоторые примеры.
Карты перемычек, создаваемые вручную. Простые проекты могут конструироваться в ПМЛ посредством изображения логики, затем соответствующий образ преобразуется в массив перемычек для программатора ПМЛ. Так, например, предположим, что мы хотим получить 4-входовый мультиплексор с защелкиваемыми выходами. Мы можем записать логическое уравнение для мультиплексной части (т. е. до D-входов триггера) в виде
Q.d = I 0 *S' 0 *S' 1 + I 1 *S 0 *S' 1 + I 2 *S' 0 *S 1 + I 3 *S 0 *S 1
где входы S0 и I 1 - адреса, выбирающие входы I 0 -S3 и «*» и «+» соответственно И или ИЛИ.
Регистровые ПМЛ легко реализуют это с фиксацией результата. Заметим, что мы использовали ИЛИ 3-входовых И, предпочитая это первоначальному декодированию выбранного адреса на двухвходовых вентилях И, так как мы вынуждены использовать сумму произведений (это также быстрее). Окончательная схема показана на рис. 8.75 (заметим, существует тонкость для этой схемы, см. подразд. «Выбросы» в конце этого раздела).
Рис. 8.75. 4-входовый мультиплексор с фиксацией, выполненный на ПМЛ.
PALASM. Для схем какой-либо разумной сложности необходимы некоторые методы логического проектирования ПМЛ. Например, ПМЛ 16L8 имеет 2048 перемычек, а сложный проект может потребовать, чтобы вы прожгли несколько сотен из них, и если вы не необычайно обязательны, то маловероятно, что достигните цели вручную, корректно определив их для ПМЛ-программатора. PALASM (PAL Assembler, торговый знак фирмы Monolithic Memories Inc.), разработанный фирмой Monolithic Memories (впервые создавшей ПМЛ), был одним из первых инструментов. Он берет логическое выражение, подобное тому, которое мы писали выше, и преобразует его в карту перемычек. Производится это посредством программы, но без логической минимизации, поэтому вы должны проделать эту трудную работу сами. Однако PALASM позволяет вам вводить набор тестовых состояний (называемых тестовыми векторами), дающих возможность получить на выходах то, что должно быть результатом ваших логических спецификаций. Таким образом вы можете отлаживать ваши уравнения перед изготовителем ПМЛ.
PALASM широко используется. Существуют листинги исходных текстов (кодов) на языке Фортран, которые могут затем послать карты перемычек для ПМЛ-программаторов (в стандартном «JEDEC»-фopмате) через последовательный порт. Многие ПМЛ-программаторы со встроенными микропроцессорами включают резидентный PALASM такие, например, как у фирм Data I/O, Digiles, Stag, и Structured Resign. Остается только подключить терминал, и вы в работе.
Языки ABEL и CUPL . PALASM — помощник, но серьезному пользователю ПМЛ необходимо большее. Языки логического программирования высокого уровня подобно языкам ABEL (фирмы Data I/O) и CUPL (фирмы Logical Devices) делают программирование ПМЛ (и ПЛМ) легкой работой. Они позволяют вам задавать логику либо через логические булевы уравнения, либо через таблицы истинности, для последовательностных схем вы задаете состояния и правила перехода. Подобно какому-либо хорошему языку высокого уровня, вы можете определять массивы (для набора сигналов, т. е. адресной шины), выражения и промежуточные значения, затем использовать их в других выражениях. Эти языки достаточно «умны» для преобразования таблиц истинности в логические выражения с последующей минимизацией их (также, как и логических булевых выражений) в логически идентичные, окончательный результат получается в форме, которая соответствует логическим ограничениям устройства (т. е. сумма произведений для ПМЛ). Вместо записи сверху вниз явнозаданных логических выражений для ряда значений вам достаточно записать что-то вроде ADDR: [10…FF], которое будет преобразовано в соответствующую логику. Эти языки также позволяют вам определять тест-векторы, с помощью которых тестируется ваша схема, кроме того, тест-векторы могут также посылаться в программатор для проверки запрограммированного кристалла. Наконец, эти языки позволяют получить стандартную документацию на законченный кристалл, что существенно, если вы захотите отлаживать приспособление с этими самодельными устройствами.
С целью конкретизации этих идей, давайте рассмотрим оба примера проектирования как последовательностных, так и комбинационных схем, используя язык CUPL.
Пример использования языка CUPL для проектирования преобразователя из 7-сегментного кода в шестнадцатеричный (комбинационная логика). Наступает время, когда вы захотите использовать желаемый БИС-кристалл, который выполняет определенную функцию (например, калькулятор или хронометр), как часть создаваемого вами устройства. Беда в том, что эти БИС-кристаллы обычно имеют выходы для прямого управления 7-сегментным индикатором, который предпочтительней, чем шестнадцатеричные (или двоичные) выходы, которые вы хотите получить. Давайте спроектируем кристалл-шифратор, который преобразует 7-сегментный код обратно в 4-битовый двоичный, такая функция не реализуется как стандартная микросхема (хотя существует дешифратор из семисегментного кода в двоично-десятичный, 74С915).
Входы представляют отдельные сегментные сигналы, которые всегда помечаются символами a — f (рис. 8.76).
Рис. 8.76. Коды 7-сегментного индикатора.
На рис. 8.76 показано, как цифры представляются на 7-сегментном индикаторе. Заметьте, что возможно двоякое представление «9» и «С», оба из которых должны корректно восприниматься вашей логикой. Для ПМЛ мы выбираем X6L8, 20-контактная комбинационная часть которой логически была показана на рис. 8.45.
Рис. 8.77 представляет входное описание на языке CUPL. Здесь сигналы запуска сегментов а — g обозначают входы (положительная логика), а шестнадцатеричные разряды D0-D3 выходы (отрицательная логика). Язык CUPL позволяет определить промежуточные переменные, которые могут быть использованы в выражениях позднее. В этом случае удобно определить очевидные переменные от zero до next через возможные отображения цифры в терминах сегментных входов. Это просто большие термы произведений (И) от входных сегментных переменных, которые вы можете прочесть из изображений цифр на рис. 8.76.
/** Inputs **/
PIN 1 = a; /* segment a */
PIN 2 = b; /* segment b */
PIN 3 = c; /* segment c */
PIN 4 = d; /* segment d */
PIN 5 = e; /* segment e */
PIN 6 = f; /* segment f */
PIN 7 = g; /* segment g */
/** Outputs **/
PIN 19 = !D3; /* msb of hex encode */
PIN 18 = !D2; /* */
PIN 17 = !D1; /* */
PIN 16 = !D0; /* 1sb */
/** Declarations and Intermediate Variable Definitions **/
zero = a & b & c & d & e & f & !g;
one = !a & b & с & !d & !e & !f & !g
two = a & b & !с & d & e & !f & g;
three = a & b & c & d & !e & !f & g;
four = !a & b & с & !d & !e & f & g;
five = a & !b & с & d & !e & f & g;
six = a & !b & c & d & e & f & g;
seven = a & b & с & !d & !e & !f & !g;
eight = a & b & c & d & e & f & g;
nine = a & b & с & !d & !e & f & g
# a & b & c & d & !e & f & g; /* two ways */
hexa = a & b & с & !d & e & f & g;
hexb = !a & !b & c & d & e & f & g;
hexc = !a & !b & !c & d & e & !f & g
# a & !b & !c & d & !e & f & !g; /* two ways */
hexd = !a & b & c & d & e & !f & g;
hexe = a & !b & !c & d & e & f & g;
hexf = a & !b & !c & !d & e & f & g;
/** Logic Equations **/
D3 = eight # nine # hexa # hexb # hexc # hexd # hexe # hexf;
D2 = four # five # six # seven # hexc # hexd # hexe # hexf;
D1 = two # three # six # seven # hexa # hexb # hexe # hexf;
D0 = one # three # five # seven # nine # hexb # hexd # hexf
Рис. 8.77. Спецификация преобразователя 7-сегментного представления в 16-ричное на языке CUPL .
Окончательно каждый двоичный выходной бит записывается как сумма (ИЛИ) цифровых переменных, при которых этот бит устанавливается. Мы используем уровни отрицательной логики, потому что 16L8 представляет матрицу И-ИЛИ-НЕ. Этим заканчивается логическая спецификация для языка.
Упражнение 8.29. Проверьте для себя правильность нашей работы, записав некоторые из отображаемых символов, через заданные нами промежуточные переменные zero-next .
Язык CUPL сначала использует определение промежуточных переменных для записи выражений D0-D3 прямо в термах входных переменных a — f, работа, которая подобно ассемблеру PALASM должна исполняться нами изначально. В этом случае логические уравнения представлены в желательной И-ИЛИ-НЕ форме. Однако мы не закончили на этом, так как 16L8 (и все другие комбинационные ПМЛ) допускают не более 7 термов произведений для каждой суммы, тогда как мы имеем 9, 8, 9 и 10 соответственно для выходов D0-D3. Одним решением может быть связывание выхода через вторичный вентиль ИЛИ, для того чтобы получить желательное число термов произведений в сумме.
Эта обычно рассматриваемая форма плоха, так как она удваивает задержки распространения, хотя это не так важно в медленных устройствах, подобных этому. Лучшее решение — произвести логическую минимизацию, используя логическую эквивалентность по формуле Моргана, например.
Мы запускаем минимизатор CUPL, который выдает термы произведений (рис. 8.78).
** Expanded Product Terms **
D0 =>
a & b & c & d & !e & g
# a & b & с & !e & f & g
# a & с & d & !e & f & g
# b & с & !d & !e & !f & !g
# !a & !b & c & d & e & f & g
# a & !b & !c & !d & e & f & g
# !a & b & c & d & e & !f & g
D1 =>
a& !b & !c & e & f & g
# !b & c & d & e & f &g
# a & b & с & !d & e & f & g
# a & b & !c & d & e & !f & g
# a & b & c & d & !e & !f & g
# a & b & с & !d & !e & !f & !g
D2 =>
а & !b & !с & d & е & f
# а & !b & c & d & f & g
# а & !b & !с & е & f & g
# !а & b & с & !d & !е & f & g
# !a & b & c & d & e & !f & g
# !a & !b & !c & d & e & !f & g
# a & b & с & !d & !e & !f & !g
D3 =>
a & b & c & f & g
# a & !b & !c & d & e & f
# a & !b & !c & e & f & g
# !a & !b & c & d & e & f & g
# !a & b & c & d & e & !f & g
# !a & !b & !c & d & e & !f & g
D0.oe => 1
D1.oe => 1
D2.oe => 1
D3.oe => 1
Рис. 8.78. Преобразователь 7-сегментного представления в 16-ричное с минимизированными термами произведения.
Взгляните, все удовлетворяет ограничению «7 произведений». CUPL также рисует для вас карту перемычек (рис. 8.79).
Рис. 8.79. Карта перемычек преобразователя 7-сегментного представления в 16-ричное.
Конечно, вы не программируете ПМЛ так, а используете вместо этого прямую загрузку универсального JEDEC программирующего формата. В этом примере язык CUPL, очевидно, делает трудную задачу простой.
Пример использования языка CUPL для программирования автомата-продавца (последовательная схема). Произвольная машина состояний (разд. 8.18) имеет набор состояний и правил перехода для движения между этими состояниями по каждому фронту синхроимпульса. Правила перехода зависят от текущего состояния и от частной комбинации входных уровней, существующих на следующем фронте. Вы можете соорудить машину состояний на программируемой логике, содержащей регистры, если а) существует достаточное число битов в регистре для представления всех возможных состояний (например, с 4-разрядным регистром вы можете иметь до 16 состояний), и б) существует достаточное число входов и логических вентилей для реализации правил перехода.
Как пример, давайте спроектируем регистровую ПМЛ для диаграммы состояний на рис. 8.80.
Рис. 8.80. Диаграмма состояний торгового автомата.
Это — торговый автомат, предназначенный для выдачи бутылки сладкой шипучей жидкости, когда опущено 25 цент или более. Существует некоторый вид монетного интерфейса, который «заглатывает», распознает монету и посылает на наш ПМЛ 2-битовый входной сигнал (С1, С0), действительный для одного такта, показывающего монету, которую опустили (01-5 цент, 10–10 — цент монета, 11–25 — цент монета, 00 — нет монеты). Задача машины состояний добавлять к общему вкладу и формировать выход, называемый «бутылка», когда опущено достаточно монет. Рис. 8.81 показывает спецификацию, выполненную в синтаксисе машины состояний языка CUPL.
/** Inputs **/
Pin = elk; /* clock — positive edge */
Pin = c0; /* coin type — low bit */
Pin = c1; /* coin type — high bit */
Pin = reset; /* reset input */
/** Outputs **/
Pin 18 = !Q0; /* bit 0 of state variable */
Pin 17 = !Q1; /* bit 1 */
Pin 16 = !Q2; /* bit 2 */
Pin 15 = !bottle; /* bottle disgorge command */
/* Define machine states with symbolic names;
"enough" = 25 cents or more */
$define S0 'b'000
$define S5 'b'001
$define S10 'b'010
$define S15 'b'011
$define S20 'b'100
$define ENOUGH 'b'101
/* define intermediate variables */
nocoin = !c0 & !c1 & !reset;
nicke1 = c0 & !c1 & !reset;
dime = !c0 & c1 & !reset;
quarter = c0 & c1 & !reset;
/* Define state bit variable field */
field statebit = [Q2..0];
/* Transition rules for vending machine */
sequence statebit {
present S0 if nocoin next S0;
if nicke1 next S5;
if dime next S10;
if quarter next ENOUGH out bottle;
present S5 if nocoin next S5
if nicke1 next S10;
if dime next S15;
if quarter next ENOUGH out bottle;
present S10 if nocoin next S10
if nicke1 next S15;
if dime next S20;
if quarter next ENOUGH out bottle;
present S15 if nocoin next S15
if nicke1 next S20;
if dime next ENOUGH out bottle;
if quarter next ENOUGH out bottle;
present S20 if nocoin next S20
if nicke1 next ENOUGH out bottle;
if dime next ENOUGH out bottle;
if quarter next ENOUGH out bottle;
present ENOUGH next S0; }
Рис. 8.81. Спецификация торгового автомата на языке CUPL .
Как и прежде, мы начнем с определения входных-выходных контактов. Заметим, что мы добавили вход reset (сброс) так, чтобы вы могли перейти к начальному состоянию S0 (нет монеты). Затем мы определим состояния, потом правила перехода между ними. Если какие-либо выходы, либо регистровые, либо комбинационные, необходимо генерировать в течение состояний или переходов между состояниями, они определяются в то же самое время. В этом примере выход «бутылка» специфицируется как раздельный выходной регистр, т. е. выходные состояния дешифрировать не нужно. Фактически нужен только выход, а биты Q0-2 машины состояний могут быть представлены во внутренних регистрах, которые не генерируют прямо выводы; некоторые программируемые логические устройства имеют также внутренние регистры в дополнение к обычным выходным регистрам.
Заметим, что вы должны определить точно переход из некоторого состояния в себя, также, как мы делали для входа «нет монеты». Неопределенное условие безусловно сбрасывает состояние во все нули. Это происходит потому, что эти условия собираются в комбинационную логику для выставления на D-входы регистров и, таким образом, если условие не удовлетворяется, то соответствующий D-вход не подтверждается. Рис. 8.82 показывает вывод из языка CUPL.
** Expanded Product Terms **
Q0.d =>
!Q0 & !Q1 & cQ & !reset
# !Q0 & !Q2 & cO & !reset
# Q0 & !Q2 & !c0 & !reset
# Q0 & !Q2 & c1 & !reset
# !Q0 & !Q1 & Q2 & c1 & !reset
Q1.d =>
!Q1 & !Q2 & !c0 & c1 & !reset
# !Q0 & Q1 & !Q2 & !c1 & !reset
# Q1 & !Q2 & !c0 & !c1 & !reset
# Q0 & !Q1 & !Q2 & cO & !c1 & !reset
Q2.d =>
!Q0 & !Q1 & Q2 & !reset
# Q1 & !Q2 & c1 & !reset
# !Q2 & c0 & c1 & !reset
# Q0 & Q1 & !Q2 & c0 & !reset
bottle.d =>
!Q2 & c0 & c1 & !reset
# !Q0 & !Q1 & Q2 & c0 & !reset
# !Q0 & !Q1 & Q2 & c1 & !reset
# Q0 & Q1 &!Q2 & c1 & !reset
statebit =>
Q2, Q1, Q0
Рис. 8.82. Выход CUPL для торгового автомата.
Ничего очевидного или простого в логике, поскольку и состояние автомата (S0-S5) и входящие переменные (С0-1) определены в виде двоичных чисел, а логика работает по отдельным битам. Таким образом, результирующая логика не сильно связана с первоначальным описанием состояний (рис. 8.81). Фактически, конкретный выбор состояний (возрастающий двоичный код 0–5) мог бы быть различным, это полностью изменило бы результирующую логику. В этом случае этот пример легко укладывается в ограничениях ПМЛ 16R6 (8 термов произведений на регистр): если это не так, мы могли бы попытаться переопределить состояния, что часто приводит к более простой логической реализации. Заметим, что вход сброса действует, заменяя безусловность всех D-входов, которую мы задали посредством нашего задания промежуточных переменных «нет монеты», «5 цент» и т. д.
Упражнение 8.30. Проконтролируйте правильность конечных логических выражений, посредством проверки нескольких правил перехода. Вы должны испытать все переходы от 00, или от «5 центов», или «10 центов» к какому-либо другому состоянию.
Упражнение 8.31. Хорошие торговые автоматы имеют размен. Перерисуйте диаграмму состояний (рис. 8.80) так, чтобы были состояния (сколько?) для каждого возможного числа разменов. Модифицируйте правила перехода соответственно. Гарантируйте, чтобы ваш усовершенствованный автомат выполнял свою основную работу — выдачу бутылок.
Упражнение 8.32. Нарисуйте диаграмму состояний и правил перехода для электронного комбинационного замка. Он должен открываться только тогда, когда четыре цифры набраны в правильном порядке. Какая-либо ошибка должна сбрасывать его.
Возможные применения программируемых логических интегральных схем (ПЛИС)
Для выполнения некоторых функций ПЛИС подходит как нельзя лучше. Вот самые важные области применения и преимущества ПЛИС:
Автоматы. Как и в предыдущем примере, ПЛИС естественным образом вписывается в произвольный синхронный автомат. Было бы неразумно использовать матрицу из D-триггеров и дискретную комбинационную логику, когда ПЛИС способна выполнить те же функции в одном недорогом и мощном корпусе.
Замена произвольной логики. Во многих схемах вы можете обнаружить узлы и клубки из вентилей, инверторов и триггеров, называемых с пренебрежением «произвольная логика» или «клей». ПЛИС обычно сокращает число корпусов в 4 и более раз. Кроме того, при использовании ПЛИС схема становится более понятной, поскольку применение большого числа вентилей означает, что всю необходимую вентильную обработку можно сделать при вводе в регистры (при этом выходы становятся строго синхронными) вместо того, чтобы комбинировать выходы регистра с вентилями (при этом выходы не будут строго синхронными); см. рис. 8.83.
Рис. 8.83. Программируемое логическое устройство ( а ); обычная дискретная логика ( б ).
Гибкость. В ряде случаев вы не совсем представляете себе, как, в конце концов, должна работать ваша схема, тем не менее вы должны как-то ее завершить, чтобы иметь возможность с ней «поиграть». Здесь ПЛИС как раз к месту, так как в отличие от дискретной логики на некотором этапе вы имеете возможность заменить одну на другую без перемонтажа. Схемы на ПЛИС приобретают характер программ.
Несколько версий. С помощью ПЛИС можно спроектировать одну единственную схему и затем изготавливать несколько различных версий устройства, выпуская платы с различно запрограммированными ПЛИС. Например, вы могли бы иметь компьютер, который содержит кристаллы памяти либо на 256К, либо на 1М, причем изменения касались бы только ПЛИС.
Скорость и комплектация. При использовании ПЛИС проектирование схемы в общем случае можно выполнить гораздо быстрее (если вы, разумеется, хорошо ориентируетесь в этой области). Более того, вам потребуется всего несколько типов ПЛИС, а не несколько дюжин типов стандартных схем средней интеграции. Действительно, всего две новых ПЛИС GAL (базовая матричная логика) благодаря программируемости своей внутренней архитектуры (и связей) заменят целый набор ПМЛ. В частности, 20-выводная GAL16V8 и 24-выводная GAL20V8 каждая может имитировать по 21 стандартных ПМЛ. Более того, их можно запрограммировать как «помесь» ПМЛ (например, нечетное число регистров).
Расширение функций ПМЛ. Входы/выходы. Выводы выходов с 3 состояниями, подключенные внутри кристалла к входам матрицы И, можно использовать в качестве входов. Например, ПМЛ 16L8, показанная на рис. 8.45, имеет 16 входов (прямых и инверсных) на матрицу И; 10 из них обозначены как входные выводы, а 6 являются цепями обратной связи с выходов с 3 состояниями. Эти 6 выводов можно превратить в «перманентные» входы путем блокировки соответствующего выхода (подключить пару прямой/инверсный к управлению И); с другой стороны, эти входы могут работать в двух направлениях за счет блокировки формирователей с 3 состояниями, соответствующими некоторой логической переменной.
«Супер-ПМЛ». Ранее мы уже отмечали, что наиболее гибкая программируемая логика соответствует оригинальным ПМЛ, среди которых самыми известными являются стираемые КМОП-варианты фирм Lattice, VTI, Altera и др. ПМЛ GAL фирмы Lattice, например, использует программируемую логику с электрическим стиранием, так что вы можете перепрограммировать кристалл. Более того, выходные структуры («макроячейки») сами программируемы, — каждый выход может быть как регистром, так и комбинационной схемой с прямым и инверсным выходом. Похожей программируемостью обладают линия активации 3-го состояния и линия включения обратной связи (последняя может подключаться до и после буфера с 3 состояниями или к соседнему выходу); см. рис. 8.84. В результате, вы можете имитировать любую обычную 20-выводную ПМЛ, используя только один корпус GAL16V8 (и любую обычную 24-выводную ПМЛ, используя GAL20V8). Это позволяет сохранять перечень комплектующих изделий в управляемых границах. Фирма Altera имеет линию программируемой КМОП-логики, которая допускает ультрафиолетовое стирание по типу ЭППЗУ (в корпусе ИС над кристаллом имеется окно из кварцевого стекла). Такие устройства называют СПЛИС — стираемая программируемая логическая интегральная схема.
Рис. 8.84. Программируемая макроячейка базовой матричной логики.
Самая маленькая ИС из этой серии (ЕР320) имеет выходные макроячейки и имитирует все 20-выводные ПМЛ, точно также, как GAL16V8. Более того, она маломощна в отличие от «прожорливых» оригинальных ПМЛ (см. ниже). Наконец, фирма Altera выпускает несколько более крупных СПЛИС, а также программируемые микросеквенсеры и т. п. Фирмы Cypress и VTI также выпускают стираемую программируемую КМОП-логику с макроячейками. Другим подходом к созданию программируемой логики является ОЗУ-подобная вентильная матрица фирмы Xilinx. Впечатляющие кристаллы этой матрицы содержат огромные блоки конфигурируемой логики, причем конфигурация связей хранится во внутреннем ОЗУ кристалла (энергозависимая память). Эта память загружается от внешней памяти после включения питания либо от микропроцессора; кроме того, она может самозагружаться с использованием памяти типа энергонезависимого ПЗУ.
Скорость и мощность. Оригинальная ПМЛ на биполярных транзисторах, разработанная на фирме Monolithic Memories (и быстро скопированная National и AMD) потребляла значительный ток — около 200 мА для 16L8/16R8, и имела задержку распространения 40 нс. Последующие биполярные ПМЛ «половинной мощности» были вполне приемлемы — 90 мА и 35 нc. Однако самые быстрые ПМЛ потребуют все еще уйму мощности; например, время распространения ПМЛ 16R8D и 16Р8-7 фирмы AMD составляет соответственно 10 и 7,5 нс, но потребляют они 180 мА. (макс). КМОП-приборы существенно лучше: GAL (GAL20V8-15Q) «1/4 мощности» фирмы Lattice потребляют 45 мА при задержке 15 нс, ЕР320-1 фирмы Altera обладают задержкой 25 нс при токе 5 мА. Но что более важно для маломощных устройств, так это то, что кристаллы фирмы Altera (а также ПМЛ серии Ζ фирмы AMD) могут работать в резервном режиме с «нулевой мощностью». Конструкторы будущих структур программируемой логики, наверняка, сохранят эту здоровую тенденцию к повышению скорости и снижению мощности; современная программируемая логика, этот «пожиратель ватт», начинает уходить в прошлое!
Выбросы. ПЛИС, конечно, удивительная вещь, но вы можете, ненароком, оказаться в затруднительном положении, если не будете помнить о возможности логических состязаний. На рис. 8.85 показан 2-входовый мультиплексор, выполненный самым обычным способом; показаны ПМЛ — реализация и эквивалентная схема.
Рис. 8.85. Исключение глитча в ПМЛ; а — 2-входовый мультиплексор; б — для исключения глитча добавляется избыточный терм произведения; в — карта Карно с избыточным термом.
Здесь все выглядит как-будто прекрасно, но схема имеет один изъян: когда оба входа (А и В) находятся в состоянии высокого уровня, а линия ВЫБОР меняет состояние, на выходе, как показано, возможен выброс. Это объясняется тем, что внутренние задержки по цепям S и S' могут быть не равны, что приведет к появлению переходного состояния, в котором на одном из входов вентилей И будет низкий уровень. Избавиться от этого можно, использовав избыточный терм А*В, который будет гарантировать отсутствие выбросов, в чем вы можете легко убедиться.
Упражнение 8.33. Покажите, что дополнительный терм устраняет все возможности для появления выбросов.
Упражнение 8.34. Какие логические термы следует добавить к 4-входовому мультиплексору (рис. 8.75) для устранения выбросов.
С помощью карт Карно вы можете наглядно убедиться в существовании этих так называемых логических рисков; карта Карно для 2-входового мультиплексора рис. 8.85, а приведена на рис. 8.85, в. Каждая группа на карте представляет один терм произведения, который образует вход вентиля ИЛИ. Истинное значение на выходе ИЛИ появляется в том случае, когда любой из термов произведения имеет истинное значение; но переход между группами произведений может приводить к выбросам, если переменные первой группы снимаются, до того, как будут назначены переменные второй группы.
«Противоядие» (которое мы использовали и ранее) состоит в добавлении избыточных термов, гарантирующих, что любые переходы между логическими «1» будут включены в один терм произведения. Другими словами, любые единицы, которые лежат в соседних рядах или столбцах, будут покрыты группой произведения. Это предписание можно дать в обобщенной форме, связанной непосредственно с булевым логическим выражением, а не с картой Карно. Это удобно для логических функций, зависящих от более, чем 4-х переменных.
В предыдущем примере представлены так называемые статические выбросы, поскольку выход будет оставаться статическим. Существуют также динамические выбросы, проявление которых заключается в том, что выход, который должен сделать один-единственный переход, начинает многократно переходить из состояния в состояние. При использовании программируемой логики можно избежать этих внутренних гоночных условий. В общем средства проектирования такие, как PALASM, ABEL и CUPL не пытаются решать эти проблемы. Если хотите, они делают все, чтобы ухудшить ситуацию, поскольку их логические оптимизаторы усердно работают по исключению таких избыточных термов.
8.28. Разнообразные последовательностные схемы
Появление на рынке большого числа разнообразных БИС и СБИС (имеющих более 1000 вентилей на кристалле) дает возможность использовать достаточно сложные устройства, выполненные на одном кристалле. В этом разделе мы приведем несколько выборочных примеров.
Память типа «первый вошел-первый вышел» (FIFO) в некотором смысле аналогична регистру сдвига, так как информация, вводимая на входе, в том же порядке появляется на выходе. Однако между ними есть существенное отличие, которое состоит в том, что в регистре сдвига информация «проталкивается вдоль него» по мере ввода и тактирования дополнительных бит, а в запоминающем устройстве типа «первый вошел-первый вышел» данные «проваливаются насквозь» и выстраиваются в выходную очередь с очень малой задержкой. Управление вводом и выводом производится раздельными тактовыми последовательностями, а устройство помнит, какие данные введены и какие выведены. Можно провести полезную аналогию с кегельбаном, где белые и черные игровые шары (биты) возвращаются на исходную позицию. Эти биты вводятся с помощью игральной машины, а время, которое требуется шару для того, чтобы прокатиться по своему лотку, соответствует «задержке при сквозной передаче» в ЗУ типа «первый вошел-первый вышел» (обычно 1-25 мкс). После этого биты приходят на выход и могут забираться пользователем по мере надобности (т. е. асинхронно). Память типа «первый вошел-первый вышел» полезно использовать для буферизации асинхронных данных. Классическим примером является буферирование клавиатуры (или другого входного устройства, такого, как магнитная лента) ЭВМ или другого устройства обработки данных. При использовании этого метода данные не будут теряться в том случае, когда ЭВМ не готова принять очередное выработанное слово — при условии, конечно, что ЗУ незаполнено целиком. Примерами типичных устройств памяти являются 74F433 (ТТЛ, 64 слова по 4 бит каждое, 10 МГц, время «пролета» 4 мкс) и IDT7202 (КМОП, 4096x9,15 МГц, нулевое время «пролета»).
Память типа «первый вошел-первый вышел» не применяется, если устройство, которому вы посылаете данные, может всегда получить их до поступления следующих данных. На компьютерном языке — вы должны гарантировать, что максимальная латентность меньше, чем минимальное время между словами данных (время скрытости данных). Заметим, что память типа «первый вошел-первый вышел» не будет полезна, если получатель данных не готов (не способен) в среднем воспринять приходящие данные.
Умножитель частоты используется для генерации последовательности выходных импульсов с частотой, значение которой связано с тактовой частотой через рациональную дробь. Например, 3-декадный двоично-десятичный умножитель позволяет получать на выходе частоты, составляющие nnn/1000 от входной частоты; nnn-трехзарядное десятичное число, заданное тремя входными двоично-десятичными знаками. Это не то же, что счетчик по модулю n, так как с его помощью на выходе нельзя получить частоту, равную 3/10 входной. Отметим один важный момент: импульсы на выходе умножителя в общем случае не будут следовать равномерно. Они совпадают с входными тактовыми импульсами и образуют чудные комбинации, средняя частота которых задается предварительно. Примерами устройств являются `97 (6-битовый, двоичный) и `167 (двоично-десятичный).
Счетчик частоты. Фирма Intersil имеет хороший набор интегральных счетчиков частоты. Они включают средства блокировки входного сигнала для точного определения интервалов, до восьми цифр двоично-десятичного счетчика, дисплейные формирователи и т. д. Эти кристаллы обычно требуют очень мало внешней схемотехники.
Цифровые вольтметры. Вы можете получить цифровые вольтметры на одном кристалле. Они включают цепи аналого-цифрового преобразователя и необходимой синхронизации, схемы счета и управления дисплеем. Примерами таких устройств являются маломощный 3,5-разрядный АЦП ICL7136 и 4,5-разрядный АЦП ICL7129; оба используют жидкокристаллический семисегментный индикатор и работают от одной батареи 9 В.
Схемы специального назначения. Существуют прекрасные наборы БИС кристаллов для областей, подобных радиосвязи (например, синтезаторы частоты), для цифровой обработки сигналов (умножители/накопители, цифровые фильтры), корреляторы, арифметические устройства), передачи данных (универсальных), асинхронные приемопередатчики, модемы, сетевые интерфейсы, ИС кристаллографирования (декристаллографирования данных, преобразователи последовательных форматов). Часто эти кристаллы используются совместно с устройствами на базе микропроцессоров и многие из них не могут работать в одиночку.
Кристаллы для бытового применения. Полупроводниковая промышленность любит разрабатывать ИС для использования их в изделиях большого рынка. Вы можете получить однокристальные схемы для изготовления цифровых (иди «аналоговых») часов, таймеров, замков, калькуляторов, детекторов дыма, телефонных аппаратов, синтезаторов музыки, генераторов ритма и аккомпанемента и т. д. Что касается радиоприемников, телевизоров, компакт-дисков, то сейчас в этом отношении дело обстоит хуже из-за большой степени интеграции. Синтез речи (и особенно распознание речи) в последнее время получил некоторое развитие; вот почему лифты, автомобили и даже кухонные аппараты обращаются теперь к нам теми голосами, которые мы любим. Судя по всему, следующим большим шагом будет разработка эффективных автомобильных схем (для выполнения функций двигателя, систем предотвращения столкновений и т. п.).
Микропроцессоры. Самым выдающимся примером «чуда» БИС является микропроцессор (компьютер на кристалле). На одной вершине находятся мощные цифровые приборы, подобные 68020/30 и 80386/486 (32-разрядные быстрые процессоры с предвыборной команд, виртуальной памятью, мощнейшие арифметические сопроцессоры) и кристаллы, подобные MicroVAX, которые эмулируют существующие большие компьютеры. На другой вершине — однокристальные процессоры с различными функциями ввода, вывода и памяти, работающие самостоятельно. Например, один из последних образцов, это TLCS-90 фирмы Toshiba (рис. 8.86), представляющий маломощный КМОП микроконтроллер с 6-канальным 8-разрядным АЦП, встроенными таймерами, ОЗУ и ПЗУ, 20-двунаправленными цифровыми линиями ввода/вывода, последовательным портом и двумя портами для управления шаговыми двигателями. Этот прибор больше предназначен для задач управления, чем для проведения вычислений.
Рис. 8.86. Однокристальный микропроцессор со схемами ввода/вывода.
Революция в микропроцессорах не проходила в одиночестве, и мы видим удвоение компьютерной мощности и размера памяти (в настоящее время 1 Мбит, сравните с 16 Кбит на кристалле на время написания первого издания этой книги) каждый год, в то же время цены развиваются драматически (рис. 8.87). Наряду с укрупнением и улучшением процессоров и памяти, последние работы сверхскоростных приборов и больших параллельных архитектур обещают более волнующие события в последующие годы.
Рис. 8.87. Закон Кремниевой Долины : кривая обучения.
Некторые типовые цифровые схемы
Благодаря усилиям полупроводниковой промышленности цифровые схемы удивительно легки и приятны. Почти нет случаев, когда приходится класть цифровую схему на «хлебную доску», как это часто происходит с линейными схемами. Вообще говоря, единственными серьезными проблемами являются синхронизация и шумы.
Мы в последующем расскажем об этом. Здесь уместно проиллюстрировать синхронизацию на нескольких примерах последовательностных схем. Некоторые из этих функций могут быть выполнены с помощью БИС, однако рассматриваемые реализации сделаны на хорошем уровне и позволяют проиллюстрировать, какого типа схемы можно строить с помощью имеющихся средств.
8.29. Счетчик по модулю n
Изображенная на рис. 8.88 схема на каждые n входных тактовых импульсов вырабатывает один выходной импульс. Значение n есть 8-разрядное число, которое вы задаете с помощью двух барабанных шестнадцатеричных переключателей. Схемы `163 являются 4-разрядными синхронными суммирующими счетчиками с синхронной загрузкой (когда вход LD'- низкий) через D-входы. Идея состоит в загрузке дополнительного кода, счете вверх до FF n и перезагрузке по следующему тактовому импульсу. Поскольку мы сформировали значение перезагрузки с помощью источника +5 (с общим заземленным выводом переключателя), то эти уровни являются отрицательно-истинными для отображения набора переключателей, это означает, что загружаемые значения интерпретируются как истинные положительные, равные дополнительному до 1 значению, установленному на переключателях.
Рис. 8.88. Счетчик по модулю n .
Упражнение 8.35. Путем вычисления истинного положительного значения, которое будет установлено на переключателях рис. 8.88, докажите истинность последнего утверждения.
Работа схемы совершенно очевидна. Для каскадирования синхронных счетчиков вы соединяете все тактовые входы вместе, затем соединяете выход «максимальный счет» каждого счетчика с разрешением следующего счетчика. Для схемы `163 выход RCO (ripple-clock output — выход переполнения ПП) выставляет ВЫСОКИЙ уровень при максимальном счете, разрешая второму счетчику посредством установления разрешения (ВЫСОКОГО уровня) на входах ENT и ENP (Разр). Таким образом, ИС1 повышает свое значение на каждый тактовый импульс, а ИС2 повышает свой счет на каждый тактовый импульс после того, как ИС1 насчитает значение F n . Таким образом, два счетчика считают пока не достигнут состояния FF n , в этой точке входы загрузки LD' устанавливаются в истинное значение. Это приводит к синхронной предзагрузке на следующем такте. Здесь мы выбрали счетчики с синхронной загрузкой для того, чтобы избежать логических состязаний (и короткого импульса RCO), которые могут возникнуть в счетчике с асинхронной загрузкой. К сожалению, счетчик при этом делит на n + 1, а не на n.
Упражнение 8.36 . Объясните, что произойдет, если счетчик с асинхронной загрузкой (например, `191) заменить на счетчик с синхронной загрузкой `163. Покажите, в частности, как могут образовываться короткие импульсы. Покажите также, что предыдущая схема делит на n + 1, в то время как при асинхронной загрузке будет осуществляться деление на n (если схема вообще будет работать).
Временная диаграмма. До какой максимальной частоты может считать наш счетчик? Схема 74НС163 имеет гарантированную максимальную частоту счета f макс 27 МГц. Однако в нашей схеме существуют дополнительные временные задержки, связанные с каскадным соединением (ИС2 должна «узнавать», что ИС1 уже достигла максимального счета за время до следующего тактового импульса), и с соединением «загрузка при переполнении». Для изображения максимальной частоты, при которой гарантируется работа схемы, мы должны добавить задержку для наихудшего случая и быть уверенным, что остается достаточно времени да переустановку. Посмотрите на рис. 8.89, где мы изобразили временную диаграмму, показывающую последовательность загрузки, которая выполняется при максимальном счете.
Рис. 8.89. Временная диаграмма счетчика по модулю n и расчет максимальной скорости работы.
Изменение сигнала с НИЗКОГО на ВЫСОКИЙ уровень на каком-либо выходе Q следует за положительным фронтом тактового сигнала максимум через 34 нc. Это интересно (но не относится к делу), что загружаемая последовательность использует выход RCO (переноса); сигнал RCO следует за положительным фронтом тактового импульса, что при максимальной частоте счета составляет максимум 35 нc. Сигнал переноса RCO ИС2 появляется после наличия входного разрешения (при условии, конечно, что это происходит при максимальном счете) максимум через 32 нc. Схема 74НС04 добавляет задержку максимум в 19 нc для генерации сигнала ЗАГРУЗКА' (LD'), которая должна предшествовать сигналу такта (i setup ) как минимум на 30 нc. Что приводит нас к следующему тактовому импульсу; таким образом 1/f макс = (35 + 32 + 19 + 30) нc, или f макс = 8,6 МГц. Что значительно меньше, чем максимально гарантируемая частота счета одного 74НС163.
Упражнение 8.37. Покажите, проведя подобное вычисление, что два синхронных каскадно соединенных счетчика 74НС163 (без загрузки при переполнении) имеют максимальную частоту счета 15,4 МГц.
Конечно, если вам необходима более высокая скорость, вы можете использовать более быструю логику. Проделав те же самые вычисления для логики 74F (для которой максимальная частота счета одного счетчика 74F163 составляет 100 МГц), мы находим f макс = 29 МГц. Нужно отметить устройство `НС40103 при рассмотрении счетчиков по модулю n, которое представляет собой 8-разрядный синхронный вычитающий счетчик с параллельной загрузкой (синхронной или асинхронной), с дешифрацией нулевого состояния и входом сброса в максимальное состояние. Этот счетчик имеет близкого родственника `НС40102, идентичного, за исключением его «организации», сдвоенному двоично-десятичному.
8.30. Мультиплексируемый цифровой индикатор на светодиодах
Этот пример иллюстрирует метод мультиплексного отображения, который заключается в том, что n цифр каждого числа последовательно и быстро воспроизводится на 7-сегментных светодиодных индикаторах. (Могут, конечно, использоваться не только цифровые символы, и конструкция индикаторов может отличаться от распространенной 7-сегментной организации). Коммутация индикаторов применяется для экономии и упрощения: непрерывное воспроизведение каждого знака требует установки для каждой цифры индивидуальных дешифраторов, формирователей и токоограничивающих резисторов, а также индивидуальных связей между каждым регистром и соответствующим дешифратором (4' линии) и между каждым формирователем и соответствующим индикатором (7 проводов); жуткая путаница!
В методе мультиплексирования требуется лишь один дешифратор/формирователь и один набор токоограничивающих резисторов. Кроме того, так как светодиодные цифровые индикаторы выпускаются в виде n-символьных галет, причем соответствующие сегменты всех символов объединены, количество взаимных соединений сокращается довольно существенно. Так, 8-знаковый индикатор требует 15 соединений при использовании этого метода (7 сегментных входов, общие для всех цифр, плюс один катод или анод в цепи возврата каждой цифры), при непрерывном же воспроизведении их потребуется 57. Еще одно любопытное преимущество этого метода состоит в том, что субъективно воспринимаемая глазом яркость будет в этом случае выше, чем при непрерывном свечении всех цифр при той же средней яркости.
На рис. 8.90 изображена принципиальная схема индикации.
Рис. 8.90. Коммутируемый цифровой индикатор для четырех знаков. Числа с внешней стороны графических обозначений соответствуют номерам контактов ИС.
Цифры, которые должны быть воспроизведены на индикаторе, хранятся в регистрах ИС1-ИС4. Вместо регистров можно использовать счетчики, если устройство представляет собой счетный частотомер или набор защелок (триггеров), получающих данные от компьютера или выхода АЦП и т. п. В этом случае при данном методе каждая цифра последовательно вводится на внутреннюю 4-разрядную шину (в рассматриваемом примере через КМОП-буферы с тремя состояниями 4503), дешифрируется и отображается на индикаторе (схема 4511 представляет дешифратор двоично-десятичного кода в 7-сегментный с формирователем сигналов управления цифровым индикатором).
В этой схеме два инвертора используются для получения классического КМОП генератора, работающего на частоте 1 кГц и подающего сигналы на 8-разрядный счетчик-дешифратор 4022. Каждый выход счетчика последовательно устанавливается в состояние ВЫСОКОГО уровня и выводит на шину очередную цифру.
Одновременно он запитывает катод соответствующего индикатора, подавая на него НИЗКИЙ уровень через мощный буфер с открытым коллектором 40107. Счетчик 4022 циклически проходит состояние от 0 до 3, а при достижении числа 4 каждый раз сбрасывается. Мультиплексируемая индикация может работать и при большем количестве цифр. Она повсюду используется в многоцифровых индикаторах на светодиодах. Попытайтесь посмотреть вокруг — перед вашими глазами море цифр и знаков.
Многие БИС, ориентированные на воспроизведение информации, как, например, счетчики, реле времени и часы, содержат встроенную схему коммутации индикатора и даже формирователи. Более того, существуют БИС управления индикацией (например, 74С922 и 74Ц912); они проделывают всю ту работу, которая раньше выполнялась с помощью ИМС средней степени интеграции.
8.31. Привод звездного телескопа
Схема, изображенная на рис. 8.91, была спроектирована для управления приводом Гарвардского 62-дюймового оптического телескопа.
Рис. 8.91. Прецизионный формирователь сигнала переменного тока частотой 60 Гц. Выходная частота равна хх. ххх. Для задания звездной скорости ключи устанавливаются на значение 60 165.
Для питания экваториального привода двигателя (совершающего 1 оборот в день) требуется источник электроэнергии переменного тока, частота которого должна устанавливаться равной любому значению около 60 Гц (скажем, от 55 до 65 Гц). Эта частота не может точно равняться 60 Гц по следующим причинам: а) звезды и Солнце движутся с разной скоростью, поэтому потребуется частота порядка 60,1643 Гц; б) проходя наклонно через атмосферу, звездный свет претерпевает рефракцию; это преломление зависит от зенитного узла и, следовательно, видимое движение будет происходить с неравномерной скоростью; в) иногда может возникнуть желание взглянуть на Луну, планеты или кометы, которые движутся с неодинаковыми скоростями. Было решено использовать 5-значный дискретный умножитель частоты для получения выходных импульсов с частотой следования f вх n/105, где n — пятизначное десятичное число, которое устанавливается на передней панели с помощью двоично-десятичных барабанных переключателей.
Выходная частота умножителя будет порядка 600 кГц, поскольку входная частота f вх формируется стабильным кварцевым генератором и равна точно 1 МГц. На выходе умножителя частота делится на 104 посредством четырех декадных счетчиков, причем последний счетчик выполнен в виде делителя на 5, а после него установлен делитель на 2, служащий для получения симметричных импульсов с частотой 60 Гц. Для стабилизации амплитуды прямоугольной формы выходной сигнал поступает на ограничитель, выполненный на стабилитроне, а затем с помощью 6-звенного НЧ-фильтра Баттерворта с частотой среза f 0 , равной 90 Гц, преобразуется в хороший синусоидальный сигнал. (Можно считать, что фильтр «вычищает» из прямоугольного сигнала высшие гармонические составляющие, или «обертоны»). Далее, с помощью усилителя с «перекомпенсацией», рассмотренного в разд. 4.35, вырабатывается переменное напряжение 115 В.
Выходной сигнал фильтра на экране осциллографа выглядит идеальным, так как 6-звенный фильтр Баттерворта позволяет в данной схеме снизить наибольшую гармонику до 1,5 % от значения амплитуды нефильтрованного сигнала, что означает затухание более чем на 35 дБ. Заметим, что данный метод формирования синусоидальных колебаний удобен лишь тогда, когда частота входного сигнала ограничена узким диапазоном. Входы управления ±10 % позволяют изменять частоту выходного синусоидального сигнала на 10 % за счет того, что коэффициент деления третьего делителя устанавливается равным 9 или 11. Эта ступень представляет собой делитель по модулю n, изображенный на рис. 8.88.
8.32. Генератор последовательности из n импульсов
Генератор последовательности из n импульсов представляет собой широко используемый небольшой прибор для тестирования. По внешнему сигналу запуска (или используя ручной запуск) он вырабатывает на выходе пачку из n импульсов с заданной частотой следования, которая может иметь ряд дискретных значений. На рис. 8.92 показана принципиальная схема генератора.
Рис. 8.92. Генератор последовательности из n импульсов.
Интегральные схемы `НС40102 представляют собой КМОП высокоскоростные 2-декадные вычитающие счетчики, тактируемые непосредственно частотой, выбираемой десятичным делителем, подключенным к 10-МГц кварцевому генератору. Счетчики делителя могут блокироваться либо активным уровнем на выходе A3 (асинхронная загрузка), либо пассивным уровнем на входе переноса (Вх. пер.). Когда запускающий импульс появляется (заметим, что используется `НСТ-серия на входе для совместимости с биполярной ТТЛ), триггер-1 выдает разрешение счетчику, а триггер-2 обеспечивает синхронизацию счета после следующего положительного фронта тактового импульса. Тактовые импульсы проходят через вентиль И-НЕ-3 до тех пор, пока счетчики не достигнут нуля, в это время оба триггера сбрасываются в исходное состояние; осуществляется параллельная загрузка в счетчик числа n, задаваемого двоично-десятичными переключателями, запрещается счет и схема готова для другого запуска. Заметим, что использование резисторов, подключенных к общему проводу, в этой схеме означает, что должны быть использованы двоично-десятичные переключатели в прямом коде (предпочтительнее, чем в дополнительном). Отметим также, что вход ручного запуска должен иметь защиту от дребезга, так как он тактирует триггер. Защита от дребезга не требуется для переключателя режимов, который просто разрешает формирование на выходе непрерывной последовательности импульсов.
Выходной каскад обеспечивает две пары прямых и инвертированных сигналов. Запараллеленные инверторы `НС04 выдают обычный логический размах +5 В благодаря использованию технологии КМОП. Мы запараллелили инверторы для увеличения нагрузочной способности. Схема может обеспечивать по крайней мере ток нагрузки ±10 мА при логических уровнях, отличающихся на 0,3 В от границ напряжения питания. Если вам требуется больший выходной ток, вы можете заменить инверторы на схемы `АС04, запараллеленная пара которых будет давать выходной ток до +50 мА при таких же значениях логических уровней.
Мы добавим пару усилителей, изображенных в прямоугольнике, которые могут управлять логикой, способной работать при напряжении, отличном от +5 В: например, маломощные часто используемые при проектировании КМОП серии 4000В и 74С работают непосредственно от батарей +9 В (они нормально работают при напряжении от 3 до 15 В); НС-логические элементы работают при напряжении питания от 2 до 6 В. Было выдвинуто предложение, чтобы КМОП серия `АС оперировала при напряжении +3,3 В (JEDEC стандарт N08). Интегральные схемы 40109, 14504 и LTC1045 являются преобразователями уровней, это кристаллы с активным выходным каскадом, который запитывается от второго источника питания, который может быть выше или ниже напряжения +5 В. Таким образом, мы получаем чистые логические уровни КМОП-схем.
Патология в логических схемах
Существуют интересные, а иногда и просто забавные ловушки, подстерегающие ничего не подозревающего разработчика цифровых схем. Некоторые из них, такие как логические гонки и тупиковые ситуации, могут возникать независимо от типа используемых логических схем. Другие (как, например, эффект тиристорного включения в кристаллах КМОП) представляют собой «генетические аномалии» того или иного семейства. Ниже мы попытаемся обобщить наш печальный опыт и надеемся, что приведенные анекдоты помогут избежать другим тех же ошибок.
8:33. Проблемы статических режимов
«Тупиковое состояние». Легко попасть в ловушку, построив схему, имеющую «мертвое» состояние. Допустим, имеется какое-то устройство с рядом триггеров, которые в процессе работы проходят через заданные состояния. Кажется, что схема действует превосходно, но в один прекрасный момент она намертво останавливается. Единственный способ заставить ее опять работать — это выключить питание, затем снова его включить. Такая ситуация из-за того, что схема имела «мертвое» состояние (запрещенное состояние системы, которого не удалось избежать), в которое она и угодила под воздействием каких-то переходных помех по цепи питания. При разработке цифровых схем очень важно выявить подобные состояния и строить логику таким образом, чтобы схема могла автоматически восстанавливаться. Как минимум, должен быть предусмотрен сигнал начальной установки (вырабатываемый от кнопки, при включении питания и т. д.), который мог бы возвращать систему в нормальное состояние. При наличии такого сигнала никаких других мер может и не потребоваться (см. упражнение 8.24).
Начальная установка. Этот вопрос возникает при определении состояния системы в начальный момент. В любом случае полезно иметь какой-либо сигнал, который обеспечивал бы начальную установку. Иначе при включении питания в системе могут происходить непонятные вещи. На рис. 8.93 показана подходящая схема. Последовательно включенный со входом вентиля резистор необходим при использовании КМОП-схем, что позволяет избежать повреждения схемы при отключении питания, так как в противном случае электролитический конденсатор будет пытаться запитать систему через защитный диод входного вентиля КМОП. Хорошей идеей является использование триггера Шмитта (4093, `14), благодаря которому снятие сигнала СБРОС происходит чисто. Символ гистерезиса на рисунке означает, что на входе инвертора установлен триггер Шмитта, собранный, например, на ТТЛ 74LS14 (6 инверторов), либо КМОП 40106, либо 74С14.
Рис. 8.93. Схема для формирования сигнала сброса при включении питания.
8.34. Проблемы при переключениях
Логические гонки. Здесь скрываются многие коварные ловушки. Классический случай логических гонок был описан в разд. 8.19 на примере синхронизатора импульсов. В любом случае, когда вентили управляются сигналами от триггеров, необходимо убедиться в том, что в схеме не может возникнуть ситуация, в которой к моменту тактирования триггера вентиль открывается, а по истечении задержки на триггере закрывается. Сигналы, возникающие на входах триггеров, не должны быть задержанными по отношению к тактовым импульсам (еще одно преимущество синхронной системы!). В общем случае задерживайте такты, но не информацию. Необычно легко проглядеть возможность возникновения логических гонок.
Метастабильные состояния. Как уже отмечалось, триггер и любое тактируемое устройство могут сбиться, если изменение сигналов на информационных входах произойдет менее чем за время t уст до возникновения тактового импульса. В худшем случае выход триггера будет буквально совершать колебания в окрестности логического порога в течение нескольких микросекунд (для сравнения: нормальная величина задержки распространения элементов ТТЛ составляет 20 нc). Разработчики логических схем это обычно не принимают во внимание, но подобная проблема может возникнуть в быстродействующих системах, когда потребуется синхронизовать асинхронные сигналы. Такую ситуацию считают виновной во многих таинственных сбоях ЭВМ, но мы смотрим на это предположение скептически. В этом случае требуется лишь установить цепочку синхронизаторов или «детектор метастабильных состояний», который будет сбрасывать триггер.
Скос фронтов тактовых импульсов. Скос фронтов тактовых импульсов оказывает большее влияние на схемы КМОП, чем на ТТЛ. Такая проблема возникает в том случае, когда для тактирования нескольких соединенных между собой устройств используется сигнал с большим временем нарастания (рис. 8.94).
Рис. 8.94. Временной сдвиг из-за завала тактовых импульсов.
В рассматриваемом примере два регистра сдвига тактируются фронтом с большим временем нарастания. Это время обусловлено емкостной нагрузкой выхода КМОП, который имеет относительно высокий импеданс (порядка 500 Ом при работе от источника +5 В). Проблема возникает из-за того, что порог срабатывания у первого регистра может оказаться ниже, чем у второго, в результате чего его сдвиг произойдет раньше и последний бит первого регистра будет потерян. Дело еще осложняется тем, что значения пороговых напряжений для устройств на КМОП колеблются в очень широком диапазоне (фактически они могут принимать любое значение в пределах от 1/3 до 2/3 U cc и они принимают!). В подобной ситуации самое лучшее — это располагать корпуса микросхем рядом, тем самым избегать большой емкостной нагрузки по тактовым входам.
Говоря в общем, тактовые входы каких-либо цифровых микросхем должны всегда тщательно обрабатываться. Например, тактовые линии с шумом или «звоном» должны всегда очищаться с помощью вентиля (возможно, с входным гистерезисом) до подачи на синхронизируемый кристалл. У вас, вероятно, возникали проблемы с линиями синхронизации, которые поступали с другой платы или с другого логического семейства. Например, медленная логика 4000 В или 74С, питающая быстрые семейства НС или АС, наверняка вызовет проблемы перекоса импульсов или кратных переходов.
Укороченные импульсы. В разд. 8.29 при рассмотрении счетчиков по модулю n мы отмечали, что в том случае, когда счетчики должны сбрасываться собственным входным сигналом, необходимо ввести задержку для того, чтобы предотвратить появление укороченного импульса. То же самое относится и к импульсам записи в счетчики или регистры сдвига. Укороченные импульсы часто доставляют неприятности, приводят схему к работе на границе устойчивости и вызывают периодические сбои. При разработке схемы следует исходить из наихудшего значения для задержки.
Неопределенные правила. Когда полупроводниковая промышленность нащупывала свой путь, начиная с простейших схем резисторно-транзисторной логики 1960 г., затем ТТЛ- и ТТЛШ-семейства, до высокопроизводительных современных КМОП-семейств, было недопонято значение стандартизации выводов, спецификаций и функциональности. Как пример, схема 7400 (И-НЕ) имела свои выводы вентилей, а схема 7401 (ИЛИ-НЕ с открытым коллектором) имела отличные от нее расположения выводов вентилей. Это создавало такую путаницу, что побудило выпустить «мутант»-схему 7403, которая представляет собой схему 7401, но с разводкой вентилей, как у 7400. Подобное недоразумение случилось со схемой 7490 (двоично-десятичный счетчик) с расположением контактов питания по середине корпуса, а не в углах. (Как ни смешно, но контакты питания, расположенные посредине корпуса, «возвратились» в быстродействующих схемах КМОП, для уменьшения индуктивности и улучшения изоляции.)
Важным наследством этой ранней анархии является «всякая всячина» неопределенных правил, которых мы придерживаемся. Например, популярный `74D-триггер существует в каждом логическом семействе; подача одновременно сигналов установки и сброса приводит к высокому уровню на обоих выходах в каждом семействе, кроме 74С, где это приводит к низкому уровню на выходах! Это не совсем неопределенное правило, поскольку если вы внимательно посмотрите в хорошую документацию, то найдете непоследовательность. На техническом жаргоне это называют «Попался!» (gotcha). Другим любимым нашим примером этого «попался!» является схема `96: 5-разрядный сдвиговый регистр с хитрыми входами загрузки; они могут устанавливаться, но не сбрасываться. Подлинным неопределенным правилом, а фактически очень важным является «время перемены». Это такое количество времени, которое вы должны ожидать после снятия асинхронного входного сигнала для полной гарантии синхронизации тактируемого элемента.
Проектировщиков кристаллов не беспокоило это обстоятельство (хотя проектировщики схем всегда хотели это знать), пока логические семейства, выпускавшиеся ранее 1980 г., не были обойдены улучшенными ТТЛШ и быстрыми КМОП-семействами. Если вы проектируете с применением более ранней логики (например, 74С), наш совет — быть консервативным, например, предполагайте, что время перемены такое же, как время установки данных хотя обычно оно меньше. Так например, у D-триггера 74НС74 минимальное время распространения определяется в 5 не, в то время как минимальное время установки данных составляет 20 нc.
8.35. Прирожденные недостатки ТТЛ и КМОП
В этом разделе в одной его части мы рассмотрим проблемы, причиняющие неудобства разработчику, а в другой — по настоящему ненормальное поведение логических элементов.
Проблемы, причиняющие неудобства. Биполярные ТТЛ-элементы . Не следует забывать, что при низком уровне входы ТТЛ действуют как источник тока (например, 0,25 мА для LS, 0,5 мА для F). Это затрудняет использование RC-цепочек в качестве элементов задержки и подобных элементов, так как они в этом случае должны иметь низкое сопротивление и вам необходимо серьезно подумать, когда вы сопрягаете сигналы линейных устройств с ТТЛ-входами.
Значение порога у элементов ТТЛ (и серий, которые их имитируют — НСТ и ACT) близко к уровню земли, вследствие чего все это логическое семейство в известной степени подвержено влиянию помех (более подробно см. гл. 9). Так как эти логические семейства являются быстродействующими, они воспринимают короткие всплески по шине земли. Такие всплески часто возникают при быстрой смене состояний на выходах, что еще более осложняет проблему.
Биполярные ТТЛ-элементы предъявляют высокие требования к источнику питания: +5 В ±5 % при относительно высокой мощности рассеяния. Наличие токовых всплесков в шинах питания, которые вырабатываются схемами с активной нагрузкой, как правило, требует шунтирования источника питания, в идеальном случае — один конденсатор емкостью 0,1 мкФ на каждый корпус ИМС (рис. 8.96).
Рис. 8.96. Всегда целесообразно использовать устойчивую низкоиндуктивную разводку земли и не скупиться на развязывающие конденсаторы.
КМОП-элементы . Выходы КМОП-элементов подвержены пробою под действием статического электричества. «Смертность» у КМОП действительно подскакивает в зимнее время! Новые семейства с поликремниевыми затворами [НС(Т), АС(Т)] значительно больше страдают, чем их предки с металлическими затворами. Входы КМОП имеют очень большой разброс по значениям порогового уровня; в сочетании с высоким выходным импедансом (200–500 Ом) это приводит к возникновению проблемы скоса фронтов тактовых импульсов (см. разд. 8.34). Когда на выходе сигнал медленно нарастает, могут возникать двойные переключения на выходах. В устройствах на КМОП все неиспользованные входы, включая входы незадействованных вентилей, должны быть обязательно соединены с шиной высокого или низкого уровня.
Интересная врожденная проблема новейших быстродействующих КМОП-семейств в особенности АС и ACT состоит в наличии «подскока» уровня земли. Быстродействующий КМОП-элемент, работающий на емкостную нагрузку, генерирует громадные кратковременные токи по шине земли, приводящие к тому, что потенциал на линии земли, подходящий к корпусу микросхемы, моментально подпрыгивает! В результате этого подпрыгивает и низкий уровень на выходах на том же самом кристалле. На рис. 8.95 показан этот случай.
Рис. 8.95. Буфер 74АС244 на 8 выходов, запускающий 7 нагрузок 50 пФ из «вые.» в «низк», и удерживающий 8-й выход в состоянии «низк.». «Земля» — медная плата (1 унция/кв. фут).
(По рис. 1.1–4 руководства по проектированию улучшенной КМОП-логики.)
В особенности заметьте, что амплитуда этого эффекта от 1 до 2 В не является редкостью. Давайте рассмотрим случай, когда время переключения составляет 3 не, а перепад в 5 В прикладывается к емкости 50 пФ. В результате получаем мгновенное значение тока I = CdU/dt = 83 мА, а так как 8-разрядный буфер может нагружаться непосредственно на такие же восемь нагрузок (при общем токе 2/3 А!), такое поведение схемы не является неожиданным. Эта задача оказывается тяжелее, чем кому-либо представляется, и приводит к спорному новому набору АС/АСТ-схем с «центральным» расположением выводов питания и земли (для снижения индуктивности). На момент написания книги разработчики логики встали по разные стороны: по одну фирма TI, борющаяся за новую разводку выводов, а по другую — фирмы RCA и Fairchild, защищающие традиционную разводку по углам. Мы предостаточно поспорили с обеими сторонами и выявили слабости как противоположных аргументов, так и соперничающих кристаллов. По крайней мере пользователи должны сознавать серьезность этой проблемы и принять меры для сохранения индуктивности шины земли на низком уровне, насколько это возможно, когда используется семейство AC/ACT. Самым лучшим является использование печатных плат с распределенной шиной земли и множеством шунтирующих низкоиндуктивных конденсаторов. Лучший способ, если вам не нужна высокая скорость переключения, отказаться от семейства AC/ACT, а использовать взамен серию HC/HCT.
Аномальное поведение. Элементы ТТЛ. С элементами ТТЛ не связано такое большое число таинственных явлений, как с КМОП. Однако некоторые одновибраторы ТТЛ срабатывают от «глитчей» в цепи питания (или земли) и вообще, как правило, ведут себя в известной степени «нервно». Кроме того, схема, которая прекрасно работает на LS ТТЛ, может давать сбои, когда заменяется AS ТТЛ, из-за более быстрого переключения и увеличения токов потребления по цепям земли и окружающим ее (на этот взгляд серия 74F ТТЛ лучше). В большинстве случаев неправильную работу ТТЛ-элементов можно связать с проблемой помех.
Элементы КМОП. КМОП-элементы способны свести с ума кого угодно! Например, схема может войти в режим «тиристорного защелкивания», если сигнал на входе (или выходе) возникает сразу после включения питания. Результирующий ток (50 мА или более) через диоды входной защиты включит пару паразитных перекрестно связанных транзисторов, которые являются побочным эффектом КМОП-технологии с изолированными переходами (см. рис. 3.50 и разд. 14.16). При этом напряжение питания Ucc закорачивается на землю, кристалл начинает греться и для того чтобы схема снова начала правильно работать, вам потребуется отключить питание. Если это не сделать в течение нескольких секунд, то придется заменить микросхему. Некоторые из новейших КМОП-схем (серия НС с поликремниевыми затворами фирм GE/RCA и National) невосприимчивы к «защелкиванию» даже с входным размахом 5 В выше уровня питания и работают при входном размахе 1,5 В выше уровня питания.
Схема КМОП имеет весьма коварные и странные режимы ложной работы. Один из выходных полевых транзисторов может открыться, что приводит к кодозависимым ложным срабатываниям, которые очень трудно обнаружить. Вход может начать работать как источник тока или токовая нагрузка. Весь корпус может начать потреблять от источника питания существенный ток. Чтобы легче было обнаружить неисправную микросхему, потребляющую большой ток в статическом режиме, рекомендуется последовательно с контактом U cc каждой микросхемы включить резистор 10 Ом (для микросхем, нагруженных на большое число входов, или мощные драйверы, такие, как в серии АС, используйте резистор 1 Ом).
Кроме того, кристаллы КМОП дают большой разброс по входному порогу, а один и тот же кристалл может иметь неодинаковые значения порогового уровня для различных функций, которые выполняются по одному и тому же входу. Так, например, в устройстве 4013 выход Q' при управлении по R-входу переходит в состояние высокого уровня раньше, чем выход Q устанавливается в состояние низкого уровня. А это значит, что сигнал установки нельзя обрывать по изменению Q', поскольку возникающий в этом случае импульс может не сбросить триггер.
Нельзя оставлять входы корпуса КМОП неподключенными. В этом случае схема время от времени может вести себя неправильно. Для того чтобы выявить неисправность, вы поставили щуп осциллографа в какую-то точку схемы и обнаружили там уровень 0 В, как и должно было быть. После этого в течение нескольких минут схема работает прекрасно, а затем снова сбивается! А произошло вот что: осциллограф разрядил неподключенный вход и потребовалось достаточно большое время, чтобы он смог снова зарядиться до порогового уровня. Дальше идет уже чистая фантастика: вы забыли подключить контактный вывод U cc корпуса КМОП, но все-таки схема работает просто идеально! А дело все в том, что она получает питание по одному из своих логических входов (от входа через защитный диод к цепи U cc корпуса). Вы можете не замечать этого в течение довольно длительного времени, пока не возникает ситуация, когда одновременно на всех входах корпуса будет действовать низкий уровень: кристалл потеряет питание и «забудет» свое состояние. В любом случае такой режим не может считаться нормальным, так как выходной каскад не запитан нужным образом и не в состоянии обеспечить номинальный ток. Сложность состоит в том, что подобная ситуация может давать о себе знать лишь эпизодически, поэтому вам придется пробежать не один круг, пока вы, наконец, додумаетесь, что же в действительности происходит.
Схемы, не требующие пояснений
8.36. Удачные схемы
Рис. 8.97 иллюстрирует ряд полезных применений цифровых схем.
Рис. 8.97. а — формирователь импульса по переднему фронту; б — формирователь импульса по спаду сигнала; в — формирователь импульсов по обоим фронтам;
Рис. 8.97. г — синхронный генератор последовательности из 2 n импульсов;
Рис. 8.97. д — регулируемый формирователь импульса по переднему фронту;
Рис. 8.97. е — асинхронный генератор последовательности из 2 n импульсов;
Рис. 8.97. ж - преобразование квадратурного кода в код реверсивного счетчика; используется для определения положения вращения по выходу преобразователя угла;
Рис. 8.97. з — квадратурный генератор синхроимпульсов.
8.37. Негодные схемы
На рис. 8.98 показаны примеры классических ошибок, совершаемых разработчиками при построении цифровых схем.
Рис. 8.98. а — формирователь короткого импульса; б — хронометр с одиночной кнопкой ПУСК/ОСТАНОВ;
Рис. 8.98. в — схема для исключения каждого второго импульса из входной последовательности импульсов с длительностью 1 мкс (тонкий случай); г — ключ с подавителем дребезга;
Рис. 8.98. д — счетный частотомер с буферным регистром.
Дополнительные упражнения
( 1 ) Покажите, как построить JK-триггер с помощью D-триггера и коммутатора-мультиплексора на 4 входа. Подсказка: используйте адресные входы коммутатора в качестве J и К .
( 2 ) Разработайте схему, которая на 7-сегментном индикаторе будет показывать время (в миллисекундах), в течение которого была нажата кнопка. После каждого измерения устройство должно возвращаться в исходное положение. Воспользуйтесь генератором 1,0 МГц.
( 3 ) Разработайте измеритель реакции. После того как «А» нажимает кнопку, загорается светодиод и счетчик начинает отсчет. Когда свою кнопку нажимает «В», светодиод гаснет, а на цифровом индикаторе воспроизводится время в миллисекундах. Позаботьтесь о том, чтобы схема работала нормально даже в том случае, когда «А» успевает отпустить свою кнопку до того, как «В» нажмет свою.
( 4 ) Спроектируйте измеритель периода — устройство, измеряющее число микросекунд в одном периоде гармонического входного сигнала. Установите на входе компаратор на триггере Шмитта для формирования уровня ТТЛ; используйте тактовую частоту 1 МГц. Каждое очередное измерение должно начинаться после нажатия кнопки.
( 5 ) Если вы еще не успели поставить буферный регистр, добавьте его к счетчику периода.
( 6 ) Сделайте так, чтобы схема измеряла время десяти периодов. Кроме того, во время счета должен загореться светодиод.
( 7 ) Сконструируйте электронный секундомер. Кнопка «А» начинает и останавливает счет, кнопка «В» производит сброс. Выход должен иметь вид хх. х (секунды и десятые доли). Считайте, что в схеме имеются прямоугольные импульсы, следующие с частотой 1 МГц.
( 8 ) В некоторых секундомерах используется только одна кнопка (при каждом нажатии выполняется одна из операций цикла: пуск, останов, сброс, затем снова пуск и т. д.).
( 9 ) Спроектируйте высокочувствительный цифровой частотомер для измерения числа периодов входного сигнала в 1 с. Число значащих цифр должно быть достаточно большим. За время каждого цикла счета число, отсчитанное на предыдущем интервале, запоминайте в буферном регистре. Интервалы счета возьмите равными 1, 0,1 и 0,01 с. Полезно добавить в устройство хорошую входную схему, она позволит работать при различных значениях чувствительности. Эта схема представляет собой триггер Шмитта с регулируемыми гистерезисом и точкой запуска (используйте быстродействующий компаратор). Можно добавить также сигнальный вход для уровней ТТЛ. Подумайте над тем, как организовать двоично-десятичный выход: с помощью коммутации или путем параллельного вывода каждой цифры? Задумайтесь на некоторое время.
( 10 ) Сконструируйте схему для регистрации пролета снаряда или пули, используя НС-логику. Летящий снаряд разрывает тонкий провод, пересекающий путь его пролета, затем, преодолев по ходу через некоторое расстояние, он разрывает второй провод. Не забывайте о проблеме дребезга контактов. Считайте, что в вашем распоряжении есть последовательность прямоугольных импульсов с частотой 10 МГц с уровнями ТТЛ, и постройте схему для воспроизведения на индикаторе интервала времени между моментами разрыва двух проводов в микросекундах (4 цифры). Схема должна быть готова к очередному выстрелу путем нажатия кнопки.
( 11 ) С помощью двух схем 74HC42-S («1 из 10») сконструируйте дешифратор «1 из 16». Входной сигнал представляет собой 4-разрядное двоичное число. На выходе должны действовать сигналы с отрицательной логикой (как у схемы 74НС42). Подсказка: в качестве входа старшего разряда используйте вход «Разрешение».
( 12 ) Представьте, что у вас есть четыре ПЗУ на 256 бит семейства ТТЛ, каждое из которых имеет 8-разрядный параллельный адресный вход, выходные схемы с тремя состояниями (в положительной логике) и вход для их отпирания, который использует отрицательную логику (т. е. ПЗУ выдает на выход выбранный информационный бит, когда разрешающий сигнал имеет низкий уровень). Покажите, как с помощью этих устройств, используя любые необходимые средства, построить ПЗУ на 1024 бита. (Возможно, окажется удачным применить схему 74НС138, а может это проще сделать с помощью вентилей.) Воспользуйтесь этими способами.
( 13 ) Придумайте схему, которая хранила бы текущую сумму последовательно вводимых в нее 4-разрядных двоичных чисел. Сохраняйте только 4 разряда результата (т. е. производите суммирование по модулю 16). Аналогичные схемы используются для получения контрольных сумм, которые записываются на носитель информации, чтобы выявить ошибки, например при записи на перфоленту. Считайте, что каждое новое число сопровождается положительным импульсом готовности, которое имеет длительность 1 мкс и уровень ТТЛ. Предусмотрите вход сброса. Таким образом, ваша схема будет иметь общий вид, показанный на рис. 8.99.
Рис. 8.99.
К этой схеме добавьте еще выходной бит, который будет равен 1, если общее число «единиц» всех чисел, поступающих на вход с момента последней установки, нечетно, и 0, если оно четно. Подсказка: с помощью «паритетного дерева» Исключающего ИЛИ можно определить, когда сумма «единиц» в каждом числе будет нечетной; на основе этого постройте схему.
( 14 ) В упражнении 8.14 вы построили схему умножения 2x2, используя карты Карно для каждого выходного бита. А теперь решите ту же задачу, используя операции сдвига и сложения. Для начала запишите произведение тем способом, который известен вам из начальной школы. Этот процесс имеет простую повторяющуюся схему (рис. 8.100) и требует для реализации несколько 2-входовых вентилей (какого типа?), которые будут вырабатывать промежуточные члены ( а 0 Ь 0 и т. п), и 1-разрядных полусумматоров (сумматоры, которые имеют выход переноса, но не имеют входа переноса) для сложения промежуточных членов.
Рис. 8.100.
( 15 ) Теперь по тому же принципу сконструируйте умножитель 4x4 с помощью 4-разрядных полных сумматоров (74НС83) и 16 2-входовых вентилей.