Глава 2 Логические схемы
Итак, мы с вами выяснили, что цифровая обработка данных заключается в пересылке, обработке и хранении двоичных значений. В этой главе мы несколько расширим представления, введенные в предыдущей главе, чтобы можно было приступить к рассмотрению собственно архитектуры компьютеров и микроконтроллеров. Мы познакомимся с несколькими важными логическими функциями, рассмотрим выпускаемые микросхемы, которые реализуют эти функции, а также их практическое применение.
Прочитав эту главу, вы:
• Познакомитесь с областями применения и характеристиками выходных каскадов с активной подтяжкой (двухтактный выход), с открытым коллектором и с тремя состояниями.
• Поймете логическую структуру и назначение дешифратора.
• Познакомитесь с интегральной микросхемой, представляющей собой набор элементов Исключающее ИЛИ-HE и использующейся для определения равенства двух значений.
• Поймете, как можно реализовать на логических элементах 1-битный сумматор и как его можно доработать для сложении двух n-битных чисел.
• Разберетесь, почему АЛУ имеет такое большое значение для программируемых систем.
• Ознакомитесь со структурой и областями применения постоянных запоминающих устройств (ПЗУ).
• Поймете, как из двух логических элементов, объединенных перекрестными связями, можно создать RS-триггер.
• Разберетесь, чем отличается D-защелка от D-триггера.
• Поймете, как из набора D-триггеров или защелок можно реализовать регистр.
• Узнаете, как с помощью каскадного соединения D-триггеров можно реализовать сдвиговый регистр.
• Поймете, как можно использовать D-триггер в качестве делителя на 2 и как посредством каскадного соединения D-триггеров можно реализовать двоичный счетчик.
• Узнаете, как с помощью связки АЛУ/регистр можно реализовать блок аккумулятора процессора.
• Разберетесь в принципах работы оперативного запоминающего устройства (ОЗУ).
В первых интегральных микросхемах, появившихся в конце 60-х годов, реализовывались главным образом логические элементы И-НЕ, ИЛИ-HE и НЕ. Наиболее популярным семейством логических микросхем тогда были, да и сейчас в какой-то мере остаются микросхемы 74-й серии, построенные по технологии ТТЛ (транзисторно-транзисторная логика). Эта серия была разработана фирмой Texas Instruments и впоследствии скопирована всеми ведущими производителями микросхем.
Микросхема 74LS00[23][24] содержит четыре двухвходовых элемента И-НЕ, объединенные в 14-выводном корпусе. Для питания микросхемы используется напряжение 5 ±0.25 В, прикладываемое между выводами Vcc[25] (обычно около 5 В) и GND. Напряжения логических уровней для этой серии составляют: 2.4…5 В — для ВЫСОКОГО уровня и 0…0.4 В — для НИЗКОГО. Для большинства семейств логических микросхем требуется напряжение питания 5 В, однако существуют и 3-вольтовые версии. При этом большинство КМОП-микросхем могут работать в диапазоне питающих напряжений от 3 до 15 В.
Цоколевка микросхемы 74LS00 в корпусе DIP показана на Рис. 2.1, а. Функция этой микросхемы полностью описывается четырьмя двухвходовыми элементами И-НЕ в положительной логике, поскольку НИЗКИЙ и ВЫСОКИЙ логические уровни эквивалентны логическим значениям 0 и 1. Если же принять, что 0 соответствует ВЫСОКОМУ уровню, а 1 — НИЗКОМУ (отрицательная логика), то микросхема будет выполнять функцию четырех двухвходовых элементов ИЛИ-НЕ. На изображениях логических элементов по стандарту ANSI/IEC[26] НИЗКИЙ уровень обозначается символом полярности
Рис. 2.1. Микросхема 74LS00 (K555ЛA3)
Выходы логических элементов микросхемы 74LS00 построены по двухтактной схеме. При такой структуре выходного каскада каждый из уровней формируется путем подключения выхода через низкоомный ключ к линии Vcc или GND соответственно. На Рис. 2.2, а эти ключи изображены в виде обычных переключателей, хотя на самом деле они, разумеется, выполнены на транзисторах.
Рис. 2.2. Типы выходных каскадов
В логических микросхемах (например, таких как 74LS00) изменение состояния выхода происходит за время около 10 нс[27]. Чтобы получить такие значения, емкости всех соединительных проводников и входов других микросхем должны быстро разряжаться. Главным образом именно по этой причине в большинстве цифровых микросхем используется двухтактный выход (называемый также выходом с активной подтяжкой — active pull-up). Однако в некоторых ситуациях преимущество имеют выходные каскады других типов. Конфигурация открытый коллектор (или открытый сток), показанная на Рис. 2.2, б, обеспечивает «жесткий» НИЗКИЙ уровень, при этом состояние ВЫСОКОГО уровня соответствует разомкнутой цепи. Напряжение ВЫСОКОГО уровня может формироваться подключением внешнего резистора либо к линии Vcc, либо к отдельной шине питания. Роль подобного резистора могут выполнять некоторые устройства, такие как реле, лампы накаливания или светодиоды. Выходной транзистор таких каскадов часто имеет большую, чем обычно, нагрузочную способность по напряжению и/или току.
Один из наиболее интересных для нас вариантов применения выхода с открытым коллектором показан на Рис. 2.3. В этой схеме четыре элемента с выходом типа «открытый коллектор» подключены к одному и тому же подтягивающему резистору. Обратите внимание на символ
Рис. 2.3. Буферы с открытым коллектором управляют общей линией
Выходной каскад третьего типа (с тремя состояниями), приведенный на Рис. 2.2, в, обладает свойствами выходов обоих рассмотренных типов. При разрешенном выходе логические состояния формируются обычным образом, т. е. выдачей ВЫСОКОГО и НИЗКОГО напряжения. При запрещении выхода он становится разомкнутой цепью, независимо от функционирования внутренней логической схемы и любых изменений на ее входах. Выход с тремя состояниями обозначается символом
В качестве примера использования выхода указанного типа рассмотрим ситуацию, показанную на Рис. 2.4. В данном случае основному контроллеру требуется прочитать данные с одного из нескольких устройств, подключенных к нему группой общих линий. Поскольку эта магистраль, или, иначе, шина данных, является общим ресурсом, в любой момент времени доступ к шине предоставляется только выбранному устройству. Доступ должен быть закрыт сразу же после считывания данных, с тем чтобы шиной могло воспользоваться другое устройство. Как показано на рисунке, все выходы, подключаемые к шине, обозначаются символом
Рис. 2.4. Совместное использование шины
Интегральные микросхемы, содержащие до 12 логических элементов, относятся к микросхемам малой степени интеграции. Если в корпусе микросхемы содержится до 100 логических элементов, то она относится к классу микросхем средней степени интеграции; до 1000 — к классу больших интегральных схем или, сокращенно, БИС. Все микросхемы, имеющие более 1000 логических элементов, относятся к классу сверхбольших интегральных схем (СБИС). К последнему классу, в частности, относятся микросхемы памяти и микроконтроллеры.
Изображенные на Рис. 2.5 микросхемы, содержащие определенным образом соединенные элементы И-НЕ, являются типичным примером интегральных микросхем средней степени интеграции. Если вспомнить, что на выходе элемента И-НЕ лог. 0 присутствует только в том случае, если на всех его входах присутствует лог. 1 (см. Рис. 1.2, в на стр. 27), то можно увидеть, что при любых сочетаниях сигналов на входах выборки В А (21 20) (Рис. 2.5, а) сигнал лог. 0 будет присутствовать на выходе только одного вентиля. Так, выход Y¯2 будет активным при В А = 10. После рассмотрения таблицы истинности становится понятно, что данная схема декодирует двоичный адрес В А таким образом, что при подаче адреса n становится активным выход Y¯n. Полностью название микросхемы 74LS139[29] звучит так: сдвоенный натуральный дешифратор 2 на 4. Сдвоенным он называется потому, что в одном корпусе расположены две такие схемы. Символ X/Y обозначает преобразование кода X (натуральное двоичное число) в код Y (унарный — один из n). Вход разрешения G¯ подключен параллельно ко всем элементам. Таким образом, дешифратор выполняет свои функции только в том случае, если на входе G¯ присутствует НИЗКИЙ уровень (лог. 0). Если на входе G¯ присутствует ВЫСОКИЙ уровень, то независимо от состояния входов В и А (в таблице истинности эта ситуация обозначается символом «X» — безразличное состояние) все выходы устанавливаются в неактивное состояние (лог. 1). Пример использования микросхемы 74LS139 приведен на Рис. 2.25 (стр. 54).
Рис. 2.5. Микросхемы дешифраторов 74LS138 (К555ИД7) и 74LS139 (К531ИД14)
Микросхема 74LS138[30], показанная на Рис. 2.5, б, похожа на только что рассмотренную, однако выполняет функцию дешифратора 3 на 8. При n-м значении на линиях адреса C B А (22 21 20) активным становится только один из восьми выходов Y¯n. Микросхема 74LS138 имеет три входа стробирования, формирующие внутренний сигнал разрешения
Приоритетный шифратор 74LS148[31], показанный на Рис. 2.6, выполняет обратное преобразование. Подача на один из входов НИЗКОГО уровня вызывает появление на выходе эквивалентного 3-битного значения. Так, если вход 5¯ = 0, то а¯2а¯1а¯0 = 010 (число 101 в инверсной логике).
Рис. 2.6. Микросхема приоритетного шифратора 74LS148
Если активный сигнал присутствует на нескольких входах, то выходное значение соответствует входу с наибольшим номером. Так, если НИЗКИЙ уровень присутствует на обоих входах 5¯ и 3¯, то выходное значение все равно будет составлять 010. Символы HPRI на условном обозначении микросхемы, приведенной на Рис. 2.6, означают «наивысший приоритет» (Higest PRIority). Работа микросхемы разрешается при НИЗКОМ уровне на входе E¯in. Выходы E¯out и G¯S¯ используются при каскадном соединении микросхем для увеличения количества линий.
Большой класс ИС реализует различные арифметические операции. Матрица логических элементов, показанная на Рис. 2.7, используется для обнаружения равенства между двумя 8-битными числами Р и Q. Каждый из восьми элементов Исключающее ИЛИ-HE формирует лог. 1, если оба входных бита Рn и Qn одинаковы (мы уже встречались с этим элементом на стр. 28). Соответственно, НИЗКИЙ уровень на выходе элемента И-НЕ появится только в том случае, если все 8 пар битов одинаковы. Микросхема компаратора 74LS688 имеет также вход G¯, сигнал с которого подается на один из входов элемента И-НЕ и выполняет функцию глобального разрешения.
На условном обозначении микросхемы по стандарту ANSI/IEC, приведенном на Рис. 2.7, б, функция сравнения указывается аббревиатурой СОМР. Префикс «1» в обозначении выхода указывает на то, что выполнение операции «Р = Q» зависит от входа, обозначенного тем же номером, т. е. G1. Таким образом, вход разрешения G1 управляет выходом IP = Q (и вход, и выход — с активным НИЗКИМ уровнем).
Рис. 2.7. Микросхема 8-битного компаратора 74LS688
Одной из первых функций, реализованных в ИС помимо обычных логических элементов, было сложение. В таблице истинности, показанной на Рис. 2.8, а, приведены значения бита суммы S и флага переноса С1, образующихся при сложении двух битов А и В и бита переноса из предыдущего разряда С0. Например, из 6-й строки таблицы следует, что при сложении двух единиц и 0-го переноса сумма будет равна 0, а перенос — 1 (1 + 1 + 0 = 10). Для реализации этой строки таблицы нам нужно распознать комбинацию битов 110, описываемую уравнением А∙В∙C¯0. Эту операцию выполняет 6-й элемент схемы. Таким образом, мы просто объединяем по ИЛИ все возможные комбинации входных переменных:
S = (A¯∙B¯∙C0) + (A¯∙B∙C¯0) + (A∙B¯∙C¯0) + (A∙B∙C0)
С1 =(A¯∙B∙C0) + (A∙B¯∙C0) + (A∙B∙C¯0) + (A∙B∙C0)
Применяя такую схему для каждого разряда и подключая при этом выход переноса разряда с номером k — 1 к входу переноса разряда с номером k, мы сможем выполнять сложение любых n-битных чисел.
На Рис. 2.8, б показана структурная схема микросхемы 74LS283[32], которая складывает два 4-битных числа за 25 нc. На практике для формирования итогового бита переноса С4 используется дополнительная схема, чтобы избежать задержек, вызванных прохождением битов переноса через все стадии суммирования, от младшего бита к старшему. Несколько (n) микросхем 74LS283 можно каскадировать для реализации функции сложения слов разрядностью 4хn. Таким образом, две микросхемы 74LS283 выполняют 16-битное сложение за 45 нc (учитывая дополнительную задержку распространения переноса между двумя микросхемами).
Рис. 2.8. Сложение
Разумеется, сумматоры можно использовать и для вычитания, если перевести операнды в дополнительный код. Схему сумматора/вычитателя можно реализовать при помощи набора логических элементов Исключающее ИЛИ, выступающие в роли программируемых инверторов (см. стр. 28). Вход выбора режима
Рис. 2.9. Реализация программируемого сумматора/вычитателя
Расширяя набор аргументов, мы постепенно придем к арифметико-логическому устройству (АЛУ). АЛУ представляет собой схему, выполняющую определенный набор арифметических и логических операций над входными данными в соответствии со значением на входах выбора режима. Микросхема 74LS382, показанная на Рис. 2.10, выполняет 8 операций над двумя 4-битными числами. Выполняемая операция задается тремя битами выбора режима S0S1S2 (Рис. 2.10, а). Кроме сложения и вычитания, это АЛУ выполняет также операции И, ИЛИ и Исключающее ИЛИ. Микросхема формирует даже признак переполнения дополнительного кода (см. стр. 24).
Рис. 2.10. Микросхема АЛУ 74LS382
Как мы увидим чуть позже, АЛУ является «сердцем» любого компьютера или микропроцессора. Подавая на входы выбора режима некоторую последовательность двоичных значений, можно заставить АЛУ выполнить соответствующую последовательность операций. Эти коды операций хранятся во внешней памяти и последовательно считываются схемами управления.
Обычно последовательность кодов операций, составляющих программу, хранится в какой-либо БИС ПЗУ Обратимся к структуре, показанной на Рис. 2.11. На этом рисунке изображен дешифратор 3 на 8, управляющий матрицей диодов 8x2. Для каждой n-й комбинации сигналов, подаваемых на вход адреса, выбирается п-я строка. Если к этой строке подключен диод, то он открывается и на линии соответствующего столбца появляется НИЗКИЙ уровень. Соответственно, инвертирующий буфер с тремя состояниями формирует ВЫСОКИЙ уровень для каждого подключенного диода и НИЗКИЙ уровень для разомкнутой цепи. Таким образом, для каждого входного кода совокупность подключенных диодов определяет выходной код. Для наглядности матрица запрограммирована на реализацию полного 1-битного сумматора, изображенного на Рис. 2.8, а, однако может быть задана и любая другая функция трех переменных.
Рис. 2.11. Реализация 1-битного сумматора на ПЗУ
Диодная матрица, показанная на Рис. 2.11, называется постоянным запоминающим устройством (ПЗУ), поскольку «память» представляет собой комбинацию диодов, формируемую на этапе изготовления микросхемы. Старые устройства, имевшие, как правило, дешифратор и матрицу 32х8, обычно выпускались в версиях, программируемых пользователем, в которых связи формировались плавкими перемычками. Требуемые диоды можно было исключить из матрицы при помощи высокого напряжения. Такие устройства называются программируемыми ПЗУ (ППЗУ).
При реализации СБИС ППЗУ больших объемов, необходимых для хранения программ, плавкие перемычки очень неудобны. Например, небольшое ППЗУ 27С64[33], показанное на Рис. 2.12, имеет объем, для формирования которого потребовалось бы 65 536 пар «перемычка — диод». То есть это относительно небольшое устройство способно хранить 8192 байта данных. В микросхеме 27С64 в качестве программируемой перемычки используется электрический заряд на плавающем затворе МОП-транзистора. Второй МОП-транзистор выполняет роль диода. Как и в варианте с плавкими перемычками, инжекция заряда в изолированный затвор осуществляется с помощью высокого напряжения. Образующееся электрическое поле удерживает МОП-транзистор в состоянии проводимости. Для полного рассасывания этого заряда требуется достаточно длительный срок в несколько десятков лет, однако это значение можно уменьшить до 20 мин, подвергая затвор интенсивному ультрафиолетовому излучению. Поэтому устройства, подобные 27С64, называют стираемым ППЗУ (СППЗУ). В корпусе микросхем, предусматривающих многократное использование, напротив кристалла размещается кварцевое окошко (см. Рис. 2.12), которое можно увидеть на фотографии, приведенной на стр. 15.
Рис. 2.12. Микросхема стираемого ППЗУ (СППЗУ) 27С64 (К573РФ4/6)
Программирование таких микросхем осуществляется специальными устройствами — программаторами. Версии микросхем без окошка называются однократно-программируемыми ПЗУ, поскольку их нельзя стереть после программирования. Однако они намного дешевле и поэтому используются в мелко- и среднесерийном производстве.
На Рис. 2.13 приведена упрощенная схема перемычки на МОП-транзисторе с плавающим затвором. Вместо диода узлом матрицы является n-канальный МОП-транзистор VT1. Затвор этого транзистора подключен к линии X, а его исток S1 — к линии Y. Если сток D1 транзистора подключен к источнику положительного напряжения и выбрана линия X, то на линии Y тоже появляется ВЫСОКИЙ уровень (лог. 1 в терминах положительной логики). Однако если VT1 отключен от VDD, то он не проводит ток, и на линии Y присутствует лог. 0. Транзистор VT2 включается последовательно с линией VDD и, таким образом, выполняет роль программируемого элемента. Этот транзистор имеет дополнительный, никуда не подключенный затвор, скрытый в слое изолирующего диоксида кремния. В нормальном состоянии заряд на затворе отсутствует, и транзистор VT2 закрыт. Если на затвор подать импульс напряжения программирования величиной 20…25 В, то отрицательные заряды туннелируются через очень тонкий слой изолятора, окружающий скрытый затвор. В результате транзистор VT2 перейдет в открытое состояние и таким образом подключит VT1 к шине питания. Это приведет к появлению лог. 1 на линии Y при выборе данной ячейки внутренним дешифратором.
Рис. 2.13. Перемычка на МОП-транзисторе с плавающим затвором
Величина инжектированного заряда остается более или менее постоянной до тех пор, пока затвор не будет подвергнут ультрафиолетовому облучению. Фотоны, обладающие большой энергией, выбивают электроны (отрицательный заряд) из скрытого (плавающего) затвора[34], за 20 мин разряжая его и стирая всю записанную информацию.
Существуют также структуры ППЗУ, которые можно стереть электрическим путем, причем часто непосредственно в устройстве. Наиболее распространены две разновидности структур — электрически стираемые ППЗУ (ЭСППЗУ, или EEPROM) и FLASH-ППЗУ. В первом случае импульс отрицательного напряжения КРР большой амплитуды приводит к просачиванию электронов из плавающего затвора. Обычно отрицательное напряжение формируется схемами, расположенными непосредственно на кристалле, что исключает необходимость в дополнительном источнике питания. FLASH-вариант ЭСППЗУ основан на эффекте инжектирования горячих электронов в затвор. Площадь, занимаемая ячейкой, в этом случае почти в 2 раза меньше обычной ячейки ЭСППЗУ, что увеличивает плотность упаковки памяти. Одна из промышленно выпускаемых микросхем EEPROM-памяти показана на Рис. 12.26 (стр. 439).
Большинство современных ЭППЗУ/ЭСППЗУ довольно быстрые, со временем доступа около 150 не. Процесс программирования происходит гораздо медленнее, около 10 мс на слово, однако это достаточно редкая операция. Программирование FLASH-памяти осуществляется почти в 1000 раз быстрее (на одну ячейку требуется около 10 мкс).
* * *
Все схемы, рассмотренные на данный момент, относились к классу комбинационных. Они не обладают «памятью» в том смысле, что значение их выходов зависит только от состояния входов в данный момент времени и совершенно не зависит от предыдущих событий, имевших место на входах. Такие же логические схемы, как защелки, счетчики, регистры и оперативная память (допускающая как чтение, так и запись), относятся к классу последовательностных схем. Состояние выходов таких схем зависит не только от текущего состояния входов, но и от предыстории сигналов на этих входах.
Возьмем обыкновенную кнопку, которая используется в дверном звонке. Звонок звонит, когда вы нажимаете на нее, и прекращает звонить, когда вы ее отпускаете. Такой ключ не обладает памятью.
Сравним эту кнопку с не менее обыкновенным выключателем. Вы нажимаете на него и свет загорается. Более того, он продолжает гореть даже тогда, когда вы убираете управляющее воздействие (палец). Чтобы выключить свет, вы должны перевести выключатель в выключенное состояние, и опять же, он останется в этом состоянии даже при отсутствии входного воздействия. Ключи такого типа называются бистабильными, поскольку они имеют два устойчивых состояния. Каждый такой ключ ведет себя как 1-битная ячейка памяти, которая может запоминать либо включенное, либо выключенное состояние.
В микросхемах оперативной памяти, таких как 6264 (Рис. 2.26), каждая бистабильная ячейка формируется с помощью двух перекрестно включенных транзисторов. Здесь мы не будем касаться конкретной реализации этих ячеек. Вместо этого рассмотрим два логических элемента ИЛИ-HE, объединенных перекрестными обратными связями (Рис. 2.14). Вспомним, что при появлении лог. 1 на каком-либо входе элемента ИЛИ-HE на его выходе появляется лог. 0 независимо от состояния остальных входов. Вооружившись этим знанием, попытаемся проанализировать схему:
• Если на вход S подать 1, то выход Q¯ переключится в 0. На обоих входах верхнего элемента появится 0, что приведет к появлению 1 на выходе Q. Если теперь на входе S снова появится 0, то нижний элемент останется в 0 (поскольку на входе обратной связи с вывода Q присутствует 1) и состояние выхода верхнего элемента также не изменится. Таким образом, триггер устанавливается при подаче положительного импульса на вход S.
• Если на вход R подать 1, то выход Q переключится в 0. На обоих входах нижнего элемента появится 0, что приведет к появлению 1 на выходе Q¯. Если теперь на входе R снова появится 0, то верхний элемент останется в 0 (поскольку на входе обратной связи с вывода Q¯ присутствует 1) и состояние выхода нижнего элемента также не изменится. Таким образом, триггер сбрасывается при подаче положительного импульса на вход R.
При нормальном функционировании (предполагается, что оба входа не могут быть активными в один и тот же момент времени[35] оба выхода дополняют друг друга, что отражено на условном графическом изображении триггера (Рис. 2.14, б).
Рис. 2.14. RS-триггер
Существует много различных реализаций бистабильных ячеек. Например, замена элементов ИЛИ-HE на элементы И-НЕ приведет к образованию
В схеме на Рис. 2.15 установка триггера происходит при переводе ключа в верхнее положение. При размыкании контактов состояние триггера не меняется, благодаря чему пульсации на выходе схемы отсутствуют. При переводе ключа в нижнее положение схема работает аналогичным образом, только триггер при этом сбрасывается.
Рис. 2.15. Использование RS-триггера для подавления дребезга контактов
Дальнейшим развитием RS-триггера является D-защелка. В этом элементе выходной сигнал (Q) повторяет входной (D), если на входе управления С присутствует активный уровень (в данном случае — ВЫСОКИЙ), и сохраняет предыдущее значение при неактивном уровне на входе управления. Таким образом, D-защелку можно рассматривать как 1-битную ячейку памяти, запоминающую значение, которое присутствует на ее входе на момент завершения импульса управления.
На Рис. 2.16, б взаимное влияние входов D и С обозначается символами «С1» и «1D». Префикс «1» у D указывает на то, что этот вход зависит от любого сигнала, в обозначении которого имеется суффикс «1», в данном случае — от входа С. То есть фиксация значения 1D происходит по сигналу С1.
Триггер тоже представляет собой 1-битную ячейку памяти, однако в нем данные передаются на выход только по активному фронту сигнала на управляющем (тактовом) входе. D-триггер, таблица истинности которого приведена на Рис. 2.16, в, переключается по нарастающему фронту (в таблице истинности это обозначается символом «
Рис. 2.16. D-защелка и D-триггер
Микросхема малой степени интеграции 74LS74[36], показанная на Рис. 2.17, содержит два D-триггера. Каждый триггер имеет входы сброса R¯ и установки S¯, которые являются асинхронными, т. е. их функционирование не зависит от тактового сигнала. Среди микросхем средней степени интеграции встречаются наборы из 4, 6 и даже 8 триггеров, имеющих общий тактовый вход.
Рис. 2.17. Микросхема сдвоенного D-триггера 74LS74 (К555ТМ2)
Микросхема 74LS377[37], показанная на Рис. 2.18, состоит из восьми D-триггеров, тактируемых одним сигналом С, который, в свою очередь, управляется сигналом G¯. То есть 8 бит данных 8D…., 1D защелкиваются по нарастающему фронту на входе С при НИЗКОМ уровне на входе G¯. На условном обозначении микросхемы по стандарту ANSI/IEC, приведенном на Рис. 2.18, б, эта зависимость обозначена как G1 —> 1С2 —> 2D, т. е. вход G¯ разрешает работу тактового входа С, который, в свою очередь, воздействует на входы данных.
Рис. 2.18. Микросхема 8-битного параллельного регистра 74LS377 (К555ИР27)
Наборы D-триггеров обычно называются регистрами, т. е. устройствами памяти, хранящими одно слово данных. Полное название микросхемы 74LS377 — регистр с параллельным входом и параллельным выходом (PIPO-регистр), поскольку данные загружаются в него и считываются из него параллельно (т. е. одновременно).
Выпускаются также микросхемы, содержащие массив D-защелок. В качестве примера можно указать 8-битный регистр-защелку 74LS373[38], показанный на Рис. 2.19, в котором вместо восьми D-триггеров используется восемь D-защелок. Кроме того, выходы защелок могут устанавливаться в третье состояние. Эта возможность используется в тех случаях, когда данные сначала защелкиваются в регистре, а затем выставляются на общую шину для последующего их считывания компьютером.
Рис. 2.19. Микросхема 8-битного параллельного регистра-защелки 74LS373 (К555ИР22)
Подходящий пример использования PIPO-регистра приведен на Рис. 2.20. На этой схеме к входу 8-битного регистра подключен выход АЛУ. Выходы регистра, в свою очередь, подключены к одному из входов АЛУ. Этот регистр служит для накопления результата последовательных операций и обычно называется аккумулятором, или рабочим регистром. Чтобы разобраться в работе этой схемы, рассмотрим процесс сложения двух слов — А и В. Если предположить, что АЛУ представляет собой две каскадно-соединенные микросхемы 74LS238, то последовательность операций может быть следующей:
1. Шаг программы
• Режим = 000 (сброс).
• По импульсу на входе «Исполнение» значение с выхода АЛУ (00000000) загружается в регистр.
• Выходные данные — ноль (00000000).
2. Шаг программы
• Значение слова А подается на вход АЛУ.
• Режим = 011 (сложить).
• По импульсу на входе «Исполнение» значение с выхода АЛУ (слово А +ноль) загружается в регистр.
• Выходные данные — слово А.
3. Шаг программы
• Значение слова В подается на вход АЛУ.
• Режим = 011 (сложение).
• По импульсу на входе «Исполнение» значение с выхода АЛУ (слово В + слово А) загружается в регистр.
• Выходные данные — сумма слов В и А.
Рис. 2.20. 8-битный блок обработки (АЛУ/рабочий регистр)
Последовательность кодов операций (000–100–100) и составляет программу. На практике каждая команда будет также содержать (при необходимости) адрес обрабатываемых данных; в данном случае — местонахождение слов А и В.
Результат любой операции характеризуется некоторым набором свойств. К примеру, результат может быть равен нулю или же при его вычислении может произойти переполнение. Эти свойства могут потребоваться при дальнейшем выполнении программы. В рассматриваемой схеме для сбора такой информации используются два D-триггера, тактируемые сигналом «Исполнение». В данном контексте состояния этих триггеров называются флагами (реже — семафорами). Таким образом, у нас имеются флаг нуля Z и флаг переноса из 7-го бита С, образующие регистр состояния (STATUS).
Как мы увидим далее, связка АЛУ/рабочий регистр является «сердцем» любого цифрового вычислительного устройства. Причем при использовании сложных систем, таких как компьютер или микроконтроллер, нам совершенно не нужно досконально знать их внутреннее устройство, а процессы, протекающие в системе, скрыты от пользователя. К примеру, на Рис. 2.21 изображен тот же самый блок, но на более высоком уровне абстракции. В частности, группы линий данных (шины) изображены в виде толстых линий, действительная их реализация не имеет никакого значения. Количество линий в шине не показано, но при необходимости оно указывается рядом с коротким штрихом, пересекающим изображение шины по диагонали, например так
Рис. 2.21. 8-битный блок обработки (АЛУ/рабочий регистр) на системном уровне
Центральным элементом нашей системы является АЛУ, изображение которого имеет сложную форму. Значения на его входах данных (операнды) обрабатываются согласно сигналам на входах режима. Первый операнд поступает извне, тогда как 2-й операнд считывается из рабочего регистра. В компьютерах коды, подаваемые на вход режима, обычно считываются из памяти программ, а 1-й операнд — из памяти данных.
Значение с выхода АЛУ может быть загружено обратно в рабочий регистр W по сигналу «Исполнение» либо передано вовне по шине данных. Такая структура показана на Рис. 3.2 (стр. 60).
Существуют также и другие разновидности регистров. Четырехбитный сдвиговый регистр, показанный на Рис. 2.22, а, является примером структуры с последовательным вводом и последовательным выводом (SISO). В данном случае бит данных, хранящийся в n-м D-триггере, поступает на вход следующего ((n + 1) — го) каскада. При подаче тактового импульса (или, в данном контексте, импульса сдвига) этот бит перегружается в (n + 1) — й триггер, т. е. сдвигается с n-й позиции в позицию n + 1. Поскольку все триггеры тактируются одним сигналом, по каждому импульсу сдвига все слово данных сдвигается вправо.
Рис. 2.22. Сдвиговый регистре последовательным вводом и выводом
В примере, приведенном на Рис. 2.22, б, по тактовому сигналу в левую позицию побитно вдвигается 4-битное число. После 4-го импульса новое слово полностью окажется в регистре. Для его считывания потребуется еще четыре импульса, во время которых произойдет побитная выдача содержимого сдвигового регистра. Если обеспечить доступ к выходу каждого триггера, чтобы данные можно было считать за один раз, получим структуру с последовательным входом и параллельным выходом (SIPO).
На Рис. 2.22, в символ «->» в обозначении тактового входа используется для указания операции сдвига. Аббревиатура SRG4 означает «4-битный сдвиговый регистр». Пример 8-битного сдвигового регистра приведен на Рис. 12.2 (стр. 370).
Существуют и другие разновидности структур, в том числе структура с параллельным входом и последовательным выходом (PISO), часто применяемая для преобразования параллельного кода в последовательный. Инкрементирование или декрементирование счетных регистров (счетчиков) производится по каждому импульсу тактового сигнала в соответствии с двоичной последовательностью. Обычно n-битный счетчик может отсчитывать 2n состояний. Некоторые счетчики можно загружать в параллельном режиме, т. е. использовать как память.
Рассмотрим D-триггер, тактируемый по спадающему фронту (Рис. 2.23), инверсный выход Q¯ которого подключен к входу 1D. По каждому спадающему фронту на входе С1 данные с входа 1D будут защелкиваться и появляться на выходе Q. Поскольку инверсный сигнал этого выхода подается обратно на вход, то в следующий раз триггер переключится в противоположное состояние. Это периодическое переключение между двумя состояниями помечено на временной диаграмме символом «Т». В результате при подаче на вход триггера сигнала некоторой частоты на его выходе будет сформирована последовательность импульсов, частота которых в 2 раза ниже. Если частота входного сигнала не изменяется, то выходной сигнал представляет собой точный прямоугольный сигнал (меандр). Иногда такой Т-триггер называют триггером счетного типа или делителем на два.
Рис. 2.23. Т-триггер
Разумеется, Т-триггеры тоже можно каскадировать, как показано на Рис. 2.24, а. В данном случае 4 триггера с запуском по спадающему фронту соединены таким образом, чтобы выход n-го разряда управлял тактовым входом разряда n + 1. Соответственно, если частота сигнала на входе С равна 8 кГц, то на выходе QA будет прямоугольный сигнал частотой 4 кГц, на выходе QB — 2 кГц, на QC — 1 кГц и на QD — 500 Гц. Сигнал QA на Рис. 2.24, б формируется так же, как и на Рис. 2.23. Выход QB переключается по каждому спадающему фронту сигнала QA.
Аналогично функционируют и остальные выводы. Сопоставив ВЫСОКОМУ уровню лог. 1, а НИЗКОМУ — лог. 0, получим 24 (16) двоичных комбинаций в положительной логике, сдвинутых по фазе друг относительно друга. При достижении максимального значения счет начинается с 0 и так до бесконечности. Каждая комбинация остается в регистре до появления активного фронта следующего тактового импульса (в данном случае — спадающего фронта). Если взглянуть на формируемую последовательность, то можно увидеть, что она представляет собой последовательность натуральных двоичных чисел от Ь’0000’ до b’1111’. Вообще говоря, такая схема называется двоичным счетчиком по модулю 16. При счете по модулю n используются только первые n формируемых значений[39].
Рис. 2.24. Счетчик со сквозным переносом по модулю 16
Теоретически нет никаких ограничений на количество каскадов, соединяемых указанным образом. То есть, используя 8 Т-триггеров, мы получим счетчик по модулю 256 (28). На практике же каждый триггер переключается с некоторой задержкой, что ограничивает максимально возможную частоту счетчика. К примеру, у сдвоенного D-триггера, показанного на Рис. 2.17, максимальная задержка распространения сигнала от фронта тактового импульса до появления выходного значения составляет 25 нc. Максимальная частота переключения одного каскада, например, такого как показан на Рис. 2.23, составляет 25 МГц. Соответственно, максимальная задержка в 8-битном счетчике составит 200 нc. Если такой счетчик со сквозным переносом будет тактироваться сигналом с частотой 5 МГц (равной 1/200 нс), то возникнет ситуация, при которой новое значение будет формироваться до установления предыдущего. Это представляет серьезную проблему, если различные состояния счетчика декодируются и используются для управления другими схемами. Схема декодирования, например, такая как приведена на Рис. 2.25, может отреагировать на это кратковременное переходное состояние непроизвольным образом, что вызовет сбой в работе устройства. В таких случаях лучше использовать более сложный синхронный счетчик, в котором все триггеры переключаются одновременно.
Рис. 2.25. Формирование временных диаграмм
Рассмотренные схемы осуществляли прямой счет. Если в качестве выходов использовать инверсные (Q¯), то счет будет осуществляться в обратном направлении (обратный счет). Того же результата можно достичь, если в качестве элемента памяти использовать триггеры, переключающиеся по нарастающему фронту, такие как сдвоенный триггер 74LS74.
С помощью простой логической схемы можно легко объединить эти две функции и реализовать программируемый реверсивный счетчик. Еще можно добавить логику для параллельной загрузки триггеров любым значением, с последующим счетом от этого значения в заданном направлении. Такие структуры называются счетными регистрами с параллельной загрузкой.
Наряду с наиболее очевидным использованием счетного регистра для накопления числа событий, например, таких как количество консервных банок, прошедших через конвейер, существуют и другие варианты его использования. Одним из таких применений является разнесение во времени некоторых операций. На Рис. 2.25 счетчик по модулю 4 используется для управления одной из секций дешифратора 2 на 4 в микросхеме 74LS139 (Рис. 2.5, а). Этот дешифратор детектирует 4 состояния счетчика и формирует четыре сигнала, сдвинутых во времени друг относительно друга, которые могут использоваться, скажем, для задания последовательности операций, выполняемых управляющей логикой компьютера. Для адресации дешифратора используется инверсный выход триггеров. Это сделано специально, поскольку в противном случае по нарастающему фронту тактового сигнала осуществлялся бы обратный счет. Счетчики с большей разрядностью могут использоваться для формирования более сложных последовательностей управляющих операций.
Термин «регистр», как правило, используется применительно к элементу оперативной памяти, который может хранить одно двоичное слово, обычно разрядностью от 4 до 64 бит. Память большего объема можно реализовать, группируя n таких регистров и выбирая один из них. Подобная структура обычно называется регистровым файлом. Например, микросхема 74LS670[40] представляет собой регистровый файл 4 х 4 с раздельными входом и выходом 4-битных данных, а также отдельными входами 2-битного адреса для операций чтения и записи. Это означает, что любой регистр этого файла может быть считан в любой момент времени независимо от одновременно осуществляемой записи.
Память бóльших объемов называется оперативной памятью произвольного доступа или сокращенно ОЗУ. Словосочетание «произвольный доступ» означает, что для выбора любого слова памяти требуется одно и тоже время, не зависящее от расположения этого слова в матрице[41]. Этим ОЗУ отличается от памяти на магнитной ленте, в которой бобина должна прокрутиться до требуемого сектора. А если этот сектор находится в конце ленты…
Для примера на Рис. 2.26 показана микросхема ОЗУ 6264[42]. Она содержит матрицу из 65 536 (216) бистабильных ячеек, организованных в виде матрицы из 8192 (213) 8-битных слов. Слово n выбирается при подаче на линии адреса А0…А12 двоичного числа n.
В режиме чтения (R/W¯= 1) на выходы I/O7…I/O0 выдается n-е слово данных, определяемое n-й комбинацией битов адреса. Символ «А» в обозначении входов/выходов (как и на Рис. 2.12) указывает на эту взаимосвязь. Для включения выходных буферов с тремя состояниями на входе
Адресованное слово записывается в память при R/W¯ = 0. Байт данных, который должен быть записан в n-ю ячейку, подается на входы I/O7…I/O0. Такая двунаправленная передача данных является отличительной особенностью компьютерных шин.
В обоих случаях микросхема ОЗУ должна быть выбрана подачей лог. 0 на вывод
Оба типа памяти являются энергозависимыми, т. е. они не сохраняют свое содержимое после выключения питания. Однако некоторые микросхемы статического ОЗУ позволяют хранить данные при напряжении, которое ниже, чем рабочее, потребляя при этом очень маленький ток. В таких случаях для сохранения содержимого в течение нескольких месяцев можно использовать батарею.
Рис. 2.26. Микросхема ОЗУ 6264 (8196х8 бит)