Патология в логических схемах
Существуют интересные, а иногда и просто забавные ловушки, подстерегающие ничего не подозревающего разработчика цифровых схем. Некоторые из них, такие как логические гонки и тупиковые ситуации, могут возникать независимо от типа используемых логических схем. Другие (как, например, эффект тиристорного включения в кристаллах КМОП) представляют собой «генетические аномалии» того или иного семейства. Ниже мы попытаемся обобщить наш печальный опыт и надеемся, что приведенные анекдоты помогут избежать другим тех же ошибок.
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 Ucc и они принимают!). В подобной ситуации самое лучшее — это располагать корпуса микросхем рядом, тем самым избегать большой емкостной нагрузки по тактовым входам.
Говоря в общем, тактовые входы каких-либо цифровых микросхем должны всегда тщательно обрабатываться. Например, тактовые линии с шумом или «звоном» должны всегда очищаться с помощью вентиля (возможно, с входным гистерезисом) до подачи на синхронизируемый кристалл. У вас, вероятно, возникали проблемы с линиями синхронизации, которые поступали с другой платы или с другого логического семейства. Например, медленная логика 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 В выше уровня питания.
Схема КМОП имеет весьма коварные и странные режимы ложной работы. Один из выходных полевых транзисторов может открыться, что приводит к кодозависимым ложным срабатываниям, которые очень трудно обнаружить. Вход может начать работать как источник тока или токовая нагрузка. Весь корпус может начать потреблять от источника питания существенный ток. Чтобы легче было обнаружить неисправную микросхему, потребляющую большой ток в статическом режиме, рекомендуется последовательно с контактом Ucc каждой микросхемы включить резистор 10 Ом (для микросхем, нагруженных на большое число входов, или мощные драйверы, такие, как в серии АС, используйте резистор 1 Ом).
Кроме того, кристаллы КМОП дают большой разброс по входному порогу, а один и тот же кристалл может иметь неодинаковые значения порогового уровня для различных функций, которые выполняются по одному и тому же входу. Так, например, в устройстве 4013 выход Q' при управлении по R-входу переходит в состояние высокого уровня раньше, чем выход Q устанавливается в состояние низкого уровня. А это значит, что сигнал установки нельзя обрывать по изменению Q', поскольку возникающий в этом случае импульс может не сбросить триггер.
Нельзя оставлять входы корпуса КМОП неподключенными. В этом случае схема время от времени может вести себя неправильно. Для того чтобы выявить неисправность, вы поставили щуп осциллографа в какую-то точку схемы и обнаружили там уровень 0 В, как и должно было быть. После этого в течение нескольких минут схема работает прекрасно, а затем снова сбивается! А произошло вот что: осциллограф разрядил неподключенный вход и потребовалось достаточно большое время, чтобы он смог снова зарядиться до порогового уровня. Дальше идет уже чистая фантастика: вы забыли подключить контактный вывод Ucc корпуса КМОП, но все-таки схема работает просто идеально! А дело все в том, что она получает питание по одному из своих логических входов (от входа через защитный диод к цепи Ucc корпуса). Вы можете не замечать этого в течение довольно длительного времени, пока не возникает ситуация, когда одновременно на всех входах корпуса будет действовать низкий уровень: кристалл потеряет питание и «забудет» свое состояние. В любом случае такой режим не может считаться нормальным, так как выходной каскад не запитан нужным образом и не в состоянии обеспечить номинальный ток. Сложность состоит в том, что подобная ситуация может давать о себе знать лишь эпизодически, поэтому вам придется пробежать не один круг, пока вы, наконец, додумаетесь, что же в действительности происходит.