Функционирование и синтез цифровых устройств. Часть 1
Практически все слышали выражение «цифровое управление» и «цифровое устройство».
Многие знают, что практически все современные устройства, начиная от бытовых музыкальных центров, телевизоров или стиральных машин и заканчивая сложнейшими космическими кораблями и искусственными спутниками земли состоят из одиночных микросхем или некоторого их количества.
Некоторым также известно, что микросхемы бывают разные – микропроцессоры, микроконтроллеры, логика, интерфейсные схемы и т.д. и т.п.
Программисты и разработчики знают, какие разновидности микросхем и процессоров бывают, какую архитектуру они имеют, как программируются и т.п.
Но далеко не все знают и понимают, как они устроены внутри, как и из чего они состоят и создаются. И речь идёт не об обобщённой грубо-примитивной функциональной схеме из даташита на ту или иную микросхему, а о том, что кроется за всем известными кубиками типа ALU, REGISTERS, ADC, стрелочками между ними и пр. Сказать что это – арифметико-логическое устройство, регистры, АЦП и т.д. – по сути, не сказать ничего.
Здесь будут описаны общие вопросы синтеза и устройства цифровых устройств на базе простейших логических микросхем типа широко известных и распространённых отечественных К155 (либо их многочисленных аналогах), а также некоторые основы микропроцессорной техники и вопросы сопряжения цифровых и аналоговых схем.
Хотелось бы отметить, что:
1. Практически все цифровые микросхемы и устройства могут быть синтезированы их простейших логических элементов. Исключение составляют «составные» аналого-цифровые схемы типа АЦП, аналоговых мультиплексоров, различных декодеров и пр. Такие схемы будут рассмотрены частично, без подробного анализа их аналоговых узлов.
2. Некоторые (в основном глубоко теоретические) аспекты синтеза и функционирования схем опущены либо упрощены. Это сделано сознательно, т.к. это очень обширные вопросы, на полное изучение которых в специализированных учебных заведениях отводится немало часов лекций и различных практических занятий. Более того, существует немало смежных тем, которые напрямую к синтезу не относятся, но без чёткого понимания которых тяжело что-либо сделать. Например, чтобы спроектировать аппаратный умножитель чисел, необходимо не только уметь синтезировать схемы, но ещё и знать алгоритмы умножения как такового.
3. Быстродействие устройств, синтезированных на обычных лог. элементах обычно невелико.
4. Простейшие логические элементы, типа инверторов, И, ИЛИ и пр. создаются из обычных дискретных элементов (диоды, транзисторы, резисторы). Вопросы их проектирования рассматриваться не будут, т.к. практической пользы от этого мало. Кроме того, в них нередко применяются некоторые «экзотические» детали (наиболее яркий пример – многоэмиттерные транзисторы), которые в дискретном исполнении вообще не выпускаются.
5. Почти во всех примерах статьи присутствует некоторые «практический уклон», т.е. те или иные рекомендации даются с учётом характеристик реальных микросхем. Т.о. данная статья не является 100% лекцией или «примерами» для студентов, когда те или иные задания или схемы часто лишены какого-то практического смысла и направлены лишь на усвояемость той или иной части лекционного материала.
6. Может показаться, что в наше время синтез каких-либо сложных устройств на базе примитивных лог. элементов, триггеров и счётчиков полностью себя изжил. Да, действительно, любой микроконтроллер окажется намного дешевле, а схема с его использованием гораздо быстрее, компактнее и надёжнее, нежели гора 155-х микросхем и сопутствующих им деталей, реализующих те же действия. Но, в то же время, существует немало задач, где простые логические схемы выглядят гораздо логичнее, понятнее и работают быстрее каких-либо сложных микропроцессорных структур. Кроме того, современные, широко применяемые в настоящее время микросхемы программируемой логики ПЛИС являются ни чем иным, как «набором» различных практически дискретных логических элементов и триггеров. Для полноценного использования таких микросхем необходимо в том числе чётко знать и понимать различные подходы и аспекты синтеза цифровых схем.
7. При чтении данной статьи рекомендуется держать под руками какой-нибудь справочник по микросхемам, например, [1].
8. Следует также отметить, что здесь почти не рассматриваются практические аспекты конструирования устройств на базе тех или иных микросхем, они обычно неплохо освещаются в литературе (в той же [1], например) и в статьях в интернете.
9. Подавляющее большинство приведенных здесь схем являются чисто иллюстративными. Поэтому для их реального воплощения «в железе» может потребоваться некоторая доработка (например, определение номиналов деталей, приведение к реально производящимся типам микросхем, какое-то согласование и т.д.).
10. Все предлагаемые в этой статье описания и подходы к синтезу схем и блоков не являются чем-то новым, они многократно описаны в различных учебниках для ВУЗов соответствующей направленности и различных университетских лекциях и методичках для студентов, которые можно найти в интернете. Но, по мнению автора все они, как, в принципе любое учебное пособие, перегружены массой разнообразного теоретического материала и часто привязаны к конкретным учебным программам того или иного ВУЗа. Кроме того, в них крайне мало практической информации и «переходов» от сугубо теоретических схем к их реализациям на базе промышленно выпускаемых микросхем. А университетские «раздробленность» и «разбросанность» материала по разным дисциплинам и курсам сильно затрудняют его понимание. Поэтому, в таких условиях часто возникает ситуация «за деревьями леса не видно».
В силу значительной «обширности темы», повествование разделено на части:
1. Базовые понятия и основные узлы цифровых схем.
2. Промышленно выпускаемые простейшие цифровые схемы.
3. Управляющие автоматы. Принцип микропрограммного управления.
4. Устройство и разработка цифровых вычислительных систем.
5. Сопряжение цифровых и аналоговых схем. Аналого-цифровые устройства.
Часть 1. Базовые понятия и основные узлы цифровых схем ТерминологияУровень сигнала – напряжение на входе или выходе схемы. В подавляющем большинстве случаев измеряется относительно земли.
Цифровые схемы всегда оперируют двоичными сигналами, т.е. такими, в которых присутствуют 2 ярковыраженных уровня (отсюда и название – двоичный сигнал). Эти уровни называют логическим нулём (низкое напряжение) и логической единицей (высокое напряжение). Все остальные уровни являются «нерабочими». Поведение цифровых схем на таких уровнях обычно не описывается и в ряде случаев может оказаться нестабильным. Поэтому, этого следует избегать.
Конкретные напряжения лог. нуля/единицы зависят от схемотехники цифровых элементов и могут отличаться для разных семейств микросхем. Чаще всего это 0в (лог. 0) и +Uпитания (лог. 1). На практике вводится понятие порога срабатывания – некоего напряжения, уровень сигнала выше которого считается лог. 1, ниже – лог. 0.
Очень распространено понятие «уровни ТТЛ». ТТЛ – аббревиатура от «транзисторно-транзисторная логика». Это один из видов внутренней схемотехники цифровых логических элементов и схем. Широко известные отечественные серии микросхем К155, К555 и пр. – ТТЛ схемы. Уровни ТТЛ: лог. 0 – 0в, лог. 1 - +5в. Порог – в среднем +1.4 в, у разных серий микросхем немного отличается. Поэтому, по факту, если на входе 0..+1.4в – это лог. 0, а +1.4в .. +5в – лог. 1. Понятие «напряжение» в цифровой технике упоминается достаточно редко.
Сразу отметим, что большинство современных схем хоть и не являются ТТЛ схемами, но, работают с уровнями напряжений ТТЛ. Благодаря этому, очень редко возникают какие-либо проблемы согласования разных цифровых схем по напряжению. Более подробно – см. часть 5, раздел 5.5 .
Рассмотрим структуру двоичного периодического сигнала – рис. 1.
Рис. 1. Двоичный периодический сигнал.
На рис. 1: - T – период – время через которое сигнал начинает повторяться. Частота сигнала F=1/T. - thi - длительность верхней полочки (высокого уровня) сигнала. - tlow - длительность нижней полочки (низкого уровня) сигнала.
Соотношение thi /T называется скважностью импульса. Это очень важное понятие, широко применяется в различных системах управления. Тактовые сигналы цифровых схем обычно имеют скважность 0.5, т.е. у них длительности высокого и низкого уровней в каждом периоде равны. Сигнал со скважностью, равной 1 – это просто лог. 1, скважность, равная 0 – лог. 0.
Направление тока в цифровых цепях обычно не рассматривается. Оно не зависит от направления распространения информации и зависит лишь от лог. уровня на выходе элемента и того узла, к которому этот выход подключен. Более подробно мы рассмотрим это в 5-й части.
Обозначение типов входов и выходов цифровых элементов/микросхемВнутренняя схемотехника логических элементов в этом цикле статей рассматриваться не будет, рассмотрим лишь существующие типы логических выходов элементов, т.к. в схемах часто учитываются и сознательно используются те или иные особенности.
а) б) в) г) д) Рис.2 Обозначения входов-выходов
На рис. 2: а) обычный (прямой) вход; б) обычный (прямой) выход; в) инверсный вход; г) инверсный выход; д) входы питания либо входы подключения кварцевых резонаторов.
Инверсные входы/выходы широко используются в более сложных схемах – мультиплексоры, дешифраторы и т.д. и т.п., а также в микропроцессорной технике.
Существует 3 типа логических выходов: обычный, с открытым коллектором и с Z состоянием.
«Выход с открытым коллектором». Означает, что на выходном транзисторе отсутствует нагрузочный резистор в цепи коллектора – рис. 3-б. На рис. 3-а приведена примерная схема обычного выхода.
Иногда называют – выход с ОК.
а) б) Рис. 3. Обычный выход и выход с ОК
Когда транзистор закрыт, на выходе лог. 1 (Uпит), в случае с ОК – обрыв.
Когда открыт, это лог. 0 – на выходе практически потенциал земли в обоих случаях.
Выход с ОК можно использовать для согласования узлов – получения на нём какого-то другого напряжения лог. 1. Например, +3.3в с целью согласования с соответствующими узлами. Более подробно мы рассмотрим это в части 5.
В последнее время применяются не биполярные транзисторы, а полевые, но суть и логика работы от этого совершенно не меняется. Единственное отличие в терминологии – здесь уже не ОК, а открытый сток (ОС).
Резистор между +Uпит и выходом называют подтягивающим (pull-up). Если резистор находится между землей и ногой элемента (применяется на входах для гарантированного получения лог. 0), то он называется притягивающим (pull-down).
«Третье состояние выхода», оно же «Z-состояние» выхода. Выход схемы с возможностью перехода в такое состояние называют «тристабильным выходом». Это понятие применяется только к выходам схем и под ним имеется в виду не какое-то напряжение на выходе элемента, как может показаться на первый взгляд. Это просто обрыв, т.е. в этом состоянии выход «висит в воздухе», он фактически отключен от схемы узла, к которому относится.
Практический смысл и применение этой возможности будет рассмотрен ниже – п. 4.6 раздела 4 этой части.
«Выход с повышенной нагрузочной способностью» имеет выходной транзистор повышенной мощности. По напряжению такой выход ничем не отличается от обычного, но способен выдерживать гораздо большие нагрузки. Часто всегда такие выходы являются ещё и с ОК.
а) б) в) Рис. 4. Графические обозначения выходов с ОК (а), Z состоянием (б) и с повышенной нагрузочной способностью (в).
Бит – неделимая единица информации. Может принимать значения 0 и 1. По сути можно сказать, что бит – один двоичный сигнал. Понятие бита применяется очень часто, особенно в вычислительной технике и в процессорах. Иногда бит называют разрядом. Т.е. выражения «8-битный» и «8-разрядный» - совершенно одно и то же.
Тетрада – единица информации, равная 4 битам.
Байт – единица информации, равная 8 битам.
Слово – 4 байта.
Двойное слово – 4 байта.
Эти понятия также очень широко применяются в вычислительной технике
Нагрузочная способность – в общем понимании это ток, который может обеспечить тот или иной элемент схемы на своём выходе.
В ряде случаев, когда в схеме используются лог. элементы одного типа (например, только микросхемы 155 серии), возможна трансформация данного понятия в кол-во входов, которые можно одновременно подключить к выходу элемента.
КЛС или КС – комбинационная (логическая) схема. Это схема, состояние всех выходов которой в момент времени t зависит только от состояния её входов в тот же момент времени t. Т.е. никакой памятью и зависимостями входов от её же выходов такая схема не обладает. Состоит обычно из простых логических элементов, либо каких-то более сложных узлов на их основе.
Быстродействие КС – время, за которое изменение состояний входных сигналов отражается на состоянии выходных. Это время ещё называют временем срабатывания схемы. Оно обычно равно сумме времён срабатывания всех лог. элементов в самой длинной цепочке лог. элементов. Т.о. чем больше элементов участвует в выработке того или иного выходного сигнала схемы, тем меньше её быстродействие.
Триггер – КС, обладающая памятью. Иными словами, состояние выходов в момент времени t может зависеть от их же состояния в момент времени t-1. Такие КС всегда имеют обратные связи. Т.е. ряд её выходов подаются на её же входы.
Особенностью любых триггеров является то, что они способны хранить информацию только во включённом состоянии. При обесточивании схемы они «забывают» то, что в них было записано. Существуют разные типы триггеров, они рассмотрены ниже.
Все прочие узлы – мультиплексоры, демультиплексоры, дешифраторы, микросхемы памяти (в т.ч. простые регистры), счётчики и т.д. и т.п. – синтезируемые схемы, являются сочетаниями КС и триггеров.
Шина – набор однотипных (сходных) по функциональному назначению сигналов (проводников). Например, шина данных (ШД) – сигналы, по которым то или иное устройство получает данные. Часто используется понятие разрядность шины – кол-во одиночных сигналов в ней.
Временная диаграмма – график изменения сигналов на входах-выходах схемы с течением времени. Например – рис. 5.
Рис. 5. Примеры временных диаграмм
Целью построения подобных диаграмм – иллюстрация работы какого-либо узла, либо микросхемы в целом. На одной диаграмме допускается совмещать сигналы с разных элементов схемы, разнородные сигналы и типы выводов. Т.е. можно рисовать и аналоговые и цифровые выводы, входы и выходы и т.д.
Способы передачи информации в цифровых схемахТ.к. вся информация в цифровых схемах всегда представляется в виде двоичных сигналов, то встаёт вопрос – каким образом можно передать те или иные данные по каналам связи. Ведь даже двоичные данные можно передать по-разному. Рассмотрим основные способы представления и передачи двоичных данных.
1. Параллельный код. Это наиболее простой и очевидный способ. Все процессоры выдают данные в параллельном коде. Данные представляются в виде каких-то «элементарных» блоков (тетрада, байт, …) и эти блоки передаются по очереди и отдельно друг от друга. Все биты блока передаются одновременно, т.е. параллельно.
2. Последовательный код. Биты данных передаются последовательно по одному физическому проводу. Соответственно существует 2 подвида передачи – младшими битами вперёд и старшими вперёд.
Для передачи данных, кроме самих сигналов данных, часто нужно передавать ещё, как минимум 2 управляющих сигнала – строб (синхронизация) и подтверждение. Стробом передатчик «говорит» приёмнику о наличии на шине новой порции данных, а подтверждение посылается приёмником для сообщения того, что он принял данные. В ряде случаев один из этих сигналов может отсутствовать, а также могут дополнительно посылаться какие-то доп. сигналы (готовность приёмника к приёму, направление передачи и пр.).
Как можно заметить, параллельный код наиболее скоростной – за каждый такт мы можем передать сразу несколько битов данных, в то время как в последовательном коде мы передаём только один бит за один такт. Однако, на практике, в реальных каналах связи в подавляющем большинстве случаев используется последовательное кодирование.
Существует очень много подвидов последовательной передачи данных, их кодирования с целью улучшения помехозащиты и пр. Мы не будем рассматривать здесь все эти аспекты.
Логические операцииЛогические операции – это некий аналог операций арифметики, т.е. набор простейших «базовых» операций над двоичными аргументами. Этот набор включает в себя всего 3 операции:
- ИЛИ (логическое сложение, OR). Обозначается как y=x1 v x2. Для простоты записи иногда пишут y=x1+x2.
Внимание! Знак '+' здесь - это не привычное математическое сложение. В языках программирования используется вариант записи y=x1|x2. Результат операции ИЛИ равен 1, если все операнды равны 1 либо вместе, либо по одному.