Текст
                    МИКРОПРОЦЕССОРЫ
И МИКРОКОМПЬЮТЕРЫ


MICROPROCESSORS/MICROCOMPUTERS An Introduction DONALD D. GIVONE Associate Professor of Electrical Engineering State University of New York at Buffalo ROBERT P. ROESSER Associate Professor of Electrical Engineering University of Detroit McGraw-Hill Book Company New York St. Louis San Francisco Auckland Bogota Dusseldorf Johannesburg London Madrid Mexico Montreal New Delhi Panama Paris S3o Paulo Singapore Sydney Tokyo Toronto 1980
Д. Гивоне, Р. Россер Микропроцессоры и микрокомпьютеры. Вводный курс Перевод с английского В. С. ШТАРКМАНА и Т. А. ШАРГИНОЙ под редакцией В С. ШТАРКМАНА МОСКВА «МИР» 1983
ББК 32.97 Г43 УДК 681.3 Гивоне Д., Россер Р. Г46 Микропроцессоры и микрокомпьютеры: Вводный курс: Пер. с англ.—М.: Мир, 1983.— 464 с., ил. Систематическое и полное введение в логическую структуру и программирование микропроцессоров, написанное американскими специалистами. Подробно рассмотрена архитектура микропроцессоров, даны примеры программ и интерфейсов Для программистов, работающих с вычислительными системами на основе микро- процессоров, для студентов, изучающих ЭВМ и их математическое обеспечение. 2405000000-208 1 041(01)-83 19-83, ч. 1 ББК32.973 6Ф7.3 Редакция литературы по математическим наукам © 1980 by McGraw-Hill, Inc. All rights reserved © Перевод на русский язык, «Мир», 1983
ОТ РЕДАКТОРА ПЕРЕВОДА Общепризнано, что микропроцессоры — это принципиальный шаг в развитии средств электронной автоматики и обработки данных. Микропроцессоры очень дешевы, компактны, обладают программным управлением и отличаются высоким быстродействием. Такое соче- тание свойств позволяет на единой технологической и схемотехни- ческой базе, т. е. только за счет программирования, получить специа- лизированные вычислительные устройства, пригодные для исполь- зования в науке, на производстве, на транспорте, в медицине, в быту и многих других сферах. Применение микропроцессоров в различных системах, где требу- ется сбор, передача, обработка и отображение информации, позволяет подняться на принципиально новый уровень по таким показателям, как надежность и простота обслуживания систем, с одной стороны, а также полнота и сложность выполняемых ими функций, с другой. На микропроцессорной базе созданы и выпускаются «миллион- ными тиражами» так называемые персональные (в частности, «кухон- ные») компьютеры, причем, как отмечают многие авторы, социальные последствия этого явления, видимо, окажутся соизмеримыми с по- явлением книгопечатания, конвейерного производства или автомобиля. Нет ничего удивительного, что по микропроцессорам и микро- ком пьютерахМ публикуется так много самых разнообразных книг. Какое место среди них занимает эта книга? Прежде всего нужно отметить, что авторы не требуют от читателя предварительной подготовки ни в электронике, ни в программиро- вании. Для чтения книги достаточно общих знаний по элементарной физике и математике. Книга действительно является введением в предмет. Но это введение фундаментальное, в нем рассматриваются достаточно глубоко многие ключевые вопросы. В отличие от других книг, здесь изложены основные понятия без привязки к конкретным промышленным образцам микропроцессоров. Книгу отличает четкость и методичность изложения, наличие упраж-
ОТ РЕДАКТОРА ПЕРЕВОДА нений в каждой главе, прекрасное оформление графического мате- риала. Особо стоит отметить, что авторам удается подвести читателя к пониманию многих сложных и тонких проблем, излагая материал просто и понятно на удачно подобранных примерах. Эта книга будет несомненно полезной преподавателям и студентам многих специальностей. Она будет также полезна широкому кругу инженеров и научных работников, связанных с разработкой и приме- нением микропроцессорных систем в вычислительных, измерительных и управляющих комплексах. В. Штаркман
ПРЕДИСЛОВИЕ С момента изобретения интегральных схем в 1959 г. непрерывно растет интерес к созданию электронных устройств, способных вы- полнять сложные функции. Одним из наиболее впечатляющих резуль- татов применения интегральной технологии явилось создание в 1971 г. микропроцессора. Хотя первоначально микропроцессоры были всего лишь «кристаллами» для карманных калькуляторов, очень быстро стали понятны их огромные потенциальные возможности при ис- пользовании в качестве «сердец» специализированных цифровых процессоров, что объясняется прежде всего их низкой стоимостью и способностью выполнять программы. По существу, центральное обрабатывающее устройство цифрового компьютера оказалось за- ключенным в одной большой интегральной схеме. Цель данной книги — познакомить читателя с основными прин- ципами построения компьютеров, и главным образом с функциони- рованием и применением микропроцессоров и микрокомпьютеров. В книге подробно рассматриваются те базовые понятия, которые важны при проектировании большинства систем с микрокомпьютерами. В число этих понятий входит архитектура микрокомпьютеров, струк- тура памяти, средства ввода/вывода, интерфейсы и программирование. Мы не предполагали, что читатель обладает предварительной подго- товкой в области электронных вычислительных машин. Чтобы сделать изложение замкнутым, были включены разделы по системам счис- ления, булевой алгебре и электронным схемам. Предполагаются только некоторые познания в электротехнике. Вероятно, наиболее трудное для нас решение при написании книги было связано с выбором микропроцессора для иллюстративных целей. Поскольку мы руководствовались целью разъяснить основные прин- ципы устройства и работы микрокомпьютера, нам показалось более предпочтительным не привязывать изложение к какому-либо кон- кретному микропроцессору, производимому промышленностью. Мы надеемся, что при таком подходе микропроцессор сам по себе не за- слонит фундаментальных принципов, на которых основаны микропро- цессоры вообще. Можно было бы включить раздел по микропроцес- сорам, имеющимся на рынке, но мы решили, что эти сведения лучше получать от фирм-изготовителей.
8 ПРЕДИСЛОВИЕ Материал книги соответствует односеместровому курсу для сту- дентов как младших, так и старших курсов в институтах, готовящих специалистов в области электроники или вычислительной техники. Благодаря замкнутости изложения книга вполне годится для само- стоятельного изучения. Вероятно, часть материала в гл. 2—4 сов- падает с материалом, который студенты получают на предшествующих курсах. Тем не менее материал в этих главах изложен достаточно детально; это обеспечивает полноту изложения и делает книгу полез- ной для читателей с различным уровнем подготовки. Естественно, некоторые разделы в этих главах при чтении можно опустить. Хотелось бы выразить благодарность многим людям, которые помогали нам и вдохновляли нас во время работы над книгой. Осо- бенно мы признательны нашим детям, которым не легко было понять, почему родители, работая над книгой, не могут уделить им достаточно времени. Мы надеемся, они будут вознаграждены тем, что наши до- стижения «сегодня» сделают более светлым их «завтра». В заключение мы выражаем нашу признательность г-же Мэрилин Хатчингс за кро- потливую работу по перепечатке окончательного варианта рукописи. Дональд Д. Г неоне Роберт П. Россер
Глава I. МИКРОПРОЦЕССОРЫ И МИКРОКОМПЬЮТЕРЫ: ОБЩИЕ СВЕДЕНИЯ Микропроцессоры — это новые удивительные логические устрой- ства, оказывающие заметное влияние на нашу жизнь. Микропроцес- соры можно обнаружить в карманных калькуляторах, в кассовых аппаратах магазинов, в бытовых и научных приборах, в оборудовании контор, в медицинском оборудовании, в телеиграх — и это далеко не полный перечень их применения. Более того, каждый день нахо- дятся новые приложения и разрабатываются новые изделия на основе микропроцессоров. Их потенциальное воздействие на нашу жизнь почти не поддается воображению. Эта книга знакомит читателя с функционированием микропроцессоров и более крупных систем, содержащих в себе микропроцессоры. Для такого знакомства нужно в определенном объеме осветить принципы проектирования логиче- ских устройств, некоторые вопросы электроники и программирования. Овладение соответствующими понятиями и принципами позволит успешно пользоваться новыми логическими устройствами. В этой главе сообщаются общие сведения о функционировании и структуре микропроцессоров и микрокомпьютеров. По ходу изло- жения вводится терминология. Цель главы — дать читателю возмож- ность прочувствовать многочисленные относящиеся к микропроцес- сорным системам понятия и их взаимосвязь. В последующих главах они детализируются более конкретно. Однако общая картина, сложив- шаяся по материалу этой главы, позволит читателю полнее осознать устройство и работу микропроцессорных систем. 1.1. НОВАЯ ЭРА ВЫЧИСЛЕНИЙ С 1951 года, когда был создан первый производимый промышлен- ностью компьютер (Univac I), ЭВМ оказывают сильное влияние на наше общество и образ жизни. Возникла новая отрасль промышлен- ности. Такие термины, как «цифровые вычисления», «логическое проектирование» и «программирование», стали научными и инженер- ными понятиями. Однако широта этих понятий часто приводила к расхождению интересов. Например, интересы одной группы специа- листов лежали в использовании ЭВМ и программировании (область программного обеспечения), другой — в создании ЭВМ (область ап- паратуры). Хотя такое деление по интересам было, по-видимому,
10 ГЛ 1 МИКРОПРОЦЕССОРЫ и микрокомпьютеры оправданным в отношении больших вычислительных машин, с мо- мента появления миникомпьютеров в 1965 году проблемы, с которыми сталкивались прикладные программисты и конструкторы машин, стали переплетаться теснее. Миникомпьютеры уже не были всецело предназначены для обработки данных и решения задач; зачастую они входили как составные части в системы, требовавшие быстрого принятия решения,— системы реального времени. С появлением в 1971 году микропроцессоров расхождение инте- ресов еще более уменьшилось. Началась эра программируемой ло- гики. В эту эру понятия программирования и принципы проекти- рования логических схем сблизились настолько, что их взаимопро- никновение потребовало и от ученых, и от инженеров полного пони- мания как принципов программирования, так и аппаратуры. Только при этом условии можно было успешно использовать все заложенные в микропроцессорах возможности. Мы видели свою цель именно в том, чтобы осветить эти принципы и их взаимосвязь, и мы надеемся, что читатель сможет составить себе достаточно полное представление об устройстве и потенциальных возможностях микропроцессоров. 1.2. МИКРОПРОЦЕССОРЫ И МИКРОКОМПЬЮТЕРЫ Поскольку книга посвящена микропроцессорам и микрокомпью- терам, начнем с определения этих двух терминов. Дать строгое, ис- черпывающее определение практически невозможно, поскольку мик- ропроцессоры и микрокомпьютеры связаны с динамично развиваю- щейся технологией, и изменения технологии, возможно, вызовут из- менения в определениях. Одно из достижений технологии полупроводников заключается в создании больших интегральных схем (БИС), т. е. схем, позволя- ющих размещать большое число транзисторов, скажем 1000 или более, на одной кремниевой подложке (на одном «кристалле»). Это называют высокой степенью интеграции. Собственно, высокая степень инте- грации и привела к микропроцессорам. Микропроцессор, грубо говоря, это программируемое логическое устройство, изготовленное по БИС-технологии. Как мы увидим в дальнейшем, в конструкцию микропроцессора заложена большая гибкость. Сам по себе он не может решить ту или иную конкретную задачу. Чтобы решить задачу, его нужно запрограммировать и сое- динить с другими устройствами. В их число обычно входят память и устройства ввода/вывода. Вообще говоря, некоторая совокупность соединенных друг с другом системных устройств, включающая мик- рокомпрессор, память и устройства ввода/вывода, нацеленная на выполнение некоторой четко определенной функции, называется микрокомпьютером или микропроцессорной системой. Хотя микрокомпьютеры обладают всеми свойствами обычных ЭВМ, замечательная их особенность состоит в относительно низкой
1.3. ТИПОВАЯ СТРУКТУРА МИКРОКОМПЬЮТЕРА 11 стоимости и малом размере. Именно этому они обязаны своей попу- лярностью и успехом. Большие ЭВМ и миникомпьютеры обладают, конечно, большей вычислительной мощью, но не для всех приложений эта мощь оказывается необходимой. Более того, стоимость больших компьютеров и миникомпьютеров часто не позволяет включать их в системы, где они могли бы многое дать. Микропроцессоры открывают возможность для применения программируемых устройств в тех логических системах, для которых фактор стоимости оказывается важнее, чем скорость и разнообразие вычислений. Каждый день открываются новые области приложений для мик- ропроцессоров. В настоящее время они используются в контрольно- измерительных приборах, в кассовых аппаратах магазинов, в интел- лектуальных терминалах и карманных калькуляторах. Они оказы- ваются жизненно важнььм элементом в управлении станками, хими- ческими процессами, периферийными устройствами больших компью- теров, в управлении уличным движением, сложными бытовыми элект- роприборами и автомобилями. Наконец, в области развлечений и досуга благодаря этим устройствам возникло новое хобби — строить свои собственные компьютеры. 1.3. ТИПОВАЯ СТРУКТУРА МИКРОКОМПЬЮТЕРА Типовая компьютерная система включает пять функциональных блоков: устройство ввода, память, арифметическое устройство, уст- ройство управления и устройство вывода. Пример такой системы при- веден на рис. 1.1. Физические компоненты и схемы, составляющие микрокомпью- тер,— это его аппаратура (hardware). Аппаратура способна выпол- нять только ограниченный набор элементарных операций. Все прочие функциональные возможности микрокомпьютера достигаются про- граммным путем. Программа — это определенным образом органи- зованная совокупность элементарных машинных операций, называ- емых командами или инструкциями, с помощью которых осуществ- ляется обработка информации, или данных. Программы, написанные для компьютера, образуют его программное обеспечение (software). Программа и данные сначала накапливаются в памяти, куда они поступают через устройство ввода. Затем отдельные команды про- граммы одна за другой автоматически поступают в устройство управ- ления, которое их расшифровывает и выполняет. Для выполнения операции обычно требуется, чтобы данные поступили в арифметическое устройство, содержащее все необходимые для их обработки схемы. В процессе вычислений или после их завершения полученные резуль- таты направляются в устройство вывода. Арифметическое устройство и устройство управления вместе обычно называются центральным процессорным устройством (ЦПУ) или центральным процессором
12 гл. 1 МИКРОПРОЦЕССОРЫ и микрокомпьютеры ----- Информационные сигналы —---_ Сигналы управления и адресации Рис. 1.1. Принципиальная организация компьютера. (ЦП). Центральный процессор в микрокомпьютерной системе это и есть микропроцессор. Не только память, но и другие устройства ЭВМ способны хранить информацию. Информация запоминается как содержимое групп дво- ичных разрядов — битов — на запоминающих устройствах — ре- гистрах. По существу, любую операцию в ЭВМ можно рассматривать как серию передач информации между регистрами с возможным ее преобразованием (например, сложением), выполняемым в процессе передач. Группа двоичных цифр, обрабатываемых одновременно, называется машинным словом, а число двоичных цифр, составляющих слово, называется длиной слова. Слово является базовой логической единицей информации в компьютере. Команды или данные обычно состоят из одного или нескольких слов. Типичные микропроцессоры имеют длину слова 4, 8, 12 или 16 двоичных разрядов. В силу особой распространенности слово длиной 8 бит имеет специальное название — байт. Память Запоминание больших объемов информации происходит в памяти, или, точнее, в запоминающем устройстве (ЗУ). Этот функциональный блок компьютера подразделяется на подблоки, называемые регист- рами, каждый из которых способен хранить одно машинное слово. Каждый такой регистр, или ячейка памяти, имеет свой адрес. Адрес —
1.3. ТИПОВАЯ СТРУКТУРА МИКРОКОМПЬЮТЕРА 13 это просто целое число, однозначно идентифицирующее ячейку. Слово, хранящееся в ячейке, называют содержимым этой ячейки. Итак, как данные, так и программа хранятся в памяти. Это важное обстоятельство приводит к двум основным концепциям проектиро- вания компьютеров. Первая заключается в том, что компьютер имеет два отдельных и четко различающихся вида памяти. Программа находится всегда в одной памяти, а данные — в другой. Машины, спроектированные в соответствии с концепцией разделения памяти на два вида, называют машинами гарвардского типа. В соответствии со второй концепцией различие между программной памятью и памятью для данных не проводится, и соответствующие компьютеры называют машинами фон-Неймановского или принстон- ского типа. В них программа может размещаться в любом месте общей памяти, и задача программиста — следить за тем, чтобы данные и программа обрабатывались по-разному. Преимущество второй кон- цепции — в возможности трактовать программу как данные, что позволяет компьютеру изменять свои собственные команды. Сущест- вуют микропроцессоры, спроектированные в соответствии как с пер- вой, так и со второй концепцией. В этой книге мы будем рассматривать машины фон-Неймановского типа. Благодаря низкой стоимости микропроцессоры часто предназна- чаются для решения одной конкретной задачи. Большие универсаль- ные ЭВМ постоянно перепрограммируются и поэтому могут решать задачи широкого спектра. Микропроцессорам, специализированным для одного конкретного приложения, такая гибкость не нужна. Од- нажды написанная и отлаженная программа в дальнейшем обычно не изменяется. Поэтому такие микрокомпьютеры часто имеют два вида памяти: память, из которой возможно только считывание (ROM — read-only memory), или постоянная память, и память со считыванием и записью (RWM — read/write memory)?). Изменить информацию, однажды записанную в постоянную память, сложно, если вообще возможно. Память этого типа благодаря своей низкой стоимости ис- пользуется для хранения программ и постоянных данных; изменяю- щаяся информация хранится в памяти со считыванием и записью * 2 3). Стало общепринятым память со считыванием и записью называть памятью с про- извольной выборкой (RAM — random-access memory), несмотря на то что и память только со считыванием также обладает произвольностью выборки. Термин «произволь- ная выборка», или «произвольный доступ», соответствует тому факту, что обращение к любой ячейке выполняется за одно и то же время. 2) В качестве русских эквивалентов сокращениям RAM, RWM и ROM часто ис- пользуются ЗУПВ — запоминающее устройство с произвольной выборкой, ОЗУ — оперативное запоминающее устройство и ПЗУ — постоянное запоминающее ус- тройство.— Прим, перев. 3) Читателю следует обратить внимание на то, что из наличия постоянной памяти не следует, что машина относится к гарвардскому типу. В машине фон-Нейманов- ского типа ячейки ROM (только для считывания) могут появляться, где угодно в па- мяти. Главное то, что микропроцессору «безразлично», откуда он получает информа- цию - из ROM или RWM.
14 ГЛ 1. МИКРОПРОЦЕССОРЫ И МИКРОКОМПЬЮТЕРЫ Арифметическое устройство Обработка данных осуществляется главным образом в арифме- тическом устройстве. Эта обработка включает как арифметические, так и логические операции. В гл. 7 будет дано описание типичного микропроцессора, и мы убедимся, что встроенные операции чрезвы- чайно элементарны. Более сложные математические действия должны выполняться с помощью программ, пользующихся встроенными операциями. Обычно главный регистр в арифметическом устройстве называ- ется аккумулятором. В нем, как правило, находится один из операн- дов перед выполнением операции, и в него же помещается ее резуль- тат х). Арифметическое устройство часто содержит еще несколько вспомогательных регистров, называемых рабочими; они упрощают составление программы. Арифметическое устройство содержит также признаковые биты, или флажки. Эти биты содержат информацию, характеризующую состояние микропроцессора, которое важно для выбора дальнейшего пути вычислений. Например, может существовать флажок, указы- вающий на нулевой результат операции. Программист может вос- пользоваться проверкой этого флажка для принятия решения: если некоторая операция дала нулевой результат, то будет выполнена одна последовательность команд, в противном случае — другая. Флаж- ковые биты, характеризующие результаты операций или каких-либо проверок, часто размещаются вместе с другой важной информацией о состоянии машины в специальном регистре, называемом словом состояния программы (PSW — program status word). Устройство управления Устройство управления управляет работой компьютера. Оно автоматически, последовательно по одной, получает команды из памяти, декодирует каждую из них и генерирует необходимые для ее выполнения сигналы. Для того чтобы получить команду из памяти, устройство управления прежде всего должно знать ее адрес. Обычно команды выбираются из последовательных ячеек памяти, и их ад- реса указываются программным счетчиком, находящимся в устройстве управления. Далее, чтобы иметь возможность декодировать и выпол- нить текущую команду, ее нужно где-то запомнить. Этой цели в уст- ройстве управления служит регистр команды. Для того чтобы быть правильно проинтерпретированной устрой- ством управления, команда должна иметь определенную структуру, которую называют форматом команды. У микропроцессоров разных и В микропроцессорах некоторых типов имеется несколько аккумуляторов, ис- пользуемых в процессе вычислений и называемых регистрами общего назначения^
1.3. ТИПОВАЯ СТРУКТУРА МИКРОКОМПЬЮТЕРА 15 типов форматы команд различны. Однако есть информация, которая должна присутствовать в команде в любом случае. Наиболее важное значение имеет код операции и в некоторых командах адрес. Код операции — это совокупность двоичных цифр, которые однозначно определяют операцию, выполняемую в процессе интерпретации ко- манды. Адресная часть команды (если она присутствует) указывает на ячейки (например, в памяти), к которым нужно обратиться, вы- полняя команду. Например, если выполняется операция сложения, адресная часть команды может указывать на ячейку, где находится второе слагаемое. Очень важно, чтобы читатель полностью понимал различные употребления слова «адрес» и различал адрес ячейки и ее содержимое. В командах определенного формата существует адресная часть. Это числовой указатель ячейки, связанной с операндом. Однако команда сама находится в памяти и, следовательно, имеет связанный с ней адрес. Как правило, этот адрес не совпадает с адресной частью в самой команде. Следующая функция устройства управления — это синхронизация работы отдельных блоков компьютера. Она осуществляется с по- мощью генератора тактовых импульсов, или тактового генератора. Обработка команды занимает несколько периодов тактового генера- тора. Вообще говоря, команду нужно выбрать из памяти, декоди- ровать и затем выполнить. Выборка, декодирование и выполнение распадаются на несколько временных интервалов. Каждый из этих интервалов, включающих один или большее число периодов тактового генератора, представляет собой так называемый машинный цикл. Совокупное время, требуемое для выборки, декодирования и выпол- нения команды, образует командный цикл, или цикл выполнения ко- манды. Устройства ввода/вывода Последние два блока машины — это устройство ввода и устройство вывода. Через эти устройства осуществляется контакт компьютера с внешним миром. Они являются буферами для преобразования инфор- мации с тех языков и тех скоростей, на которых работает компьютер, к тем, которые воспринимает человек или другая связанная с компью- тером система. Устройство ввода получает из внешнего мира данные и команды, которые поступают в память. Устройство вывода получает вычисленные результаты и передает их человеку-оператору или другой системе. Устройства ввода и вывода представляют собой периферийные устройства машины. В качестве примера можно назвать перфолен- точные считыватели/перфораторы и электрические пишущие машинки. Точки контакта между устройствами ввода/вывода и микропроцес- сором называются портами ввода/вывода. Порты ввода/вывода также
16 ГЛ. 1. МИКРОПРОЦЕССОРЫ И МИКРОКОМПЬЮТЕРЫ имеют свои адреса, так что к одному микропроцессору может быть подключено несколько устройств ввода/вывода. Характерная особенность цифрового компьютера состоит в том, что вся информация хранится и обрабатывается в дискретном виде, т. е. в виде конечных чисел. Часто возникает необходимость со- пряжения компьютера с другой, системой, не способной обрабаты- вать дискретную информацию. Недискретная информация называется аналоговой или непрерывной. В таких случаях приходится осуществ- лять преобразование из цифровой формы в непрерывную и обратно. Устройства ввода/вывода, осуществляющие соответствующие преоб- разования, называются аналого-цифровыми и цифро-аналоговыми пре- образователями . На рис. 1.1 устройства ввода/вывода показаны подключенными непосредственно к арифметическому устройству. Это не единственно возможный способ подключения. Часто для достижения большей производительности системы желательно позволить устройствам ввода/ вывода обращаться к памяти непосредственно, а не через арифмети- ческое устройство. В таком случае говорят о прямом доступе к памяти (DMA — direct memory access). Организация прямого доступа к памяти будет рассмотрена в гл. 9. Шины Отдельные блоки микрокомпьютера связаны друг с другом с по- мощью шин. Шина представляет собой совокупность линий, по ко- торым передается информация от любого из нескольких источников к любому из нескольких приемников. Одна из распространенных в микрокомпьютерах структур шин представлена на рис. 1.2. Рис. 1.2. Шины типичного микрокомпьютера.
1.4 ФУНКЦИОНИРОВАНИЕ МИКРОКОМПЬЮТЕРА 17 На рисунке представлены шины трех типов. Адресная шина одно- направленная, т. е. информация по ней передается только в одном направлении. Эта шина служит для передачи адреса от микропро- цессора к памяти, вводному или выводному устройству. Шина данных двунаправленная, т. е. информация по ней может передаваться в обоих направлениях, и она служит для передачи данных. Наконец, шина управления состоит из линий, по которым передаются тактовые, синхронизирующие сигналы, а также информация о состоянии (ста- тусе) устройств. Часть линий в управляющей шине однонаправлен- ные, часть двунаправленные. Поэтому на рисунке направленность этой шины никак не обозначена. 1.4. ФУНКЦИОНИРОВАНИЕ МИКРОКОМПЬЮТЕРА В предыдущем разделе были рассмотрены функции отдельных блоков компьютера. В этом разделе мы остановимся на взаимодей- ствии блоков и на динамике информационных потоков. Устройство управления в процессе функционирования проходит через три фазы: выборка, декодирование и выполнение. После того как программа и данные поступили в память, адрес первой выполня- емой команды помещается в программный счетчик, и в устройстве управления устанавливается фаза выборки. При этом содержимое программного счетчика поступает на адресную шину, и тем самым обеспечивается возможность выборки соответствующей команды из памяти. Команда, хранящаяся в ячейке с адресом, заданным на программ- ном счетчике, посылается по шинам данных в регистр команды в уст- ройстве управления. Поскольку команды в памяти располагаются в последовательных ячейках, программный счетчик увеличивается на 1, и на нем появляется адрес следующего слова в программе. Затем устройство управления декодирует код операции только что получен- ной команды. Если код операции показывает, что команда состоит более чем из одного слова, фаза выборки повторяется нужное число раз, чтобы выбрать команду целиком. При этом каждый раз увели- чивается содержимое программного счетчика. После выборки и декодирования всей команды устройство управ- ления переходит в фазу выполнения. Оно генерирует управляющие сигналы, и соответствующие схемы выполняют заданную в команде операцию. Если в команде задан адрес операнда, устройство управ- ления переходит к пересылке адресуемой информации между указан- ной ячейкой и соответствующим блоком машины, например арифме- тическим устройством или устройством вывода. Для осуществления пересылки адресная часть команды передается на адресную шину, подготавливая последующее появление адресу- емой информации на шине данных. В конечном счете устройство Управления обеспечивает фактическое выполнение заданной операции
18 гл. Т. МИКРОПРОЦЕССОРЫ И МИКРОКОМПЬЮТЕРЫ и после ее завершения снова возвращается к фазе выборки, чтобы получить из памяти следующую команду, адрес которой содержит программный счетчик. Этот процесс повторяется до тех пор, пока компьютер не получит указание остановиться. В общем описанном выше случае команды выполняются после- довательно в порядке их расположения в памяти. Однако в некоторых случаях этот порядок желательно изменить, например в зависимости от состояния флажковых битов. В этом случае адрес следующей ко- манды может не быть адресом ячейки, следующей по порядку за ячей* кой, откуда была взята текущая выполняемая команда. Команды, в которых происходят такие изменения порядка выборки команд, называются командами переходов, передач управления или ветвлений. В этих командах адресная часть содержит адрес следующей ко- манды, которую должно выбрать устройство управления, если по- следовательность выборки изменяется. Поэтому, после того как уст- ройство управления декодирует команду перехода и установит, что Условия изменения порядка выполнены, оно Поместит адресную часть выполняемой команды, содержащую адрес следующей команды, в программный счетчик. Таким образом, после того как устройство управления перейдет в фазу выборки, оно автоматически получит йужную ему следующую команду. 1.5. ЕЩЕ ДВА ПОНЯТИЯ Завершая краткий обзор микрокомпьютеров, остановимся еще на двух понятиях, которые существенно расширяют их возможности. Эти понятия стек и прерывание программы. Стек Мы уже говорили о том, что при помощи команд переходов можно отходить от строго последовательного порядка выполнения команд. Особый тип команды перехода, несколько отличающийся от рассмот- ренных выше, позволяет многократно использовать некоторую спе- циально выделенную группу команд, называемую подпрограммой. В процессе выполняемых вычислений в главной программе может потребоваться выполнить некоторое «подвычисление», оформленное в виде подпрограммы. Компьютер должен передать управление из главной программы на подпрограмму, выполнить соответствующее «подвычисление» и затем осуществить возврат в главную программу для продолжения работы. Чтобы осуществить такой возврат, необ- ходимо сохранить значение программного счетчика, которое было до перехода к подпрограмме. Это и делается в команде переход на под- программу, а именно запоминается содержимое программного счет- чика и затем передается управление. Для того чтобы восстановить программный счетчик, используя запомненное значение, и обеспечить
1.5 ЕЩЕ ДВА ПОНЯТИЯ 19 возврат к главной программе, употребляется специальная команда возврат из подпрограммы. Место, где запоминается содержимое про- граммного счетчика, обычно представляет собой стек. В общем случае стек — это совокупность регистров, которые принимают и выдают информацию в соответствии с правилом «послед- ним вошел, первым вышел» (LIFO — last-in first-out). Это означает, что только вершина стека, где находится последний его элемент, непосредственно доступна извне. В зависимости от конструкции ком- пьютера стек может находиться в устройстве управления или быть частью памяти. Если стек может хранить несколько адресов (значений программ- ного счетчика), мы получаем возможность выполнять вложенные подпрограммы. Таким образом, из подпрограммы можно сделать переход на другую подпрограмму или даже на саму себя — это на- зывается рекурсией. Очевидно, что глубина вложений подпрограмм зависит от емкости стека. Прерывание программы Во многих приложениях микропроцессоров возникает необходи- мость прерывать процесс вычислений для обслуживания внешнего устройства. Прерывание может происходить при поступлении в про- цессор сигнала от внешнего устройства, требующего внимания. В от- вет на это процессор должен приостановить выполнение текущей про- граммы, запомнить состояние, в котором она была прервана (содер- жимое различных регистров, включая программный счетчик), и затем обслужить запрос внешнего устройства. Завершив обслуживание, микропроцессор возвращается к приостановленному процессу вычис- лений, воспользовавшись ранее запомненной информацией о состоянии прерванной программы. Понятие прерывания можно обобщить для случая нескольких внешних устройств. В этом случае любое из устройств может прислать свой запрос на внимание. Обработка запросов может либо следовать правилу обслуживания «первым вошел — первым вышел», либо некоторой приоритетной схеме в соответствии с приоритетом запросов. При всех условиях способность обрабатывать прерывания может оказаться очень мощным средством во многих приложениях микро- процессоров. Поскольку при прерываниях нужно сохранять инфор- мацию о текущем состоянии процессора, можно опять воспользо- ваться стеком, т. е. сохранить в нем внутреннее состояние микропро- цессора в момент поступления запроса, включая программный счет- чик. В некотором смысле прерывание подобно переходу на подпро- грамму, но этот переход проинициирован внешним сигналом, а не командой в программе.
20 ГЛ- Г МИКРОПРОЦЕССОРЫ И МИКРОКОМПЬЮТЕРЫ 1.6. О ПОСЛЕДУЮЩИХ ГЛАВАХ Предыдущие разделы содержали краткое изложение структуры и функционирования микропроцессора и микрокомпьютера. После- дующие главы посвящены более детальной проработке рассмотренной структуры и многим возможным ее вариациям. В гл. 2 рассматриваются системы счисления, употребляемые в компьютерах, и методы выполнения арифметических действий в этих системах счисления. Поскольку компьютер манипулируете числами, эта глава необходима для понимания большей части материала по- следующих глав. Гл. 3 посвящена алгебре, которая может служить математической моделью логических схем. Ее применение оказывается полезным при проектировании логических схем и описании их поведения. Базисные электронные схемы — главный предмет гл. 4. При помощи этих схем реализуются различные логические функции, введенные в гл. 3. Поскольку эти функции допускают несколько реа- лизаций, существуют различные семейства логических элементов. В гл. 4 проводится анализ достоинств и недостатков этих семейств элементов. Представление о семействах элементов важно для понима- ния электрических характеристик микропроцессоров и некоторых про- блем, возникающих при соединении различных компонентов микро- компьютера друг с другом. В гл. 1 мы установили, что микрокомпьютер состоит из несколь- ких типовых логических узлов. Регистры, например, встречаются во всех функциональных блоках микрокомпьютера. Далее, при вы- полнении машинных операций происходили передачи данных из регистра в регистр. Для того чтобы осуществлять такие передачи, нужно уметь ссылаться на отдельные регистры, участвующие в пере- даче. Выбор соответствующих регистров осуществляется с помощью типового логического узла, называемого дешифратором. Дешифра- торы используются также для декодирования команды перед ее вы- полнением. В гл. 1 было также показано, что микропроцессорная система включает как составную часть средства для выполнения арифмети- ческих действий. Эти действия обычно выполняются с помощью сум- маторов и вычитателей. Детальное изучение логики регистров, де- шифраторов, сумматоров и вычитателей составляет предмет гл. 5. Говоря о памяти микрокомпьютера, мы отмечали, что использу- ются два вида памяти, а именно память с записью и считыванием и память только со считыванием. В гл. 6 оба эти вида памяти изучаются как с точки зрения их электронной структуры, так и с точки зрения внешних характеристик. Более того, не все виды памяти с записью и считыванием обладают возможностью произвольного доступа. В гл. 6 рассматривается также память, доступ к которой осуществ- ляется последовательно.
1.6. О ПОСЛЕДУЮЩИХ ГЛАВАХ 21 В гл. 7 и 8 вводится типовой (но гипотетический) микропроцессор. На его примере продемонстрированы основные свойства выполняемых микропроцессорами команд и объясняются главные принципы про- граммирования для микропроцессоров. Введенный в этих двух главах микропроцессор используется затем в гл. 9 и 10, где обсуждаются вопросы проектирования микропроцессорной системы. В гл. 9 рассматривается подключение к микропроцессору других устройств. При подключении должна обеспечиваться совместимость в отношении синхронизации, форматов данных и вида сигналов. В общем случае для такой совместимости создаются вспомогательные схемы, называемые интерфейсными. Некоторые понятия из этой области изучаются в гл. 9. В заключительной главе книги приводятся проекты трех микро- процессорных систем. На них проиллюстрированы как области при- менения микропроцессоров, так и использование материала, изложен- ного в предыдущих главах*
Глава 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА По существу, компьютер — это устройство обработки информации. Информация может быть числовой или нечисловой. Однако в обоих случаях в машине она представляется цепочками из нулей и единиц, и в конечном счете вся информация представляется в виде чисел не- зависимо от того, как мы ее интерпретируем. Эта глава содержит материал по двоичной системе счисления и другим системам, тесно связанным с двоичной. Рассмотрены спо- собы выполнения арифметических операций. В последнем разделе показано, как нечисловая информация может быть также представ- лена в виде цепочек нулей и единиц. 2.1. ПОЗИЦИОННЫЕ СИСТЕМЫ СЧИСЛЕНИЯ Мы все знакомы с десятичной системой счисления. Однако это не единственная система из тех, которые можно определить. На самом деле, обычная десятичная система — это лишь одна из многих пози- ционных систем счисления по основанию. В этих системах исполь- зуется конечный набор различных символов. Каждый символ назы- вается цифрой и обозначает некоторое количество. Число различных символов в наборе называется основанием системы счисления. Чтобы обозначить величины, большие тех, которым соответствуют индиви- дуальные символы, цифры выписывают рядом, образуя число. Отно- сительной позиции цифры в числе ставится в соответствие весовой множитель. Рассмотрим привычную десятичную систему. В ней только 10 раз- личных цифровых символов: 0, 1, . . ., 9. Например, число 536.4 можно считать просто сокращенным обозначением полинома 5х 102+Зх Ю^бХ 1О°+4Х 10’1 Здесь цифра 5 входит с весом 100, цифра 3 — с весом 10, цифра 6 — с весом 1, а цифра 4 — с весом 0,1. Как обобщение этой идеи в позиционной системе счисления по некоторому основанию число N ^71 —1^71—2* • -dido * d_ 2’ • /я
2.1. ПОЗИЦИОННЫЕ СИСТЕМЫ СЧИСЛЕНИЯ 23 можно считать обозначением полинома N = dn_1b“’' + dn_2b"-* + ... +d_mb~m В этой общей форме — цифры, лежащие в диапазоне п — число цифр левее разделительной, или позиционной, точки х), т — число цифр правее точки, а b — основание системы счисления. Таблица 2.1 Системы счисления Основание Система счисления Цифровые символы 2 двоичная 0, 1 3 троичная 0, 1,2 4 четверичная 0, 1, 2, 3 5 пятеричная 0, 1, 2,3, 4 8 восьмеричная 0, 1. 2, 3, 4, 5, 6, 7 10 десятичная 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 12 двенадцатеричная 0, 1,2, 3, 4, 5, 6, 7, 8, 9, А, В 16 шестнадцатеричная 0, 1, 2. 3, 4, 5, 6, 7, 8, 9, А, В, G, D, Е, F В табл. 2.1 перечислены наиболее употребимые системы счисле- ния. Как правило, в системах с основанием, меньшим 10, в качестве цифровых символов используются соответствующие первые цифры десятичной системы; для систем же с основанием, большим 10, исполь- зуются десятичные цифры с добавлением первых букв латинского алфавита. В таблице указана также относительная упорядоченность цифр в системах. Из упомянутых систем три системы представляют особый интерес при изучении вычислительной техники — это двоичная, восьмеричная и шестнадцатеричная. Записи некоторых чисел в этих системах выглядят следующим образом: 1011.1012 372.468 C65F.B316 По соглашению десятичный индекс, сопровождающий число, ука- зывает основание системы счисления. Индекс опускается, когда зна- чение основания ясно из контекста. Х) В СССР и во многих других странах часто вместо точки используется раздели- тельная запятая. Однако в связи с распространением единых языков программиро- вания в качестве разделительного символа все шире входит в употребление точка.— Tip им. ред.
24 ГЛ. 2 СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Как и в десятичной системе, число представлено совокупностью выписанных рядом цифр. Дробная и целая части располагаются соответственно справа и слева от разделительной точки. В случае двоичной системы цифры 0 и 1 называют битами как сокращение от Wnary digi/s (двоичные цифры). Таблица 2 2 Первые 32 числа в двоичной, восьмеричной и шестнадцатеричной системах и их десятичные эквиваленты Десятичные Дбоичные Восьмеричные Шестнодцитери^р 0 0 0 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 по 6 6 7 111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 А 11 1011 13 В 12 1100 14 С 13 1101 15 D 14 1110 16 Е 15 1111 17 F 16 10000 20 10 17 10001 21 11 18 10010 22 12 19 10011 23 13 20 10100 24 14 21 10101 25 15 22 юно 26 16 23 10111 27 17 24 11000 30 18 25 11001 31 19 26 11010 32 1А 27 11011 33 1В 28 11100 34 1С 29 11101 35 1D 30 11110 36 1Е 31 11111 37 1F
2.2. ПРЕОБРАЗОВАНИЯ ЧИСЕЛ 25 В табл. 2.2 приведены представления первых 32 целых чисел в двоичной, восьмеричной и шестнадцатеричной системах вместе с их десятичными эквивалентами. 2.2. ПРЕОБРАЗОВАНИЕ ЧИСЕЛ ИЗ ОДНОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДРУГУЮ Одна из интерпретаций любого числа заключается в обозначаемой этим числом величине. Бывает интересно найти конфигурацию сим- волов в одной системе счисления, которая обозначает ту же вели- чину, что и некоторая конфигурация в другой системе. Эти два числа можно считать эквивалентными представлениями одной и той же величины в разных системах счисления. Перевод в десятичную систему Прежде всего рассмотрим преобразование числа из недесятичной позиционной системы в эквивалентную десятичную форму. Такое преобразование легко получается простым вычислением значения полинома, соответствующего числу. Это вычисление можно, напри- мер, выполнить следующим образом: 1. Записываем число в виде полинома 1^Л-2 * ’ * ^0 • ^-1 * * ’^-//2 = 1‘^~dn_2bn 2 4“ • • • + dob° + rf-i^1 + где b — основание системы, выраженное в десятичной форме. Для тех систем, где цифры представляются буквами, последние при вы- числении заменяются на десятичные эквиваленты, например Л = 10, В=11, С= 12, .... 2. Вычисляем значение полинома, пользуясь десятичной арифме- тикой. Для иллюстрации перевода из двоичной системы в десятичную систему рассмотрим двоичное число 1110.12- Записывая его в виде полинома по степеням 2 (по степеням основания), получим 1110.12 = 1 х 23 -+ 1 х 22 -+ 1 х 21 -+ 0 х 2° -+ 1 х 2"1 =1x8+1x4+1x2+0x1+1x05 = 8 +- 4 + 2 0 + 0.5 = 14.51О Таким образом, 14.5 есть десятичный эквивалент двоичного числа 1110.1.
26 ГЛ 2 СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА В качестве второго примера преобразуем в десятичную систему шестнадцатеричное число D3F.4i6: D3F.416 - D х 162 + 3 х 16l + F х 16° + 4 х 16"1 . = 13 x 162 + 3 x 161 + 15 x 16° + 4 x 16"J *= 13 x 256 + 3 x 16 + 15 x 1 + 4 x 0.0625 = 3328 + 48 + 15 + 0.25 = 3391.251O Перевод из десятичной системы Перевод десятичного числа в эквивалентную форму в другой си- стеме счисления чуть более сложен. В процессе преобразования при- ходится порознь обрабатывать целую и дробную части числа. Рассмотрим сначала преобразование целого десятичного в систему счисления с основанием b (Ь — целое положительное число). Поскольку число в системе с основанием b можно записать в виде полинома по степеням Несоответствующими цифрами в качестве коэф- фициентов, мы получаем = + (2.1) Теперь нужно найти цифры d0» удовлетворяющие выпи- санному уравнению. Для этого разделим обе части (2.1) на Ь. По- лучим целое частное дг; = 4^-2 -------d2bx + (2.2) и остаток Остаток Таким образом, остаток равен младшей цифре числа в системе счис- ления с основанием Н, т. е. d0. В результате деления в остатке может оказаться более одной десятичной цифры, если b больше 10. Однако поскольку остаток всегда меньше Н, то его значение будет соответст- вовать цифре d0. Если процесс деления повторить для целого частного (2.2), мы получим снова целое частное в остаток Остаток ( — ) = d. \ ь / 1 В этом случае остаток соответствует следующей справа цифре числа с основанием системы Ь. Легко видеть, что, повторяя описанный
2 2 ПРЕОБРАЗОВАНИЯ ЧИСЕЛ 27 процесс вплоть до нулевого частного, мы получим все цифры урав- нения (2.1). (Напомним, что остаток следует каждый раз представ- лять цифрой в системе счисления с основанием Ь.) Очевидно, что процесс завершится после конечного числа шагов. Разберем описанную процедуру на примере перевода десятичного числа 52 в эквивалентную двоичную форму. Вычисления проводятся многократным делением на 2: 2)26 2)13 2)6 2)3 2)1 О Остаток 0 = do 0 = ^ 1 = ^ о==а3 i = d$ Следовательно, 5210= 1101002. В качестве второго примера рассмотрим перевод десятичного числа 58506 в шестнадцатеричную систему. Последовательные деления на 16 дают 16)58506 Остаток ЦифрьВой еинВол, эквивалентный остатку 16)3656 10 А = 40 16)228 8 8 = dt 16)14 4 4 = d2 0 14 E = d3 Следовательно, 58506ю =Е48А16. Процедура перевода правильной десятичной дроби в систему счисления с основанием b должна быть несколько иной. Обозначим через NF десятичную дробь, соответствующую полиному где^_ь d_2, . . ,,d_m— цифры, которые нужно определить. Поскольку полином и NF обозначают одну и ту же величину, то имеет место равенство N,=d_Ab^ + d^b^ + • • • + d_mb~m (2.3) Умножая обе части равенства на Ь, получим bNP =d^1b^ + d_2b-‘1 + • • • + d_mb~m+l = <1 + <2b"1+ • • • + d_mb~"l + 1 (2.4) = d-i + N'f
28 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Произведение состоит из целой части d_t и дробной части N'F. Целая часть эквивалентна старшей цифре нашей исходной дроби в системе счисления с основанием Ь. Как и ранее, легко видеть, что целая часть, соответствующая d_lf лежит в диапазоне от 0 до b—1, и, следова- тельно, для систем с основанием, большим 10, мы должны в соответ- ствующих случаях в качестве цифр брать буквы. Если провести те же действия над дробной частью результата (2.4), т. е. умножить его на Ь, то можно будет определить следующую цифру разложения дроби, заданного (2.3). А именно, поскольку = + • • • +й-^,л + 2 = d_2 + d_3b~'+ • • • + d_rnb~m+2 = d_2 + N”F то целая часть произведения соответствует d_2. Очевидно, повторяя описанный процесс, мы сможем определить последующие цифры числа в системе по основанию Ь. Процесс естественно прекращается, если получается нулевая дробная часть. Однако в отличие от процесса преобразования целых чисел, всегда заканчивающегося через конеч- ное число шагов, процесс преобразования десятичной дроби может быть бесконечным. Другими словами, представление десятичной дроби с конечным числом цифр может иметь бесконечное число цифр в системе счисления с другим основанием. Поэтому в любом случае процесс преобразования останавливают при достижении требуемой точности. Приведем два примера преобразования десятичных дробей. Сна- чала рассмотрим перевод числа 0.6875 в двоичную форму: 2 х 0.6875 = 13750 :.d^ = 1 2 x 0375 =0.750 AcL2 = 0 2 x 0.75 = 1.50 ; а’_3 = 1 2x0.5 =1.0 /.<L4=1 В результате мы получаем 0.687510=0.10112. Теперь переведем десятичную дробь 0.8435 в шестнадцатеричную систему. Нужно выполнить следующую цепочку умножений: 16 х 0.8435 = 13.496 16 х 0.496 = 7.936 16 х 0.936 = 14.976 поскольку D— это = D шестнадцатеричная цисрра^ обозначающая десятичное . т - число 13 ..d_2 = 7 ;. J-з = Е 16 X 0.975 = 15.616 = F Остановив процесс в этом месте, мы получим 0.8435i0=O.D7EF...i6,
2.3. ПРЕОБРАЗОВАНИЯ 2—8 И 2 — 16 29 На этом примере видно, что процесс преобразования бесконечен, по- скольку третья цифра дробной части на всех шагах равна 6. Для смешанных десятичных чисел целая и дробная части обраба- тываются порознь. Целая часть преобразуется последовательными делениями, а дробная — последовательными умножениями. Получа- ющееся в результате смешанное число записывается в виде этих де}х частей разделенных точкой. 2.3. ДВОИЧНО-ВОСЬМЕРИЧНЫЕ И ДВОИЧНО- ШЕСТНАДЦАТЕРИЧНЫЕ ПРЕОБРАЗОВАНИЯ Описанные в предыдущем разделе методы позволяют преобразо- вывать числа из системы счисления с одним произвольным основанием bi в систему с другим произвольным основанием Ь2. Для этого до- статочно сначала преобразовать число из системы bi в десятичную форму, а затем из десятичной — в систему Ь2. Существуют обобщения рассмотренных методов для прямого перевода из системы в систему при произвольных основаниях. В общем случае процедуры прямого перевода неудобны для выполнения вручную, поскольку они требуют недесятичной арифметики. Однако между двоичной системой, с одной стороны, и системами с основанием, являющимся степенью двойки, с другой, существуют простые прямые методы преобразования. Это относится, в частности, к двоично-восьмеричным и двоично-шестнад- цатеричным преобразованиям. Рассмотрим двоичное число N = ••• dsd1d6d5d^d3d2dld0 . d_id_2d-3 ”* Его десятичный эквивалент мы получим, записав полином • • J828 4- J727 4- db26 4- d525 4- d42* 4- d,23 4- d222 + d,2l + Jo2° + d^2~1 + d-22~2 + d.32-3 ••• С помощью простых группировок полином приводится к виду • • • + (J822 + </72* + J62°)26 + (d522 + J42‘ + </32°)23 + (d222 + ^2* + <?O2°)2° + (d_122 + <i_221+</_320)2-3 + -" = •• +W822 +J72* + </62°)82 + (d522 + d42l + J32°)8‘ + (J222 + dt2l + </02°)8° + (</_I22+</_221 +d_32°)8-J +•••
30 ГЛ 2 СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Это выражение содержит степени числа 8 и имеет форму восьмерич- ного числа. Внутри каждой пары скобок содержится двоичное раз- ложение десятичного числа, лежащего в диапазоне от 0 до 7. Если величину, заключенную в каждой паре скобок, записать в виде вось- меричной цифры (а она совпадает с эквивалентной десятичной цифрой), то перевод из двоичной в восьмеричную систему будет завершен. Таким образом, чтобы преобразовать двоичное число в восьмерич- ную форму, нужно объединить двоичные цифры в группы по 3 бита, продвигаясь от разделительной точки вправо и влево. При необхо- димости в начале и в конце исходного числа нужно добавить нули. Затем каждая группа из 3 битов заменяется эквивалентной восьме- ричной цифрой. Результат будет восьмеричным представлением ис- ходного двоичного числа. Например, биты двоичного числа 11011001. 1011 группируются следующим образом: 0И0И 001.1011рр2 Замена каждой группы битов восьмеричным эквивалентом дает вось- меричное число 331.548. Описанная процедура легко обращается для перевода восьмерич- ных чисел в двоичные. Например, отправляясь от восьмеричного числа 57.2, получим 57.28 = 101И1.0102 Можно построить аналогичные процедуры для преобразований между двоичной и шестнадцатеричной системами. Каждой шестнадцатеричной цифре будет соответствовать группа из четырех битов. Чтобы пре- образовать, например, двоичное число 1011100101.112 в шестнадца- теричную систему, биты группируются по четыре от точки вправо и влево, а в начале и в конце добавляются нули: pqioiiioowi.iigOi Преобразование завершается заменой каждой группы эквивалентной шестнадцатеричной цифрой: 001011100101.11002 = 2Е5.С1<? Обратная процедура позволит переводить числа из шестнадцатерич- ной системы в двоичную. Как уже упоминалось в предыдущей главе, компьютеры обычно работают в двоичной системе. Однако из-за простоты рассмотренных выше процедур и стремления к уменьшению количества цифр в чис- лах при записи их на бумаге удобнее все числа считать восьмерич- ными или шестнадцатеричными. В этом и кроется причина их ши- рокого использования при работе с компьютерами.
2.4. ДВОИЧНАЯ АРИФМЕТИКА 31 2.4. ДВОИЧНАЯ АРИФМЕТИКА Четыре основные арифметические операции, а именно сложение, вычитание, умножение и деление, можно выполнять в позиционной системе счисления с любым основанием. Поскольку компьютеры, как правило, работают в двоичной системе, для нас важно понимать именно двоичную арифметику. Хотя основной упор в последующем изложении будет сделан на двоичной арифметике, читатель сможет легко обоб- щить соответствующие процедуры на случай системы с любым другим основанием. Таблица 2.3 Правила сложения двух двоичных цифр «-ь ь ъ О 1 0 1 1 0 и 1 переноса В табл. 2.3 даны правила сложения двух двоичных цифр. Заме- тим, что при двоичном сложении 1 + 1 возникает бит переноса и что бит суммы при этом равен О п. Чтобы сложить пару двоичных чисел, следует применить правило табл. 2.3 многократно, отправляясь от пары младших разрядов, так, как это обычно делается при десятичном сложении. После сложения пары младших цифр и получения значения младшего разряда суммы складывается следующая пара цифр с учетом переноса из младшего разряда. При этом получается значение следующего разряда суммы и, возможно, перенос. Описанный процесс повторяется нужное число раз. Следующий пример поясняет сказанное: 111 1 ion.ioi2 + И 10.0012 * 11001.но2 Переносы Слагаемое Слагаемое Сумма. Вообще, когда сложение двух цифр в системе по основанию b дает величину, превышающую или равную основанию системы, сумма принимается равной этой ве- личине по модулю Ь, и возникает перенос в следующий разряд.
32 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Таблица 2.5 Правила умноженья двух двоичных цифр Таблица 2.4 Прав: ла вычитания двух двоичных цифр Двоичное вычитание обратно двоичному сложению. Правила вычитания даны в табл. 2.4. Легко видеть, что в случае вычитания большей цифры из меньшей необходимо произвести «заем» в более старшей соседней позиции. При десятичном вычитании, если в по- зиции п возникает необходимость «заема», то вычитается 1 из (п+1)-й цифры уменьшаемого, а в позицию п «приносится» величина 10 (т. е. основание системы). Это же правило работает и для двоичного вычи- тания с той лишь разницей, что из позиции п+1 в позицию п «при- носится» величина 2 (т. е. основание системы). При этом нужно вычесть 1 из цифры уменьшаемого в позиции п+1. Таким образом, как показано в табл. 2.4, при вычитании 1 из 0 разность после заема оказывается равной 1. Следующий пример поясняет сказанное: 010 Изменение уменьшаемого 8результате заема JW0.112 Уменьшаемое — 111.012 Вычитаемое 11.102 Разность В табл. 2.5 приведены правила умножения двух двоичных цифр. Умножение двух многоразрядных чисел проводится аналогично умножению десятичных чисел, а именно сначала вычисляются частные произведения множимого на отдельные разряды множителя, а затем эти частные произведения суммируются, разумеется, в двоичной си- стеме. Принцип двоичного умножения легко проследить на следую- щем примере: 11 012 Множимое х 1012 Множители I Частные 0000 произведения 1101 J 10000.012 Произведение
2.5 ДВОИЧНЫЕ ЧИСЛА СО ЗНАКОМ 33 Наконец, двоичное деление также аналогично делению десятич- ному. Здесь последовательно подбирается очередная искомая цифра частного и на нее умножается делитель. Полученное произведение вычитается из делимого для проверки правильности подобранной цифры. Входящие в двоичное деление операции двоичного умножения и вычитания мы уже рассмотрели. Процесс двоичного деления даже проще хорошо знакомого нам процесса десятичного деления, поскольку при подборе очередной цифры частного нужно рассматривать только две возможности (0 или 1). Ниже следует пример двоичного деления: ПО 1012 Частное Делитель 112) 101000002 Делимое 100 -и 100 —11 j 10 -00, 100 -и 12 Остаток 2.5. ДВОИЧНЫЕ ЧИСЛА СО ЗНАКОМ Все числа, рассмотренные нами до сих пор, предполагались не имеющими знака, т. е. положительными. Однако весь предыдущий опыт общения с числами говорит о том, что нужны как положитель- ные, так и отрицательные числа. Понятно, что ввести понятие числа со знаком можно, просто добавив к числу соответствующий символ. Однако, имея в виду ЭВМ, полезно рассмотреть и другие способы представления чисел со знаком. Для людей, работающих с ЭВМ, важны обычно следующие три способа представления чисел со знаком: в прямом, обратном и в дополнительном коде. В этом разделе мы остановимся на всех трех. Причем, поскольку разделительная точка в явном виде не присут- ствует в микрокомпьютерных словах с данными, мы ограничимся только целыми двоичными числами. Прямой код Можно считать, что количество разрядов, отведенных для «машин- ного числа», фиксировано и известно. Более того, поскольку вся информация в компьютере представляется в виде нулей и единиц, 2 № 592
34 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА можно с помощью этих же символов представлять и знак числа. На- прашивающийся вариант — зарезервировать один разряд, скажем старший, в качестве знакового и считать, что 0 соответствует положи- тельным, а 1 — отрицательным числам, остальные же разряды ис- пользовать для представления абсолютной величины числа в двоич- ной системе. Таблица 2.6 Представление чисел в прямом, обратном и дополнительном четырехразрядном двоичном коде Старший разряд — знаковый; запятая, отделяющая знаковый разряд, введена только для наглядности и не является частью кода. Де с я тшчнзе число СО Прямой код Обратный код Дополните/ib ныц код 4-7 0.111 0.1 II 0,111 + 6 0,110 0,110 0.110 4-5 OJOI 0.101 0,101 4-4 0,100 0,100 0.100 4-3 0,011 0,011 0,011 4-2 0,010 0,010 0,010 + 1 0,001 0,001 0,001 0 10,0001 11,0001 j 0.000 [ luilf 0.000 — 1 1,001 1,110 1.111 -2 1,010 1,101 1.110 -3 1,011 1.100 1.101 -4 1,100 гон ' 1.100 -5 1J01 1,010 1.0И 1,110 1,001 1,010 -7 1.111 1.000 1.001 -8 — —» 1,000 Такое представление чисел со знаком и называется представле- нием в прямом коде. В табл. 2.6 приведены в качестве примера деся- тичные числа со знаком и их эквивалентные представления в прямом четырехразрядном двоичном коде. Старший бит служит для обозна- чения знака, а остальные 3 бита в двоичной форме задают абсолют- ную величину числа. Запятую в числах, приведенных в таблице, нужно воспринимать лишь как разделитель, облегчающий чтение и отделяющий знак от абсолютной величины. В машинном слове никакой запятой, конечно, нет. Заметим, что нуль в прямом коде имеет два представления. Легко видеть, что для n-разрядного прямого двоичного кода Х~ • • dQ, где старшая цифра соответствует знаку, эквива- лентное десятичное число Хщ, представляемое этим кодом, равно зна*
2.5. ДВОИЧНЫЕ ЧИСЛА СО ЗНАКОМ' 35 чению полинома (- l)‘/«-i(d„_22«-2 + d„_32”-’+ • • • +d„2’) Диапазон чисел, представимых в n-разрядном двоичном коде, опре- деляется соотношениями 1— 1 Обратный код Несмотря на естественность прямого кода для человека, в ЭВМ он применяется относительно редко. В ЭВМ положительные 'числа обычно представляются так же, как в прямом коде, а отрицательные — в виде дополнений, т. е. путем сдвига по числовой оси исходного числа на некоторую константу. А именно если z—положительное число, то —z представляется в виде X — z, где К таково, что разность по- ложительна. Обратный код отличается от дополнительного только выбором значения X. Пусть Х10 — десятичное число со знаком, которое мы хотим пред- ставить в обратном коде. Будем считать, что мы ищем /г-разрядное представление, включая знак, т. е. часть, отводимую для абсолютной величины, будем считать (п—1)-разрядной. ЕслиХю^О, то обратный код содержит ,0 в старшем, знаковом разряде и обычное двоичное представление Х1о в остальных п—1 разрядах. Таким образом, для положительных чисел обратный код в точности совпадает с прямым. Если же Х1о^О, то знаковый разряд содержит 1, а остальные раз- ряды содержат двоичное представление числа 2"-1-1-|Х10| (2.5) Чтобы пояснить сказанное, рассмотрим положительное число + 1310- Выбрав шестибитовое (или шестиразрядное) представление, включая знак, т. е. считая п=6, мы получим обратный код, равный 0,011012. Заметим, что под абсолютную величину числа отводится 5 разрядов. Запятая, как и раньше, отделяет знаковый разряд. В ма- шине этот разделитель отсутствует. Теперь рассмотрим отрицательное число —1310. По-прежнему считаем представление шестибитовым, включая знак. Поскольку в пятиразрядном представлении |—1310| = = 131о=011012 и 25—1ю=11111, то в соответствии с (2.5) мы получим (26”i—1 —13)10 = (11111—01101)2= 100102 Добавив шестой, знаковый бит, мы получим шестиразрядный обратный код для —13ю, равный 1,100102. Другие примеры пред- ставления чисел в обратном коде можно найти в табл. 2.6. Следует отметить (и это видно в таблице), что в обратном коде нуль имеет два представления. На самом деле, всякий раз, когда для некоторой положительной величины 2И, , имеющей (п—1)-разрядное двоичное представление, 2*
36 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА выполняется вычисление в соответствии с (2.5), его называют обраще- нием М. Относительно обратного кода числа со знаком обращением называют операцию, состоящую в применении (2.5) к «величинной» части кода и в замене значения знакового разряда на противополож- ное. Таким образом, применительно к рассмотренному примеру мы будем говорить, что 1,100102 есть результат обращения 0,011012. Рассмотрим процесс обращения отрицательного числа на примере числа —131о. Мы показали, что обратный код этого числа есть 1,100102. Поскольку величинная часть/ т. е. 100102, соответствует 181Л и по- скольку мы рассматриваем шестиразрядные представления, приме- нение соотношения (2.5) дает (2е-1 — 1 —18)10 = (11111 —10010)2 = 011012 Добавляя инвертированное значение знакового разряда, мы получаем результат обращения кода 1,100102, равный 0,011012=+ 131п. Легко видеть, что обращение кода эквивалентно замене знака представ- ляемого этим кодом числа на противоположный. Правило обращения для обратного кода можно сформулировать проще. А именно для обращения нужно заменить каждый 0 на 1, а каждую 1 на 0, включая знаковый разряд. Это хорошо видно на рассмотренных примерах, где +1310 представлялось в виде 0,011012, а —1310 — в виде 1,100102. Легко видеть, что если X—dn_idn_2 есть п-разрядный дво- ичный обратный код, то десятичный эквивалент представляемого им числа Х10 задается полиномом (1 -2^)dn^ +^22«’2+ • * • +d02° Диапазон чисел, представимых в этом коде, определяется соот- ношениями Нужно обратить внимание, что знаковый разряд имеет отрицатель- ный весовой множитель. Дополнительный код Этот код используется в микрокомпьютерах чаще всего. Пусть Х10 обозначает десятичное число со знаком, которое мы хотим пред- ставить в дополнительном n-разрядном коде, т. е. мы отводим, как и'раньше, 1 разряд на знак и п— 1 на абсолютную величину. Если Х10>0, то так же, как для прямого и обратного кодов, мы имеем 0 в знаковом разряде и обычное двоичное представление числа Хю в остальных п—1 разрядах. Если же Хю<0, то мы имеем 1 в знаковом разряде, а в остальных п—1 разрядах двоичный эквивалент числа |Х10| (2.6)
2.5 ДВОИЧНЫЕ ЧИСЛА СО ЗНАКОМ 37 Чтобы пояснить применение (2.6), рассмотрим снова число —1310. Представим его в шестиразрядном дополнительном коде. Поскольку |—13ю I = 1 Зю=01101 о, в пятиразрядном представлении, и 2105= 1000002, то в соответствии с (2.6) мы получим (26-1 — i3)io = (ЮОООО — 01101)2 = 100112 в пятиразрядном представлении. Добавляя шестой знаковый разряд, получаем дополнительный код числа —13ю, равный 1,100112. Из табл. 2.6, где приведены представления чисел во всех рассмотренных кодах, видно, что 0 в дополнительном коде имеет единственное пред- ставление. Поскольку у нуля здесь только одно представление, диапазон представимых чисел шире, чем в прямом и обратном кодах. Знаковый разряд можно, как и раньше, интерпретировать как разряд с отри- цательным весовым множителем, поскольку для л-разрядного двоич- ного дополнительного кода X=dn_1dn_2 • • • d0 представляемое им десятичное число Хи> задается полиномом -2"-Чп_^п_22"-*+ • • • +d02<> (2.7) Диапазон чисел, представленных в этом коде, равен —2"-х<Х10^2"-х — 1 Всякий раз, когда для некоторой положительной величины М проводится вычисление (2.6), результат называют дополнением М. Применительно к дополнительному коду взятием дополнения называют операцию, состоящую в применении вычисления (2.6) к величинной части кода и инвертировании значения знакового разряда. Переход к дополнению кода эквивалентен замене знака, представляемого ко-, дом числа, на противоположный. Вспомним, что дополнительный код для —13ю равен 1,100112. Поскольку величинная часть кода, т. е. 10011, соответствует 19ю и поскольку мы рассматриваем шестиразрядные коды, применение (2.6) дает (26-х—19)10 = (100000 —10011)2 = 011012 в пятиразрядном’ представлении. Добавляя противоположное значение знакового раз- ряда, получим дополнение для кода 1,100112, равное 0,011012= + 13ib. Сходство выражений (2.5) и (2.6) служит основой для общего алгоритма взятия дополнительного кода. Сначала нужно выполнить обращение, как описано выше, путем замены 0 и 1 в коде соответст- венно на 1 и 0, а затем прибавить к результату 1. Сумма и будет до- полнительным кодом числа х). Х) Другой общий алгоритм перехода к дополнению формулируется следующим образом: Просматриваем код справа налево, начиная с младшей цифры, и оставляем неизменными все нули до первой встретившейся единицы и саму эту единицу. Все остальные нули и единицы, включая знаковый разряд, заменяем соответственно на единицы и нули.
38 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Следует обратить внимание на то, что диапазоны чисел, пред- ставленных в дополнительном и обратном кодах, не совпадают. И поскольку в обратном коде нет представления для +2"“1, то при помощи описанного алгоритма мы не сможем получить представ* ления для —2"’1 в дополнительном коде. Однако такое представ- ление существует и единственно: 100-0 п — 1 нулей что следует из (2.7). 2.6. СЛОЖЕНИЕ И ВЫЧИТАНИЕ ЧИСЕЛ СО ЗНАКОМ Представление чисел в обратном и дополнительном кодах широко используется в компьютерах. При этих представлениях операции сложения и вычитания чисел с произвольными знаками допускают простую реализацию. Мы уже отмечали в предыдущем разделе, что обращение кода (или взятие его дополнения) равносильно изменению знака представляемого числа п. Таким образом, операцию вычитания можно свести к сложению с предварительным обращением кода вы- читаемого. Более того, в этом разделе мы покажем, что сложение для чисел со знаками реализуется просто сложением их кодов как поло- жительных чисел, т. е. с помощью обычной операции сложения, рассмотренной в разд. 2.4, которая проводится над всеми разрядами кодов, включая и знаковые. Таким образом, оказывается, что если числа представлены в компьютере в обратном или дополнительном коде, то нет необходимости иметь электронные схемы одновременно и для сумматора, и для вычитателя. Сложение и вычитание в дополнительном коде Начнем со сложения в дополнительном коде. Предположим, что оба числа имеют n-разрядное представление. В этом случае коды обоих чисел суммируются по правилам двоичного сложения, рас- смотренным в разд. 2.4, разряд за разрядом, включая старшие, зна- ковые разряды кодов. Возможный перенос из старшего разряда от- брасывается. Мы получим правильный результат, т. е. правильное представление в дополнительном коде алгебраической суммы чисел, коды которых суммировались, при условии, что алгебраическая сумма принадлежит диапазону представимых чисел, т. е. если —2Л“1^ Х) Единственное исключение мы отмечали для числа — 2п~* в «-разрядном допол- нительном коде.
t.G. СЛОЖЕНИЕ И ВЫЧИТАНИЕ ЧИСЕЛ СО ЗНАКОМ 39 <хумма^2',~1—1. Описанный алгоритм поясняется приведенными ниже примерами с пятиразрядными кодами: Пример Слагаемое Слагаемое Сумма ( + 6) = 0,0110 4-(-4)^ 4-1,1100 (+2)-jj 0,0010 *—Перенос игнорируется Пример- Слагаемое (4- 6) - 0,0110 Слагаемое 4-(—13) 4-1,0011 ; Сумма {гЪ- 1,1001-’ Пример Слагаемое Слагаемое Сумма (-3)^ 1ДЮ1 4-(-11)=^ 4-1,0101 (-14) =2] 1,0010 *-----Перенос игнорируется Если оба слагаемых имеют одинаковый знак, то может случиться, что их алгебраическая сумма выйдет за границы диапазона чисел;, представимых в коде данной разрядности. Такое событие называется переполнением, и его нужно фиксировать. Вообще говоря, можно утверждать, что переполнение происходит тогда и только тогда, когда коды слагаемых имеют одинаковое значение знаковых разрядов, а код суммы имеет другое значение знакового разряда. Другой рас- пространенный способ определения переполнения опирается на зна- чения переноса в знаковый разряд Cs и из знакового разряда С$+/. В частности, переполнение происходит тогда и только тогда, когда либо (1) С5=0 и C5+i=l, либо (2) С5=1 и C5+i=0. Мы уже отмечали раньше, что вычитание можно выполнить, сна; чала взяв дополнительный код вычитаемого, а затем сложив это до; полнение с кодом уменьшаемого. Следующие примеры помогут по- нять, как это делается: Р Уменьшаемое (4-12)— 0,1100 0,1100 Вычитаемое Г(+7)- —0,0111/^.^4-1,1001 Разность (+5) - JJ 0,0101 ---Перенос игнорируется
40 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Пример Уменьшаемое (--14)=* 1,0010 1,0010 Вычитаемое - (- 3) - -1,1101 вдополнкод^ +0,0011 Разность (-11)= ’ 1,0101 Сложение и вычитание в обратном ходе Хотя в большинстве микрокомпьютеров применяется дополни- тельный код, можно воспользоваться и обратным. В нем также можно выполнять алгебраическое сложение и вычитание. Алгоритм сло- жения формулируется так. Коды слагаемых, включая знаковые разряды, суммируются по правилам сложения двоичных чисел без знака. Если в результате сложения возникает перенос из старшего (знакового) разряда, он прибавляется к младшему разряду получен- ной суммы. Такой перенос называют круговым переносом, а сложение, в котором предусмотрен круговой перенос, называют циклическим сложением. В результате получается правильный обратный код алгебраиче- ской суммы для чисел, представляемых кодами слагаемых, если только не произойдет переполнения. Как и для дополнительного кода, переполнение происходит тогда и только тогда, когда оба слагаемых немеют одинаковые знаки, а знак суммы оказывается противополож- ным. Так же как и в дополнительном коде, переполнение можно оп- ределять по переносам в и из знакового разряда, но делать это надо до прибавления кругового переноса. Заметим, что алгоритм сложения в обратном коде тот л<е, что и в дополнительном, с единственным отличием: перенос из знакового разряда должен быть прибавлен к результату. Следующие примеры поясняют алгоритм (числа в них представлены в пятиразрядном об- ратном коде): Пример Слагаемое Слагаемое СуММО (+14)= 0,1110 + (—3)= +1,1100 ДО,1010 + 1 = Круговой (+11)= 0,1011 перенос Пример Слагаемое (+ 9) = 0,1001 Слагаемое + (-14)= +1,0001 Сумма (~5)= 1,1010
2.7 ДЕСЯТИЧНАЯ АРИФМЕТИКА 41 Вычитание в обратном коде также выполняется путем обращения кода вычитаемого и его последующего сложения с кодом уменьшаемого. Следующий пример поясняет эту операцию: Пример Умень шаемое (—6) = 'Вычитаемое — (—13) = 1,1001 1,1001 -1,001.0 +0,1101 Разность ( + 7) = 110,0110 + 1 = Круговой “адш леренос 2.7. ДВОИЧНО-КОДИРОВАННЫЕ ДЕСЯТИЧНЫЕ ЧИСЛА И ДЕСЯТИЧНАЯ АРИФМЕТИКА Популярность двоичной системы счисления в вычислительной технике объясняется простотой и надежностью электронных схем, работающих с числами, имеющими только две цифры. Для человека эта система неудобна, и поэтому иногда желательно, чтобы вычисли- тельная система работала с десятичными числами. Для сочетания простоты двоичной системы с удобствами десятичной применяют схемы, в которых цифры десятичной системы кодируются группами двоичных цифр. Компьютер каждую такую группу рассматривает как одно целое. Схема кодирования, при которой каждая десятичная цифра представляется двоично-кодированной группой, называется двоично-кодированной десятичной схемой. Двоичные коды десятичных цифр Существует несколько способов кодирования десятичных цифр. Наиболее известна схема 8421 BCD (8421 Binary-Coded Decimal) n. В этой схеме десятичные цифры кодируются первыми десятью четы- рехразрядными двоичными числами. Кодировка приведена в табл. 2.7. Само название 8421 BCD отражает значение весовых множителей, приписываемых соответствующим битам в кодирующей группе. По- этому иногда такую схему кодирования называют взвешенным кодом. А1ногоразрядные десятичные числа в коде 8421 BCD представ- ляются путем объединения (конкатенации) групп, кодирующих от- дельные десятичные цифры. Например, представлением числа 658 в коде 8421 BCD является ОНО 0101 1000. Следует заметить, что во избежание путаницы число битов в кодирующих группах должно быть строго фиксированным. Левые нули во всех десятичных цифрах от 0 до 7 должны присутствовать. J) Схему 8421 BCD часто называют просто BCD.
42 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Хотя схема 8421 BCD получила наибольшее распространение при представлении десятичных чисел в ЭВМ, тем не менее существуют и другие схемы. Некоторые из них приведены в табл. 2.7. Код с из- бытком 3 невзвешенный. Он получается прибавлением 00112—Зю к каждой цифре, представленной в коде 8421 BCD. Таблица 2.7 Двоичные коды десятичных цифр Десятичная цифра Код 8421 Код с избытком 3 КоЗ 2 из S 0 0000 ООН 11000 1 0001 0100 00011 2 0010 0101 00101 3 ООН ОНО 00110 4 0100 0111 01001 5 0101 1000 01010 6 оно 1001 01100 7 0111 1010 10001 8 1000 1011 10010 9 1001 1100 10100 Например, десятичная цифра 5 кодируется в виде 1000 (что является двоичным представлением числа 8). Достоинства этого кода связаны с тем, что замена в кодирующей группе нулей на .единицы, а единиц на нули превращает цифру X в 9—X. Коды, обладающие таким свой- ством, называют самодополнительнымщ они применяются при выпол- нении арифметических действий над десятичными числами, пред- ставленными в обратном или дополнительном коде. Третья приведенная в табл. 2.7 схема соответствует коду 2 из 5. Это невзвешенный код с 5 битами в каждой группе, причем из этих 5 битов ровно 2 содержат 1, а остальные 0. Достоинства этого кода связаны с возможностью обнаружения ошибок. Эти свойства мы рас- смотрим в разд. 2.8. Десятичное сложение в коде 8421 BCD Для выполнения десятичных операций в компьютере с использо- ванием некоторой схемы кодирования десятичных цифр приходится в соответствии с принятым кодом несколько видоизменять двоичную арифметику. Рассмотрим сложение и вычитание в коде 8421 BCD, поскольку этот код популярен в микропроцессорах.
2.7. ДЕСЯТИЧНАЯ АРИФМЕТИКА 43 Рассмотрим два десятичных числа 27 и 36. Если бы мы сложили «их с помощью двоичной арифметики, то получили бы 27ю= ’ 0010 0111 + 361О = +0011 оно '0101 1101 Очевидно, полученная сумма не является представлением 63. Трудности проистекают из того факта, что из шестнадцати возмож- ных комбинаций в четырехразрядной двоичной группе только 10 используются в нашем коде. Комбинация 1101, полученная в сумме, не имеет интерпретации в коде 8421 BCD. Очевидно, всякий раз, когда при сложении получаются комбинации 1010, 1011, . . ., 1111, должен произойти перенос в следующий разряд и должна быть про- изведена коррекция недопустимой комбинации. Оба эти требования легко удовлетворить, прибавляя корректирующее слагаемое 6ю=01102 к каждой недопустимой комбинации и разрешая двоичному переносу распространяться из группы в группу. Для приведенного выше при- мера мы получим 271О- 0010 0111 * +361О - +00Ц ОНО 0101 1101 Коррекция +0000 ОНО Сумпа 631O== 0110 0011 Однако существует и другая ситуация, при которой необходима коррекция. Рассмотрим следующее сложение: перенос 2810 = оокПооо + 5910 = +0101 1001 1000 0001 Снова, хотя комбинации в обоих группах допустимы, двоичное сложение дает неверный результат. А именно в младшей группе получилась сумма на 6 меньше требуемой. Проблема в данном случае связана с тем, что сумма двух младших цифр превысила 15. В таких случаях получаются допустимые, но неверные комбинации. Обна- ружить эти случаи легко по возникающему при сложении переносу между группами. Возвращаясь к примеру, мы получим Перенос 28|О~ ООКПООО ±59ю - +0101 10Q1 1000 0001 Коррекция +0000 ОНО Сумма 1000 0Ш
44 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА Таким образом, корректирующее слагаемое 6ю=01102 при сло,- жении двух чисел в коде 8421 BCD должно добавляться к каждой группе битов, в которой или (1) получена недопустимая цифра, или (2) возник перенос в следующую группу в процессе сложения. В не- которых микропроцессорах для упрощения реализации десятичной арифметики имеются программно-управляемые средства для обнаг ружения описанных ситуаций и выполнения коррекции. Десятичное вычитание в коде 8421 BCD Теперь обратим внимание на десятичное вычитание. По-прежнему будем считать, что числа представлены в коде 8421 BCD. Если бы мы вычитали два десятичных числа 61 и 38 по правилам двоичной ариф- метики, то получили бы 6110= 0116~0001 -381О = -ООН 1000 ' 0010 1001 Младшая группа битов в разности содержит неправильную цифру. Причина здесь в заеме между группами. При двоичном вычитании заем эквивалентен 16ю, в то время как для десятичного вычитания он должен соответствовать 10ю. Чтобы компенсировать излишек в заеме, необходимо вычесть корректирующее число 61о=01102 из той группы, которая получила заем. Тогда рассматриваемое вычитание примет вид ( заем 6110= 0110 0001 -381О= -ООН 1000 0010 1001 Коррекция —0000 ОНО Разность 231О = 0010 0011 >. Таким образом, при вычитании чисел в коде 8421 BCD возникает лишь одна ситуация, требующая коррекции, а именно ситуация заема между группами. Коррекция при этом сводится к вычитанию 6ю==01102 из каждой группы разности, которая получила заем. Десятичное сложение и вычитание для чисел со знаками Выше мы рассмотрели десятичное сложение и вычитание для чисел, не имеющих знаков. Так же как и в двоичной системе, для представления десятичных чисел со знаками можно использовать прямой, обратный или дополнительный код. По-прежнему двоичные цифры 0 и 1 могут служить указателями этого знака. Прямой код
2.7. ДЕСЯТИЧНАЯ АРИФМЕТИКА 45 Можно получить простым добавлением знакового бита к представ- лению абсолютной величины. Для обратного и дополнительного кодов 9» если Хю^О, знаковый разряд должен содержать 0, а осталь- ные п—1 десятичных цифр (величинная часть) — значение Xf0. Для Обратного кода, если Хю^СО, то в старшем, знаковом разряде должна быть 1, а следующие п—1 десятичных цифр будут соответствовать числу 10-1-1 _|Х10| (2.8) Для дополнительного кода, если Хю<0, то в знаковом разряде 1, а следующие п—1 десятичных цифр соответствуют числу IO"’1-1 Xi0| (2.9) Например, десятичное число +375 при данных определениях будет во всех кодах представлено как 0,375; а число —375 в прямом коде будет представлено как 1,375, в обратном — как 1,624, в дополни- тельном — как 1,625. Так же как и в разд. 2.5, запятая в числе слу- жит только для отделения знакового разряда. Всякий раз, когда для последовательности десятичных цифр, обо- значающих положительную величину Л4, выполняется вычисление (2.8), результат называют обращением М, Аналогично результат вы- числения (2.9) называют дополнением М, Применительно к кодам, представляющим числа со знаками, обращением или взятием допол- нения называют применение (2.8) или (2.9) соответственно к величин- ной части кода и изменение значения знакового разряда на противо- положное. Легко видеть, что обращение сводится к вычитанию каж- дой цифры из 9 и инверсии знака 2). Дополнение получается путем добавления 1 к результату обращения. Так же как и в двоичной си- стеме, обращение (соответственно взятие дополнения) кода соответ- ствует изменению знака числа, представляемого этим кодом. Десятичное алгебраическое сложение и вычитание выполняется просто, если числа представлены в обратном или дополнительном коде. Алгоритмы аналогичны рассмотренным в разд. 2.6. При вычи- тании сначала обращается или берется дополнение вычитаемого, а затем осуществляется сложение. При сложении складываются ве- личинные части кодов по рассмотренным правилам десятичной ариф- метики, а знаковые разряды складываются по правилам двоичной арифметики. В дополнительном коде перенос из знакового разряда игнорируется, а в обратном выполняется круговой перенос. Оба кода требуют обнаружения ситуации переполнения. Десятичное сложение и вычитание в дополнительном коде иллю- стрируется на следующих примерах сложения чисел с двумя десятич- 1 Соответственно 9' s-complement и 10' s-complement.— Прим, ред, 2 Заметим, что в самодополнительных двоично-кодированных десятичных пред- ставлениях, например в коде с избытком 3, обращение десятичного числа сводится к замене 0 на 1 и 1 на 0 непосредственно в двоичном коде.
46 ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА иыми разрядами и знаком. Обратите внимание на двоичную арифме- тику над знаками. Пример Слагаемое Слагаемое Сумма (+35)= 0,35 Ч-(—74) = 4-1,26 (-39)= 1,61 Пример Слагаемое (4 73) = 0,73 Слагаемое + (-42) = 4 1,58 Сумма (+ 31) = JJO,31 "1--------------------Перенос игнорируется Пример Слагаемое (—23)= 1,77 Слагаемое + (— 46) = 41,54 Сумма (-69) = 2)1,31 t-------------------------Перенос игнорируется Пример Уменьшаемое (437)= 0,37 0,37 Вычитаемое -(+12) = -0,12 + 1,88 Разность (425) = JJO.25 t---Перенос игнорируется Пример Уменьшаемое ( — 58)= 1,42 о 1,42 л 1 г\лв дополы коа t Вычитаемое — ( —6) = — 1,94--------->40,06 Разность (— 52) = 1,48 Приведем два примера десятичного сложения в обратном коде: Пример Слагаемое Слагаемое Сумма (476)= 0,76 + ( — 34) = +1,65 ДО,41 + Круговой (+42)= 0,42 пеРенос Пример Слагаемое (+27)= 0,27 Слагаемое 4-(~84) — 4-1,15 Сумма (_57)= 1,42
Ы ОБНАРУЖЕНИЕ ОШИБОК 47 В вышеприведенных примерах над десятичными цифрами выпол- нялись десятичные операции. Естественно, когда эти операции вы- полняются в компьютере, то десятичные цифры должны быть зако- дированы, и в определенных ситуациях должны выполняться рас- смотренные выше корректирующие операции. 2.8. ОБНАРУЖЕНИЕ ОШИБОК При передаче информации между отдельными компонентами компьютера могут возникать ошибки. Эти ошибки выражаются в том, что при передаче нуля случайно окажется принятой единица или на- оборот. Для повышения надежности вычислительных систем такие ошибки желательно обнаруживать. В разд. 2.7 мы отмечали, что для кодирования десятичных цифр иногда применяется код «2 из 5». При таком кодировании в каждой кодирующей цифру группе битов всегда присутствует ровно 2 еди- ницы. Таким образом, если в процессе передачи одна единица пре- вратится в нуль или один нуль — в единицу (но не обе ошибки сразу), то в принятой группе ровно двух единиц уже не будет. В этом случае подсчет числа единиц в принимаемых группах может служить сред- ством обнаружения одиночных ошибок. Не все коды обладают свойствами, позволяющими обнаруживать ошибки, что видно, в частности, на примере кода 8421 BCD. Более того, и для чисто двоичного представления чисел мы также не можем опереться на какие-то специфические свойства произвольной цепочки из нулей и единиц, чтобы обнаружить в ней ошибку при передаче. Была предложена очень простая схема, обеспечивающая обна- ружение одиночной ошибки. По этой схеме к кодирующей цепочке двоичных битов добавляется еще один бит — контрольный бит чет- ности. Значение этого бита выбирается таким, чтобы общее число единиц в цепочке было всегда либо четным, либо нечетным в зависи- мости от принятого правила контроля. Например, при контроле по нечетности контрольный бит равен единице, если в остальной цепочке четное число единиц, и равен нулю, если в остальной це- почке нечетное число единиц. В результате во всей цепочке в целом число единиц будет всегда нечетным. Если теперь при передаче про- изойдет ошибка в одном бите, то общее число единиц в принятой це- почке уже не будет нечетным. Таким путем легко построить схему обнаружения одиночной ошибки. Очевидно, что вместо контроля по нечетности можно проводить контроль по четности. Проверка четности или нечетности числа единиц в кодирующей цепочке легко выполняется цифровыми схемами. При обнаружении ошибки компьютер может пытаться повторить передачу либо выдать соответствующее сообщение о том, что произошла ошибка. Заметим, что рассмотренные схемы обнаруживают одиночные, но не обнаружи-
48 ГЛ 2 СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА вают двойных ошибок. Вообще говоря, они реагируют на любое не- четное количество ошибок и не реагируют, если количество ошибок четное. 2.9. АЛФАВИТНО-ЦИФРОВЫЕ КОДЫ В разд. 2.7 мы рассмотрели несколько десятичных цифр. Однако желательно иметь Семибитный код ASCII (Ф’ЛЛ способов кодирования возможность для пред- Табмща 2.8 bQ 0 0 0 0 000 031 010 Oil 100 101 НО HI NUL DLE SP 0 7' р P 0 0 0 1 SOH DC1 1 1 A Q а q 0 0 10 STX DC2 •• 2 В R b r 0 0 11 ЕТХ DC3 # 3 C S с s 0 10 0 EOT DC4 $ 4 D т d t 0 10 1 ENQ NAK 7 5 E и е u 0 110 АСК SYN & 6 F V f V 0 111 BEL ЕТВ / 7 G W % w 10 0 0 BS CAN ( 8 H X h X 10 0 1 НТ ЕМ ) 9 I Y i У 10 10 LF SUB * • J Z J z 10 11 VT ESC + > К [ k { 110 0 FF FS J < L \ 1 1 110 1 CR GS ae M ] m } 1110 SO RS • > N А n 1111 SI US / 2 О о DEL ! b7 часто используется как dam контроля четности
Таблица 2.8 (продолжение) Управляющее символы NUL Null Пусто SOH Start of Heading Начало заголовка STX Start of Text Начало текста ЕТХ End of Text Конец текста EOT End of Transmission Конец передачи ENQ Enquiry Кто там ? АСК Acknowledge Подтверждение BEL Bell Звонок BS Backspace Возврат на шаг НТ Horizontal Tab Горизонтальная табуляция LF Line Feed Перевод строки VT Vertical Tab Вертикальная табуляция FF Form Feed Перевод формата. CR Carriage Return Возврат каретки SO Shift Out Национальный регистр ST Shift In Латинский регистр DLE Data Link Escape Авторегистр 1 DC1 Device Control 1 Управление устройством 1 DC2 Device Control 2 Управление устройством 2 DC3 Device Control 3 Управление устройством 3 DC4 Device Control 4 Управление устройством 4 NAK Negative Acknowledge Отрицание SYN Synchronous Idle Синхронизация ETB End of Transmission Block Конец блока CAN , Cancel $ End of Medium Аннулирований EM Конец носителя SUS Substitute Подстановка ESC Escape Авторегистр 2 FS File Separator Разделитель файла GS Group Separator Разделитель группы FS Record Separator Разделитель записи US Unit Separator Разделитель элемента записи SP Space Пробел DEL Delete Вычеркивание
БО ГЛ. 2. СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА ставления в машине как числовой, так и нечисловой информации. Для этой цели было предложено несколько кодов. В этих кодах до- пускается кодирование десятичных цифр, букв алфавита, специаль- ных символов, таких, как знаки препинания, $, +, =, а также сим- волов управляющих операций, таких, как «конец передачи» или «воз- врат каретки». Часто буквы алфавита, цифры, специальные знаки и некоторые управляющие символы объединяют под общим названием символы или литеры, а соответствующие коды называют алфавитно- цифровыми кодами. Наибольшее распространение в микрокомпьютерах получил код ASCII (American Standard Code fot Information Interchange — Аме- риканский стандартный код для обмена информацией). Семибитная версия этого кода приведена в табл. 2.8. Часто дополняют этот код восьмым битом для контроля по нечетности. При такой схеме цифра 5, например, кодируется следующей комбинацией: Ь7Ь6. . .Ьо =10110101, где Ь1 — контрольный разряд, дополняющий число единиц до нечет- ного. Полезно заметить, что символ в коде ASCII, удобно обозначать двумя шестнадцатеричными цифрами. Цифра 5 в предыдущем примере может быть записана в виде В516. Если используется контроль по четности, то та же цифра 5 получает код . &о=ОО110101, где — по-прежнему контрольный разряд. УПРАЖНЕНИЯ 2.1. Переведите каждое из следующих чисел в десятичную систему: (а) 11011Ю.101а (Ь) 2102.1g (с) 3201.13„ (d) 2413.42б (е) 735.68 (/) 4В6.912 (g) lFD.8je 2.2. Представьте десятичное число 467.75 в следующих системах счисления! (а) двоичной; (Ь) троичной; (с) четверичной; (d) пятеричной; (ё) восьмеричной; (/) двенадцатеричной; (g) шестнадцатеричной. 2.3. Переведите каждое из следующих двоичных чисел в восьмеричную и шест- надцатеричную системы: (а) 1111000010.01 (Ь) 111100101011.110111 (с) 10101 HI 101.1 (d) 1010101001.011 2.4. Переведите следующие восьмеричные числа в двоичную систему: (а) 364.1 (Ь) 570.6 (с) 267.4 (d) 12.35 2.5. Переведите следующие шестнадцатеричные числа в двоичную систему! (а) 4В6.3 (b) 8F3.B (с) 6А.С (d) 4Д5.65 2.6. Используя идеи разд. 2.3, напишите алгоритм для прямого преобразования чисел из двоичной в четверичную систему.
УПРАЖНЕНИЯ '51 ?.7. Выполните следующие операции в двоичной системе: (а) 110110.11+11010.1 (Ъ) 10110;01—1011.1 (с) 1011.1X1100.1 (d) 1000101 4-110 2.8. Составьте таблицы сложения, вычитания и умножения в троичной арифме- тике. Затем выполните в троичной системе следующие операции: (а) 1211,2+1102.1 (b) 2102.1 —1021.2 (с) 120.1X2.1 (J) 22022-М2.1 2.9. Составьте таблицы сложения, вычитания и умножения в восьмеричной арифметике. Затем выполните в восьмеричной системе следующие операции: (а) 673.56+572.43 (Ь) 7530.62—4271.71 (с) 73.4X16.2 (d) 10534-?13 2.10. Выполните в шестнадцатеричной системе следующие сложения и вычита- ния: (a) SC52.6+3BF6.D (b) E54F.7+86A0.3 (с) 7Е30.42—2B9F.71 (d) СА41.3—1D22.F 2.11. Найдите для следующих десятичных чисел представления в двоичном восьмиразрядном прямом, обратном и дополнительном кодах: (а) +55 (b) +123 (с) —45 (ф —57 (е) —88 (f) —114 2.12. Выполните сложение для следующих чисел, представленных в двоичном дополнительном коде. (Старший разряд — знаковый.) (а) 0,10010+0,00111 (Ь) 0,10110+1,11100 (с) 0,00110+1,10100 (d) 1,01101 + 1,11001 2.13. Выполните вычитание для следующих чисел, представленных в двоичном дополнительном коде. Сначала нужно получить дополнение вычитаемого, а затем выполнить сложение. (Старший разряд — знаковый.) (а) 0,10010—0,00111 (Ь) 0,10110—1.11100 (с) 1,10100—0,00110 (d) 1,01101—1.11001 2.14. Выполните сложение для следующих чисел, представленных в двоичном обратном коде. (Старший разряд — знаковый.) (а) 0,00110+0,01011 (Ь) 0,11001 + 1,01100 (с) 0,10011+1,00101 (d) 1,10110+1,01101 2.15. Выполните вычитание для следующих чисел, представленных в двоичном обратном коде. Сначала нужно получить обращение вычитаемого, а затем выполнить сложение. (Старший разряд — знаковый.) (а) 0,00110—0,01011 (Ь) 0,01001 — 1,01100 (с) 1,01101—0,00110 (d) 1,10110—1,01101 2.16. Закодируйте десятичное число 473 в следующих схемах кодирования! (л) 8421 BCD (b) С избытком 3 (с) 2 из 5 2.17. Запишите в десятичном виде следующие числа, заданные в коде 8421 BCD: (а) 1001 0000 0101 (Ь) 0111 0001 0010 (с) 0001 ОНО ООН (d) 1000 0100 0000
52 ГЛ 2 СИСТЕМЫ СЧИСЛЕНИЯ И АРИФМЕТИКА 2.18. Выполните сложения над числами в коде 8421 BCD. Укажите необходимые коррекции в каждом случае. (ц) 0101 1СС0 СОЮ (Ь) 0100 1001 ООН + 0010 ОНО 1001 +0001 0111 0010 (с) ООН 0101 1001 + 0100 0111 1001 2.19. Выполните вычитания над числами в коде 8421 BCD. Укажите необходимые коррекции в каждом случае. (а) 0111 ООП 1000 (Ь) 0101 0010 0001 —0010 ОНО 0100 —0001 0100 ОНО (с) 0110 0000 0011 —0010 0111 1000 2.20. Предполагая, что для кодирования десятичных цифр используется код с избытком 3, сформулируйте правила для осуществления коррекций при сложении. 2.21. Приведенные ниже числа заданы в прямом десятичном коде. Преобразуйте их к десятичному дополнительному коду и выполните указанные операции сложения и вычитания. (а) 0,632+1,271 (Ь) 0,408+1,835 (с) 1,140+1,326 (d) 0,732—0,460 (е) 0,417—0,953 2.22. Приведенные ниже числа заданы в прямом десятичном коде. Преобразуйте их к десятичному обратному коду и выполните указанные операции сложения и вы- читания. (а) 0,548+1,321 (Ь) 0,137+1,620 (с) 1,426+1,159 (d) 0,806—0,321 (е) 0,379—0,895 2.23. Представьте каждую из заданных ниже последовательностей символов в коде ASCII. Код ASCII считайте семибитовым, дополненным восьмым старшим раз- рядом для контроля по нечетности. Коды символов запишите шестнадцатеричными цифрами. (а) 57 (Ь) Х=8 (с) END
Глава 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ Для описания поведения логических схем и их структуры можно использовать простую алгебру, называемую булевой. Этот формаль- ный математический аппарат удобен при описании функционирования микропроцессоров и помогает проектировать логические системы. Более того, поскольку одно из главных применений микропроцессо- ров связано с заменой аппаратной, так сказать, «запаянной» логики на программируемую, операции булевой алгебры часто встречаются и в программах для микрокомпьютеров. В этой главе мы дадим введение в булеву алгебру для двузначной логики. Мы определим несколько математических операций и не- сколько типов булевых алгебраических выражений. Остановимся на преобразованиях выражений и в заключение установим связь между выражениями булевой алгебры и логическими диаграммами. Булева алгебра будет широко использоваться в гл. 5 для анализа базовых узлов компьютеров и как инструмент логического проекти- рования. 3.1. БУЛЕВА АЛГЕБРА КАК МАТЕМАТИЧЕСКАЯ СИСТЕМА Формальная математическая система в общем случае состоит из множества элементов, множества операций и множества постулатов. Булева алгебра, будучи математической системой, также опреде- ляется этими тремя множествами. В микрокомпьютерах схемы одного типа обеспечивают перера- ботку двоичных символов, представляющих числа или другую ин- формацию. Другие схемы используются для коммуникации, образуя пути, цепи, каналы, по которым передается информация. Наконец, схемы третьего типа решают задачи управления, состоящие в акти- вации тех или иных функций и задании различных состояний или условий. Во всех трех случаях сигналы, появляющиеся в тех или иных точках схем, как правило, имеют два различимых уровня. Другими словами, сигналы могут представлять двоичные символы или соот- ветствовать значениям истина/ложь в зависимости от того, должно йли не должно произойти некоторое событие, или произошло оно
54 ГЛ 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ или нет. Таким образом, в алгебре, с которой мы будем работать, до- статочно иметь два элемента, соответствующих двум значениям сиг- налов. Поэтому везде в дальнейшем мы рассматриваем двузначную булеву алгебру п. Эта алгебра известна также как переключательная алгебра. Два элемента булевой алгебры называются ее константами, и мы будем обозначать их 0 и 1. Чтобы не смешивать с двоичными циф- рами, эти символы часто называют логическим 0 и логической 1. Иногда логическим 0 и 1 соответствуют двоичные цифры 0 и 1. В других слу- чаях логическая 1 соответствует выполнению некоторого условия, а логический 0 — его невыполнению. Достоинство абстрактной алгебры состоит в том, что ее результаты применимы к элементам различной природы, лишь бы эти элементы удовлетворяли определенным по- стулатам. Для того чтобы с помощью алгебры описать поведение и структуру логической схемы, входам, выходам и внутренним точкам схемы ста- вят в соответствие булевы переменные, которые могут принимать только два значения: логические 0 и 1. Формально переменная в двузначной булевой алгебре — это символ, такой, что х=0, если х=^=1; х=1, если х=#0. Для обозначения булевых переменных мы будем пользоваться буквами латинского алфавита. Теперь, после того как определены элементы булевой алгебры, нужно ввести множество операций и задать постулаты, которым эти операции удовлетворяют. Существует несколько булевых операций. Наиболее важные из них И, ИЛИ и НЕ. Другие операции мы введем в разд. 3.7. Операция И обозначается точкой (•) или подразумевается при выписывании рядом булевых переменных. Так, операция И между двумя переменными х и у записывается в виде х-у или ху. Эту операцию часто называют также логическим умножением или дизъюнкцией. Постулаты для операции И даны в табл. 3.1. Как видно из таблицы, х-у принимает значение логической 1 тогда и только тогда, когда и х, и у равны логической 1; в противном случае х- у равно логическому 0. Хотя в табл. 3.1 логическое умножение определено только для двух переменных, его легко обобщить на любое число переменных. А именно, значение Xi-x2 . - . хп есть логическая 1 тогда и только тогда, когда 1} Существуют булевы алгебры с большим числом элементов, чем два, Однако их изучение выходит за рамки этой книги.
3.1. БУЛЕВА АЛГЕБРА КАК МАТЕМАТИЧЕСКАЯ СИСТЕМА 55 Таблица 3.1 Определение операции И Таблица 3.2 Определение операции ИЛИ X у х • у X у х + у 0-0 = 0 0+0 = 0 0-1 = 0 0+1 = 1 1'0 = 0 1 + 0 = 1 1'1 = 1 1 + 1 = 1 значение каждой переменной xt9 х2, . • хп равно логической 1; в противном случае Х1*х2 . • хп есть логический 0. Выше было .сказано, что операцию И мы будем обозначать при помощи точки или просто записью переменных рядом. В литературе для обозначения этой операции часто используется также символ Д. Операция И над двумя переменными х и у при этом записывается в виде х/\у. Следующая булева операция, которую мы введем, это операция ИЛИ. Ее мы будем обозначать знаком плюс (+). Таким образом, операция ИЛИ над переменными х и у записывается в виде х+у. Эту операцию часто называют логическим сложением или конъюнк- цией. Таблица 3.3 Определение операции НЕ X 0 . 1 1 0- Постулаты для этой операции даны в табл. 3.2. Из таблицы сле- дует, что значение х-\-у есть логический 0 тогда и только тогда, когда обе переменные х и у имеют значение логического 0; в противном слу- чае х+у принимает значение логической 1. Эту операцию также можно обобщить на п переменных. А именно, Xi+x2+- • -+хп есть логиче- ская 1 тогда и только тогда, когда по крайней мере одна из перемен- ных имеет значение логической 1; в противном случае %i+x2+. . +%„ есть логический 0. Хотя в этой книге для обозначения операции ИЛИ мы будем упо- треблять только знак плюс, заметим, что в литературе также упо-
56 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ требляется символ V. В этом случае операция ИЛИ над переменными х и у записывается в виде x\Jу. Последняя операция, которую мы введем в этом разделе,— опе- рация НЕ. Ее также называют отрицанием, инверсией или дополне- нием. Мы будем обозначать ее черточкой над переменной (-). Так, отрицание переменной х записывается в виде х. Как показано в табл. 3.3, операция НЕ удовлетворяет следующим постулатам: х = 1, если х = 0; х = 0, если х = 1. или, что то же самое, 0=1 и 1=0. В литературе также используется штрих (') как символ операции НЕ. В этом случае отрицание х записывается как х'. Теперь можно определить двузначную булеву алгебру как мате- матическую систему с элементами логический 0 и логическая 1 и операциями И, ИЛИ и НЕ, постулаты которых заданы в табл. 3.1, 3 2 и 3.3 соответственно. 3.2. ТАБЛИЦЫ ИСТИННОСТИ И БУЛЕВЫ ВЫРАЖЕНИЯ Определив компоненты булевой алгебры, мы должны остановиться / на том, как они используются. Цель булевой алгебры — описание | поведения и структуры логических схем. На рис. 3.1 логическая | схема показана в виде «черного ящика». На входе — булевы перемен- I ные Xi, х2, • . на выходе — переменная f. Чтобы описать пове- | дение этого черного ящика, нужно выразить выход f как функцию I входных переменных х19 х2, . . хп- Это можно сделать или при по- I мощи таблицы истинности (комбинационной таблицы), или при по- | мощи булевых выражений. | Логическая схема, которую можно полностью описать таблицами : истинности или булевыми выражениями, называется комбинационной | схемой. Комбинационная схема — это такая схема, в которой зна- чения входных переменных в текущий момент времени полностью определяют значения выходных переменных. Другой класс логиче- ских схем составляют схемы с внутренней памятью. Такие схемы называют последовательностными. Для них значения выходных переменных определяются не только текущими значениями входных А 2 t .**п ЛОГИЧЕСКАЯ СХЕМА Рис. 3.1. Логическая схема как черный ящин^
3 2. ТАБЛИЦЫ ИСТИННОСТИ И БУЛЕВЫ ВЫРАЖЕНИЯ 57 переменных, но также их значениями в предыдущие моменты времени. В этой главе мы остановимся на комбинационных схемах. Как уже отмечалось, каждая из булевых переменных х1у х2, . . хп может принимать только два значения. Все точки внутри черного ящика и его выходы также обладают этим свойством. Таблица, со- держащая все возможные комбинации значений входных переменных вместе с соответствующими им значениями выходных переменных, т. е. значениями функций, называется таблицей истинности (или комбинационной таблицей). При п входных и одной выходной пере- менной таблица содержит 2п строк и п+1 колонок, как показано в табл. 3.4. Таблица 3.4 Таблица истинности *1 *2 *„-1 f 0 0 0 0 /(0,0,.,., 0,0) 0 0 0 1 /(0,0,..., 0,1) 0 0 1 0 /(0,0,..., .1,0) 0 0 1 1 /(0,0,..., .1,1) 1 1 1 1 /(1,1,..., .1,1) Заметим, что самый простой способ включения в таблицу истин- ности всех возможных входных значений состоит в последовательном переборе в двоичной системе счисления всех чисел от 0 до 2"—1. Конечно, f в каждой колонке будет принимать значение либо 0, либо 1 в зависимости от задаваемой функции. Второй способ описать поведение комбинационной схемы — это задать булево выражение. Оно представляет собой формулу, состоящую из булевых констант и переменных, связанных операциями И, ИЛИ и НЕ. Как в обычных алгебраических выражениях, для задания порядка действий используются скобки. Примером булевого выра- жения от трех переменных может служить формула f (*^1» -^2, *з) ~ [(«^1 + -^г) (*^1 + *з)] + 2-^з)’ Чтобы уменьшить количество скобок, обычно предполагается, что выполнение операции И (логическое умножение) предшествует опе- рации ИЛИ (логическому сложению). Таким образом, приведенное выше выражение обычно записывается в виде /(%!, Х2, *я) == (*1 +*2) (*1 +*з)+ *2Х3«
58 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ Построение таблицы истинности по булевому выражению Как таблицы истинности, так и булевы выражения оказываются полезными инструментами для описания логических схем. Поскольку они описывают одну и ту же схему, иногда нужно уметь переходить от одной формы описания к другой. Ясно, что, подставив вместо переменных их значения и пользуясь определениями операций И, ИЛИ и НЕ, мы можем вычислить значение выражения. Одно такое вычисление соответствует ровно одной строке таблицы истинности. Если провести вычисления для каждой комбинации входов, то мы получим всю таблицу истинности. Чтобы проиллюстрировать, как получается таблица истинности по булевому выражению, обратимся опять к формуле. f (-4, -Хг» *з) = (х^ Ц-Х3) (х, Ч" Х3) Ч" XgXjj, (3.1) Поскольку эта функция зависит от трех переменных, в таблице истинности должно быть 23=8 строк. В табл. 3.5 восемь комбинаций значений для трех переменных занимают три левые колонки. Таблица 3.5 Таблица истинности для булева выражения f(xit хг, х3) = (х14-х2) (*i+*3)+*2*a /(0,1,1)=(0+1)(б+1) + Р1 «(0 + 0)(1 +1) + 1 >=0’1 + 1 »=0 + 1 ₽= 1
&.2. ТАБЛИЦЫ ИСТИННОСТИ И БУЛЕВЫ ВЫРАЖЕНИЯ 59 Последняя колонка табл. 3.5 содержит окончательные результаты всех восьми вычислений. Для построения таблицы истинности можно воспользоваться и другой процедурой. По этой процедуре отдельные операции в выра- жении выполняются над колонками значений и их результаты снова заносятся в колонки. Чтобы пояснить сказанное, снова обратимся к выражению (3.1). Поскольку в выражении присутствуют Xi и х2, в табл. 3.5 мы добавим две колонки для инверсных значений из пер- вой и второй колонок. Затем выполним ИЛИ над Х\ из первой колонки и х2 из пятой. Результат заносим в шестую колонку, которая, таким образом, содержит значения Xi+x2. Аналогично по х± и х3 получаем в седьмой колонке значения Xi+x3. Затем значения в шестой и седьмой колонках используем для выполнения операции И и помещаем в восьмой колонке значения (Xi+x2) (Xi+x3). Результат вычисления х2х3 в девятой колонке также легко получить по второй и третьей колонкам. И наконец, выполняем операцию ИЛИ над восьмой и де- вятой колонками, что дает последнюю колонку, содержащую зна* чения выражения (3.1) для всех комбинаций переменных х19 х2 и х3. Каноническая сумма минтермов По таблице истинности также можно составить булево выражение. Одна из его форм называется канонической суммой минтермов или стандартной суммой произведений °. Таблица 3.6 Таблица истинности х2 f 0 0 0 0 0 1 0 10 0 11 10 0 1,0 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 Чтобы понять, как строится каноническая сумма минтермов, рас» смотрим табл. 3.6. Вторая строка таблицы, в которой функция при* В математической литературе эта форма называется совершенной дизъюнктив- ной нормальной формой. Но мы будем следовать той терминологии, которая прива- та в технической литературе.— Прим. ред.
60 ГЛ 3 БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ нимает единичное значение, соответствует входной комбинации %i=0, х2=0 и х3=1, Рассмотрим терм, являющийся произведением XiX2x3. Подставляя в него значения 0,0 и 1 для х2 и %3, мы, очевидно, по- лучим логическую 1. Нетрудно убедиться, что для любой из остальных семи комбинаций терм равен логическому 0. Таким образом, в из- вестном смысле терм Xi%2x3 можно использовать для описания второй строки табл. 3.6. Продолжая в том же духе, мы выберем следующую строку в табл. 3.6 с единичным значением функции. Это третья строка, соответствующая Значениям хх=0, х2=1 и х3=0. Если этот набор значений подставить в терм Xi%2*3, мы получим логическую 1. И опять это единственная комбинация значений, дающая логическую 1. Поэтому можно счи- тать, что терм Х1Х2*з описывает третью строку табл. 3.6. И наконец, рассуждая аналогично, мы придем к тому, что шестую строку в табл. 3.6 с комбинацией %i=l, х2=0 и х3=1 представляет терм XiX2x3. Объединяя полученные результаты, мы видим, что булево вы- ражение f (^i, Х2, *з)— XiX2X^ Х1%2Х3 Х].Х2Хз точно описывает табл. 3.6, поскольку каждый терм-произведение соответствует ровно одной строке с единичным значением функции, а вся сумма (дизъюнкция) соответствует совокупности из трех строк. Для остальных пяти комбинаций входов выражение дает нулевой результат. Выражение рассмотренного типа называется канонической суммой минтермов или стандартной суммой произведений. Оно опре-* деляется как сумма термов-произведений, в каждом из которых каж- дая переменная встречается ровно один раз, либо с отрицанием, либо без него. Сами термы-произведения называются минтермами. В общем случае каждая строка таблицы истинности с единичным значением функции может быть описана минтермом. Переменные, имеющие нулевые значения в строке, входят в минтерм с отрицанием/ а переменные со значением единица — без отрицания. Объединение с помощью операции ИЛИ всех минтермов, построенных для строк с единичными значениями функции, дает каноническую сумму мин- термов для заданной таблицы истинности. 3.3. ТЕОРЕМЫ БУЛЕВОЙ АЛГЕБРЫ Можно сформулировать несколько теорем, отражающих основные соотношения булевой алгебры. Наиболее важные из них перечислены р табл. 3.7. Первые три пары теорем, по существу, описывают свойства опе- раций И, ИЛИ, НЕ. Переменные в теоремах могут, вообще говоря, обозначать произвольные булевы выражения. Например, теорема За устанавливает, что операция ИЛИ над логической 1 в качестве од-
33 ТЕОРЕМЫ БУЛЕВОЙ АЛГЕБРЫ 61 Табяица 3.7 Теоремы булевой алгебры 1а 0=1 1b 1=0 2а х-\-0 = х 2b х-1 —х За х+1 = 1 3b x-0 = 0 4а x-f-x — х 4b x-x = x Закон идемпотент- ности 5а х-\-х — 1 5b x-x = 0 6а (х) = х двойного отрицания 7а х+у = //+« 7b xy — yx коммутативности За х-\-ху — х 8b x (x-^-y)-x поглощения 9а х-}-ху — х-\-у 9b x(x-\-y) = xy 10а (х-\-у) = ху 10b (xy) = x+y де Моргана Ila (%+</)+z=.v+(//-|-z)= 11b (xy)z = x (yz)=xyz ассоциативности = х+у+г 12а х-\-уг = (х+ц) (x-|-z) 12b x (z/+z) — xy-\~xz дистрибутивности ного операнда и чем угодно в качестве другого дает логическую L Четвертая теорема, известная как закон идемпотентности, говорит о том, что повторяющиеся переменные в выражении излишни и их можно опустить. Таким образом, понятия возведения в степень и умножения на коэффициенты, отличные от логического 0 или логи- ческой 1 (т. е. числа), не имеют смысла в булевой алгебре. Пятая и шестая теоремы подчеркивают взаимодополнительную природу бу- левых переменных. Закон двойного отрицания устанавливает, что дважды выполненное отрицание эквивалентно пустой операции. В следующих четырех теоремах участвуют по две переменных. Первая из этих теорем — закон коммутативности — устанавливает перестановочность переменных в операции. Теоремы 8 и 9 часто бывают полезны при упрощении булевых выражений. Теорема 10 — закон де Моргана — описывает эффект взятия отрицания от пере- менных, связанных операциями И и ИЛИ. В последних двух теоремах участвует по три переменных. Со- гласно закону ассоциативности, переменные можно группировать в любом порядке как для операции И, так и для операции ИЛИ. закон дистрибутивности говорит о том, что в булевой алгебре допу- скается вынесение общего множителя за скобки. Особое внимание нужно обратить на тождество теоремы 12а. Следует отметить свойство симметрии, присущее теоремам булевой алгебры. Все теоремы, кроме теоремы 6, представлены парой соот-
62 ГЛ 3 БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ ношений'. В каждой паре одно соотношение получается из другого заменой всех вхождений И на ИЛИ, всех вхождений ИЛИ на И, всех вхождений логического 0 на логические 1 и всех вхождений логической 1 на логические 0. Это свойство симметрии известно как принцип двойственности. Многие теоремы, приведенные в табл. 3.7, можно обобщить на случай большего числа переменных. Например, закон де Моргана в обобщенной форме можно записать так: (х + у-\----|-г) = х у- • • z и (*{/••-г) = х + *Н----Н, а закон дистрибутивности: t w + ху • • • z = (w + х) (w + у) • • • (w + г) и w (х + у + • • • 4- г) = wx + wy + • • • + wz. Все перечисленные в табл. 3.7 теоремы можно легко доказать методом совершенной индукции, т. е. перебором всех возможностей. Это означает, что справедливость теоремы устанавливается подста- новкой в ее левую и правую части всех возможных комбинаций зна- чений переменных и проверкой выполнения равенства для каждой комбинации. Поскольку переменные в булевой алгебре принимают только два значения, такая процедура оказывается не слишком уто- мительной. Для иллюстрации доказательства методом совершенной индукции рассмотрим закон дистрибутивности. x-\-yz= (х+у) (x+z). Мы можем построить таблицы истинности для x+yz и (х+у) (x+z), следуя методике предыдущего раздела. Результат приведен в табл. 3.8. Таблица 3.8 Доказательство закона дистрибутивности *+yz = (x+y) (х-\-г) методом совершенной индукции X У Z yz x + yz х + у x + z (х + у)(х + z) 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
3.4 ПРИМЕНЕНИЕ ТЕОРЕМ БУЛЕВОЙ АЛГЕБРЫ 63 В <пятой колонке — результат вычисления x-\~yz для восьми комби- наций значений трех переменных, а в восьмой — результат вычис- ления (x-\-y)(x+z). Поскольку эти колонки совпадают, можно ут- верждать, что равенство x+yz= (x+y)(x-)-z) выполняется всегда. Таким образом, справедливость теоремы доказана. 3.4. ПРИМЕНЕНИЕ ТЕОРЕМ БУЛЕВОЙ АЛГЕБРЫ Существует много способов использования рассмотренных выше теорем. Вообще говоря, они дают правила преобразования булевых выражений. С их помощью можно получать эквивалентные выра- жения. Новые выражения могут оказаться проще или сложнее ис- ходного в зависимости от целей преобразования. Например, мы можем стремиться к простейшему выражению в смысле минимального числа символов или же нашей целью может быть построение канонической суммы минтермов без предварительного построения таблицы истин- ности. Упрощение выражений Проиллюстрируем процесс упрощения выражений на следующих трех примерах. Пример 3.1. Выражение (Xi+x3)(x1 + x3)(x2 + x3) можно упростить следующим образом: + х3) (хх + х3) (х2 + х3) = (хх + х3хЛ (х2 4- х3) по теореме 12а = (х1 + 0)(х2 + х3) по теореме 5Ь = х1(х24-^з) по теореме 2а. Пример 3.2. Выражение ххх2 + ххх2 + хгх2 + х2х3 упрощается следующим образом: XjX2 4* ххх2 4*" XjX2 4- х2х3 == = хрс? 4- XjX2 4- хгх2 4- XiX2 4- х2х3 по теореме 4а = х2х±4- х2хх + ххх2+хгх2 4- х2х3 по теореме 7Ь = х2 (Xj 4- Xi) 4- Xi (х2 4- Хг) 4- х2х3 по теореме 12Ь 7а 5а 2Ь 7а x2(x1+x1) + xi(x2 + x2) + x2x3 по = х2-1 1 +х2*з по = х2+.х1+х2х3 по = *1+*2 + *2*з ПО *=Х1 + х2 + х8 по теореме теореме теореме теореме теореме 9а.
64 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ Пример 3.3. Выражение упрощается следующим образом: ^1^2 4~ «^2^3 4“ = = ХхХ2 4~ А2Х3 • 1 XjA'3 = Х£Х2 + Х2Х3 (Xi + xj + Х,Хз = А £Х2 4“ А*2ХзХ£ 4~ ХД'дА*! 4“ Х£Х3 = х£х2 4" a'jA 2х3 4~ х£х3х2 4~ а^а’з XjX2 4- а:^х2Хз 4- х^х3 4- х^х3х2 = XjX2 4- XjX3 по теореме 2Ь по теореме 5а по теореме 12b по теореме 7b по теореме 7а по теореме 8а. Как видно из этих примеров, процесс упрощения булевых вы- ражений не алгоритмичен. Далеко не очевидно, какое из тождеств следует применить на том или ином шаге. Искусство приходит только с опытом. Поэтому для упрощения булевых выражений были разра- ботаны алгоритмические методы. Один из таких методов будет описан в разд. 3.5. Отрицание выражения Часто над выражениями приходится выполнять операцию отри- цания. Это делается с помощью правил де Моргана. Рассмотрим пример. Пример 3.4. Чтобы выполнить отрицание выражения (xtx2 + x3) xtxit будем действовать следующим образом: [(х£х2 + х3) х£х4] == (х£х2 4“ «^з) + (-^1) 4~ х^ = (х1х24-Хз)4-а:1+х4 = (а^£х2) х3 4- х£ + х± ~ [(A'l) (А'г)] А'З 4“ A'l 4~ Х& === (-^1 4~ «^г) А'З 4- 4- Х4. Построение канонической суммы минтермов по заданному выра- жению — это другое применение рассмотренных теорем. В разд. 3.2 мы рассмотрели переход от таблицы истинности к канонической сумме минтермов. Очевидно, если нам дано выражение, мы можем построить таблицу истинности и по ней каноническую сумму минтермов. Однако, применяя теорему х4-х=1 и дистрибутивный закон x(y+z)=xy+xz,
3.4. ПРИМЕНЕНИЕ ТЕОРЕМ БУЛЕВОЙ АЛГЕБРЫ 65 можно развернуть в сумму минтермов непосредственно само выра- жение. Рассмотрим в качестве иллюстрации выражение x + x(z + yz). Сначала, чтобы выражение приняло форму суммы произведений) применим закон дистрибутивности. В данном случае получим x + xz + xyz. Затем нужно модифицировать те члены, которые не являются минтермами, чтобы включить в них отсутствующие переменные. Первый член х не содержит у и z. Эти переменные можно ввести, домножая х на (y+yjiz+z), что эквивалентно умножению на логи- ческую 1. По тем же причинам второй член, не содержащий у, следует домножить на у+у. Третий член содержит все переменные, и с ним ничего делать не нужно. Таким образом, можно переписать исходное выражение в виде X (у + у) (г + г) + х (у + у) z + xyz. Если теперь снова воспользоваться дистрибутивностью и затем опустить повторяющиеся члены, мы получим каноническую сумму минтермов для нашего выражения xyz + xyz + xyz + ху z + xyz + xyz + xyz. Каноническое произведение макстермов В разд. 3.2 мы ввели каноническую сумму минтермов как неко- торое выражение, получаемое по таблице истинности. Каноническим естественно называть выражение, которое единственно для заданной функции и имеет стандартную форму. Каноническое выражение может быть полезным при установлении эквивалентности функций. А именно, две функции эквивалентны, если их канонические выра- жения совпадают. Каноническая сумма минтермов представляет собой сумму термов- произведений, причем каждая переменная входит в каждый терм. Другая стандартная формула в булевой алгебре называется канони- ческим произведением макстермов или стандартным произведением сумм °. Так же как и каноническая сумма минтермов, каноническое произведение макстермов может быть построено либо по таблице истинности, либо путем развертывания заданного булевого выражения. Обратимся снова к табл. 3.6 в разд. 3.2. Таблица определяет функ- цию f. Таблица истинности для инверсной функции, т. е. для функ- В математической литературе каноническое произведение макстермов называют совершенной конъюнктивной нормальной формой.— Прим, ред, 3 № 592
в₽ ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ Таблица 3.9 Таблица истинности для инверсии функции, заданной в табл. 3.6 *1 х2 х3 f 7 ООО 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 1 I 0 0 1 0 0 1 0 0 1 1 0 1 1 ции f, получается инверсией значений в последней колонке. Результат показан в табл. 3.9. Пользуясь способом, изложенным в разд. 3.2, можно записать каноническую сумму минтермов для f в следующем виде: 7(%1, х2, х3) = х1х2х3+х1х2х3 + х1х2хз + х1х2х3 + х1х2х3. Если теперь выполнить отрицание над обеими частями этого ра- венства и воспользоваться правилами де Моргана, мы получим [f (^1> Х2, Х3)] = /(%1, х2, х3) = (х1х2х3 + х3х2х3 + хрс2х3 + хгх2х3 + х3х2х3) *== (XjX^Xa) (XiX2X3) (Х}Х2Х3) (XjX2X3) (Х^Х2Х3) s= (*^i “Ь ^2 х3) х2 х3) (%] х2 ~|“ х3) (Xj “f“ х2 -)" х3) (х^ “Е х2 ~|~ х3). . Последнее выражение и является каноническим произведением макстермов функции f. Каноническое произведение макстермов или стандартное произ- ведение сумм определяется как такое произведение сумм, в котором каждая переменная встречается в каждой сумме ровно один раз, либо с отрицанием, либо без него. Термы в выражении называются макстермами. В общем случае, чтобы построить каноническое произведение макстермов по таблице истинности, нужно сначала выписать таблицу истинности для инверсной функции, заменив 1 на 0, а 0 на 1 в колонке значений функции. Затем нужно записать каноническую сумму мин- термов для этой инверсной функции. И наконец, взять отрицание полученного выражения, пользуясь правилом де Моргана *). 1} Следует заметить, что описанная процедура в действительности представляет собой двойное отрицание, которое по теореме 6 в табл. 3.7. приводит к выражению, соответствующему исходной таблице истинности.
3.5. КАРТЫ КАРНО 67 Каноническое произведение макстермов можно также вывести путем алгебраических преобразований заданного выражения. При этом пользуются тождеством хх=0 и дистрибутивным законом x+yz= = (x+f/)(x+z). В качестве примера рассмотрим выражение ху+1/z. Поскольку каноническая форма макстермов является произве- дением сумм, прежде всего нужно привести выражение к соответст- вующему виду. В нашем случае имеем ху dr уг=^ху dr у^ху+ == (£+Г) (у +?) (*+г) (у+*) = (* + £)'b(* + *)(*/+z) = (x + y)(x + z)(y + z). d Получив выражение в виде произведения сумм, следует проверить, является ли каждая сумма макстермом. Если нет, то нужно ввести недостающие переменные, используя теорему хх=0. Для рассмат- риваемого примера получим (Л + У) (х + z) (у + г) = (х + у + 0) (% + 0 + z) (0 + У + z) = (%+// + гг) (x + yy + z) (xx + y + z). Осталось воспользоваться дистрибутивностью и удалить повторяю- щиеся суммы по закону идемпотентности. В итоге мы получаем (х + у) (x + z) (y + z) = (x+lj + z)(x + y + z) (х + у + z) (х+~у + z) (х + у + z) (x + y + z) = (х + у+ z) (х + у+~z) (x + y + z) (x + y + z). 3.5. УПРОЩЕНИЕ БУЛЕВЫХ ВЫРАЖЕНИЙ С ПОМОЩЬЮ КАРТ КАРНО В предыдущем разделе мы показали, каким образом теоремы бу- левой алгебры позволяют осуществлять тождественные преобразования булевых выражений. Поскольку получающиеся при этом выражения эквивалентны, то и комбинационные логические схемы, описываемые ими, будут эквивалентными. Естественно возникают интересные вопросы — как определить и как отыскивать в том или ином смысле «простейшее» выражение? Для решения этой задачи разработано несколько методов. На одном из них, использующем карты Карно, мы остановимся в этом разделе. з*
68 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ у X у /( V, 1) 0 1 0 0 0 1 1 0 1 1 /(0, 0) п 7(0,1) / /(0,0) /(0.1) /(1,0) х /(1, 1) 1 /(1,0) /(1,1) Рис. 3.2. Булева функция двух пере- менных. (а) Таблица истинности, (б) Карта Карно. (О') Карты Карно ’ Карты Карно — это графическое представление таблиц истин- ности. Структура карт Карно для функций двух, трех и четырех переменных вместе с соответствующими таблицами истинности в общей форме показана на рис. 3.2—3.4. Как легко видеть, между стро- X ,г Z /Cv,b-’) 0 0 0 /(0, 0, 0) 0 0 1 ДО, 0, 1) 0 1 0 до, 1,0) 0 1 1 до, 1,1) 1 0 0 /(1,0, 0) 1 0 1 /(1,0, 1) 1 1 0 Д1, 1,0) 1 1 1 Д1, 1, 1) 0*) J2 00 01 И 10 /(0,0,0) /(0,0,1) /(0,1,1) /(0,1,0) /(1,0,0) /(1,0,1) /(1,1,1) /(1,1,0) Рис. 3.3. Булева функция трех переменных, (а) Таблица истинности, (б) Карта Карно. W X У Z /(w,x,y,z) 0 0 0 0 /(0, 0, 0, 0) 0 0 0 1 /(0,0,0, 1) 0 0 1 0 /(0,0, 1,0) 0 0 1 1 /(0,0, 1, 1) 0 1 0 0 /(0, 1,0,0) 00 0 1 0 1 /(0, 1,0, 1) 0 1 1 0 /(0, 1, 1,0) 01 0 1 1 1 /(0, 1, 1, 1) VVX 1 0 0 0 /(1,0, 0, 0) 11 1 0 0 1 /(1,0,0, 1) 11 1 0 1 0 /(1,0, 1,0) 1 0 1 1 /(1,0, 1, 1) 10 1 1 0 0 /(1, 1,0,0) 1 1 0 1 /(1, 1,0, 1) 1 1 1 0 /(1,1,1,0) 1 1 1 1 /(1, 1, 1, 1) (а) yz 00 01 11 10 /(0,0,0,0) /(0Д0,1) /(0,0,1,1) Л 0,0,1,0) /(0,1,0,0) /(0,1,0,1) /(0,1,1,1) ло, 1,1,0) /(1,1 ДО) /(1,1,0,1) /(1,1,1,1) /(1,1,1,0) /(1,0,0,0) Л 1,0,0,1) Я1,0,1,1) Л 1,0,1,0) (rf) Рис. 3.4. Булева функция четырех переменных, (а) Таблица истинности, (б) Карта Кар- но.
3.5. КАРТЫ КАРНО 69 ООО О 0 1 О 1 О О 1 1 1 о о 1 0 1 1 1 о 1 1 1 (*) £ 1 1 1 о о 1 о 1 У? 00 01 И 10 1 1 0 1 0 1 1 0 Рис. 3.5. Булева функция f (х, у, z)=x(y+z)+xz. (а) Таб- лица истинности, (б) Карта Кар- но. ками таблицы истинности и клетками (ячейками) на карте Карно существует взаимно-однозначное соответствие. Положение каждой ячейки определяется некоторой системой горизонтальных и верти- кальных координат, показанных на рисунках. Запись в каждой ячейке есть значение функции при значениях переменных, соответствующих координатам ячейки. На рис. 3.5 дана таблица истинности и( карта Карно для булевой функции f(x, у, z) = X (i) + 7) + xz. Таблица истинности получена вычислением значения выражения для всех восьми комбинаций переменных, а карта Карно построена в соответствии с общей формой, показанной на рис. 3.3. Когда картой Карно пользуются для упрощения выражений, на ней строят прямоугольные группы ячеек. В общем случае каждая группа размера 2вх2& соответствует терму-произведению с п — а — b переменными, где п — полное число переменных рассматриваемой функции, а а и b — целые неотрицательные числа. Поскольку группы имеют размерность 2ах2\ полное число ячеек в любой группе всегда будет степенью двойки. В дальнейшем мы будем рассматривать только группы с размерностью 2ах2\ Минимальные суммы В одном из методов построения выражения по карте Карно рас- сматриваются только ячейки, содержащие логическую 1. Назовем их ячейками с единицей. Они соответствуют минтермам в каноническом выражении. Каждая группа 2ах2ь ячеек с единицей соответствует терму-произведению, с помощью которого можно описать какую-то часть таблицы истинности. Если выбрать достаточное количество групп так, чтобы каждая ячейка, содержащая 1, вошла хотя бы в одну группу, и выполнить операцию ИЛИ над соответствующими термами-произведениями, то функция будет полностью описана. Разумно выбирая группы, можно
ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ Рис. 3.6. Группы на карте Карно для функции четырех переменных. получать простые выражения. Одна из мер степени сложности булевых выражений определяется числом букв, входящих в выражение, т. е. числом переменных и их инверсий. (Переменные и их инверсии Часто называют литералами.) Выражения в форме суммы произведений с минимальным числом литералов называют минимальными суммами. При выборе групп, дающих минимальную сумму, руководствуются следующими двумя принципами. Во-первых, группа должна быть как> можно больше. Дело в том что, чем больше группа, тем меньше лите- ралов в соответствующем произведении. Во-вторых, групп должно быть как можно меньше. Это следует из того факта, что каждой группе соответствует терм-произведение. Уменьшая количество групп, мы уменьшаем количество термов-произведений и, как следствие, число литералов в выражении. На рис. 3.6 показана карта Карно с оптимальным выбором групп ячеек с единицей. В данном примере нельзя ни увеличить размеры групп, ни уменьшить их число. Группа в первой колонке имеет раз- мер 22х2°=4х1, квадратная группа справа вверху — 21х21 = 2х2, и самая маленькая группа из двух ячеек в третьей строке — 21х2°= — 2X1. Обратите внимание, что группы могут пересекаться. Для того чтобы написать выражение по карте Карно, нужно вос- пользоваться «разметкой» координатных осей карты. Нужно для каждой группы отобрать те переменные на координатных осях, чьи значения не изменяются в пределах группы. Эти переменные и будут входить в соответствующие термы-произведения. Если переменные равны логическому 0, то они должны входить с отрицанием, если они равны логической 1 — без отрицания. Для иллюстрации снова обратимся к рис. 3.6. Мы видим, что квадратная группа расположена в первой и второй строках карты. В этих строках переменная w равна логическому 0. Поэтому терм для этой группы должен содержать w. Поскольку переменная х ме- няет значение при переходе от первой строки ко второй, она не должна входить в терм. Рассмотрев два столбца, в которых лежит группа, мы обнаружим, что переменная у имеет постоянное значение, равное логической 1, и, следовательно, должна войти, в терм, a z изменяет
ВЛ. КАРТЫ КАРНО 71 значение и поэтому входить в терм не должна. Итак, мы установили, что квадратная группа соответствует терму wy. Применив аналогичную процедуру к двум другим группам’ на рис. 3.6, мы сможем найти соответствующие им термы-произведения. Группа в первой колонке соответствует терму yz, поскольку и у, и г в этой колонке равны логическому 0, а обе переменные w и х не со- храняют своих значений для этой колонки. Что же касается самой маленькой группы, то ей соответствует терм wxy. Таким образом, минимальная сумма для рассматриваемой карты Карно равна f У, z) = wy + yz + wxy. Хотя обычно карты Карно для функций трех и четырех перемен-' ных изображаются на плоскости, как показано на рис. 3.3 и 3.4/ о’ точки зрения формирования прямоугольных групп карту нужно считать трехмерно?. Для карт с тремя переменными (рис. 3.3) карту следует рассмат- ривать как цилиндр со склеенными правым и левым краями. По- скольку прямоугольные группы формируются на таком цилиндре, на плоском рисунке та или иная группа может оказаться разорван- ной. Пример такой разорванной группы приведен на рис. 3.7. Соот-; ветствующий этой группе терм получается по описанным выше пра- вилам и равен xz. Разорванные прямоугольные группы могут появляться и на кар- тах с четырьмя переменными. На таких картах нужно считать склеен- ными не только правый и левый края, но также верхний и нижний. Таким образом, карта с четырьмя переменными (рис. 3.4) должна рассматриваться как поверхность тора. На рис. 3.8 приведены при- меры разорванных групп для карт с четырьмя переменными. На рис. 3.8(a) группа из четырех ячеек соответствует терму xz, а группа из двух ячеек — терму xyz. Особое внимание нужно обратить на группу на рис. 3.8(6). Ячейки в четырех углах образуют одну группу 21Х21, если поверхность считать тороидальной. Этой группе соот- ветствует терм xz. Подводя итог, можно следующим образом сформулировать основ- ной метод оптимального отыскания групп на карте Карно, приводя- щих к минимальным суммам. Прежде всего выбирается ячейка с еди- ницей, которая войдет только в одну группу, не являющуюся под- Рис. 3.7. Разорванные группы на карте Карно для функции трех переменных,
72 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ (*) Рис. 3.8. Примеры разорванных групп на карте Карно для функции четырех перемен- ных. группой другой, большей группы. Затем формируется наибольшая группа, содержащая выбранную ячейку. Далее выбирается другая ячейка с единицей, обладающая тем же свойством и еще не вошедшая в ранее сформированные группы, и формируется ее группа. Этот процесс повторяется до тех пор, пока либо все ячейки, содер- жащие 1, окажутся в каких-то группах, либо останутся только такие ячейки, которые допускают группирование более чем одним способом. Теперь строится минимальное число групп, покрывающих все остав- ( шиеся единичные ячейки. Следующие примеры поясняют процедуру построения минимальных сумм по картам Карно. Пример 3.5. Рассмотрим карту Карно на рис. 3.9. Ячейка в верх- нем правом углу может быть объединена в группу с ячейками в дру- гих трех углах. Причем эту ячейку нельзя отнести ни к одной другой группе, не являющейся подгруппой этих четырех ячеек. Таким об- разом, в минимальной сумме должен присутствовать член xz. Далее замечаем, что ячейка в первой строке и втором столбце еще не входит ни в одну группу. Ее можно поместить в группу из четырех ячеек, порождающую член ху. Наконец, единственную оставшуюся единич- ную ячейку можно объединить с ячейкой, находящейся непосредст- венно под ней, что дает член wyz. Таким образом, мы получаем мини- Рис. 3.9. Пример 3.5.
3.5. КАРТЫ КАРНО 73 Рис. 3.10. Пример 3.6* мальную сумму /(ш, х, у, z) = x z + xy + wyz, содержащую семь литералов. Пример 3.6. Рассмотрим карту Кариона рис. 3.10. Ячейку в левом верхнем углу можно сгруппировать только с ее ближайшим соседом справа. Аналогично ячейка в правом нижнем углу может быть объ- единена только с ее соседом сверху. Ячейка во второй строке и третьем столбце может группироваться только сама с собой. Теперь осталось три ячейки с единицей, и мы видим, что в отличие от предыдущих случаев их можно поместить более чем в одну группу. Здесь, чтобы завершить процесс, мы должны выбрать минимальное число групп, покрывающих оставшиеся ячейки. Группы, показанные на карте, соответствуют минимальной сумме /(ш, х, у, z) = wxy + wyz + wxyz + wxy+wyz9 которая содержит 16 литералов. Существуют еще две минимальные суммы с тем же числом литералов /(^, х, у, z) = wxy + wyz + wxyz + wyz + wxz, f(w, х, у, z) = wxy + wyz + wxyz + wxy+ xyz, и они могли быть получены при другом выборе групп на заключи- тельном этапе. На этом примере видно, что для одной функции может существовать несколько минимальных сумм. Минимальные произведения Мы рассмотрели построение минимальных сумм по картам Карно. По картам Карно можно также строить минимальные по числу лите- ралов выражения, представляющие собой произведения сумм. Такие выражения мы будем называть минимальными произведениями. Для получения минимального произведения нужно обратиться к тем ячейкам карты Карно, в которых находятся нули. Назовем их
п ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ У? 00 01 И 10 1 1 V 1 0 а _oj 0 1 1 1 (Е 1 Рис. 3.11. Пример 3.7, нулевыми ячейками. Фактически мы должны выписать минимальную сумму для инверсии заданной функции, включая в группы нулевые и только нулевые ячейки, максимизируя размеры групп и миними- зируя их число. Как и раньше, следует помнить о трехмерной при- роде карт. Затем нужно взять отрицание полученной, суммы, вос- пользовавшись законом де Моргана. Полученное выражение будет соответствовать карте Карно (и, следовательно, таблице истинности) и иметь форму произведения сумм с минимальным числом литералов. Пример 3.7. Рассмотрим функцию в примере 3.5 с картой Карно на рис. 3.9. Карта повторена на рис. 3.11, где показаны группы ну- левых ячеек для построения минимальной суммы отрицания исходной функции. _ __ _ Г(о>, х, у9 z) = yz + wx + xy или Доу, х, у9 z) = (yz + wx + xy). Применив закон де Моргана, мы получим минимальное произве- дение /(оу, х, у9 z)=^(y + z)(w + x)(x + y)9 состоящее только из 6 литералов. В данном случае число литералов в минимальном произведении оказалось меньшим, чем в минимальной сумме. yz
3.5. КАРТЫ КАРНО 75 Пример 3.8. Рассмотрим функцию примера 3.6 с картой, приве- денной на рис. 3.10 и повторенной на рис. 3.12. Для этой функции можно получить три минимальных произведения в зависимости от выбора групп. Минимальное произведение, соответствующее группам, показанным на рис. 3.12, имеет вид f(w, х, у, z) = (w+\ + y)(w+~y+7)(w + x+y+z)(w + y + z) (w+X 4- у). Два других произведения — это /(оу, х, у, z) = (w+~x+y)(w + y+z)(w+x+y+z')(w+y+z)(x-^'y+^ и f(w, х, у, z) = (ie>+x+y)(u>+’y+z)(u>+x+i/+z)(i<y+x4-^)(ay+x+2). В каждом из них по 16 литералов. Таким образом, для данной функции число литералов в минимальной сумме и минимальном про- изведении оказалось одинаковым. Недоопределенные ус ловия Чтобы закончить рассмотрение карты Карно, нужно остановиться еще на одном вопросе. Напомним, что булевыми выражениями поль- зуются для описания поведения и структуры логических схем. Каждая строка таблицы истинности (или ячейка на карте Карно) соответст- вовала отклику (значению выхода) схемы на определенную комби- нацию значений входных сигналов (значений входных переменных). В некоторых случаях известно, что какие-то комбинации на входе появиться не могут, или же, если они появляются, то значение на выходе не существенно. Для таких ситуаций нет необходимости оп- ределять выходные значения схемы, т. е. значения функции в таблице истинности. В таких случаях говорят о недоопределенных условиях п. Карты Карно позволяют строить минимальные суммы и произведения и в этих ситуациях. • На карте Карно недоопределенное условие обозначается прочер- ком в соответствующей ячейке. Такие ячейки могут произвольным образом включаться в группы при построении минимальных сумм и произведений. Любую из них можно включать как в группу еди- ничных, так и в группу нулевых ячеек. Более того, их можно вообще никуда не включать. Рис. 3.13 показывает карту Карно с недоопределенными усло- виями. Карта на рис. 3.13(a) порождает минимальную сумму /(оу, х, у, 2) = yz + wxy, ** Соответственно функции, определенные не для всех комбинаций входных пе- ременных, называют частичными, функциями^— Прим. ред.
76 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ (»> Рис. 3.13. Карты Карно с недоопределенными условиями. («О а карта на рис. 3.13(6) — минимальное произведение f(w, X, у, z) = (y + z)(y + z)(w + y) Обратите внимание, что ячейка, соответствующая значениям ш=0, х=1, у=0 и z=0, участвует и в сумме, и в произведении, в то время как ячейка, соответствующая значениям и>=0, х=0, у=0 и z= = 1, не используется совсем. Метод карт Карно можно обобщить для функций с числом пере- менных больше четырех, однако при этом существенно труднее ана- лизировать карты. Для решения этих проблем разработаны алгоритмы и соответствующие программы для компьютеров ь 1 2). 3.6. ЛОГИЧЕСКИЕ СХЕМЫ Выше говорилось, что булева алгебра позволяет описать логи- ческие аспекты поведения и структуры логических схем. Однако фактически пока мы рассматривали только «поведенческие» аспекты, А именно и алгебраические выражения, и таблицы истинности исполь- зовались нами для описания значений выходных переменных в за- висимости от значений входных переменных. Однако выражения бу- левой алгебры могут давать сведения и о структуре логических схем. Булева алгебра, как мы описали ее в предыдущих разделах, со- держит три логические операции И, ИЛИ и НЕ. Если мы распола- гаем элементарными схемами, поведение которых «по входам и вы- ходам» соответствует этим трем операциям, то, соединив их между собой в соответствии со структурой выражения, получим логическую 1 Читателю, заинтересованному в получении более детальных сведений,, следует обратиться к книгам по теории переключательных схем, например: Donald D.,Givone- Introduction to Switching Circuit Theory, McGraw-Hill Book Company, New York, 1970; Fredrick J. Hill and Gerald R. Peterson, Introduction to Switching Theory and Logical Design, 2d ed., John Wiley & Sons, New York, 1974. 2 Фридман А., Менон П. Теория и проектирование переключательных схем.—Мл Мир, 1978.— Прим. ред.
3.6. ЛОГИЧЕСКИЕ СХЕМЫ 77 Рис. 3.14. Графические обозначения вентилей, (а) Вентиль И. (б) Вентиль ИЛИ. (в) Вентиль НЕ, или инвертор. схему. Более того, поведение этой схемы «по входам и выходам» будет описано этим выражением. В следующей главе мы покажем, что такие элементарные схемы существуют и называются вентилями. Конечно, на входах и выходах вентилей появляются электрические сигналы. Однако если эти сигналы, по существу, имеют только два различимых уровня, то с одним из них можно ассоциировать логический 0, а с другим — логическую 1. При этом от физических характеристик сигналов можно абстрагироваться и считать, что на входах и выходах появляются непосредственно логические значения. Символические обозначения вентилей для трех рассмотренных нами логических операций показаны на рис. 3.14. Поскольку эти символы обозначают булевы операции, поведение вентилей описы- вается определениями, приведенными в табл. 3.1—3.3: на выходе вентиля И будет логическая 1 тогда и только тогда, когда на всех его входах логические 1; на выходе вентиля ИЛИ будет логическая 1 тогда и только тогда, когда по крайней мере на одном входе логиче- ская 1; и на выходе вентиля НЕ будет логическая 1 тогда и только тогда, когда на его входе логический 0. Вентиль НЕ также называется инвертором. Рисунки с изображениями элементарных логических схем и их связей называются логическими диаграммами. В общем случае, если диаграмма состоит из вентилей и на ней нет обратных связей, то соот- ветствующую ей схему называют комбинационной. Комбинационная схема не обладает запоминающими свойствами, и поэтому значения ее выходов определяются полностью значениями входов в данный момент времени. Существует взаимно-однозначное соответствие между диаграммами комбинационных схем и булевыми выражениями. Следовательно, Рис. 3.15. Логическая диаграмма, поведение которой описывается булевым выражени- ем f(w, х, у, z)=w(xyz-{-yz).
ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ («) Рис. 3.16, Графические обозначения вентилей & , многими входами, (а) Вентиль И. (б) Вентиль (о) ИЛИ, булевы выражения являются описаниями комбинационных схем. Рассмотрим в качестве примера схему, показанную на рис. 3.15. Два инвертора используются для получения значений у и z. Выход левого верхнего вентиля И соответствует xyz, а выход левого нижнего венти- ля И дает yz. Выходы обоих этих вентилей служат входами вентиля ИЛИ. Поэтому на выходе этого последнего вентиля будет xyz + yz. Наконец, этот выход поступает на вход еще одного вентиля И, на другой вход которого поступает w. Окончательно логическая диаг- рамма рис. 3.15 описывается функцией ft®, У, z) = w(xyz + yz). Очевидно, можно провести и обратный процесс, а именно по за- данному булевому выражению построить соответствующую логиче- скую диаграмму. Для того чтобы символы всех вентилей на диаграмме были одного размера, а также для того, чтобы на схемах не появлялись слишком большие сгущения соединяющих линий, на входах вентилей И и ИЛИ часто используют обобщенные символы для многих входов, показанные на рис. 3.16. 3.7. ЛОГИЧЕСКИЕ ВЕНТИЛИ ДРУГИХ ТИПОВ В предыдущем разделе мы ввели логические вентили трех типов. Однако на логических диаграммах употребляются и другие вентили. На рис. 3.17 приведены графические обозначения вентилей наиболее распространенных типов. Нужно отметить, во-первых, что на рисунке представлено несколько новых функций и, во-вторых, что каждая функция представлена парой графических символов. Здесь использу- ется система обозначений, в которой кружочек обозначает инверсию. Система обозначений Треугольник на рис. 3.17 обозначает буферный усилитель, или формирователь. С его помощью осуществляется усиление и восста- новление формы сигнала, разделение выхода от входа, а также элек- трическое согласование схем по входам и выходам. Логически его выход идентичен входу.
3-7. ЛОГИЧЕСКИЕ ВЕНТИЛИ ДРУГИХ ТИПОВ Название функции И ИЛИ НЕ {инвертор} Графическое обозначение вентиля „ Гулеве выражение f«xy«(x+y) f-x И-НЕ /=(v)sT+7 ИЛИ-HE f~{x+y)-'xy Исключающее ИЛИ Исключающее ИЛИ - НЕ (ЭКВИВАЛЕНТНОСТЬ} ИДЕНТИЧНОСТЬ (буферный усилитель) f- = ху + ху Рис. 3.17. Наиболее распространенные вентили. В принятых обозначениях кружочек на входе или выходе вентиля соответствует булевой операции отрицания. Таким образом, треуголь- ник с кружочком на входе или на выходе, но не на том и другом одно- временно оказывается вентилем НЕ, т. е. инвертором, а треугольник с кружочками и на входе, и на выходе просто еще одним символом бу- ферного усилителя, поскольку /=х=(х). Инвертирующие кружочки можно применить и к ранее введенным сигналам вентилей И и ИЛИ. Например, булево выражение f=xy мож- но записать в виде /=(*+*/)• Это выражение объясняет, почему второе обозначение вентиля И на рис. 3.17 эквивалентно первому. Аналогии-
80 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ но f=x+y можно записать как f=(xy), и это служит обоснованием вто- рого символа для вентиля ИЛИ. Функция И-НЕ На рис. 3.17 вводятся четыре новые логические функции: И-НЕ, ИЛИ-HE, Исключающее ИЛИ, Исключающее ИЛИ-HE. Сначала рас- смотрим И-НЕ. Ее определение как функции двух переменных х и у дано в табл. 3.10. Алгебраически ее можно записать в виде (ху), а символически она изображается в виде вентиля И со входами х и у и последующего инвертора. Кроме того, поскольку (хг/)=х+г/, опе- рацию И-НЕ можно представить в виде вентиля ИЛИ, входные сиг- налы которого подвергаются инвертированию. Обе эти интерпретации соответствуют приведенным на рис. 3.17 графическим обозначениям. Таблица 3.10 Определение операции И-НЕ X У У-(ч-) 0 0 1 0 1 1 1 0 1 1 1 0 В общем случае выход вентиля И-НЕ определяется как (х^2 . . . \. x7)=Xi+x2+- • -+хп, т. е. он дает на выходе логическую 1 тогда и только тогда, когда по крайней мере один вход равен логическому 0; в противном случае на выходе будет логический 0. Одна из причин распространенности вентилей И-НЕ в логических схемах заключается в том, что эта операция универсальна. Универ- сальной называют такую операцию, с помощью которой можно реа- лизовать все три базисные булевы операции И, ИЛИ и НЕ. Свойство универсальности поясняется на рис. 3.18. Из него следует, что любую комбинационную логическую схему можно реализовать, используя только вентили И-НЕ. Одна из процедур построения по булевому выражению логиче- ской диаграммы, состоящей только из вентилей И-НЕ, опирается на алгебраическое определение вентиля И-НЕ, а именно f (Xit х2, хп) = (Х1%2* * * Для иллюстрации рассмотрим выражение f(w, х, у, z) = w + yz + w(x + y).
3.7. ЛОГИЧЕСКИЕ ВЕНТИЛИ ДРУГИХ ТИПОВ 81 /= (хх) = х /= (ху) = х О или /=(х,у) = х+У X V /= ((х>’)] =ху Рис. 3.18. Свойство универсальности вентиля И-НЕ. Применив закон де Моргана, перепишем его в виде f (ш, х, у, z) = {w (yz) [w(x + //)]}• Поскольку это общая алгебраическая форма вентиля И-НЕ со вхо- дами ш, (yz) и (х+у)], мы можем сконструировать схему, показан- ную на рис. 3.19 (а). Далее, член (yz) является алгебраической формой для вентиля И-НЕ со входами у и z, в то время как член \w(*+#)] яв- ляется алгебраической формой для вентиля И-НЕ со входами w и (х+у). Эти рассуждения приводят к схеме рис. 3.19(6). Наконец, член х+у можно переписать в виде (ху), и мы приходим к схеме 3.19 (Ь). В предположении, что инвертированные значения входных перемен- ных нам также доступны, схема 3.19 (в), только с помощью вентилей И-НЕ, реализует булеву функцию f(w, X, у, z) = w + yz + w(x+y). Если значения входных переменных не могут поступать в инвертиро- ванном виде, то для их получения нужно воспользоваться вентиля- ми НЕ. Описанная выше процедура требует, чтобы в исходном выражении старшей операцией (т. е. операцией, выполняемой последней) была операция ИЛИ. Если это не так и старшей является операция И, то выражение инвертируется с использованием закона де Моргана.
€2 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ W +‘yz + tt(x + J>) ~{w(Jz)[v7(x+>>)]} (a) Рис. 3.19, Построение логической диаграммы, состоящей только из вентилей ;И-НЕ, для булевой функции /(ш, х, у, z)=w-\-yz+w(x+y). В результате старшей становится операция ИЛИ. Далее строится диаграмма из вентилей И-НЕ, а на выходе ставится вентиль НЕ или И-НЕ с объединенными входами п. Функция ИЛИ-НЕ Функция ИЛИ-НЕ — это еще одна функция, обладающая свой- ством универсальности. Ее определение как функции входных пере- менных х и у дано в табл. 3.11. Алгебраически она записывается как (х+г/) и представляется вентилем ИЛИ со входами х и у и с инвертором на выходе. Поскольку (х+у)=ху, функцию ИЛИ-НЕ можно также представить в виде вентиля И с инверторами на входах. Обе эти ин- терпретации показаны на рис. 3.17. В общем случае выход вентиля ИЛИ-НЕ определяется как (xi+x2+. . .+хп)=Х1Х2. . .хп, т. е. на выходе вентиль дает логичес- кую 1 тогда и только тогда, когда на всех входах логические 0; в про- тивном случае — на выходе логический 0. Свойство универсальности Иногда роль вентиля НЕ играет одновходовый вентиль И-НЕ.
3.7. ЛОГИЧЕСКИЕ ВЕНТИЛИ ДРУГИХ ТИЛОВ 83 f«(х + х)=У [(Х + v)J = Х +>' Рис. 3.20. Свойство универсальности вентиля ИЛИ-НЕ. проиллюстрировано на рис. 3.20, где показано построение трех базо- вых булевых функций с помощью одних только вентилей ИЛИ-НЕ. Благодаря этой универсальности с помощью вентилей ИЛИ-НЕ можно реализовать любую комбинационную схему. Одна из процедур построения логической диаграммы из вентилей ИЛИ-НЕ по заданному Таблица 3.11 Определение операции ИЛИ-НЕ / = (X + У) 0 о 0 1 1 0 1 1 1 0 0 0 булевому выражению опирается на алгебраическое определение вен- тиля, а именно на соотношение f (xf, х2, . . *п)=(х1+х2+. . .+хД Единственное требование, предъявляемое к форме исходного выра- жения, заключается в том, чтобы старшей операцией в выраже- нии была операция И. Если это требование не выполнено и старшей является операция ИЛИ, то строится сначала диаграмма с вентилями ИЛИ-НЕ для инверсии выражения, а затем на выходе ставится вен- тиль НЕ или вентиль ИЛИ-НЕ с объединенными входами п. Иногда роль вентиля НЕ играет одновходовый вентиль ИЛИ-НЕ.
84 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ W—। J Г = (у + z) —j Jq------/ = + + w(x +.y)l w(a -r y) = [iv + (x + y)]—’ (°) Рис. 3.21. Построение логической диаграммы, состоящей только из вентилей ИЛИ-НЕ, для булевой функции f(w, х,у, z)=w+yz-\-w(x+y). Чтобы проиллюстрировать построение логической диаграммы, снова рассмотрим выражение f(w, X, у, Z) =w + yz4-w(%+«/). Поскольку старшими в этом выражении являются операции ИЛИ, оно инвертируется: 7(и>, х, у, z) = [w + yz + w(x + y)\. Для инвертированного выражения логическая диаграмма строится, как показано на рис. 3.21 (а—в). Завершается построение диаграммы добавлением на выходе вентиля ИЛИ-HE с объединенными входами, как показано на рис. 3.21 (г).
3.7. ЛОГИЧЕСКИЕ ВЕНТИЛИ ДРУГИХ ТИПОВ 85 Функции Исключающее ИЛИ и Исключающее ИЛИ-НЕ Последние два типа вентилей, введенных на рис. 3.17, соответству- ют функциям Исключающее ИЛИ и ее отрицанию — функции Исклю- чающее ИЛИ-НЕ. Операция Исключающее ИЛИ часто обозначается символом ф и называется также сложением по модулю 2. По опреде- лению х® у принимает значение логической 1 тогда и только тогда, Таблица 3.12 Определение операции Исключаю- щее ИЛИ X у х@у 0©0 = О 0©1 = 1 1©0 - 1 1©1 = О когда или х, или у, но не оба сразу равны логической 1; в противном случае значение хф у равно логическому О.Это определение приведено в табл. 3.12. По этой таблице легко установить справедливость соотно- шения х@у = ху + ху. Для отрицания — Исключающего ИЛИ-НЕ — мы имеем (*©!/) = (**/ + **/) ==(* + #) (х + у)=ху + ху. Из этого уравнения следует, что (хф у) принимает значение логиче- ской 1 тогда и только тогда, когда х и у имеют одинаковые значения; в противном случае (хфу) равно логическому 0. По этой причине операцию Исключающее ИЛИ-НЕ часто называют ЭКВИВАЛЕНТНО- СТЬЮ В то время как вентили И-НЕ и ИЛИ-НЕ, как правило, бывают многовходовыми, вентили для Исключающего ИЛИ и ЭКВИВАЛЕНТ- НОСТИ имеют обычно только по два входа. Так же как для всех ранее рассмотренных функций, для Исклю- чающего ИЛИ и ЭКВИВАЛЕНТНОСТИ на рис. 3.17 дано по два графических обозначения. Помня о том, что кружочек обозначает инверсию, легко показать корректность обоих вариантов. Заметим, что Исключающее ИЛИ-НЕ иногда называют НЕРАВНОЗНАЧ- НОСТЬЮ.— Прим, перев. V
86 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ УПРАЖНЕНИЯ 3.1. Постройте таблицы истинности для следующих булевых функции! (в) f(xit х2, х3)=(хххл+х3)+х1х3, (fc) f(x, у, г)=(х-[-у)(хг-\-у), (с) /(хх, х2, х3, х4)=[х1(хгх3+х4)+х1х2хз]. 3.2. Составьте канонические суммы минтермов для таблиц истинности — табл. УЗ.2. Таблица У3.2 *2 *3 / X У 2 / 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1 1 1 3 0 0 0 1 0 0 0 1 0 1 0 1 .0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 V) (°) 3.3. Докажите следующие теоремы методом совершенной индукции: (a) х(х+у)=х, (b) х+ху=х+у, (с) (х+у)=ху. 3.4. Пользуясь теоремами булевой алгебры, докажите следующие тождества. Преобразуйте левые части тождеств к тому виду, который имеют правые части. Отме- чайте теорему, применяемую на_ каждом шаге преобразования. («) (x1j-x2)(x1+x3)=?r1x3+xix2, (Ь) Х1Х3Х4+Х1Х3Х4+Х^Х2Х4=Х1Х4+Х2Х4, (с) х1х2+х3х4=(х1+х3)(х1+^)(х2+х3)(х2+х4), (0) ХХХ2+ Х2Х3+ XiX3— ХХХ2+ Х2Х3+ ххх3. 3.5. Пользуясь теоремами булевой алгебры, максимально упростите следующие выражения: (л) ^Хз+зд+хл, (b) XjXjjXa+XiXaXg+xjX^, (с) х^з+х^гХз+х^гХд. 3.6. Получите отрицания следующих выражений: («) (х14-х2+х3)(х2+х1х4)+х2х4, Ф) ХхХаСхз+х^), (с) х1(х3х4+х2х4)+х1(х3+х4). 3.7. Для выражения #(x-|-z)-|-xi/ составьте каноническую сумму минтермов, не строя таблицу истинности^
УПРАЖНЕНИЯ 87 3.8. Напишите канонические произведения макстермов по таблицам истинности— табл. У3.8. Таблица У3.8 *1 *2 *3 f X У Z / 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 0 I 0 1 1 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 («) </) 3.9. Перепишите выражение у (x-t-z)-j-xy в виде канонического произведения мак- стермов, не строя таблицы истинности. 3.10. Используя карты Карно, постройте минимальную сумму и минимальное произведение по каждой представленной в табл. УЗ. 10 таблице истинности. Таблица У3.10 X У Z f X У Z г 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 I 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 1 1 1 0 0 1 1 1 0 1 1 1 0 (а) (<о 3.11. Постройте минимальные суммы и минимальные произведения по всем кар- там Карно, представленным на рис. УЗ.11. 3.12. Используя карты Карно, найдите минимальные суммы и минимальные произведения для следующих функций: (a) f(w, х, у, z)=wxyz+wxyz+wxyz+wxyz+wxyz, 4 (b) f(w, х, у, z)=(w+x+y^)(^^+^^)(^^+y+z)(^+x+y^)(w+x+y-hz;t, J (c) f(w, x, y, z)=wxy-\-xyz-irwyz+wxz-irwxyz. 3.13. Постройте минимальные суммы и минимальные произведения для частичных булевых функций, представленных на рис. УЗ. 13 картами Карно.
€8 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ (а) (</) У2 ' yz 00 01 И 10 ' 00 01 ”11 10 00 01 Н9С 11! 10 1 1 1 1 00 01 ш 11 10 1 1 1 0 0 1 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 0 (*) (2) Рис. УЗ. 11. 3.14. Напишите булевы выражения по логическим диаграммам на рис. У3.14. 3.15. Нарисуйте логические диаграммы для следующих булевых функций пользуясь вентилями И, ИЛИ, НЕ: (a) f(w, х, у, z)=w(xy+yz)+wz, (b) f(y, W, х, у, z)=[(oi+x)(y4-Ti/)+z](x+y). Рис, УЗ. 13.
УПРАЖНЕНИЯ 89 (б) Рис. УЗ. 14. (а) 3.16. Напишите булевы выражения по логическим диаграммам на рис. УЗ. 16. 3.17. Постройте логические диаграммы для следующих булевых функций, ис- пользуя только вентиль И-НЕ:_ (a) f(w, х, у, z)=(wx+y)z+xy, (b) f(w, x, у, c)=[(x+//)(x+z)+r/2](x+r/).
90 ГЛ. 3. БУЛЕВА АЛГЕБРА И ЛОГИЧЕСКИЕ СХЕМЫ 3.18. Нарисуйте логические диаграммы для функций задачи 3.17, пользуясь только вентилями ИЛИ-НЕ. 3.19. Постройте комбинационную логическую схему, которая обнаруживала бы недопустимую комбинацию в коде 8421 BCD, выдавая на выходе логическую 1. Сна- чала постройте таблицу истинности, а затем с помощью карт Карно получите простей- шее булево выражение. 3.20. Постройте комбинационную логическую схему для преобразования деся- тичных цифр из кода 8421 BCD в код с избытком 3. Эта схема будет иметь четыре вы- года. Для каждого из них постройте таблицу истинности, а затем по карте Карно получите простейшее выражение.
Глава 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Для производства вентилей и других логических элементов в настоя- щее время применяются электронные схемы* различных типов. Схемы каждого типа обладают своими отличительными характеристиками» делающими их более пригодными для одних применений и менее — для других. К подобным характеристикам относятся, например, ско- рость переключения из одного состояния в другое, плотность упаковки» рассеиваемая мощность и мощность на выходе и т. д. В этой главе мы рассмотрим схемы нескольких разновидностей, наиболее часто приме- няемых в основных логических элементах. Это позволит нам сравнить свойства различных схем и познакомиться не только с логическими, но и техническими аспектами элементов, например такими, как уров- ни напряжения и тока, временные факторы и др.; знание этих вещей необходимо для грамотного использования тех или иных схем. Те же принципы будут применимы и к более сложным системам, включая микропроцессоры, поскольку эти сложные системы строятся на основе стандартных логических элементов. Глава начинается с раздела, содержащего основные сведения о ри-диодах, биполярных и полевых транзисторах — полупроводни- ковых приборах, из которых состоят логические схемы. В нашем крат- ком обзоре мы затронем главным образом поведение этих приборов при работе с сильными сигналами, т. е. их «переключательные» свой- ства, и не будем рассматривать их поведение при слабых сигналах, ког- да они работают как усилители. Мы выделим два класса схем: схемы, в которых преобладают биполярные элементы, и схемы, построенные на полевых транзисторах. В пределах каждого из этих классов будут рассмотрены несколько семейств элементов. 4.1. ПОЛУПРОВОДНИКОВЫЕ ДИОДЫ И ТРАНЗИСТОРЫ Электропроводность вещества зависит главным образом от нали- чия заряженных частиц, способных перемещаться и тем самым поддер- живать ток. Атомы, из которых состоит любое вещество, принято рассматривать как положительные ядра, окруженные отрицательно за- ряженными электронами. Последние вращаются по орбитам, отстоя- щим на различные расстояния от ядра и, стало быть, имеющими раз- личные энергетические уровни. Энергия электрона, или его энерге-
92 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ тический уровень, складывается из потенциальной энергии электри- ческого притяжения к ядру атома и кинетической энергии движения по орбите. Как известно, возможные энергетические уровни в твердом теле образуют дискретный спектр значений. Все множество значений опре- деляется общим числом электронов в образце вещества и распадает- ся на энергетические зоны, грубо говоря, соответствующие электрон- ным оболочкам атомов, составляющих тело. Каждая оболочка харак- теризуется максимальным числом электронов, которые на ней могут находиться. Энергетический уровень электронов возрастает с ростом расстоя- ния от ядра. Электроны, расположенные на ближних, или, как го- ворят, нижних оболочках, сильно притягиваются к ядру и потому, как правило, неспособны перейти из одного атома в другой. Электроны внешних оболочек притягиваются к ядру слабее, в частности, потому, что отрицательный заряд электронов нижних оболочек в какой-то степени компенсирует положительный заряд ядра. По этой причине им легче оторваться от ядра, и они способны перемещаться между атомами. У каждого вещества есть свой уровень, выше которого лежит так называемая энергетическая зона проводимости. Электроны, принадле- жащие этой зоне или зонам с еще большими энергиями, могут легко переходить от одного атома к другому, в то время, как электроны с меньшей энергией сильнее связаны со своими атомами и им оторвать- ся гораздо труднее. Очень важную роль играют электроны самой внеш- ней, так называемой валентной, оболочки атома. Соотношение уров- ней энергии валентных электронов с уровнями зоны проводимости играет главную роль в определении электрических свойств вещества. При нормальных температурах электроны стремятся заполнить все энергетические уровни, начиная с самых нижних. Если при этом в 'зоне проводимости окажется достаточно много электронов, то они смогут поддерживать ток, и вещество будет вести себя как провод- ник. Этим свойством обладают металлы. Электроны в зоне проводимо- сти называются носителями заряда. Точнее говоря, они — носители отрицательного заряда. Существуют также носители положительного заряда, которые называются дырками. Дырки соответствуют отсут- ствующим электронам в валентных оболочках некоторых атомов в ве- ществе, где большинство валентных оболочек заполнено. Наличие таких вакантных мест в оболочках некоторых атомов открывает воз- можность электронам соседних атомов мигрировать и заполнять ва- кантные места. Мигрировавший электрон открывает вакансию на том месте, где он был до перемещения. Таким образом, дырки, собственно и являющиеся вакансиями, перемещаются от атома к атому, неся по- ложительный заряд. Полупроводник — это, вообще говоря, материал, свойства про- водимости которого, определяются относительно малым количеством
4.1 ПОЛУПРОВОДНИКОВЫЕ ДИОДЫ И ТРАНЗИСТОРЫ 93 носителей заряда. Например, в кремнии, наиболее часто применяемом полупроводниковом материале, электронов или дырок, способных пере- носить заряд, при обычных условиях очень мало. При нормальной температуре каждый атом кремния сам по себе имеет четыре электрона на валентной оболочке. Однако в кристалле кремния происходит обобществление электронов между парами сосед- них атомов. Каждый атом отдает свои четыре электрона в «совместное» владение четырем соседним атомам и принимает участие в совместном владении четырьмя чужими электронами. Электрон, находящийся в совместном владении, как бы принадлежит двум атомам сразу. Таким образом, с каждым атомом кристаллического кремния связа- но 8 валентных электронов, и валентная оболочка оказывается пол- ностью заполненной, так как восемь — это максимальное число ва- лентных электронов для атома кремния. В этом случае отсутствуют дырки или электроны, способные переносить заряд. Это состояние можно, однако, изменить, введя в кристалл наболь- шое количество примеси. Некоторые элементы, такие, как бор или алю- миний, используемые в качестве примеси в кремнии, приводят к зна- чительному увеличению количества дырок, потому что атомы этих элементов имеют меньше валентных электронов, чем атомы кремния. Образующийся в результате материал называется полупроводником р-типа, так как превалирующим носителем заряда являются положи- тельно заряженные дырки (р — от английского слова positive, т. е. пол ожител ьный). Если ввести в кремний другие примеси, например фосфор и мышьяк, то происходит значительное увеличение количества подвижных элек- тронов, поскольку атомы этих элементов имеют на оболочках одним валентным электроном больше, чем атомы кремния. Эти лишние элек- троны вытесняются в зону проводимости и становятся, таким образом, носителями заряда. Такой кристалл называется полупроводником n-типа, так как в качестве носителей заряда в нем превалируют отри- цательно заряженные электроны (п — от английского слова negative, т. е. отрицательный). В полупроводниках обоих типов превалирую- щий носитель заряда называется основным носителем заряда, а о про- тивоположном носителе говорят как о неосновном носителе заряда. Для нас наибольший интерес представляют механизмы взаимодей- ствия между носителями заряда, благодаря которым различные полу- проводниковые элементы обладают тем или иным поведением, харак- терным для переключателей. Таким образом, мы будем рассматривать в основном те свойства полупроводников, которые проявляются при прохождении сильных сигналов. Свойства, проявляющиеся при сла- бых сигналах, важны, когда речь идет не о переключательных схе- мах, а так называемых аналоговых схемах. Одним из важнейших полупроводниковых приборов, демонстрирующих переключательное поведение, является pn-диод, к изучению которого мы сейчас и присту- пим.
ЗД ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ ря-диод Диод, основанный на рп-переходе, или просто ри-диод,— это при- бор с двумя выводами, образованный соединением двух полупровод- ников; один из них является полупроводником р-тйпа, другой — л-типа. Взаимодействие между носителями заряда этих двух типов материала обеспечивает хорошо известное «выпрямляющее» свойство диода. Поведение этого устройства можно описать следующим обра- зом. Когда полупроводниковые вещества этих двух типов приходят в соприкосновение, возникает тенденция перехода превалирующего, или основного, носителя заряда каждой области в противоположную область. Эта тенденция объясняется случайным характером движения носителей заряда. В среднем из области п в область р переходит боль- шее число электронов, чем в обратном направлении, просто потому, что в области п гораздо больше подвижных электронов. Аналогично из области р в область п переходит большее количество дырок, чем в обратном направлении. Подобная миграция носителей заряда каждо- го вида, происходящая из-за неравномерности их пространственного распределения, называется диффузией. По мере того как носители заряда переходят через границу разде- ла между областями, заряженность обеих областей возрастает. Об- ласть п приобретает положительный заряд как из-за потери электро- нов, так и за счет прихода дырок. Соответственно область р становится отрицательно заряженной из-за ушедших дырок и приобретенных электронов. В результате вблизи рп-границы образуется электриче- ское поле Е, направленное так, чтобы воспрепятствовать дальнейшей диффузии носителей заряда. Таким образом, это поле ограничивает диффузию основных носителей заряда. Благодаря присутствию поля на все заряды, находящиеся в ок- рестности рп-перехода, действует кулоновская сила, направленная в сторону, противоположную от границы раздела сред для основных носителей заряда, и, наоборот, к границе— для неосновных носителей заряда. Под действием этой силы неосновные носители заряда начи- нают двигаться через границу раздела сред в направлении, обратном движению основных носителей заряда. В конце концов между этими двумя потоками устанавливается равновесие: количество основных носителей заряда, пересекающих границу, в точности равно компен- сирующему потоку неосновных носителей, пересекающих границу под действием поля. В этом равновесном состоянии; суммарный ток через границу, разделяющую области р и п, равен нулю. Когда к противоположным краям диода прикладывается напря- жение V, равновесие между потоками носителей заряда нарушается и возникает ток. Если к области р приложен «плюс», а к области п— «минус», то скорость диффузии основных носителей заряда возраста- ет — в такой ситуации говорят, что рп-переход смещен вперед (или име-
4.1. ПОЛУПРОВОДНИКОВЫЕ ДИОДЫ И ТРАНЗИСТОРЫ Рис. 4.1. Зависимость между током я напряжением для рл-диода. ет прямое смещение). Скорость диффузии основных носителей заряда возрастает благодаря тому, что приложенное напряжение оттягива* ет электроны из области р, а дырки — из области и, в результате чего внутреннее поле, препятствующее диффузии, ослабляется. Таким об* разом, в диоде устанавливается ток /, который очень быстро возра- стает с ростом напряжения. Однако если напряжение приложено в противоположном направ- лении (т. е. «плюс» — к области и, а «минус» — к области р), то ско- рость диффузии уменьшается, и в такой ситуации говорят, что /яг-переход имеет обратное смещение. При обратном смещении резуль- тирующий ток порождается за счет миграции неосновных носителей заряда через границу раздела сред под действием внутреннего поля. Но этот ток очень мал, потому что количество неосновных носителей заряда в каждой зоне невелико. Общий эффект можно охарактеризовать диаграммой тока — напря- жения, представленной на рис. 4.1. На этом же рисунке показаны по- ложительные направления напряжения и тока. Чтобы подчеркнуть, что поведение диода имеет переключательный характер, зависимость между током и напряжением часто упрощают до «ступеньки», изобра- женной на рис. 4.2. V Рис. 4.2. Упрощенная зависимость между током I и напряжением V для рл-диода,
96 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.3. Обозначение pn-диода, принятое для его изображения на схемах. Согласно этой упрощенной зависимости, предполагается, что при напряжении, меньшем некоторого порогового значения VT (Т— от английского слова Threshold, т. е. порог), равного приблизительно 0.7 В для кремния, ток равен нулю, а при достижении VT он стано- вится неограниченным. Такое поведение соответствует переключате- лю, управляемому напряжением: цепь разомкнута, когда величина напряжения меньше порогового значения VT, и замкнута, когда на- пряжение превосходит VT. Когда прикладываемое к диоду напряже- ние смещает pn-переход вперед и величина этого напряжения больше, чем VT, то говорят, что диод находится в проводящем состоянии, или, просто проводит. Наоборот, когда величина напряжения меньше, чем Vт, говорят, что он находится в непроводящем состоянии, или не проводит. На рис. 4.3 представлено стандартное обозначение рп- диода, принятое для его изображения на схемах. Треугольник как бы образует стрелку, указывающую направление тока при прямом смещении. Скорость переключения, или быстродействие диода, определяется в основном двумя факторами. Первый фактор — это емкость, возни- кающая на границе перехода под действием внутреннего поля и уп- равляемых им зарядов. Этот «конденсатор» должен успеть зарядиться или разрядиться прежде, чем диод сможет перейти из проводящего состояния в непроводящее. Биполярный транзистор Биполярный транзистор — это прибор с тремя выводами, имеющий два /m-перехода, разделяющих три области полупроводникового ма- териала. Возможны две конфигурации: конфигурация прп с полупро- водником типа р в центре и двумя полупроводниками типа п по кра- ям, как показано на рис. 4.4, а также конфигурация рпр — область п в центре и две области р по краям. В обеих конфигурациях эти об- ласти называются соответственно эмиттером, базой и коллектором. На схемах они обозначаются буквами Е (от слова Emitter — эмиттер), В (от слова Base — база) и С (от слова Collector — коллектор). В нормальном режиме работы прибора два рп-перехода взаимодей- ствуют между собой таким образом, что ток, проходящий через оба перехода база-эмиттер и база-коллектор, управляется током меныпей величины, протекающим только через переход база-эмиттер. Так назы- ваемое транзисторное действие прибора достигается благодаря внеш- нему напряжению, прикладываемому к переходу база-коллектор, в ре: зультате чего этот переход имеет обратное смещение. В таком режиме лишь небольшой ток, поддерживаемый неосновными носителями за- ряда, протекает через переход база-коллектор.
4.1 ПОЛУПРОВОДНИКОВЫЕ ДИОДЫ И ТРАНЗИСТОРЫ 97 3 МИТТЕР<£)--- п п ------КОЛЛЕКТОР (О') БАЗ/КВ} Рис. 4.4. Биполярный лрп-транзистор. Однако это состояние можно изменить, сместив «вперед» переход база-эмиттер. Через прямо смещенный переход база-эмиттер проходит ток ощутимой величины. Этот ток поддерживается главным образом основными носителями заряда из области эмиттера. Перейдя границу между эмиттером и базой, они оказываются уже неосновными носите- лями базы и увеличивают остававшийся до этого незначительным ток из неосновных носителей, протекающий через переход база-коллектор. Поскольку эти неосновные в области базы носители имеют подходя- щий по знаку заряд, на который воздействует напряжение между ба- зой и коллектором, а также благодаря тому, что область базы делается относительно тонкой, большинство этих носителей заряда переходят границу между базой и коллектором и вносят свой вклад в ток кол- лектора. Те носители, которые не переходят границу между базой и коллектором, образуют сравнительно небольшой ток базы. Ток эмиттера приблизительно равен току коллектора, поскольку их разность — это относительно малый ток базы. В такой ситуации го- ворят, что транзистор проводит нт открыт. Когда переход база-эмит- тер не смещен вперед, ток, протекающий через обратно смещенный пе- реход база-коллектор, остается слабым. В этом случае говорят, что транзистор не проводит или закрыт. Чтобы проиллюстрировать поведение биполярного транзистора, рассмотрим схему на рис. 4.5. Помимо прп-транзистора, схема содер- жит входную цепь, состоящую из Rt и переключателя, а также вы- Рис. 4.5. Транзистор в схеме с общим эмиттером, 4 № 592
98 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ ходную цепь, состоящую из Vo и /?0. Входная цепь замыкается через базу и эмиттер транзистора, а выходная — через коллектор и эмиттер. Такая конфигурация известна под названием схемы с общим эмиттером. Ток базы I в можно считать током входной цепи, а ток коллектора /с — током выходной цепи. Когда ключ находится в нижнем положении, т. е. в заземленной точке, напряжение на переходе база-эмиттер близ- ко к нулю, так что большая часть носителей заряда (электронов) по- падает в базу из эмиттера. В этом случае, поскольку переход коллек- тор-база имеет обратное смещение, ток коллектора близок к нулю. В таком состоянии, которое называется закрытым, падение напряже- ния на почти отсутствует и, таким образом, потенциал коллектора близок к Уо. Когда переключатель находится в верхнем положении, в точке с потенциалом Vi, переход база-эмиттер имеет прямое смещение, в ре- зультате чего значительное количество электронов переходит из эмит- тера в базу. Транзисторное действие обусловливает в этой ситуации наличие тока в коллекторе, величина которого зависит от /?0 и Ко, а также от силы тока в базе. Когда ток коллектора протекает через RQ, возникает падение напряжения и потенциал коллектора становится меньше потенциала Уо, создаваемого источником питания. Состояние, которое называется насыщением, возникает, когда ве- личина прямого смещения перехода база-эмиттер достигает значений, близких к пороговому для этого перехода напряжению VT (прибли- зительно 0.7 В для кремния). В этой ситуации наблюдается значи- тельный поток электронов через переход база-эмиттер, в результате чего появляется сравнительно сильный ток в коллекторе. Этот ток ограничен лишь внешними компонентами /?0 и Vo. Потенциал коллек- тора при этом уменьшается до нескольких десятых вольта, что меньше напряжения, приложенного к переходу база-эмиттер. Из этого сле- дует, что переход база-коллектор оказывается прямо смещенным. Описанные выше противоположные состояния транзистора — от- сечки и насыщения — часто применяются в переключательных схе- мах в качестве логических 0 и 1. Эти состояния удобны, поскольку они достигаются при сравнительно широком диапазоне входных пара- метров и мало чувствительны к их вариациям. Однако, если транзистор достигает насыщения, скорость переключения в другое состояние зна- чительно уменьшается. В режиме насыщения оба перехода способству- ют накоплению неосновных носителей заряда в базе, поскольку они оба имеют прямое смещение. Прежде чем транзистор сможет переклю- читься в закрытое состояние, эти заряды должны быть удалены. С другой стороны, когда транзистор находится в проводящем, но не насыщенном состоянии, лишь один прямо смещенный переход база- эмиттер способствует накоплению неосновных носителей заряда в об- ласти базы; обратно смещенный коллекторный переход удаляет значи- тельную часть неосновных носителей заряда. Известно несколько ме- тодов, позволяющих избежать насыщения. Эти методы используются
4 1 ПОЛУПРОВОДНИКОВЫЕ ДИОДЫ И ТРАНЗИСТОРЫ 99 Е (а) Е Рис. 4.6. Стандартные обозначения для биполяр- ных транзисторов: (а) конфигурация при, (б) конфигурация рпр. в схемах, от которых требуется особенно высокое быстродействие. С двумя подобными методами мы познакомимся в последующих раз- делах. На рис. 4.G показаны обозначения, принятые для изображения на схемах транзисторов прп и рпр. Эти два типа транзисторов различа- ются по направлению стрелки на выводе эмиттера. Это направление соответствует направлению тока, проходящего через вывод эмиттера при нормальном режиме работы транзистора, а именно в сторону об- ласти п перехода база-эмиттер. Полевой транзистор Полевой транзистор — это полупроводниковый прибор, у кото- рого сопротивление между двумя его выводами управляется потен- циалом, подаваемым на третий вывод. Полевой транзистор одной из разновидностей, известный под названием транзистор типа металл — окисел — полупроводник, сокращенно МОП, представлен на рис. 4.7. Прибор строится на полупроводниковом кристалле с небольшим ко- личеством примеси, называемом подложкой, и включает две области полупроводникового материала противоположного подложке типа. Одна из этих областей называется истоком, поскольку она явля- ется источником носителей заряда; другая называется стоком — в эту область носители заряда уходят. Область полупроводника, заключен- 3АТВОР | ДИЭЛЕКТРИК (ЗЮг") ПОДЛОЖКА Рис. 4.7. Нормально закры- тый (работающий в режиме обогащения) n-канальный по- левой транзистор типа «ме- талл — окисел — полупро- водник» Ч 1 В дальнейшем, следуя оригиналу, на рисунках исток мы будем обозначать бук- вой S (от английского Source), сток — буквой D (Drain) и затвор — буквой G (Gate).— Прим, перев. 4*
100 ГЛ 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ ная между истоком и стоком, называется каналом. Над каналом рас- полагается металлический электрод, называемый затвором. Он по- крывает всю область, занимаемую каналом, но отделен от нее тонким слоем диэлектрика (обычно из двуокиси кремния). Название «ме- талл — окисел — полупроводник» происходит от трех составляющих прибора: металлический затвор, слой изолирующего окисла и полу- проводниковая подложка. В рабочем режиме ток протекает через канал от истока к стоку. Этот ток поддерживается носителями заряда, которые являются ос- новными для истока и стока. Таким образом, для транзистора, пред- ставленного на рис. 4.7, ток, протекающий через канал, состоит из электронов. При нормальных условиях подвижных электронов в ка- нале мало, поскольку полупроводниковое вещество канала относится к p-типу. Ввиду этого сопротивление канала очень велико. Такое положение можно, однако, изменить, приложив к затвору положительный по отношению к заземленной подложке потенциал. Благодаря этому потенциалу на затворе появляются положительные заряды. Они оттягивают электроны изо всей сравнительно обширной области подложки в область канала. Увеличение количества электро- нов в канале приводит к уменьшению его сопротивления. Обычно для напряжения, подаваемого на затвор, существует не- которое пороговое значение, при котором происходит резкое умень- шение сопротивления в канале. Когда напряжение на затворе меньше порогового значения, говорят, что транзистор закрыт. Если на- пряжение на затворе превышает пороговое значение, транзистор открыт. О транзисторе описанной выше разновидности говорят, что он ра- ботает в режиме обогащения, так как прикладываемое напряжение увеличивает количество электронов в канале. Такой прибор называ- ют также нормально закрытым полевым транзистором, поскольку он соответствует переключателю, размыкающему цепь при нулевом на- пряжении на затворе. Существует также нормально открытый полевой транзистор, име- ющий сравнительно низкое сопротивление в канале при нулевом на- пряжении на затворе. Такой полевой транзистор аналогичен только что рассмотренному, за исключением того, что подложка сделана из полупроводника того же типа, что сток и исток. Если на рис. 4.7 заме- нить букву р на п, то он будет представлять нормально открытый полевой транзистор. В данном случае электроны, при нормальных ус- ловиях способные поддерживать ток в канале, могут быть удалены, если приложить отрицательное напряжение к затвору. О таком тран- зисторе говорят, что он работает в режиме обеднения, поскольку на- пряжение, прикладываемое к затвору, уменьшает количество носи- телей заряда в канале. Полевые транзисторы, конфигурация которых соответствует рис. 4.7, как нормально закрытые, так и нормально открытые, назы-
4.1 ПОЛУПРОВОДНИКОВЫЕ ДИОДЫ И ТРАНЗИСТОРЫ 101 ваются п-канальными приборами, поскольку в роли носителей заряда, поддерживающих ток в канале, выступают электроны. При обычном режиме работы этих транзисторов потенциал стока положителен по от- ношению к потенциалу истока. Существуют и р-канальные полевые транзисторы; у них ток в канале поддерживается за счет дырочной проводимости. Они работают так же, как и n-канальные приборы, за исключением того, что все напряжения должны иметь противополож- ную полярность. Четыре типа полевых МОП-транзисторов соответствуют четырем возможным комбинациям типа канала (п или р) и типа состояния при нормальных условиях (нормально закрытые и нормально открытые). На схемах эти четыре типа транзисторов различаются обозначениями, приведенными на рис. 4.8. При обозначении нормально закрытых транзисторов линия, соединяющая сток и исток, прерывается в двух местах, в то время как у нормально открытых приборов эта линия сплошная. Стрелка на выводе подложки дает нам информацию о типе канала. Она направлена в сторону канала, если он n-типа, и в про- тивоположную сторону, если он p-типа. Подложку часто соединяют с истоком внутри прибора; в этом случае транзистор имеет три вывода и все потенциалы задаются относительно истока. Скорость переключения, или быстродействие, схем на полевых МОП-транзисторах преимущественно определяется емкостью между затвором и другими электродами, определяемой их взаимным распо- ложением. Эта емкость должна успеть зарядиться и разрядиться, прежде чем прибор перейдет из одного состояния в другое. Ситуация осложняется еще и тем, что полевые транзисторы имеют более высо- кое сопротивление в проводящем состоянии по сравнению с биполяр- ными транзисторами. Поскольку, как правило, один полевой транзи- стор в схеме управляется другим полевым транзистором, время заряда (J сток .у сток Q^B0P I -ПОДЛОЖКА ЗАТВОР | ПОДЛОЖКА П! ИСТОК *~] ИСТОК («) (<О | сток f сток ЗАТВОР | \^—-ПОДЛОЖКА ЗАТВОР | &- ПОДЛОЖКА ИСТОК ИСТОК Ю (г) Рис. 4.8. Стандартные обозначения, принятые для изображения на схемах различных полевых МОП-транзисторов: (а) n-канальный нормально закрытый (работающий в ре- жиме обогащения), (б) р-канальный нормально закрытый (работающий в режиме обо- гащения), (в) n-канальный нормально открытый (работающий в режиме обеднения), (г) р-канальный нормально открытый (работающий в режиме обеднения).
Io? ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ емкости управляемого транзистора через сопротивление управляю- щего оказывается довольно большим. По этим причинам схемы, вы- полненные на полевых МОП-транзисторах, вообще говоря, работают медленнее, чем схемы на биполярных транзисторах и диодах. 4.2. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ Логический элемент, или вентиль,— это схема, реализующая одну из основных логических функций. В оставшейся части этой главы мы рассмотрим полупроводниковые логические элементы различных ти- пов, уделив особое внимание тем, которые производятся в настоящее время в виде интегральных схем. Чтобы проиллюстрировать некоторые основные понятия, характе- ризующие работу логических элементов, наверное, полезно будет на- чать с наиболее простых схем, а именно с диодных вентилей. Один из таких вентилей изображен на рис. 4.9. Он состоит из двух диодов и резистора п. Эта схема должна представлять логический 0 и логиче- скую 1 потенциалами соответственно О В и V В. У вентиля два входа А и В. Если на оба входа подается потенциал + VB, то на выходе также установится потенциал +VB, т. е. на обоих входах и на выходе мы имеем логическую 1. Однако если какой- либо из входов имеет нулевой потенциал (логический 0), то на выходе установится потенциал, близкий к нулю, поскольку диод на входе с нулевым потенциалом будет смещен вперед и через него потечет ток, причем падение напряжения на проводящем диоде мало ввиду его не- значительного сопротивления. Поведение этой схемы соответствует логической функции И, поскольку логическая 1 наблюдается на вы- ходе тогда и только тогда, когда на обоих входах логическая 1. Такой диодный вентиль оказывается полезным в некоторых при- менениях, но его широкому использованию в качестве логического элемента препятствуют два присущих ему недостатка. Первый недо- статок заключается в том, что потенциал на выходе оказывается чув- ствительным к небольшим вариациям в уровне потенциала на входе. Особенно сильно этот недостаток проявляется, когда на одном из входов логический 0. В этом случае любое отклонение от идеального нулевого потенциала на входе приводит к такому же точно отклоне- нию в величине выходного потенциала, вдобавок некоторое отклоне- ние от нулевого напряжения на выходе обусловлено ненулевым па- дением напряжения на диоде, имеющим прямое смещение. Подобная чувствительность к колебаниям входного сигнала может привести к серьезным нарушением, если диодные вентили включены Повсюду в дальнейшем присутствие символа заземления на схеме будет означать (если специально не оговорено обратное), что все потенциалы, указанные на схеме, берутся относительно заземленной точки. Таким образом, уровни потенциала отдельных точек схемы характеризующие напряжение питания или сигнал, со* ответствуют разности потенциалов между данной точкой и «землей»,
4.2. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ 103 Рис. 4.9. Диодный вентиль. последовательно,— в этом случае отклонения будут накапливаться при прохождении сигнала от одного вентиля к другому. Второй недостаток диодного вентиля заключается в том, что ра- бота вентиля зависит от нагрузки на выходе. При высоком уровне вы- ходного сигнала ток течет от выхода вентиля в нагрузку и при этом проходит через резистор вентиля, в результате чего появляется паде- ние напряжения на резисторе и уровень потенциала на выходе умень- шается. Это уменьшение составляет довольно значительную величину, по- скольку сопротивление резистора должно быть сравнительно боль- шим, чтобы избежать перегрузки входных цепей при низких потен- циалах на входе. При низком уровне выходного сигнала ток течет от нагрузки в вентиль. Этот ток должен протекать через те входы, ко- торые имеют низкий потенциал. Это может привести к ситуации, когда один вход должен принять ток, приходящий от многих других венти- лей, что также приводит к определенным трудностям. Недостатки, присущие диодным схемам, вообще говоря, объяс- няются тем, что диод — это пассивный прибор. Транзисторы, напро- тив, являются активными приборами в том смысле, что слабый сигнал у них управляет сильным сигналом. Описанные выше недостатки диодных вентилей можно устранить, подключив к диодам транзисторы. В частности, можно ввести в вентиль дополнительную схему, которая восстанавливала бы уровень потенциала на выходе до величин, близ- ких к идеальному значению, и тем самым уменьшала бы чувстви- тельность вентиля к небольшим колебаниям в уровне входного сиг- нала. Другая дополнительная цепь могла бы изолировать выходной ток нагрузки от входов, а также обеспечить ток, достаточный для уп- равления большим числом входов других вентилей. Эти две дополнительные схемы можно назвать соответственно восстановителем и буфером. Исходная схема на диодах, поскольку она комбинирует входные сигналы, может быть названа комбинационной частью вентиля или просто комбинатором. Улучшенная таким обра- зом схема, состоящая из трех частей, имеет конфигурацию, показанную
104 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.10, Три части вентиля. на рис. 4.10. Такой вентиль относится к семейству, которое называ- ется диодно-транзисторной логикой, сокращенно ДТЛ. В этом назва- нии отражен тот факт, что во входной части схемы используются диоды, а остальные части выполнены на транзисторах. Мы воспользуемся обобщенной схемой на рис. 4.10, чтобы проана- лизировать и некоторые другие типы логических элементов. Такое ус- ловное разбиение схемы позволит нам изучить работу каждой части в отдельности. В частности, буферную часть вентиля можно подвер- гать тем или иным модификациям для достижения тех или иных целей, не затрагивая остальных компонентов. Однако, как мы увидим в даль- нейшем, некоторые типы вентилей не поддаются подобному разбиению на три части. В частности, это относится к семейству вентилей, изве- стных под названием схем с непосредственной связью. В таких вентилях транзисторы, работающие как одна неразрывно связанная схема, вы- полняют все три функции. В каждом из последующих разделов этой главы будут рассмотре- ны вентили, принадлежащие какому-то конкретному виду, или се- мейству. Семейство объединяет набор вентилей, выполняющих раз- личные логические функции и построенных на основе какой-то одной технологии. Обычно какая-то одна логическая функция является превалирую- щей для данного семейства вентилей; поэтому мы уделим основное внимание вентилям, выполняющим эту функцию. Превалирующая в семействе логическая функция всегда является универсальной (на- пример, И-НЕ, ИЛИ-HE), т. е. такой, при помощи которой можно реализовать все логические функции. Логические семейства можно разделить на два основных класса: выполненные на биполярных тран- зисторах и выполненные на полевых МОП-транзисторах. При обсуждении диодного вентиля мы предполагали, что высокий уровень потенциала соответствует логической 1, а низкий — логиче- скому 0. Такое соглашение носит название положительной логики. Соглашение противоположного характера, при котором более высо- кий потенциал соответствует логическому 0, а более низкий — логи- ческой 1, называется отрицательной логикой. Поэтому логическая функция, реализуемая тем или иным конкретным вентилем, зависит от типа подразумеваемой логики. Чтобы избежать путаницы, в даль- нейшем на протяжении всей книги мы будем без ограничения общно- сти считать, что действует соглашение, соответствующее положитель- ной логике.
4.3 ТРАНЗИСТОРНО-ТРАНЗИСТОРНАЯ ЛОГИКА 105 Прежде чем завершить общее обсуждение логических вентилей, следует ввести некоторые понятия, характеризующие наиболее важ- ные технические показатели вентилей, такие, как коэффициент раз- ветвления по выходу, коэффициент объединения по входу, время за- держки, помехоустойчивость и рассеиваемая мощность. Коэффициент разветвления по выходу — это максимальное число входных линий других вентилей, которыми может управлять выход данного вентиля. Обычно коэффициент разветвления по выходу опре- деляется силой тока, которую способен поддерживать выход вентиля без существенных отклонений от стандартных уровней потенциала, соответствующих логическому 0 и логической 1. Коэффициент объединения по входу — это максимальное число воз- можных входов для вентиля данного типа. Время задержки, или задержка распространения сигнала,— это время, которое проходит от момента подачи комбинации входных сиг- налов до момента установления соответствующего выходного сигнала. Очень часто время задержки зависит от нагрузки на выходе вентиля и в особенности от емкостных составляющих нагрузки. Помехоустойчивость характеризует способность схемы справляться с отклонениями в уровне сигнала от стандартных величин, соответ- ствующих двум логическим значениям. Каждое логическое семейство имеет свой допуск (запас помехоустойчивости); благодаря этому допу- ску схема не реагирует на небольшие отклонения в уровне сигналов, вызываемые помехами. Наконец, рассеиваемая мощность — это мощность, потребляемая вентилем во время работы. Обычно эта мощность обеспечивается источ- ником питания и, следовательно, должна быть по возможности мини- мальной, в особенности там, где питающим элементом являются бата- реи. Более того, рассеиваемая вентилем мощность переходит в тепло, и его нужно каким-то образом отводить. Однако скорость, с которой можно отводить тепло из интегральной схемы, ограничена. Как след- ствие, рассеиваемая вентилем мощность часто играет роль основного фактора, ограничивающего плотность упаковки вентилей в интеграль- ных схемах. 4.3. ТРАНЗИСТОРНО-ТРАНЗИСТОРНАЯ ЛОГИКА (ТТЛ) Транзисторно-транзисторная логика — это одно из важнейших семейств логических элементов. Вентили этого семейства выполне- ны исключительно на биполярных транзисторах. Одна из возможных схем ТТЛ-вентиля представлена на рис. 4.11. Логические значения О и 1 соответствуют номинальным уровням потенциала 0В и +5 В. Как показано на рисунке, схему можно условно разделить на три ча- сти, рассмотренные нами в предыдущем разделе: комбинатор, вос- становитель и буфер. Действие каждой из этих частей мы будем теперь изучать по отдельности.
Ю6 ГЛ 4 ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.11. ТТЛ -вентиль с нагрузочным резистором. Комбинационная часть вентиля представлена многоэмиттерным транзистором Тъ На схеме показаны два эмиттера, но их может быть и больше. Каждый входной сигнал подается на свой эмиттер. Каждый эмиттер образует /j/z-переход с базой. Прп этом подразумевается, что если хотя бы один переход база-эмиттер имеет достаточное прямое смещение' то транзистор находится в проводящем состоянии, т. е. через вывод коллектора может протекать ток. Поскольку на базу через резистор подается положительный потен- циал, то переход база-эмиттер оказывается смещенным вперед всякий раз, когда потенциал соответствующего эмиттера близок к «нулевому», т. е. к потенциалу заземленной точки. Таким образом, транзистор будет находиться в проводящем состоянии, если хотя бы один эмит- тер имеет низкий потенциал (логический 0). В этом случае через эмит- теры с низким потенциалом будет протекать заметный ток, обуслов- ленный в основном током базы. Когда на все эмиттеры подается высо- кий потенциал (логическая 1), транзистор закрыт и ток во всех эмит- терах очень слабый. Восстановительная часть вентиля состоит из транзистора Т2 и двух резисторов. База транзистора Т.2 соединена с коллектором 7\, так что ток коллектора 7\ является током базы Т2> Когда транзистор
4.3. ТРАНЗИСТОРНО-ТРАНЗИСТОРНАЯ ЛОГИКА 107 7\ комбинатора открыт, ток протекает от его коллектора к эмиттеру или эмиттерам, имеющим низкий потенциал. Направление этого тока противоположно тому, которое должен иметь ток базы транзистора Т2 для того, чтобы его переход база-эмиттер имел прямое смещение. Это означает, что всякий раз, когда транзистор 7\ открыт, транзистор Т2 закрыт. В действительности заметный ток протекает от базы Т2 к коллек- тору 7\ лишь в течение коротких периодов, требующихся для того, чтобы Т2 перешел из насыщенного состояния в закрытое. Этот ток поддерживается уходящими из области базы Т2 зарядами, накопив- шимися за то время, пока транзистор Т2 находился в насыщенном сос-» тоянии. После того как Т2 оказывается закрытым, через его базу про* ходит лишь очень слабый ток. С другой стороны, если транзистор 7\ закрыт, его переход база* коллектор смещен в прямом направлении, благодаря тому что к ре- зистору базы приложен потенциал +5 В. Поэтому переход база-кол* лектор Tlt как и любой р/г-диод, имеющий прямое смещение, должен находиться в проводящем состоянии. Это в свою очередь обусловлива- ет прямое смещение перехода база-эмиттер Т2, так что Т2 оказывается в насыщенном (проводящем состоянии). Каждое из этих двух противо- положных состояний транзистора Т2 (отсечка и насыщение) наблюда- ется на самом деле для целого диапазона условий на входе. В этом смы- сле цепь транзистора Т2 действительно играет роль восстановителя сигнала. Буферная часть вентиля состоит из транзистора Т3 и резистора. Потенциал базы Т3 управляется эмиттером транзистора Т2 восстано- вителя. Когда транзистор Т2 находится в проводящем состоянии, по- тенциал его эмиттера принимает некоторое положительное значение между 0 и +5 В; конкретное значение зависит от двух резисторов в це- пи восстановителя. Это в свою очередь приводит к тому, что переход база-эмиттер буферного транзистора Т3 имеет прямое смещение, вслед- ствие чего транзистор Т3 оказывается открытым. В такой ситуации на выходе вентиля наблюдается потенциал, близкий к потенциалу «земли». С другой стороны, когда транзистор Т2 восстановительной цепи не проводит, уровень потенциала на его эмиттере оказывается «ну- левым». По этой причине переход база-эмиттер транзистора Т3 не будет иметь прямого смещения, и, следовательно, Т3 будет закрыт. В этой ситуации благодаря резистору в коллекторной цепи буфера на выходе вентиля установится потенциал, близкий к потенциалу пита- ния +5 В. Действительная величина потенциала на выходе зависит от падения напряжения на резисторе, которое обусловлено проходя- щим через этот резистор током нагрузки. Поведение рассмотренного нами ТТЛ-вентиля описано в табл 4.1. Если заменить значения 0 В и 5 В соответственно на 0 и 1, то мы увидим, что табл. 4.1 описывает поведение логического вентиля, реализующего функцию И-НЕ. Если
108 ГЛ 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Таблица 4.1 Действие ТТЛ-вентиля, изображенного на рис. 4.11 А в Состояние 7\ Состояние Г* Состояние Т3 Выход 0 в 0 В Открыт Закрыт Закрыт —5 В 0 в 5 В Открыт Закрыт Закрыт ~5 В 5 В 0 В Открыт Закрыт Закрыт — 5 В 5 В 5 В Закрыт Открыт Открыт -0 В схема имеет лишь один эмиттер на входе, то такой вентиль является инвертором. Теперь вернемся опять к буферной части вентиля. Буфер должен быть способен пропустить ток, который необходим для правильной ра- боты входных цепей подключенных к нему других вентилей. Сущест- венный ток на входе ТТЛ-вентиля наблюдается лишь тогда, когда этот вход имеет низкий потенциал. В этом случае ток течет от входа управляемого вентиля к выходу управляющего вентиля. Рассмотрен- ная нами буферная цепь удовлетворяет требованиям, предъявляемым к управляющему вентилю, если его буферный транзистор способен пропустить через себя суммарный ток, приходящий ото всех управля- емых им входов, а также от своего коллекторного резистора. Однако задержка распространения сигнала для такого вентиля будет большой из-за того, что для переключения от низкого потенциала на выходе к высокому при закрытом буферном транзисторе использу- ется резистор. Между выходной линией вентиля и «землей» всегда обра- зуется довольно ощутимая паразитная емкость. Эта емкость складыва- ется не только из емкости монтажных соединений, но и из емкости на переходах транзисторов. Паразитная емкость должна успеть зарядиться, прежде чем выход вентиля сможет перейти от низкого уровня потенциала к высокому. Ток заряда в основном течет через коллекторный резистор. Таким об- разом, потенциал на выходе растет экспоненциально с постоянной вре- мени, определяемой сопротивлением резистора и паразитной емкостью. Переключение от высокого потенциала к низкому происходит значи- тельно быстрее, поскольку емкость разряжается на землю через низ- кое сопротивление открытого транзистора. Выходной каскад с активной нагрузкой Чтобы повысить скорость переключения ТТЛ-вентилей, вместо ре- зистора в его буферной части применяется транзистор. Этот транзи- стор открывается, когда потенциал на выходе вентиля должен быть высоким, и образует низкоомную цепь, которая позволяет быстро
4,3. ТРАНЗИСТОРНО-ТРАНЗИСТОРНАЯ ЛОГИКА 109 КОМБИНАТОР ВОССТАНОВИТЕЛЬ БУФЕР Рис. 4.12. ТТЛ-вентиль с нагрузочным транзистором. зарядить паразитную емкость. Схема ТТЛ-вентиля с модифицирован- ным таким образом буфером представлена на рис. 4.12. Буфер такого вида называют выходным каскадом с активной нагрузкой. В данном случае буфер содержит два транзистора Тн и TL. Тн служит для того, чтобы обеспечить высокий уровень потенциала на выходе вентиля, a TL— наоборот, чтобы сделать его низким. Транзи- стор восстановительной части вентиля управляет этими двумя тран- зисторами в дополнительном режиме. Когда Т2 закрыт, база TL имеет потенциал «земли», а база Тн имеет высокий потенциал. Поэтому ТИ находится в проводящем состоянии, a TL закрыт. С другой стороны, когда Т2 проводит, базы обоих транзисторов TL и Тн имеют потенциал промежуточной величины, достаточной для того, чтобы TL проводил, но не достаточной для того, чтобы проводил Тн. Как показано на рисунке, последовательно с ТИ подключен диод. Последний служит для того, чтобы повысить потенциал эмиттера Тн приблизительно на 0.7 В и тем самым гарантировать, что ТИ будет закрыт при открытых Т2 и TL. Небольшое сопротивление включено последовательно с транзисторами Тн и TL, чтобы ограничить ток, про- текающий через них во время перехода из одного состояния в другое, когда оба транзистора находятся в частично проводящем состоянии.
по ГЛ 4 ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Использование ТТЛ-вентилей для управления другими компонентами ТТЛ-вентили применяются не только для управления входными линиями других ТТЛ-вентилей, довольно часто они управляют уст- ройствами иной природы. Это имеет место при сопряжении ТТЛ-вен- тилей с такими «нелогическими» компонентами, как индикаторные лам- почки, управляющие схемы, цифро-аналоговые преобразователи и др. В таких случаях важно помнить, что ТТЛ-вентиль пропускает ток главным образом при низком выходнОхМ потенциале. Однако, как пра- вило, он не в состоянии обеспечить достаточного тока при высоком потенциале на выходе. Это следует учитывать при сопряжении ТТЛ- вентилей с другими компонентами. Предположим, к ТТЛ-инвертору или какому-нибудь другому вен- тилю нужно подключить индикаторную лампочку, сигнализирующую об уровне выходного потенциала этого вентиля. Правильный способ подсоединения лампочки показан на рис. 4.13. Разумеется, она должна быть рассчитана на напряжение приблизительно 5 В и не должна по- треблять тока, превышающего максимальную пропускную способ- ность вентиля. Лампочка будет гореть при низком выходном потен- циале (когда на выходе вентиля логический 0). Если нужно, чтобы она ТТЛ* Инвертор Рис. 4.13. Лампочка, управляемая‘ТТЛ- вентилем, горит при низко.м уровне па вы- ходе вентиля. Рис. 4.14. Лампочка, управляемая ТТЛ- вентилем, включена по-другому и горит при высоком уровне на выходе вентиля.
4.4 МОНТАЖНАЯ ЛОГИКА ш загоралась, наоборот, при высоком выходном потенциале (логическая 1), то ее нужно поместить между выходной линией вентиля и «землей», добавив нагрузочный резистор, как показано на рис. 4.14. При таком подсоединении, когда на выходе вентиля высокий потенциал, ток в лам- почку идет через резистор; при низком потенциале лампочка шунтиру- ется вентилем и не горит. Величина R должна быть достаточно малой, чтобы обеспечить необходимую силу тока для лампочки, но не такой малой, чтобы ток, проходящий через вентиль, превысил его нагрузоч- ную способность. 4.4. МОНТАЖНАЯ ЛОГИКА ТТЛ-вентили, имеющие нагрузочный резистор на выходе (рис. 4.11), можно использовать для реализации так называемой монтажной логики. Это название отражает тот факт, что можно реализовать ло- гическую функцию путем простого соединения выходных линий от не- скольких вентилей. На рис. 4.15 изображены два ТТЛ-вентиля И-НЕ (каждый с коллекторным резистором), выходные линии которых соеди- нены. Если хотя бы один из их буферных транзисторов открыт, то на общем выходе установится потенциал, близкий к потенциалу «земли». 4-5 В Рис. 4.15. Монтажное И, реализованное соединением выходов двух ТТЛ-вентилей И* НЕ с нагрузочными резисторами,
112 ГЛ 4 ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ В противном случае благодаря резисторам общий выход получит вы- сокий потенциал. Поведение такой схемы описано в табл. 4.2. В рамках положитель- ной логики эта схема представляет собой вентиль И, на входы которого подаются значения логических функций, реализуемых вентилями- составляющими.-В целом схема реализует суперпозицию логических функций: И от двух И-НЕ. Таким образом, два логических уровня реализованы при использовании лишь одного уровня вентилей. Ра- зумеется, сами по себе результаты, выдаваемые вентилями-составляю- щими, оказываются при этом утерянными. Таблица 4.2 Поведение монтажного вентиля И для схемы, показанной на рис. 4.15 ТА тв Без соединения Общий выход Выход А Выход В Открыт Открыт Низкий Низкий Низкий Открыт Закрыт Низкий Высокий Низкий Закрыт Открыт Высокий Низкий Низкий Закрыт Закрыт Высокий Высокий Высокий Преимущества, связанные с использованием монтажной логики, не ограничиваются возможностью создания вентилей, по существу, без всяких затрат. Функция И, реализуемая соединением выходов вентилей, выполняется без дополнительной временной задержки. Кроме того, поскольку практически число соединяемых вентилей не ограничено, монтажная логика оказывается особенно выгодной в тех ситуациях, когда схемы должны иметь большой коэффициент объедине- ния по входу (много переменных на входе). Возможно, наиболее важное преимущество, предлагаемое монтаж- ной логикой при ее использовании в микрокомпьютерах, заключается в том, что на ее основе легко реализуются логические шины. Шиной называется линия или набор линий, соединяющих между собой от- дельные логические устройства и позволяющих какому-то устройству посылать данные одному или нескольким другим устройствам. Шина может быть однонаправленной — в этом случае одни устрой- ства выступают всегда в качестве посылающих, а другие—всегда в качестве принимающих; шина может быть двунаправленной — в этом случае каждое устройство, подключенное к ширине, в какой-то мо- мент может посылать сигналы другим устройствам. На рис. 4.16 показана двунаправленная шина с одной линией, соединяющей несколько устройств. Здесь в каждый момент времени в роли посылающего сигнал устройства может выступать какое-то одно
4 4. МОНТАЖНАЯ ЛОГИКА 113 +5В +5В УСТРОЙСТВО 1 * УСТРОЙСТВО П Рис. 4.16. Пример двунаправленной шины при использовании вентилей с нагрузочны- ми резисторами. устройство. Все остальные устройства находятся в это время в таком состоянии, что буферный транзистор вентиля, подсоединенного к ши- не, закрыт (в рамках положительной логики — на выходе логическая 1). Таким образом, потенциал шины (или логическое значение) определя- ется состоянием буферного транзистора посылающего устройства. Если этот транзистор закрыт (логическая 1), то коллекторные резисторы поднимут потенциал шины до высокого уровня (логическая 1). Если же буферный транзистор посылающего устройства открыт (логический 0), то на шине установится низкий потенциал (логический 0). Линия шины соединена также со входными линиями каждого уст- ройства; таким образом, они могут получать информацию, передавае- мую по шине. Рассмотренный нами пример показывает, что одна ли- ния связи может обслуживать много устройств в режиме разделения времени, так что любое из этих устройств способно посылать сигналы остальным устройствам. В гл. 5 понятие шины будет рассмотрено бо- лее подробно. Обратим теперь внимание на то, что при таком соединении выходов многих вентилей у нас появляется много нагрузочных резисторов. Со- вершенно ясно, что это может привести к нежелательным последст- виям: соединенные параллельно многочисленные нагрузочные резисто- ры дают маленькое суммарное сопротивление. Поэтому открытые транзисторы должны пропускать слишком большой ток; особенно рпасной ситуация становится, когда в проводящем состоянии находится лишь один транзистор.
]14 ГЛ- 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ От этого недостатка можно, однако, довольно легко избавиться, если заменить многочисленные нагрузочные резисторы одним-един- ственным, имеющим подходящее сопротивление. При этом использу- ются вентили, не имеющие нагрузочной цепи в буферной части, и их общий выход подсоединяется к одному внешнему нагрузочному рези- стору. ТТЛ-вентили, обладающие этим свойством, широко применяются в монтажной логике и носят название вентилей с открытым (или сво- бодным) коллектором. На схемах рядом с символом, обозначающим вентиль с открытым коллектором, можно часто встретить пометку «о. с.» (от слов open collector). Выходные схемы с тремя состояниями Монтажную логику было бы выгодно применить к ТТЛ-вентилям с активной нагрузкой в буферной части, поскольку такие вентили от- личаются высоким быстродействием, точнее, быстро переходят от низ- кого к высокому потенциалу на выходе. Однако при соединении выхо- дов этих вентилей всякий раз, когда они находятся в противоположных состояниях, на общем выходе будет наблюдаться «конфликтная ситуа- ция». У одного вентиля верхний транзистор буфера будет открыт, стре- мясь повысить потенциал на общем выходе; в то же время у другого вентиля будет открыт нижний транзистор, стремясь этот же потенциал понизить. В результате через проводящие транзисторы будет прохо- дить слишком большой ток, который может их повредить. Но если даже он их не повредит, уровень потенциала на общем выходе не будет ни достаточно низким, чтобы соответствовать логическому 0, ни достаточно высоким, чтобы соответствовать логической 1; таким образом, подоб- ная схема будет отличаться неопределенным поведением. И все же есть способ совместить преимущества монтажной логики с быстродействием вентилей, имеющих нагрузочные транзисторы в выходном каскаде. В частности, поведение ТТЛ-вентилей можно из- менить, введя третье состояние на выходе, когда уровень потенциала не высок и не низок. Говорят, что такие вентили имеют три выходных состояния (схемы с тремя состояниями, или тристабильные схемы). Третье состояние, по существу, заключается в отсутствии двух дру- гих состояний; его часто называют состоянием с высоким импедан- сом или с высоким выходным сопротивлением. Физически в этом состоянии выходная линия находится в «плавающем» (или «сво- бодном», или «неуправляемом») режиме, т. е. вентиль на нее не дей- ствует. Такое состояние вентиля достигается за счет двух транзисторов в буферной части вентиля, верхнего и нижнего, которые могут одновременно находиться в непроводящем состоянии. На рис. 4.17(a) показана схема ТТЛ-вентиля с тремя состояниями, реализующего функцию И-НЕ. Чтобы управлять транзисторами TL и Тн, здесь введена дополнительная управляющая входная линия, которая называется линией разрешения. Эта линия подсоединена через
4.4 МОНТАЖНАЯ ЛОГИКА 115 Рис. 4.17. 1 рисзобильные схемы, (а) ТТЛ-вентиль И-НЕ. (б) Символ, обозначающий триоабильный инвертор, (в) Символ, обозначающий тристабильный формирователь, (г) Символ трпстабильного вентиля И-НЕ. (д) Символ тристабнлыюго вентиля ИЛИ- НЕ. диод к базе верхнего транзистора выходного каскада, а также к эмит- теру входного транзистора. Когда на линию разрешения подается низкий потенциал (логиче- ский 0), оба выходных транзистора закрыты. Верхний транзистор за- крыт потому, что на его базе устанавливается низкий потенциал, по- скольку диод проводит (смещен в прямом направлении). Нижний тран- зистор также будет закрыт, поскольку на эмиттер входного транзистора подан логический 0. С другой стороны, когда на линию разрешения по- дан высокий потенциал (логическая 1), диод в цепи базы верхнего вы- ходного транзистора будет закрыт, и поэтому верхний транзистор будет вести себя, как в обычном ТТЛ-вентиле. Далее, логическая единица, поданная на один из эмиттеров входного транзистора, как бы выведет этот эмиттер из игры.
116 ГЛ 4 ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Таким образом, когда на линию разрешения подан высокий по- тенциал, состояние вентиля будет целиком определяться другими вхо- дами, и он будет работать, как обычный вентиль, реализующий функ- цию И-НЕ. Логические обозначения для различных вентилей с тремя состояниями показаны на рис. 4.17(6—д). Выходы двух или более вентилей с тремя состояниями можно сое- динять, но только при условии, что сигнал разрешения подан в каж- дый момент времени лишь на один вентиль (или, для краткости, «раз- решение» дано одному вентилю). В результате получается монтажная логика некоторой ограниченной разновидности, ее поведение описыва- ется в логических терминах несколько сложнее, чем поведение обыч- ной монтажной логики. Чтобы проиллюстрировать действие подобных схем, рассмотрим п вентилей с тремя состояниями, выходные линии которых соединены. Пусть Xt обозначает значение на выходе вентиля Gz-, когда ему дано «разрешение». Пусть далее обозначает логическое значение сигна- ла разрешения для вентиля Gf. Для п=2 значения на общем выходе схемы приведены в табл. 4.3. В колонке выходного значения Y, поми- мо 0 и 1, мы видим еще два состояния. «Запрещенное» состояние соот- ветствует ситуации, когда на линии разрешения обоих вентилей по- дана 1. «Неопределенное» состояние соответствует той ситуации, когда Таблица 4.3 Логические значения на общем выходе двух вентилей с тремя состояниями *1 ъ Хг Ei г 0 0 0 0 Неопределенное 0 0 0 1 0 0 0 X 0 Неопределенное 0 0 X 1 1 0 1 0 0 0 0 1 0 X . . Запрещенное 0 1 1 0 0 0 1 1 X Запрещенное 1 0 0 0 Неопределенное X 0 0 1 0 X 0 X 0 Неопределенное X 0 . X X 1 X 1 0 0 1 X 1 0 X Запрещенное 1 1 X 0 1 X 1 X X Запрещенное
4.4 МОНТАЖНАЯ ЛОГИКА 117 Рис. 4.18. Карта Карно для функции Y(Xf, Ef, Х2, Е2) — см. табл. 4.3. на управляющих входах обоих вентилей 0 и поэтому ни один вентиль не влияет на общий выход. На рис. 4.18 приведена карта Карно для такой частично определен- ной функции Y (Хъ Elt Х2, Ег), соответствующей табл. 4.3. «Неопре- деленным» и «запрещенным» состояниям Y из табл. 4.3. соответствуют прочерки на карте Карно. При этом подразумевается, что «разреше- ние» имеет лишь какой-то один вентиль. Каноническое выраже- ние суммы произведений можно получить для Y (Xi, Elt Х2, E2)t если сгруппировать элементы карты Карно так, как это показано на рис. 4.18. Это выражение имеет вид y=x1e1+x2e2. Следует отметить, что в полученном выражении каждый член соот- ветствует одному вентилю. Если «разрешение» имеет вентиль Git то значение соответствующего терма равно Xif а другого терма — 0, по- скольку «разрешение» в каждый момент времени может иметь лишь один вентиль. Таким образом, Y принимает значение, наблюдающееся на выходе вентиля, имеющего разрешение. Легко видеть, что добавле- ние других вентилей приведет к появлению новых термов в выражении для Y. Тогда в общем случае для п вентилей имеем У=Е1Х1+Е2Х2+- • -+ЕпХп. Альтернативная форма выражения — произведение сумм — мо- жет быть образована путем группирования нулей на карте Карно, приведенной на рис. 4.18. Все нулевые квадраты будут охвачены двумя группировками, а именно вторым столбцом слева и второй строкой сверху. Получающееся в результате выражение для произведения сумм будет выглядеть так: Если обобщить выражение для п вентилей, получим У = (Х1 + £1)(Х2 + £2)...(Х„ + Еп). Два выведенных выше канонических выражения наводят нас на мысль, что монтажную логику для вентилей с тремя состояниями
113 I л 1 ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ можно интерпретировать двояким образом. Можно рассматривать ее либо как монтажное И, либо как монтажное ИЛИ. Однако перемен- ные, выступающие в роли аргументов этих логических функций, по- мимо обычных логических аргументов — выходов вентилей,— содер- жат еще и значения, поступающие на линии разрешения вентилей* Если рассматривать схему как монтажное ИЛИ, то аргументами этого ИЛИ будут значения функции И от каждой пары и Et. Наоборот* если интерпретировать схему как монтажное И, то в качестве аргумен* тов функции И будут выступать пары Ёь объединенные функцией ИЛИ. 4.5. РАЗНОВИДНОСТИ ТТЛ-СХЕМ Существует несколько подсемейств транзисторно-транзисторной логики, основанных на двух основных вариациях в базовых схемах» Одна вариация связана с уровнем потребляемой мощности, а другая — с использованием диодов и транзисторов Шоттки. Стандартные и маломощные ТТЛ-схемы Интегральные схемы на основе ТТЛ-технологии находят широкое применение и выпускаются различными фирмами-изготовителями в соответствии с унифицированными спецификациями. Есть специфи- кации для так называемых стандартных ТТЛ-схем и ТТЛ-схем с ма- лой мощностью потребления. В вентилях обоих типов логическим зна- чениям 0 и 1 соответствуют одни и те же уровни напряжения, на вы- ходе — это максимум 0.4 В для логического 0 и минимум 2.4 В для ло- гической 1. Схемы обоих типов требуют одного и того же питающего напряжения 5 В. Однако они различаются требуемыми входными тока- ми, допустимыми выходными токами, а также рассеиваемой мощностью. В обеих разновидностях существенный ток наблюдается лишь при низком потенциале (логический 0). Этот ток течет от входа вентиля и попадает на выход предыдущего вентиля. У стандартных ТТЛ- вентилей при логическом нуле на входной линии номинальный ток на входе равен 1.6 мА, а на выходе может поддерживаться ток до 16 мА. Таким образом, коэффициент разветвления по выходу (макси- мальное количество входных линий других вентилей, которыми управ- ляет выход какого-то одного вентиля) у стандартных схем ТТЛ равен 10. У маломощных схем ТТЛ ток, соответствующий логическому 0 на входе , равен 0.36 мА, а на выходе может поддерживаться ток до 8 мА. Коэффициент разветвления по выходу маломощных ТТЛ-вентилей приблизительно равен 22. Наиболее*существенное различие между этими двумя разновидно? стями ТТЛ-схем заключается в более чем вчетверо меньшей величине тока на входах маломощных схем по сравнению со стандартными. Это оказывается очень важным фактором при сопряжении ТТЛ-схем с ми*
4.5 РАЗНОВИДНОСТИ ТТЛ-CXFM 119 Металл Дал Рис. 4.19. Диод Шоттки с переходом между металлом и полупроводником /ытипа. препроцессорами, которые, как правило, могут обеспечить лишь срав- нительно небольшой ток на своих выходных линиях. Другое различие между стандартными и маломощными ТТЛ-схе- мами состоит в уровне рассеиваемой мощности, приходящейся на один вентиль. Мощность, рассеиваемая маломощными вентилями, прибли- зительно в десять раз меньше. Недостаток маломощных схем заключа- ется в их меньшем быстродействии по сравнению со стандартными — приблизительно в три раза. В основном это объясняется тем, что при относительно слабых токах в маломощных схемах для зарядки и раз- рядки различных емкостей требуется больше времени. Схел ы ТТЛ с приборами Шоттки Заметного увеличения быстродействия позволяет достичь другая разновидность схем, выпускаемая на основе ТТЛ-технологии. Эффект здесь достигается благодаря применению диодов и транзисторов Шот- тки. Диод Шоттки основан на переходе, образующемся на границе металла и полупроводникового материала /г-типа— см. рис. 4.19. Основными носителями заряда как в металле, так и в полупровод- нике являются электроны. Однако электроны в полупроводнике на- ходятся на более высоких энергетических уровнях. Как следствие, в результате диффузии больше электронов будет переходить из полу- проводника в металл, отдавая при этом часть своей энергии, и меньше в противоположном направлении. В результате па границе образуется контактная разность потенциалов, препятствующая дальнейшей диф- фузии. Эту внутреннюю разность потенциалов можно перекрыть, прило- жив внешнее напряжение к диоду, таким образом, чтобы металл обла- дал положительным потенциалом по отношению к проводнику. В этом случае в результате усиления диффузии электронов от полупроводни- ка к металлу через диод потечет ток. С другой стороны, если внешнее напряжение приложить в противоположном направлении, ток будет очень незначительным. Таким образом, диод Шоттки обладает выпрямляющими свойства- ми, подобно диоду с р/г-переходом. Однако высокой скорости переклю- чения, или быстродействию, диода Шоттки не препятствует накопле- ние неосновных носителей заряда, как это имеет место в ри-диоде. Причина заключается в том, что в диоде Шоттки электроны являются Рис. 4.20. Символическое обозначение диода Шоттки.
120 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.21. прл-транзистор с диодом Шоттки между коллектором и базой. Рис. 4 22. Символ, обозначающий прп- транзистор Шоттки. основными носителями заряда в обеих областях. Для обозначения дио- да Шоттки на схемах используется специальный символ, показанный на рис. 4.20. Помимо того что диод Шоттки отличается более высоким быстродей- ствием, он отличается еще одним свойством — падение напряжения на нем при прямом токе меньше, чем у рп-диода, и составляет около 0.2— 0.3 В. Благодаря этому диоды Шоттки применяются в комбинации с биполярными транзисторами, чтобы повысить их быстродействие. Если диод Шоттки подключить между базой и коллектором транзисто- ра той же полярности в направлении от базы к коллектору, как пока- Рис. 4.23. Маломощный вентиль ТТЛ-Шоттки, реализующий операцию И-НЕ,
4.6 ЭЛЕМЕНТЫ С ЭМИТТЕРНЫМИ СВЯЗЯМИ 121 зано на рис. 4.21, то напряжение на /m-переходе база-коллектор не сможет достигнуть пороговой величины порядка 0.7 В, необходимой для прямого смещения этого перехода. Как следствие, транзистор не перейдет в состояние глубокого насыщения, а это в свою очередь при- ведет к тому, что скорость переключения транзистора из открытого состояния в закрытое повысится, так как уменьшится степень накоп- ления неосновных носителей заряда в базе транзистора. Такой ком- бинированный полупроводниковый прибор носит название транзи- стора Шоттки*, символ, обозначающий его на схемах, показан на рис. 4.22. Схемы ТТЛ с диодами Шоттки (ТТЛДШ) существуют как в стан- дартном, так и в маломощном варианте. Их быстродействие в 3—4 раза выше, чем у соответствующих схем без диодов Шоттки. Нетрудно за- метить, таким образом, что скорость переключения маломощных ТТЛДШ приблизительно такая же, как у стандартных ТТЛ без дио- дов Шоттки. В действительности изготовители маломощных схем ТТЛДШ в какой-то степени отклоняются от традиционных для ТТЛ конфигура- ций. Например, вентиль, изображенный на рис. 4.23, скорее может быть отнесен к диодно-транзисторной логике, поскольку комбини- рование входных сигналов осуществляется здесь за счет диодов. Тем не менее по уровням напряжения и тока, а также по направлению то- ков этот вентиль эквивалентен схемам, использующим на входе тран- зистор. 4.6. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ С ЭМИТТЕРНЫМИ СВЯЗЯМИ (ЭСЛ) \ Как уже отмечалось выше, в логических схемах, построенных на биполярных транзисторах, быстродействие растет, если удается из- бежать насыщения. Напомним, что насыщением называется состоя- ние транзистора, в котором оба перехода смещены в прямом направ- лении. Когда транзистор находится в насыщенном состоянии, неос- новные носители заряда мигрируют в зону базы через оба перехода, в результате чего возникает избыточное количество неосновных но- сителей заряда, накапливающихся в зоне базы, которые должны рассеяться прежде, чем транзистор сможет перейти в закрытое состоя- ние. В семействе логических элементов, известных под названием логики с эмиттерными связями, состояние насыщения избегается путем строгого поддержания коллекторного тока в нужных пределах. Управление коллекторным током' Уровень коллекторного тока у транзистора в вентиле ЭСЛ управ- ляется резистором, подключенным к эмиттеру, как показано на рис. 4.24. Обычно в отсутствие этого резистора (т. е. когда эмиттер
122 ГЛ 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.24. Схема транзистора с эмпттерным резистором для ограничения коллекторного тока. заземлен) очень трудно избежать насыщения открытого транзистора. Это объясняется тем, что разница между напряжением на переходе база-эмиттер, открывающим транзистор, и напряжением, соответству- ющим насыщенному состоянию, составляет всего 0.2—0.3 В. Как след- ствие, когда на базу транзистора подается напряжение, переводящее его в открытое состояние, любое отклонение в уровне сигнала или ва- риации в параметрах транзистора могут вызывать переход транзистора в насыщенное состояние. Однако в присутствии резистора, последова- тельно подключенного в эмиттерную цепь, ток, проходящий через эмиттер, может быть ограничен до значений, не вызывающих насы- щения транзистора. Пусть, например, на базу транзистора, изображенного на рис. 4.24, подано положительное напряжение VB относительно «земли». Па- дение напряжения на сопротивлении RE за счет эмиттерного тока приведет к появлению на эмиттере положительного потенциала VЕ. Следовательно, напряжение на переходе база-эмиттер VВЕ будет меньше приложенного к базе напряжения VB на величину VE. Более того, по мере того как VB возрастает, ток, проходящий через эмиттер, также возрастает, что вызывает рост напряжения на эмиттере. Воз- растающее напряжение на эмиттере в какой-то степени компенсирует увеличение напряжения на базе. Таким образом, разность потенциа- лов на переходе база-эмиттер растет значительно медленнее напряже- ния на базе по отношению к «земле». Другими словами, благодаря ре- зистору в цепи эмиттера возникает отрицательная обратная связь, уменьшающая чувствительность транзистора к изменениям в уровне подаваемого на базу напряжения. Эта отрицательная обратная связь делает также ток в цепи коллектора менее чувствительным к вариа- циям в параметрах транзистора. Чтобы избежать насыщения транзистора, изображенного на рис. 4.24, ток эмиттера нужно поддерживать меньше значения, при котором разность потенциалов между коллектором и эмиттером VCE
4.6. ЭЛЕМЕНТЫ С ЭМИТТЕРНЫМИ СВЯЗЯМИ 123 Е- Значит, становится меньше разности потенциалов между базой и эмиттером Vbe (в противном случае переход коллектор-база будет смещен в пря- мом направлении). Величина VCE> очевидно, равна питающему на- пряжению Vcc минус падение напряжения на сопротивлениях Rc и Re. Если предположить, что ток коллектора приблизительно равен току эмиттера, т. е. 1С~1 Е, то разность потенциалов между коллек* тором и эмиттером определяется соотношением Vс Е= V СС 1 eRc I eR E=VcC Е (Rc+R е)- чтобы избежать насыщения, должно быть выполнено Vв e<Vс E = VСс I e(Rc~VR е)> или Мах ^СГ-^Е воспользоваться этим предельным значением тока эмиттера Можно IЕ, чтобы определить предельную величину напряжения на базе V Bi позволяющую избежать насыщения. Заметим, что напряжение базы равно падению напряжения на RE плюс разность потенциалов между базой и эмиттером VBE: V B = I eR е4~ V в Е’ Таким образом, насыщение не достигается, если Мяу v (Vcc — Vbe\ р । I/ _ Re^cc । RcVre МаХ Vb~'\~Rc + Re J Re + VBE-R^T^E^R^Ri ‘ Второй член в последнем выражении обычно мал по сравнению с пер- вым членом, поскольку Rc, как правило, выбирается значительно меньшим, чем R Е, и поскольку Vbe существенно меньше, чем Vcc, в ЭСЛ-элементах. Таким образом, МаХ^~/?с + 7?£- В силу того что Rc значительно меньше R Е, последнее выражение свидетельствует о том, что напряжение на базе может быть сделано близким (но не равным) к питающему напряжению Vcc, и насыщение все-же не будет достигнуто. То есть существует определенный «за- зор» между Vcc и максимальным, еще не приводящим к насыще- нию значением Vв. Дифференциальная схема Как мы только что убедились, включение резистора в эмиттерную цепь транзистора позволяет избежать насыщения, но в результате диапазон изменений напряжения на базе должен быть довольно боль- шим, если мы хотим обеспечить желаемое изменение тока эмиттера. Однако слишком большое различие между уровнями входного напря*
124 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.25. Комбинатор с двумя входами для ЭСЛ-вентиля. жения, соответствующими двум логическим значениям, было бы не- приемлемым. Поэтому в ЭСЛ-вентиле, показанном на рис. 4.25, вход- ные сигналы комбинируются при помощи дифференциальной схемы, или схемы с переключением тока. Такая схема требует относительно небольшой разницы между уров- нями входного напряжения, соответствующими двум логическим зна- чениям. Схема содержит несколько транзисторов со связанными эмит- терами и общим эмиттерным резистором. Базы транзисторов, располо- женных в левой части схемы, соединены со входными линиями. Кол- лекторы этих входных транзисторов подсоединены к общему коллек- торному резистору. На базу транзистора, расположенного на схеме справа, подано стабильное опорное напряжение VBB, а в его коллек- торную цепь включен отдельный резистор. Заметим, что верхние концы коллекторных резисторов заземлены, а отрицательное напряжение пи- тания Vее приложено к нижнему концу эмиттерного резистора. Напряжение VBB на базе транзистора Т39 служит пороговой ве- личиной для входных напряжений. Благодаря транзистору Т3 на- пряжение в точке соединения всех эмиттеров приводится к величине, не меньшей VBB—VВЕ- Поэтому, если входное напряжение на одном из левых транзисторов меньше VBB, то этот транзистор будет закрыт, поскольку его переход база-эмиттер не будет иметь достаточно боль- шого прямого смещения. С другой стороны, если на базу одного из левых транзисторов по- дать напряжение, большее VBBt то напряжение на эмиттере будет больше, чем V вв—VBe- В этой ситуации транзистор Т3 будет зак- рыт, поскольку его переход база-эмиттер будет недостаточно смещен
4.6 ЭЛЕМЕНТЫ С ЭМИТТЕРНЫМИ СВЯЗЯМИ 125 вперед. Таким образом, ток проходит только через транзистор (или транзисторы) левой либо правой части схемы в зависимости от напря- жений на входах вентиля. В действительности уровни напряжения на входах поддерживаются достаточно близкими к значению VBB, так что потенциал на эмиттере остается относительно постоянным. Поэтому ток, протекающий через эмиттерный резистор и представляющий собой ток, проходящий через открытые транзисторы, также относительно постоянный. Величина опорного напряжения VBB выбирается таким образом, чтобы ток / не приводил к насыщению проводящего транзистора. На коллекторном резисторе в той части схемы, через которую проходит ток 7, устанавливается падение напряжения. Вследствие этого напряжение на коллекторе проводящей части принимает отри- цательное значение —VCL, и напряжение на коллекторе непроводя- щей части становится равным нулю. Если напряжение на какой-то одной из входных линий выше значения VBB (т. е. менее отрицатель- ное), то транзистор в левой части (левом плече) схемы будет открыт, благодаря чему напряжение коллектора левой части примет отрица- тельное значение —VCL, а напряжение коллектора в правой части будет равно нулю. С другой стороны, если напряжение на обоих входах меньше Vвв, тогда оба транзистора левой части будут закрыты и, следовательно, напряжение на коллекторе левой части будет равно нулю, а на коллек- торе правой части —VCl- Таким образом, схема комбинирует вход- ные сигналы. Она также выполняет функции восстановителя, пос- кольку уровни напряжения на коллекторах малочувствительны к ко- лебаниям в уровне входного сигнала, если только эти колебания до- статочно малы. Буферная схема ЭСЛ-вентиля Кроме схемы, рассмотренной выше, ЭСЛ-вентиль включает бу- ферную часть, такую, как на рис. 4.26. База буферного транзистора соединяется с коллекторными выводами любой из частей комбинирую- щей схемы. Выходом всего вентиля является эмиттер буферного тран- зистора. Поскольку в эмиттерную часть буферного транзистора вклю- чен резистор, ведущий к линии питающего отрицательного напряже- ния, переход база-эмиттер этого транзистора смещен в прямом направ- лении. Поэтому буферный транзистор всегда открыт. Однако благодаря присутствию эмиттерного резистора насыщения он не достигает. На- пряжение на эмиттере буферного транзистора ниже (т. е. более отри- цательное) напряжения базы на относительно постоянную величину VBE- Когда напряжение базы меняется, напряжение эмиттера меняется вместе с ним. В этом смысле напряжение на эмиттере повторяет пове- дение напряжения, которое подается на базу. Поэтому подобные схе- мы называют обычно эмиттерным повторителем.
126 ГЛ 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ От коллектора Комбинатора i выход И££ (отрицательное] Рис. 4.26. Выходной буфер для ЭСЛ-всн- тиля. В ЭСЛ-вентиле буферная часть выполняет две функции. Во-пер- вых, она устраняет зависимость напряжения на коллекторе комбини- рующей части от тока нагрузки на выходе вентиля. Во-вторых, она служит для того, чтобы сдвинуть величины выходного напряжения на —Vbe от соответствующих значений, 0 и —VCl напряжения па кол- лекторе комбинирующей части схемы. Таким образом, низкий уро- вень напряжения на выходе вентиля равен —G+l+Vbe)> что соот- ветствует логическому 0, а высокий уровень равен —Уве, что соот- ветствует логической 1. Этот сдвиг необходим, потому что в против- ном случае нулевой выходной потенциал вентиля, поданный на вход другого ЭСЛ-вентиля, приведет его входной транзистор в насыщенное состояние. Так как уровни напряжения на выходе ЭСЛ-вентиля равны соот- ветственно —VВЕДля логической 1 и —(Усь+ Уве) Для логического О, комбинирующая схема вентиля должна быть приспособлена для тех же уровней напряжений на входах. Это можно обеспечить, положив уровень опорного напряжения УПв равным среднему значению между двумя уровнями входного напряжения. Таким образом, опорное на- пряжение Увв должно быть близким к величине —(Усь/2+Уве)- Полная структура ЭСЛ-вентиля На рис. 4.27 показана структура законченного вентиля, который промышленно производится на основе ЭСЛ-технологии. Номинальное значение питающего напряжения У ее равно —5.2 В. Вентиль имеет две буферные схемы, каждая из которых подсоединена к коллектору одной из частей комбинирующей схемы. Таким образом, у этого вен- тиля две взаимно дополнительные выходные линии. Резисторы в ком- бинирующей схеме подобраны так, что —Усь, т. е. низкий уровень напряжения на коллекторе каждого плеча комбинирующей схемы, равен —0.85 В. Значение V be Для открытых транзисторов примерно равно 0.75 В. Таким образом, низкое выходное напряжение для ло- гического 0 равно —(0.85+0.75)=—1.6 В, а высокое, для логической 1, равно —0.75 В.
4.6 ЭЛЕМЕНТЫ С ЭМИТТЕРНЫМИ СВЯЗЯМИ 127 Рис. 4.27. ЭСЛ-вентиль с двумя входами, реализующий операции ИЛИ и ИЛИ-НЕ. Опорное напряжение поддерживается на уровне —1.175 В, т. е. в середине между двумя логическими уровнями. Vвв обеспечивается схемой, состоящей из эмиттерного повторителя, транзистора, на вход которого напряжение подается с делителя напряжения. В последний включены два диода, компенсирующих влияние изменения температу- ры. По мере изменения температуры падение напряжения на этих двух диодах также изменяется и компенсирует аналогичное изменение раз- ности потенциалов VBe на транзисторе. Действие ЭСЛ-вентиля, изображенного на рис. 4.27, описано в табл. 4.4. Таблица 4.4(a) показывает, какой эффект производит та или иная комбинация входных напряжений на потенциал базы и базы В2 двух выходных транзисторов, а также на потенциалы эмит- теров Ei и Е2 этих транзисторов. Напряжения легко перевести в соот- ветствующие логические значения, что и сделано в табл. 4.4(6), кото- рая для каждой пары входных логических значений задает пару вы- ходных значений. Очевидно, что на выходе Ег вентиля мы получаем результат логической операции ИЛИ-НЕ, а на выходе Е2— результат операции ИЛИ.
128 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Таблица 4.4 Поведение ЭСЛ-вентиля, приведенного на рис. 4.27 (а) Уровни потенциалов, (б) Логические значения. X У В2 Е. Е, -1.6 -16 0 -085 -0.75 -16 -16 -0.75 -085 0 -16 -0.75 -0.75 -16 -085 . 0 -1.6 -0 75 -0.75 -0.75 -0.85 0 -16 -0 75 X У Е, Е2 0 0 1 0 0 1 0 X 1 0 0 1 1 1 0 1 (*) ЭСЛ-вентили такой структуры можно легко объединять в схемы монтажной логики, поскольку каждый выход вентиля соединен с ли- нией отрицательного питающего напряжения через резистор. Пред- положим, что мы соединили выходные линии двух или более ЭСЛ- вентилей. Тогда уровень потенциала на общем выходе может быть под- нят до логической 1 любым выходным транзистором, участвующим в этой монтажной схеме. В противном случае благодаря эмиттерным ре- зисторам напряжение на общем выходе будет низким (логический 0). Очевидно поэтому, что соединение выходов нескольких вентилей реа- лизует логическую операцию ИЛИ. Для удобства реализации мон- тажной логики у некоторых ЭСЛ-вентилей резисторы подсоединяются ко входам вентилей, а не к выходам. Таким образом, можно соединять выходные линии многих вентилей, избегая при этом отрицательных последствий, связанных с большим количеством параллельных вы- ходных резисторов. Коэффициент разветвления по выходу у рассматриваемых ЭСЛ- вентилей очень высок благодаря очень большому входному импедансу. Кроме того, как уже отмечалось выше, эти ЭСЛ-вентили отличаются чрезвычайно высоким быстродействием, около 2 нс. Одна из проблем ЭСЛ-технологии связана с необходимостью соблюдать строгие требо- вания при размещении схем на кристалле и расположении выводов. В противном случае из-за высоких скоростей переключения паразит- ные емкостные и индуктивные связи приведут к недопустимому уров-
4.7. ИНТЕГРАЛЬНАЯ ИНЖЕКЦИОННАЯ ЛОГИКА 129 ню межсигнальных помех. Уровни напряжения, используемые в ЭСЛ, заметно отличаются от соответствующих уровней в ТТЛ, поэтому эти два логических семейства непосредственно не совместимы. 4.7. ИНТЕГРАЛЬНАЯ ИНЖЕКЦИОННАЯ ЛОГИКА (И2Л) Количество вентилей, которые можно упаковать в одной инте- гральной схеме,— один из важнейших факторов при реализации ми- кропроцессоров и связанных с ним компонентов. Для того чтобы весь микропроцессор был выполнен на одном кристалле, плотность венти- лей должна быть достаточно высокой. Вентили одного из биполярных семейств, известного под названием интегральной инжекционной логи- ки (И2Л), обладают настолько простой структурой, что становится возможной высокая плотность логических элементов. Вообще говоря, И2Л-вентили строятся на основе двухтранзистор- ной схемы, показанной на рис. 4.28, которая работает как инвертор. Здесь рпр-транзистор 7\ с резистором R действует как источник тока, подаваемого на базу прп-транзистора Т2, База транзистора 7\ за- землена, и его переход база-эмиттер смещен в прямом направлении. Поэтому потенциал эмиттера Л остается сравнительно постоянным и небольшим, порядка 0.7 В. В результате падение напряжения на ре- зисторе R также почти постоянно и равно примерно Vs—0.7 В. Таким образом, ток, проходящий через резистор, равный эмиттерному току 7\, имеет постоянную величину, равную (Vs—0.7)//?. Этот ток прак- тически равен коллекторному току 7\, поскольку их разность сос- тавляет обычно слабый ток базы. Коллекторный ток Т\ затем идет на базу Т2 при условии, что вход- ная цепь не потребляет тока (вход разомкнут). Говорят, что этот ток «инжектируется» в базу Т2; отсюда и название логического семейства. В этом режиме переход база-эмиттер Т2 смещен в прямом направлении в достаточной степени, чтобы транзистор Т2 был открыт. С другой стороны, если вход подключен к земле, ток, проходящий через 7\, пойдет во входную цепь, в результате Т2 будет закрыт. Таким обра- зом, когда вход вентиля «разомкнут», его выход оказывается «зазем- ленным»; если же вход «заземлен», то выход оказывается «разомкну- тым». Интерпретируя «разомкнутое» и «заземленное» состояния как два логических значения, мы видим, что вентиль, изображенный на рис. 4.28, действует как инвертор. В изготовлении И2Л-инвертор еще проще, чем на схеме. Поскольку коллектор Т\ и база Т2 соединены и состоят из полупроводника р-типа, они реализуются в виде единой области на кристалле. Аналогичное объединение образуют также база 7\ и эмиттер Т2. По этой причине И2Л называют также совмещенной транзисторной логикой (СТЛ). Вентили с несколькими входами могут быть построены на основе Х) Такие схемы называют также схемами с инжекторным питанием,— Прим, перев^ 5 № 592
130 . гл. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.: >8. И2Л-инвертор; базового инвертора методами монтажной! логики. Найример, вентиль с двумя входами получается из двух инверторов с соединенными вы- ходами, как на рис. 4.29. Если один из входов разомкнут, соответст- вующий выходной /грп-транзистор будет открыт, при этом общий выход вентиля окажется заземленным. Сопоставляя разомкнутое состояние с логической 1, а заземленное — с логическим 0, мы видим, чур вентиль в целом выполняет логическую операцию ИЛИ-НЕ. ’ Заметим, что вентиль с двумя входамй содержит лишь один эмит-; терний резистор, общий для обоих транзисторов в цепи источника тока. Как правило, вся интегральная схема содержит лишь один резистор, к которому подсоединяются все источники тока в кристалле. Поэтому полный ток имеет фиксированное значение. Этот ток распре- деляется на много отдельных источников тока, точный характер рас- пределения зависит от индивидуальных характеристик рпр-транзисто- рбв. В связи с этим при изготовлении интегральной схемы особое внй-' мание уделяется тому, чтобы все /тр-транзисторы обладали идентич- ными параметрами и чтобы ток распределялся, таким образом, как можно более равномерно. Резистор R не встроен в кристалл, а вы- полнен отдельно. Благодаря этому его сопротивление может быть подобрано, чтобы обеспечить нужный уровень инжекторного тока при заданном питающем напряжении Vs. Выбор величины сопротивления R определяется компромиссом между требованиями быстродействия и минимизации рассеиваемой мощности. Чем больше величина инжекторного тока, тем большей будет скорость переключения, поскольку именно инжекторный ток заряжаем емкость, связанную с базой транзистора данного вентиля й коллектором транзистора, управляющего линией входа. С другой стороны, чем меньше инжекторный ток, тем меньшая мощность рассей* i вается вентилем и тем больше вентилей можно будет подклюуитй^к выходу данного вентиля, потому что инжекторные токи управляемых вентилей должны проходить через выходной транзистор управляющего
4.7. ИНТЕГРАЛЬНАЯ ИНЖЕКЦИОННАЯ ЛОГИКА Рис. 4.29. И2Л-вентиль с двумя вхо- дами, реализующий операцию ИЛИ- НЕ. вентиля (а последний может пропускать только ограниченный ток). На практике сначала задаются какой-то величиной питающего напря- жения, например Vs=5 В, а затем подбирают сопротивление 7?, чтобы достичь желаемого оптимума между конфликтными требованиями быстродействия и минимизации рассеиваемой мощности. Монтажная логика играет важную роль при реализации И2Л- вентилей. Объединение выходных линий двух или более вентилей позволяет выполнять логическую операцию И над сигналами, появ- ляющимися на выходах индивидуальных вентилей. Разумеется, при этом мы теряем информацию об этих индивидуальных сигналах, сохраняется лишь результат. Чтобы расширить возможности построения монтажных схем, выходные транзисторы вентилей часто делаются с двумя или более коллекторами. Все коллекторы данного транзистора управляются напряжением на переходе база-эмиттер, но они изолированы друг от друга и поэтому могут участвовать в разных монтажных вентилях. На рис. 4.30 .показан И2Л-инвертер с двумя коллекторами, каждый из, которых соединен с коллектором другого инвертора так, что реали- зуется монтажное И. Таким образом, логическое значение на выходе Г описывается булевским выражением (А+В)=АВ, а на выходе 2 — вы-, ражением (В+С)=ВС. / Переключающиеся транзисторы И2Л-вентилей в проводящем состоя- нии достигают насыщения. Это, разумеется, ограничивает быстро-; действие, как и во всех других биполярных логических семействах. 5*
132 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис. 4.30. Пример И2Л-вен- тиля с двухколлекторным транзистором и с монтажны- ми связями с другими И2Л- вентилями. Чтобы повысить быстродействие, были разработаны схемы с использо- ванием диодов Шоттки; И2Л-Шоттки обладают примерно вдвое боль- шим быстродействиехМ по сравнению с обычными инжекционными схемами. 4.8. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ НА ПОЛЕВЫХ ТРАНЗИСТОРАХ Существует несколько семейств элементов на полевых транзисторах. Два широко известных семейства построены на основе и-МОП-техно- логии и р-МОП-технологии и используют соответственно и-канальные и р-канальные транзисторы. Третье семейство, построенное на основе КМОП-технологии, использует в одном вентиле как n-канальные, так и р-канальные транзисторы. Семейство КМОП-вентилей мы рассмотрим в следующем разделе. Логические элементы на n-канальных и р-канальных МОП-тран- зиеторах обычно выполнены в виде схем с непосредственной связью. Это означает, что для реализации различных логических функций > используется последовательное-параллельное соединение транзисто- ров, действующих как переключатели. Например, вентиль ИЛИ-НЕ
4.8. ЭЛЕМЕНТЫ НА ПОЛЕВЫХ ТРАНЗИСТОРАХ 133 с двумя входами можно построить путем параллельного соединения двух n-канальных нормально закрытых (работающих в режиме обога- щения) МОП-транзисторов. Этот вентиль изображен на рис. 4.31. Если к одному из транзисторов приложено положительное напря- жение, он переходит в открытое состояние и образует тем самым путь низкого сопротивления между выходной линией и землей. В результа- те на выходе устанавливается низкий потенциал. С другой стороны, если к обоим транзисторам приложен потенциал земли, они будут закрыты. В этой ситуации через линию резистора /? на выходе устано- вится потенциал, приблизительно равный VDD, так как закрытые тран- зисторы имеют высокий импеданс. В рамках положительной логики вентиль на рис. 4.31 реализует логическую операцию ИЛИ-НЕ, потому что низкий уровень на выходе наблюдается тогда и только тогда, когда по крайней мере на один из входов подан высокий потен- циал. Если n-канальные нормально закрытые МОП-транзисторы соеди- нить последовательно, как показано на рис. 4.32, то получится Вен- тиль И-НЕ. В этом случае, лишь когда оба входа имеют высокий потенциал, последовательно соединенные транзисторы образуют путь со сравнительно низким сопротивлением между выходом и землей. Если хотя бы один вход имеет низкий потенциал, на выходе будет приблизительно Vdd- Поскольку при последовательном соединении сопротивления складываются, количество последовательно соединен- ных транзисторов ограничено. Более сложные конфигурации последовательно-параллельно соеди- ненных МОП-транзисторов позволяют вентилю реализовать булевые выражения, причем операция отрицания может применяться лишь ко ^DD РЙ&М.31. Вентиль ИЛИ-НЕ с двумя вхо- построенный на лг-канальных нор- мально закрытых МОП-транзисторахе Рис. 4.32. Вентиль И-НЕ с дву- мя входами, построенный на>п-' канальных нормально закры^ы^, МОП-транзисторах, • - - ' ’ । ! S
134 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ Рис, 4.33. /1-МОП-вентиль для функции / (Л, В, С, D)=(A-]-B)C-{-D, всему выражению в целом и иногда к отдельным переменным. Напри- мер, выражение /(Д,В,С,£>) = (A + B)C + D может быть реализовано n-МОП-вентилем, изображенным на рис. 4.33. Заметим, что операция ИЛИ реализуется путем параллельного соеди- нения, а операция И — путем последовательного соединения и что на выходе результат соответствующей операции инвертируется. На практике применение резисторов в интегральной схеме привно- сит некоторые неудобства в связи с тем, что они слишком велики по сравнению с другими компонентами. Поэтому нагрузочный резистор в вентилях на МОП-трддзисторах обычно заменяют еще одним полевым транзистором, так что।он действует как нелинейный резистор. Очень часто для этой цели применяется полевой транзистор, работающий в режиме обеднения. В этом случае затвор транзистора соединяется с истоком, а контакт с подложкой отсутствует, как это сделано в инверто- ре, изображенном на рис. 4.34. Когда на входе инвертора низкий уровень, нижний транзистор закрыт. При этом лишь! небольшой ток проходит через линию выхода и нагрузочный транзистор. Последний проводит ток, так кай он работает в режиме обеднения. Таким образом, падение напряжения нд нагрузоч- ном транзисторе невелико и уровень на выходе будет высоким. Наобо- рот, когда на входе высокий потенциал, нижний транзистор проводит; в результате на затворе и истоке нагрузочного транзистора, а также на выходе устанавливается низкий потенциал (приблизительно равный' потенциалу земли). При этом потенциал затвбра по отношению к об* !
4.8. ЭЛЕМЕНТЫ НА ПОЛЕВЫХ ТРАНЗИСТОРАХ 135 ласти канала, прилежащей к стоку, становится отрицательным. В ре- зультате сопротивление нагрузочного транзистора р(езко возрастает. Таким образом, этот транзистор ведет себя как нелинейный резистор, что предпочтительнее по сравнению с линейным резистором. Следует отметить, что в n-канальных МОП-схемах напряжение Vdd должно быть положительным. Выбрав напряжение питания равным +5 В и обеспечив нужное значение порогового напряжения Vt на затворах МОП-транзисторов, изготовители могут производить n-МОП-схемы, совместимые с ТТЛ. Устройство р-МОП-вентилей в основном аналогично п-МОП-схе- мам. Однако р-канальные МОП-транзисторы работают при отрицатель- ном напряжении на затворе и стоке по отношению к истоку. Поэтому р-МОП-вентили, подобные изображенному на рис. 4.35 инвертору, имеют отрицательное питающее напряжение, и уровни потенциала на выходе у них отрицательные. МОП-транзисторы отличаются очень высоким сопротивлением для тока затвора, вследствие чего в статическом состоянии МОП- вентили практически не потребляют тока от управляющих ими схем. Это' означает, что они имеют большой коэффициент разветвления по выходу. Наряду с этим они позволяют достичь сравнительно высокой плотности упаковки логических элементов в интегральной схеме. С дру- гой стороны, емкости, образующиеся между затвором МОП-транзисто- ра, истоком, стоком и подложкой, довольно значительны. Поэтому вентили на МОП-транзисторах отличаются меньшим быстродействием по сравнению с биполярными семействами—эти емкости должны успеть перезарядиться, прежде чем произойдет переключение. Кроме того, ток, перезаряжающий емкости, должен поступать от управ- ляющего вентиля, что приводит к значительному увеличению рас- сеиваемой мощности при высокой частоте переключения. выход Рис. 4.34. л-МОП-инвертор с обеднен- ным полевым транзистором в качестве нагрузки. Рис. 4.35. р-МОП-инвертор,
136 ГЛ. 4. ЦИФРОВОЕ ЭЛЕКТРОННЫЕ СХЕМЫ 4.9. ЛОГИЧЕСКИЕ ЭЛЕМЕНТЫ НА КМОП-СТРУКТУРАХ Комплементарная логика — это широко применяющееся семейство со стандартными техническими характеристиками, которые соблюда- ются всеми фирмами-изготовителями. КМОП — это сокращение от слов комплементарный, металл, окисел, полупроводник, отражающих тот факт, что в одной и той же схеме присутствуют как п-канальные, так и /7-канальные МОП-транзисторы. Все транзисторы в этих схемах нормально закрытые. КМОП-вентиль состоит из двух частей, одна из которых понижает потенциал на выходе при определенных условиях на входе, а другая, наоборот, повышает уровень выходного сигнала при других сигналах на входе. Обе части выполнены в виде схем с непосредственной связью. На рис. 4.36 показан КМОП-инвертор. «Понижающая» часть ин- вертора представлена n-канальным нормально закрытым МОП-тран- зистором, сток которого соединен с выходом, а исток — с землей. «Повышающая» часть представлена /7-канальным нормально закрытым МОП-транзистором, сток которого соединен с выходом, а исток — с линией положительного питающего напряжения Vdd- Вход инверто- ра соединен с затворами обоих транзисторов. n-канальный транзистор открывается, когда напряжение на входе превышает пороговую величину для вентиля V Т- Тем самым на выходе устанавливается низкий потенциал. В противном случае этот транзис- тор имеет большое сопротивление и не влияет на уровень выхода, р-канальный транзистор работает при потенциале истока более высо- ком, чем потенциал стока. Он открывается, когда потенциал затвора в достаточной мере меньше потенциала истока, равного Vdd- Таким образом, всякий раз, когда потенциал на входе ниже Vdd на величину, превышающую пороговое напряжение вентиля Vт, этот транзистор открывается, благодаря чему на выходе устанавливается высокий потенциал. В противном случае /7-канальный транзистор имеет большое сопротивление и не влияет на уровень выходного сигнала. Легко убедиться, что в рамках положительной логики при логической 1 на рходе инвертора нижний транзистор обеспечивает логический 0 , на + ^dd 7П tZTs р-канальный I нормально-закрытый ВХОД---и Вб/xqq I—|D ! ! ы-. п-канальный »—i>s юрнально-эакрышыи Рис. 4.36. КМОП-инвертор.
4.9. ЭЛЕМЕНТЫ НА КМОП-СТРУКТУРАХ 137 Вход А Вход В * П-'КММЬНЫй ^нормально-закрытый u р-канальный $ Нормально-закрытый Рис. 4.37, Двухвходовый КМОП-вентиль ИЛИ-НЕ. Выход выходе, а при логическом 0 на входе верхний транзистор повышает уровень на выходе до логической 1. В качестве еще одного примера КМОП-элементов рассмотрим вентиль ИЛИ-НЕ с двумя входами, изображенный на рис. 4.37. «По- нижающая» часть вентиля состоит из двух n-канальных МОП-транзи- сторов, соединенных параллельно, с заземленными истоками. Затвор каждого из этих транзисторов соединен с одной из двух входных ли- ний. Когда потенциал на какой-либо входной линии превышает поро- говое напряжение Vту соответствующий транзистор открывается и на выходе устанавливается низкий потенциал. В противном случае оба эти транзистора действуют как резисторы с большим сопротивлением и не влияют на уровень выходного сигнала. «Повышающая» часть вентиля представлена двумя /?-канальнь!ми МОП-транзисторами, соединенными последовательно. Затвор каждого из этих транзисторов соединен с одним из входов. Когда на обоих входах потенциал ниже Vdd на величину, превышающую пороговое напряжение вентиля V т, оба транзистора открываются и поднимают уровень потенциала на выходе. В противном случае они действуют как резисторы с высоким сопротивлением и не влияют на уровень выход- ного сигнала. Таблица 4.5 Поведение КМОП-вентиля ИЛИ-НЕ с двумя входами А в Выход нижней части Выход верх- ней части Выход 0 0 1 1 ! 0 1 0 — ’ о 1 0 0 — о 1 1 0 — 0
138 ГЛ; 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ В рамках положительной логики при логической 1 на любом входе нижняя часть схемы понижает уровень на выходе до логического О, а когда на оба входа подан логический 0, верхняя часть схемы обеспе- чивает логическую 1 на выходе. Таким образом, вентиль реализует логическую операцию ИЛИ-HE. В табл. 4.5 описано поведение венти- ля. Как видно из таблицы, нижняя часть схемы формирует на выходе логический 0, а верхняя — логическую 1. КМОП-вентили, реализующие операцию И-НЕ, можно построить, соединив последовательно n-канальные транзисторы «понижающей» части и параллельно соединив р-канальные транзисторы «повышаю- щей» части. Вентиль подобного типа изображен на рис. 4.38. Вообще говоря, можно построить КМОП-вентили, реализующие любое булево выражение при соблюдении ограничений, присущих n-МОП-вентилям. Сначала формируется «понижающая» часть вентиля в виде последовательно-параллельной конфигурации п-канальных транзисторов, в которой ИЛИ реализуется путем параллельного сое- динения, а И — последовательного. Затем в противоположной манере формируется «повышающая» часть схемы путем последовательного соединения р-канальных транзисторов для операции ИЛИ и параллель- ного для операции И. На выходе значение полученного выражения ин- вертируется. Для иллюстрации принципа на рис. 4.39 показан КМОП- вентиль, реализующий логическое выражение f(A, В, С) = АВ + С. «Понижающая» часть схемы состоит из двух последовательно соеди- ненных транзисторов для входов Л и S. Эта последовательная цепь соединяется параллельно с транзистором, обрабатывающим вход С. «Повышающая» часть состоит из параллельно соединенных транзисто- ров для входов А и В, которые включены последовательно с транзис- тором для входа С. КМОП-логика обладает несколько более сложной структурой, чем n-МОП и p-МОП, и поэтому на ее основе нельзя достичь столь же 4 'О '•п Рис. 4.38. КМОП-вентиль И44Е с двумя входами.
•4.9. ЭЛЕМЕНТЫ НА КМОП-СТРУКТУРАХ- ДО Рис. 4.39. КМОП-вентиль для функции f (А > В, С)=АВ-\-С. высокой плотности. Однако эта структура дает одно примечательное преимущество над всеми другими распространенными логическими семействами. В этих схемах нет постоянных проводящих путей между линией питания и землей. Вследствие этого мощность, потребляемая в периоды постоянства входных сигналов, незначительна. Последнее свойство очень важно для тех применений, когда питание поступает от батарей. Существенная мощность потребляется, однако, во время переклю-, чений. Это происходит по двум причинам. Первая связана с наличием емкостей в схеме, возникающих преимущественно между электродами МОП-транзисторов. Эти емкости должны перезаряжаться всякий рад прр, переключении вентиля. Вторая причина заключается в том, что во время изменения входных сигналов и «понижающая», и «повышающая» части схемы в определенной степени открыты. В результате между ли- нией Vdd и землей кратковременно возникает «сквозной ток». Рассеи- ваемая вентилями мощность возрастает с повышением частоты пере- ключений. j Коэффициент разветвления по выходу у КМОП-вентилей очень высок, так же как и для n-МОП и /?-МОП-вентилей, поскольку полевью транзисторы имеют чрезвычайно высокое входное сопротивленцу.. Однако существенные емкости в выходных цепях, присущие КМОП- вентилям, снижают их быстродействие. Делов том, что МОП-транзи- сторы имеют существенное сопротивление в открытом состоянии, и это ограничивает ток, заряжающий или разряжающий емкости^выходных цепей. ..КМОП-вентили могут работать в. широком’ диапазоне питающего напряжения. В частности, Vdd может иметь любое значение в преде-
140 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ лах от 3 до 15 В для стандартных КМОП-элементов, потому что уровень потенциала на выходе колеблется от почти 0 В для логичес- кого 0 до величины, близкой к VDDl для логической 1. Благодаря этому КМОП-логику можно совмещать с ТТЛ, выбрав VDD равным +5 В. В этом случае один КМОП-вентиль может управлять двумя входами стандартных ТТЛ-вентилей. С другой стороны, уровень выхода ТТЛ для логической 1 недостаточно высок, чтобы управлять входом КМОП-вентиля. Это затруднение можно обойти, подключив нагрузоч- ный резистор около 2 кОм между выходом ТТЛ-вентиля и линией питания с напряжением +5 В, в результате чего уровень логической 1 в ТТЛ-вентиле приблизится к +5 В. В этом случае один ТТЛ-вентиль сможет управлять большим количеством входных линий КМОП- вентилей. УПРАЖНЕНИЯ 4.1. Биполярный «рп-транзистор включен в схему, как изображено на рис. У4.1. Транзистор находится в состоянии насыщения, и напряжение на переходе база-эмит- тер составляет 0.7 В. (а) Определить ток базы 1В. (Ь) Определить приближенно коллекторный ток 1С. (с) Найти приближенную величину отношения IJIb (т- е- коэффициент усиле- ния). 4.2. «-канальный нормально закрытый (работающий, в режиме обогащения) МОП-транзистор включен в схему, показанную на рис. У4.?. Пусть при напряжении между затвором и истоком Vqs, равном 3 В, сопротивление между стоком и истоком составляет 800 Ом. Пусть далее при напряжении между затвором и истоком, близком к 0, сопротивление между стоком и истоком приближается к бесконечному. Найти перепад напряжения на выходе при замыкании ключа. •
УПРАЖНЕНИЯ 141 4.3. На рис. У4.3 изображены два диодных вентиля. Предполагая, что действует положительная логика и логические уровни равны О В и 5 В, определить, какую опе- рацию реализует каждый вентиль. Вход А----К— Вход В <—К— (*) Выход Вход А — - {>|.Выход Вход В £4—' > Рис, У4.3. 4.4. Предположим, что комбинирующая часть ТТЛ-вентиля, показанная на рис. У4.4 используется как законченный вентиль. Для положительной логики опре- делить, какую операцию реализует схема. Вход А Вход В + 5 В Выход Рис- У4Л-’ 4.5. Выходы двух ТТЛ-вентилей И-НЕ комбинируются с диодным вентилем, как показано на рис. У4.5. Будет ли результирующая схема работать должным образом? Объясните ваш ответ. Выход Рис. У4.5. 4.6. Два ТТЛ-вентиля с открытым коллектором, реализующие операцию И-НЕ соединены, как показано на рис. У4.6. Определите булеву функцию /(ад, х, у, г), соответствующую линии общего выхода.
142 ГЛ. 4. ЦИФРОВЫЕ ЭЛЕКТРОННЫЕ СХЕМЫ 4.7. Найдите минимальную реализацию следующей функции, используя инвер- тор и тристабильные вентили И: f(w, х, у, z)=wxy-}-wyz. 4.8. Воспользуйтесь сведениями из разд. 4.5, чтобы определить: (а) Число входов маломощных ТТЛ-вентилей, которыми может управлять стандартный ТТЛ-вентиль. (Ь) Число входов стандартных ТТЛ-вентилей, которыми может управлять мало- мощный ТТЛ-вентиль. 4.9. Два ЭСЛ-вентиля, реализующие операцию ИЛИ-НЕ, соединены, как пока- вано на рис. У4.9. Определить булеву функцию f (uy, х, у, г) на линии общего выхода. Рис. У4.9. 4.10. Световой индикатор (лампочка) должен быть подключен к выходу ЭСЛ-вен- тиля, реализующего операцию ИЛИ. Укажите правильное подключение. При какой комбинации значений на входе вентиля лампочка будет гореть? 4.11. Как указывалось в разд. 4.7, И2Л-инверторы часто имеют несколько лекторов у выходного транзистора, что позволяет реализовать различные монтажные Комбинации» В этом случае коллекторы изолированы друг оТ друга, но имеют общее управление. На рис. У4.11 изображена схема из нескольких инверторов, один йз ко- торых имеет два коллектора, используемых для соединения в монтажной логике.’ Определите логическую функцию /(%, у, г), реализуемую этой схемой.
УПРАЖНЕНИЯ ИЗ Рис. У4.11. » 4.12. Схемы двух р-МОП-вентилей на р-канальных нормально закрытых МОП* транзисторах показаны на рис. У4.12. Какую операцию реализует каждая схема в рамках положительной логики? Рис. У4.12. 4.13. Пользуясь схемами с непосредственной связью, постройте п-МОП-вентиль дй& функции /(А, В, С) = АВ + АС+ВС. ' , 4.14. Пользуясь схемами с непосредственной связью, постройте КМОП-вентилЬ для функции ' ’ f\A, В, С) — (А + В)С.
Глава 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Логические вентили, описанные в предыдущей главе, представляют собой элементарные базовые компоненты, из которых строятся логи- ческие системы. Сложные логические системы, и микрокомпьютеры в том числе, вообще говоря, состоят из типовых логических узлов, пред- ставляющих собой схемы из логических вентилей. Цель данной главы— рассмотреть типовые логические узлы, играющие важную роль в микрокомпьютерных системах. К ним относятся триггеры, регистры, счетчики, дешифраторы, селекторы, схемы выполнения арифметичес- ких операций и системы шин. Запоминающие устройства мы рассмот- рим отдельно в следующей главе. 5.1. ТРИГГЕРЫ Многие логические схемы обладают тем свойством, что их выходные значения зависят не только от текущих значений входов, но и от их значений в прошлом. Такие схемы обладают памятью и называются последовательностными. ЭВМ вообще и микрокомпьютеры в частности являют собой классические примеры систем, чье поведение зависит от событий в прошлом. Состоянием последовательностной схемы назы- вается то, что отражает итоговое воздействие прошлых входных зна- чений на поведение схемы в данный момент. Другими словами, состоя- ние последовательностной схемы содержит всю ту информацию о прошлых значениях входов, которая нужна для определения настоя- щих и будущих значений выходов. Для создания последовательностных схем необходимо располагать средствами, позволяющими сохранять информацию о состоянии схемы так, чтобы эта информация участвовала при формировании настоящих и будущих выходных значений. Простейший элемент, используемый для этих целей,— это триггер. Триггер — это последовательностная схема с двумя состояниями, каждое из которых при определенных условиях на входах поддержи- вается постоянным (т. е. стабильным). Каждому из этих состояний ставится в соответствие логическое значение, которое «хранит» триггер. Таким образом, в последовательностной схеме для представления зна- чения каждой переменной, которую нужно хранить для использования в настоящем или будущем, следует использовать отдельный триггер. Совокупное состояние последовательностной схемы, запоминающие свойства которой реализованы на триггерах, представляет собой просто комбинацию состояний этих триггеров.
5.1. ТРИГГЕРЫ 145 Вообще говоря, у триггера должна быть по крайней мере одна выходная линия, представляющая логическое значение, соответствую- щее состоянию триггера. Когда на выходной линии логическая 1, гово- рят, что триггер установлен. В противном случае говорят, что триггер сброшен. Триггер имеет несколько входных линий, сигналы на которых вместе с текущим состоянием триггера определяют следующее состоя- ние триггера. От функций входных линий зависит тип триггера. Триггер типа RS Триггер этого типа имеет два входа, обозначаемых буквами 5 (от английского set — установить) и R (от recet — сбросить) и исполь- зуемых соответственно для установки и сброса триггера. Функциони- рование такого RS-триггера описано в табл. 5.1. Обратите внимание, что триггер оказывается в состоянии логической 1 (установлен), когда логическая 1 подается только на вход 5, и в состоянии логического О (сброшен), когда логическая 1 подается только на вход R. Состояние триггера не меняется, если на оба входа подаются логические 0. По этой причине о входной комбинации 5=0 и /?=0 говорят как о случае отсутствия входных сигналов. И наконец, поведение триггера для комбинации 5 = 1 и = 1 не определено. Простой /?5-триггер можно сконструировать, соединив «крест-на- крест» два вентиля И-НЕ, как показано на рис. 5.1. Вентили могут быть выполнены по любой технологии: ТТЛ, КМОП и т. п. Состояние триггера соответствует значению выходной переменной Q на верхнем вентиле И-НЕ. В дальнейшем мы увидим, что на выходе нижнего вен- тиля И-НЕ будет значение Q, являющееся дополнением Q. Входные линии вентиля обозначены 5 и R, поскольку триггер устанавливается при 5=0 и сбрасывается при 7?=0. Чтобы удостовериться, что наша схема действительно ведет себя в соответствии с определением /?5-триггера, рассмотрим сначала комби- Таблица 5.1 Функционирование /?5-триггера Q обозначает текущее состояние тригге- ра, a Q* — результирующее состояние, по- лучающееся при заданной комбинации входов. $ R Q* 0 0 Q 0 1 0 1 0 1 1 1 Не определено
146 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ нацию входов 5 = 1 и 7? = 1, соответствующую отсутствию входных сигналов. В этом случае перекрестные связи между двумя вентилями И-НЕ приведут к поддержанию одного из двух возможных состояний. г В частности, если на выходе линии Q будет логическая 1, то на обЬих входах нижнего вентиля будут логические 1, приводящие к логическому 0 на выходе Q. Этот логический 0, поданный на один из входов верхнего вентиля, вызовет логическую 1 на его выходе Q, что и было предположено в начале нашего рассуждения. С другой стороны, если на выходе Q логический 0, то он подается на вход нижнего вентиля, в результате чего выход § оказывается рав- ным 1. На обоих входах верхнего вентиля при этом окажутся единицы, что приведет к нулевому значению на выходе Q, а это также соответ- ствует начальному предположению. Таким образом, мы можем заклю- чить, что любое из двух возможных состояний триггера стабильно, когда на входы подается комбинация 5 = 1 и R = l. Теперь рассмотрим две другие входные комбинации, для которых поведение триггера определено. Для каждой из этих комбинаций стабильным оказывается только одно из возможных состояний тригге- ра. В частности, пусть входная комбинация есть 5=0 и /? = 1. Выход- ное значение Q верхнего вентиля при логическом 0 на входе 5 будет равно 1. Теперь логические 1 на обоих входах нижнего вентиля дадут логический 0 на его выходе Q. Этот логический 0, поданный на вход верхнего вентиля, будет поддерживать значение логической 1 на его выходе Q даже после того, как 5 снова примет значение 1. Таким образом, входная комбинация 5=0 и ^ = 1 вызовет установ- ку триггера в соответствии с определением. В силу симметрии сразу видно, что входная комбинация 5 = 1 и 7?=0 приведет к логической 1 на выходе Q и, следовательно, к логическому 0 на выходе Q. Как и раньше, выходы не изменяются после того, как R вернется к 1. Таким образом, комбинация 5 = 1 и /?=0 вызывает сброс триггера, что та]кже соответствует определению. • > I Наконец, заметим, что оставшаяся входная комбинация 5=ФЙ даст логические 1 на выходах обоих вентилей. Это приведёт к непредсказуемым результатам после возврата к состоянию отсутствия
5.1. ТРИГГЕРЫ 147 входных сигналов, поскольку результирующее состояние окажется зависящим от тепловых шумов, разбросов параметров электронных компонентов и т. п. Поэтому комбинация 5=0 и /?=0 считается недо- пустимой. Следует обратить внимание на то обстоятельство, что во всех рассмотренных нами случаях, кроме случая недопустимой входной комбинации, выход Q оказывался инверсией, или дополнением, вы- хода Q. Синхронный триггер Чаще всего триггеры применяются при создании синхронных последовательностных схем. В синхронных схемах хранящаяся в триг- герах информация может измениться только при появлении импульса на специально предусмотренной линии. Многие компоненты микро- компьютерных систем работают в соответствии с этим принципом. Для упрощения создания синхронных последовательностных схем в триг- герах особого типа, называемых синхронизируемыми, тактируемыми или просто синхронными триггерами, предусмотрен специальный синхронизирующий вход, с помощью которого происходит синхрони- зация изменений состояния. Состояние синхронного триггера может измениться только в ответ на приход синхроимпульса (или, как его на- зывают, тактового импульса). Синхронный RS-триггер можно построить из простого RS-триггера, добавив еще два вентиля И-НЕ, как показано на рис. 5.2. Два допол- нительных вентиля И-НЕ используются для блокирования входных сигналов S и R на то время, пока синхроимпульс равен_логическому 0. Пока синхроимпульс равен логическому 0, на входах Sc и Rc будут логические 1. Это соответствует отсутствию входных сигналов, и, сле- довательно, состояние триггера не может измениться. Однако, когда на синхронизирующем входе появляется логическая 1, сигналы S и R инвертируются и подаются непосредственно на входы триггера. Ре- зультирующее состояние триггера при этом будет зависеть от значений S и R в соответствии с табл. 5.1. Когда на синхронизирующий вход подана логическая 1, триггер считается открытым. Если при открытом триггере сигналы S и R Рис. 5.2. СинкронизируемаД ЯЗ-триггер.
148 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис. 5.3. Графическое обозначение синхронизируемого триг- гера. изменяются, то происходит обновление его состояния в соответствии с новыми значениями этих сигналов. Время, которое проходит от момента изменения входных сигналов до соответствующего изменения состояния выходов, определяется задержками распространения сигнала для входящих в триггер венти- лей. Это время, называемое временем срабатывания {установки, пере- ключения) триггера, должно выдерживаться между последним изме- нением входных сигналов и моментом установления логического 0 на синхронизирующем входе, иначе триггер не сможет откликнуться на входные сигналы. При нулевом значении синхроимпульса состояние триггера фиксировано и не реагирует на изменения входных сигналов. Поэтому триггеры описываемого типа часто называют синхронными фиксаторами. На рис. 5.3 показано графическое обозначение такого триггера, часто используемое на логических диаграммах. На входных и выход- ных линиях, так же как и для вентилей, могут быть кружочки, обозна- чающие инверсию сигнала. В частности, кружочек на синхронизирую- щем входе говорит о том, что триггер открыт при нулевом значении синхросигнала, а не при единичном. AIS-триггер Часто при использовании триггеров, например в счетчиках, нужно одновременно и опрашивать состояние триггера, и переключать его в новое состояние. Трудность, с которой мы сталкиваемся в таких ситуа- циях, связана с тем, что новое состояние триггера может оказаться ло- гически зависящим от самого себя. Если воспользоваться в таком слу- чае синхронным фиксатором, то возможно возникновение колебатель- ного процесса, вызывающего непрерывное изменение состояния триг- гера в течение всего времени, когда синхронизирующий сигнал равен логической 1. При этом поведение схемы может стать недетерминиро- ванным. В качестве примера рассмотрим схему на рис. 5.4 с синхронным фиксатором RS-типа. Требуется, чтобы при единичном значении вход- ного сигнала А состояние триггера менялось ровно один раз на каждый синхроимпульс. Однако фактически оказывается, что, пока синхроим- пульс равен логической 1, состояние меняется все время между логи- ческим 0 и 1, и это происходит из-за того, что состояние триггера реагирует на изменения S и R при единичном значении синхросигна- ла, a S и R в свою очередь зависят от состояния триггера через внешние вентили И.
5.1. ТРИГГЕРЫ 149 Рис. 5.4. Схема с RS-триггером, в которой могут возникать колебания значений. Один из возможных путей преодоления возникшей трудности со- стоит во введении некоторой временной задержки на выходе каждого триггера. Триггер при этом будет работать нужным образом, если позаботиться о том, чтобы длительность синхроимпульса не превышала задержки выходных сигналов триггера. Тогда триггер за время синхро- импульса сможет только один раз изменить свое состояние. Однако задержка выходных сигналов приводит к ряду нежелатель- ных последствий. Одна из очевидных неприятностей — снижение скорости переключения, т. е. быстродействия схемы. Кроме того, источник синхроимпульсов должен удовлетворять жестким требова- ниям. С одной стороны, длительность синхроимпульсов не должна превышать задержки выходных сигналов, а с другой — не должна быть меньше времени срабатывания для каждого триггера в схеме. Значительно лучше проблему устранения «логической зависимости» можно решить с помощью MS-триггера. MS-триггер состоит из двух секций, соединенных каскадно, как показано на рис. 5.5, причем каждая секция содержит по синхронному фиксатору. Первая секция, ведущая, или М-секция (М происходит от английского MASTER, т. е. хозяин), принимает информацию со входных линий S и R. Состояние выходов ведущей секции подается на вторую секцию, ведомую, или, S-секцию (S происходит от английского SLAVE, т. е. раб). В секциях раздельные синхронизирующие входы, которые возбужу даются во взаимно исключающие моменты времени, так что в каждый, конкретный момент состояние может меняться только в какой-то одной, секции. Фактически срабатывание MS-триггера происходит за цикл, синхронизации, состоящий из двух шагов. Сначала единичное значение, подается на синхронизирующий вход См ведущего триггера, вызывав, изменение его состояния в соответствии со значениями на входных’ линиях S и R, После окончания синхроимпульса См подается синхрд-.
150 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис. 5.5. AIS-триггер (двухтактный триггер). импульс на вход Cs ведомого триггера. При этом состояние ведущего триггера передается на ведомый, поскольку сигналы установки и сбро- са ведомой секции равны QM и Qyl соответственно. Наконец, син- хронизирующий вход Cs, принимает нулевое значение и фиксирует ! состояние выходов ведомой секции. Именно информация, хранящаяся в ведомой секции, поступает на итоговые выходы MS-триггера Q и Q. Следует обратить внимание, что двухтактная работа MS-триггера гарантирует нам отсутствие повтор- ного изменения состояния выходных сигналов за один цикл синхрони- < зации даже в том случае, когда входные сигналы через внешние цепи зависят от выходных. Для того чтобы обеспечить нужные временные соотношения сигна- лов на синхронизирующих входах, MS-триггер описанного выше типа можно использовать совместно с двухфазным источником синхроим- пульсов. Такой источник, вообще говоря, имеет две выходные линии, называемые фазами, на которых попеременно с некоторой частотой по-, являются импульсы. Важно, что импульсы во времени не перекрываются, т. е. обе фазы одновременно никогда не принимают значения логической 1. Кроме того, между импульсами фаз существует небольшой временной проме- жуток, в течение которого ни на одной из линий нет значения 1. Бла- годаря этому промежутку допускается некоторый разброс в моментах прихода синхроимпульсов (рассогласование синхронизаций), что впол- не может иметь место, когда много триггеров синхронизируются от одного и того же источника синхроимпульсов. При этом, конечно, дли- тельность сигнала каждой фазы должна быть не меньше времени срабатывания каждой секции, т. е. времени, необходимого для уста- новления ее следующего состояния. , Для упрощения работы с MS-триггерами часто в каждый триггер встраивается свой формирователь фаз, который формирует обе фазы по импульсам от одной синхронизирующей линии. Это делается прак- тически всегда для MS-триггеров, выпускаемых при малой степени' •
5.1. ТРИГГЕРЫ 151 интеграции и особенно по технологии ТТЛ. В формирователе фаз временные соотношения между импульсами двух фаз устанавливаются путем сравнения напряжения на одной входной синхронизирующей линии с двумя пороговыми напряжениями Т н и TL, как показано: на рис. 5.6. Оба пороговых напряжения Т н и TL при (Тн > TL) находят- ся в интервале напряжений Уо и соответствующих максимальндму напряжению для логического 0 и минимальному напряжению для логической 1 (в предположении положительной логики). Напряжение на входной синхронизирующей линии нарастает и спадает за отличные от нуля отрезки времени, как показано на рис. 5.6. Формирователь фаз выдает уровень логической 1 на линии фазым, когда напряжение на входной линии превышает Тн, и уровень логической 1 на линии фазы s, когда напряжение на входной линии меньше TL. Таким образом, импульсы на линиях обеих фаз появляются во взаимно исключающие моменты времени с промежутками между импульсами, определяемыми крутизной фронтов входного синхросиг- нала. MS-триггер с одной входной синхролинией и с формирователем фаз показан на рис. 5.7. К формирователю фаз относятся две пороговые схемы. Каждая из них дает логическую 1 на выходе, когда напряже- ние на ее входе превышает соответствующее пороговое значение Т н или Т L. Хотя на рисунке эти схемы показаны в виде отдельных схем; на самом деле они могут быть реализованы в тех вентилях, к которым они подключаются. В частности, необходимость в отдельной пороговой схеме исчезнет, если порог переключения инвертора сделать более низким, чем у вентилей И-НЕ М-секции. Работа MS-триггера, показанного на рис. 5.7, происходит в следую- щей последовательности. При низком значении входного синхросигна- ла ведущий триггер подключается к ведомому, поскольку фаза5 равна логической 1. При этом входы всей схемы S и R заблокированы, поскольку фазам равна логическому 0. Как только напряжение вход- Рис. 5.6. Временная диаграмма формирователя фаз.
152 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ ВЕДУЩИЙ ВЕДОМЫЙ Рис. 5,7, MS-триггер с одной синхронизирующей линией# кого синхросигнала превысит 7\, фазаз за счет инвертора становится нулевой, разобщая ведущую и ведомую секции. Далее напряжение входного синхросигнала, продолжая расти, превышает Т н. Фазам при этом становится равной 1, подключая входные линии S и R к ве- дущему триггеру, который устанавливается в соответствующее входам состояние. Через некоторое время входное синхронизирующее напряжение начинает уменьшаться. Как только оно пройдет через Т н, фазам примет нулевое значение и вызовет отключение входов S и R. Наконец, как только напряжение пройдет TL, фаза5 получит значение логичес- Подклмнение Ведущего i ...... ^Отключение Ведущего Синхр к Входам Т \от входов Отключение ведомого/ ^Подключение ведомого от ведущего / \/г ведущему Ведущий открыт Ведомый^ открыт Ведомый <------ открыт Время рис-, 5,8, Временная диаграмма MS-триггера с одной синхролинией.
6.1. ТРИГГЕРЫ 153 (О Рис. 5.9. Графические обоз- начения Л4 S-триггеров. (а) Выходы изменяются при по- ложительном фронте синхро- импульса. (б) Выходы изме- няются при i отрицательном фронте синхроимпульса. кой 1 и снова соединит секции. Состояние ведущего триггера передано ведомому, и это отразится на сигналах в выходных линиях всей схемы Q и Q. Описанная последовательность показана на рис. 5.8. Графическое обозначение, изображающее MS-триггер на логических диаграммах, часто отличается от символа однотактного синхронного фиксатора треугольничком на входе синхронизирующей линии, как показано на рис. 5.9. Треугольничек говорит о том, что состояние вы- ходов MS-триггера может измениться только по фронту синхроимпуль- сов. Для только что описанного триггера это изменение происходит по отрицательному фронту (т. е. при переходе от логической 1 к логи- ческому 0). Однако существуют и другие виды MS-триггеров, у которых выходные сигналы меняются пр положительному фронту синхросигна- лов (т. е. при переходе от логического 0 к логической 1). Чтобы разли- чать эти две разновидности, у триггеров, выходы которых изменяются по отрицательному фронту, вход синхросигнала обычно помечается инвертирующим кружком. В дальнейшем MS-триггеры мы будем называть также двухтактными триггерами. Триггеры типов JK, D и Т Наряду с /?5-триггерами широкое распространение получили триг- геры, обладающие другими характеристиками. Их можно получить из двухтактного /?5-триггера, добавляя в схему некоторое количество вентилей. На рис. 5.10 показаны те модификации, которые нужно сде- лать для получения триггеров трех распространенных типов: J/C, D и Т, JK-'vpnrv&p представляет собой обобщенную версию /?5-триггера. Вход J соответствует входу S (т. е. по нему триггер устанавливается), а вход К соответствует входу R (т. е. по нему триггер сбрасывается). Разница в поведении триггеров и JK обнаруживается, когда на оба входа подается логическая 1. В то время как поведение /?5-триггера для входной комбинации S=1, /? = 1 не определено, поведение 7/<-триг- гера определено. А именно, если на вход подана комбинация J=], #=1, «//("-триггер по синхроимпульсу изменяет свое состояние на противоположное. Схема двухтактного /^триггера показана на рис. 5.10(a). Она отли- чается от схемы двухтактного /?5-триггера двумя вентилями И на входах S и R. Эти вентили блокируют воздействие одного из входам J
ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ C“"f W Рис. 5.10. Триггеры распространенных типов, получаемых из двухтактного RS-триг- гера. (а) //(-триггер, (б) D-триггер, (в) Т-триггер. или в зависимости от состояния триггера. Блокируется та линия, единичное значение на которой не вызывало бы изменения состояния триггера. В частности, J блокируется в состоянии, когда на выходе Q логическая 1, а К блокируется, когда на выходе Q логический 0. Дей- ствительно, значение J логически умножается на Q, а К — на Q. Следовательно, когда на обоих входах J и К логическая 1, срабаты- вает только тот вход, который вызывает изменение состояний, и по синхроимпульсу триггер действительно изменит состояние. Для триггера типа D соотношение между сигналом на входной ли- нии и следующим состоянием триггера формулируется проще, чем для любого другого типа триггера. По синхроимпульсу D-триггер при- нимает то состояние, которое имеет входная линия D. Как показано на рис. 5.10 (б), D-триггер можно реализовать, соединив S-вход двухтактного 7?5-триггера непосредственно с входной линией D, а вход R — с инверсией (дополнением) D. При таком соеди- нении, если на D логическая 1, то и на S будет логическая 1, и триггер , по синхроимпульсу будет установлен. Если же на D логический 0, % на R будет 1, и триггер по синхроимпульсу будет сброшен. , Соотношение между состоянием Т-триггера и его входом довольно интересно и, как мы увидим в дальнейшем, полезно в некоторых при-
5.1. ТРИГГЕРЫ 159 ложениях, особенно при реализации счетчиков. Если входная линия Т имеет значение 1, то по синхроимпульс^ триггер изменит свое состоя- ние на противоположное. В противном случае его состояние сохранит- ся неизменным. На рис. 5.10(b) представлена одна из возможных реализаций Т- триггера на базе двухтактного 7?5-триггера. Она отличается от реали- зации 7/<-триггера‘на рис. 5.10(a) только фбъединением входов J и К В ОДИН ВХОД Т. ; Функционирование триггеров всех трех описанных типов сведено в табл. 5.2. Таблица 5.2 Функционирование трех типов синхронизируемых триггеров z < Во всех случаях Q обозначает состояние триггера до прихода синхросигнала, a Q* — посл^. (a) JK- триггер. (б) P-dfpurrep. (в) Т-триггер. Триггеры, переключаемые фронтом синхроимпульса Одно из свойств двухтактного D-триггера, показанного на рис. 5.10(6), состоит в том, что как опрос входных сигналов, так и обновление выходных происходит по фронту (скажем, отрицательному) синхроимпульса. Для этого типа триггера состояние ведущей секции реагирует на изменения входного сигнала все время, пока синхроим- пульс имеет значение 1. То значение, которое будет иметь вход D .не- посредственно перед отрицательным фронтом синхроимпульса, опреде- лит окончательное состояние ведущей секции. Именно это состояние будет передано ведомой секции сразу после отрицательного фронта синхроимпульса. Следовательно, входной сигнал должен иметь правильное значение только в течение небольшого отрезка времени (равного времени срабатывания ведущей секции) непосредственно перед отрицательным фронтом синхроимпульса. О триггерах, обладающих таким свойством, говорят как о триггерах, переключаемых фронтом синхроимпульса, 1 Ранее описанные триггеры 7?S, JK и Т (они показаны на рис. 5.7 и 5.10) не обладают этим свойством, поскольку окончательное состоя-
156 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ ние ведущей секции зависит от значения входного сигнала на всем ин- тервале времени, когда синхроимпульс равен логической 1. Для /?S- триггера окончательное состояние ведущей секции зависит от того, какой из входов, S или /?, последним принимал значение 1 за время синхроимпульса. В случае «//^-триггера окончательное состояние ведущей секции зависит от того входа, J или /С, который не заблокирован состоянием ведомой секции. Например, когда триггер в состоянии 1, только вход К может вызвать изменение состояния. Если К примет значение 1 в лю- бой момент, когда на синхровходе логическая 1, то состояние ведущей секции станет равным 0. В течение всего интервала вход J заблокиро- ван состоянием ведомой секции (которое все еще равно 1). Таким образом, состояние ведущей секции, став однажды равным 0, уже не может измениться до следующего синхроимпульса. Это свой- ство /Л'-триггера называют захватом нуля. Аналогично J/C-триггер, находясь в нулевом состоянии, демонстрирует свойство захвата еди- ницы. Т-триггер обладает аналогичными свойствами захвата нуля и единицы, поскольку он реализуется фактически той же схемой, что и /Д'-триггер. Поскольку двухтактные RS-, JK- и Т-триггеры не являются пере- ключаемыми фронтом, о значениях входов нужно заботиться в течение всего интервала, когда на синхровходе 1. В тех случаях, когда строгие требования к входным сигналам слишком обременительны, использу- ются разновидности 7?S-, JK- и Т-триггеров, переключаемых фронтом. Схемы этих разновидностей можно получить из двухтактного D- триггера, подключая дополнительные вентили. Для этого функции входа D определяются через входные сигналы и состояния выходов триггера. Например, J/C-триггер можно получить, используя функцию, Таблица 5.3 Логическая функция для превращения D-триггера, переключаемого по фронту, в /ЛГ-триггер, также переключаемый по фронту J к Q D 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1 1 1 0 1 л 1 1 X 0
5.1. ТРИГГЕРЫ 157 Рис. 5.11. Переключаемый фронтом «//(-триггер. заданную в табл. 5.3. В этой таблице значение D равно требуемому следующему состоянию триггера для каждой комбинации J, К и теку- щего состояния Q. Описываемую таблицей функцию можно записать в виде D=JQ+/CQ. Схема Ж-триггера, переключаемого фронтом, полученная по этой функции, показана на рис. 5.11. Поскольку значе- ния J и К непосредственно перед отрицательным фронтом синхроим- пульса определяют значение D и поскольку D-триггер переключается фронтом, то и весь «//(-триггер окажется переключаемым фронтом. Трехступенчатые триггеры В системах с большим количеством триггеров может возникать проблема, связанная с рассогласованием синхронизации. Чтобы пояс- нить суть дела, рассмотрим систему, состоящую из триггеров, подсое- диненных к одной синхронизирующей линии. Если такая система долж- на работать как синхронная схема, следующее состояние каждого триггера, возбуждаемое по синхроимпульсу, должно логически опреде- ляться состоянием триггеров на данный момент. Однако такого желае- мого поведения мы можем не получить, если по тем или иным причинам не все триггеры в системе сработают по синхроимпульсу одновременно. В этом случае изменение состояния триггера, сработавшего раньше, может оказать влияние на следующее состояние триггера, который сработает позже. Для того чтобы пояснить возникающую проблему конкретнее, рассмотрим простой пример. На рис. 5.12(a) показаны два двухтакт- ных D-триггера А и В, переключаемых отрицательным фронтом и связанных в кольцо. По замыслу триггеры должны обмениваться со- стояниями по каждому синхроимпульсу. Предположим, однако, что триггер В получает отрицательный фронт синхроимпульса несколько позднее триггера А. Тогда возможна последовательность срабатыва- ний, показанная на временной диаграмме рис. 5.12(6), которая приведет к нежелательным результатам. Легко видеть, что, пока на обоих триггерах синхровход имеет значение 1, выход триггера В определяет состояние ведущей секции триггера А. Как только задний фронт синхроимпульса для триггера А
I» ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ 4 Состояние ведущего В передается ведомому В (6 итоге состояние В не изменяется') (j) Рис. 5.12. Иллюстрация проблемы рассогласования синхронизации, (а) Два соединен- ных в кольцо триггера, (б) Временная диаграмма. пройдет через нижний порог, в. триггере А произойдет передача со- держимого из ведущей секции в ведомую. В этот момент предыдущее состояние выхода А окажется замененным на состояние выхода В. Поскольку в этот момент значение на синхровходе триггера В всё еще предполагается равным логической 1, новое значение выхода А опре- делит состояние ведущей секции триггера В. Наконец, как только зад- ний фронт синхрюимпульса для В пройдет верхний порог, содержимое
5.1. ТРИГГЕРЫ 15В ведущей секции В зафиксируется. Следовательно, конечное состояние выхода В окажется тем же самы|л, каким оно было, а не равным преды- дущему состоянию А, как должно было быть. Обратите внимание, если бы [момент пересечения синхроимпульсом А нижнего порогового значения не1 предшествовал ромеиту пересечения синхроимпульсом В верхнего п^рфгового значения, то никаких неже- лательных явлений не возникло,^. Таким образом, некоторый допуск на рассогласование синхронизаций для двухтактных триггеров суще- ствует. Фактически этот допуск больше временй между моментами пересечения двух пороговых значений, поскольку существуют еще задержки, связанные с распространением сигналов в самих М- и 3- секциях. • Существует несколько причин, • порождающих рассогласование синхронизации в триггерных системах. Например, причиной может быть различие во временах распространения сигнала в формирователях синхроимпульсов, когда таких формирователей несколько. Другой причиной может быть различие во временах прохождения синхросиг- нала через вентили в самих триггерах. Наконец, для быстродействую- щих схем начинает сказываться различие во времени распространения сигнала при различной длине монтажных соединений. Как правиле, величины разброса синхронизации лежат в пределах, которые допусти- мы для двухступенчатых УИЗ-триггеров. Для тех же случаев,' когда Выходное состояние Синхр Входные сиг налы определяют состояние ведущего Состояние ведущего передается ведомому (О') Состояние ведомого передается, на выходной фиксатор Рис* 5.13 Трехступенчатый триггер: (а) Схема, (б) Временная диаграмма,
160 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис. 5.14. Графическое обозначение трехступенчатого триггера. разброс превышает эти пределы, могут быть использованы специаль- ные трехступенчатые триггеры. Эти триггеры можно образовать, добавляя к MS-триггеру третью триггерную секцию на выходе, как показано на рис. 5.13(a). Третья секция — это обычный синхронный фиксатор, который служит для сохранения текущего состояния выходов после обновления состояния секций М и S. На рисунке предполагается, что MS-триггер — это триггер, переключаемый отрицательным фронтом, а выходная фикси- рующая секция открыта, когда синхроимпульс имеет значение 1. Таким образом, состояние MS-триггера обновляется по положитель- ному фронту синхросигнала С для всей схемы, а выходной фиксатор открывается по его отрицательному фронту. Последовательность срабатываний представлена на временной диаграмме рис. 5.13(6). При начальном нулевом значении синхросиг- нала его дополнение равно логической 1. В это время открыта ведущая секция MS-триггера, и значение на входной линии определяет ее состояние. При переходе синхросигнала к единичному значению сна- чала закрываются М-секция и выходной фиксатор, а затем открывается ведомая секция MS-триггера. При этом состояние ведущей секции передается в ведомую, а все еще закрытый выходной фиксатор продол- жает сохранять предыдущее состояние триггера. И, только когда вход- ной сигнал снова примет нулевое значение, состояние ведомой секции передается на выходной фиксатор. При таком способе работы можно снять все связанные с рассогласованием синхронизации проблемы, если длительность синхроимпульса будет превышать наибольший возможный разброс синхронизации. Графическое обозначение для описанного трехступенчатого триггера отличается от символов для других синхронизируемых триггеров наличием двух треугольничков на синхронизирующем входе, как пока- зано на рис. 5.14. Двойной треугольник говорит о том, что значения входов опрашиваются по одному фронту синхросигнала, а выходные значения обновляются по другому его фронту. Наличие инвертирую- щего кружка на входе синхросигнала говорит об изменении выходов по отрицательному фронту, а его отсутствие — об изменении по поло- жительному фронту. Асинхронные входы Среди MS-триггеров широко распространены триггеры с дополни- тельными входами, функции которых не зависят от сигналов синхро- низации. Например, часто добавляются два входа, «предустановка» и
5 2. РЕГИСТРЫ 161 Рис. 5.15, Двухтактный //(“-триггер со входами предуста- новки и очистки. «очистка», с помощью которых триггер может быть установлен в нужное состояние независимо от сигналов на других входах, включая синхро- низирующий. Поскольку эти входы работают независимо от синхрони- зации, их называют асинхронным I. Входы «предустановки» и «очистки» напоминают соответственно входы S и R обычного несинхронизируемого 7?£-триггера. Когда нет ни сигналов «предустановки», ни «очистки», поведение триггера пол- ностью определяется другими входными сигналами и синхросигналом. Если же, на триггер приходит сигнал «предустановки» или «очистки», но не оба сразу, то триггер устанавливается соответственно в состояние 1 или 0. Точно так же, как и для 7?5-триггера, при одновременной по- даче сигналов «предустановки» и «очистки» поведение триггера не определено. На рис. 5.15 показано графическое обозначение синхро- низируемого двухтактного J/f-триггера с асинхронной предустановкой и очисткой. Инвертирующие кружочки на входах говорят о том, что активное состояние сигналов соответствует логическому 0, а не логи- ческой 1. Этот случай более распространен для схем ТТЛ. 5.2. РЕГИСТРЫ В общем случае регистр представляет собой группу триггеров, работающих согласованно и единообразно и выполняющих некоторую общую функцию. В этом разделе мы рассмотрим две наиболее распро- страненные функции регистров, а именно функции хранения (или запоминания) и сдвига. О счетных регистрах речь пойдет в следующем разделе. На самом деле все регистры наряду с какими-то другими функция- ми выполняют функции запоминания. Запоминающим регистром будем считать любой регистр, не выполняющий никаких других обще- известных функций. Такой подход позволит нам выделить некоторые самые общие свойства регистров. Запоминающий регистр будем считать состоящим из нескольких синхронизируемых триггеров, синхронизирующие входы которых соединены вместе. Таким образом, переключение состояний всех триггеров синхронизируется импульсами по одной общей линии. Во многих случаях входные сигналы триггеров, образующих регистр, логически зависят от выходных сигналов этих же триггеров и 6 № 592
162 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ триггеров других регистров. Для того чтобы обеспечить правильную синхронную работу, в этих случаях естественно использовать рассмот- ренные в предыдущем разделе двухтактные ТИХ-триггеры. Существуют и другие ситуации, когда такая логическая зависимость отсутствует и значения выходных сигналов во время действия синхроимпульса не важны. В этих ситуациях вполне достаточно простых синхронных фиксаторов. Таким образом, нам нужно рассмотреть два вида запоми- нающих регистров, соответствующих двум упомянутым ситуациям. Мы увидим в дальнейшем, что оба эти вида важны для микропроцес- сорных систем. Сначала рассмотрим регистры на ТИХ-триггерах. Триггеры могут быть любого типа: JK, 7?Х, D или Т. На рис. 5.16 показан запоминаю- щий регистр на J/C-триггерах. Чтобы синхронизировать работу такого регистра с работой других компонентов системы, синхронизирующие линии всех регистров и отдельных триггеров объединяются вместе и подключаются к центральному источнику синхроимпульсов. Таким образом, информация может передаваться на регистры по каждому синхроимпульсу, опрашивающему состояние их выходов. Поскольку главная функция запоминающего регистра — это прием и выдача информации, должны существовать некоторые сред- ства для передачи данных на регистр, обладающие избирательными свойствами. К этим средствам относится схема загрузки регистра, подключающая входы каждого триггера в регистре к источнику дан- ных. На рис. 5.17 показана такая схема для регистра, состоящего из /АГ-триггеров. В схеме по два вентиля И и по одному инвертору на каждый двоич- ный разряд в регистре. Вентили связывают логические сигналы от источника данных, обозначенные как данные^, с входами J и К тригге- ров. Сигнал «разрешение приема» подается на каждый вентиль И. Как легко видеть, когда этот сигнал равен логической 1, прямые значения сигналов от источника данных проходят на входы J, а инверсные значения — на входы К соответствующих триггеров. В результате по синхроимпульсу каждый триггер регистра будет установлен в нужное состояние. Если же на линию «разрешение приема» подается логичес- синхролиния Рис. 5.16. Запоминающий регистр, состоящий из двухтактных //^-триггеров.
5.2. РЕГИСТРЫ 163 Данныеа Данныеь Данныес Рис. 5.17. Схема загрузки регистра с «/^-триггерами. кий 0, то логический 0 будет на входах J и К всех триггеров. В этом случае регистр сохранит неизменной ранее установленную на нем информацию. В большинстве случаев информация на регистр должна поступать более чем из одного источника. При этом каждому источнику должна соответствовать своя схема загрузки. Выходы от разных схем можно объединить с помощью вентилей ИЛИ, как показано на рис. 5.18, а управляющие линии «разрешения приема» использовать для выбора нужного источника данных. Теперь остановимся на регистрах с синхронными фиксаторами, или однотактными триггерами. Они используются в тех случаях, когда во время записи информации в регистр зачения на выходе регистра не важны. Как мы увидим в дальнейшем, к этому типу регистров, напри- мер, относятся порты ввода и вывода микрокомпьютеров. Очевидно, что в таких случаях время прихода синхроимпульса на регистр не критично по отношению к синхронизации других компонентов. Следовательно, синхросигнал можно не брать от центрального источника, а вырабаты- вать специальной схемой, обеспечивающей избирательность загрузки данных в регистр. Таким образом можно упростить всю cxeKiy в целом. Например, для D-триггеров источник данных можно подключить непос- редственно к входам D, а для передачи информации в нужный момент подавать синхросигнал. Поскольку запоминающие регистры на синхронных фиксаторах будут часто упоминаться в последующих главах, особенно для портов ввода/вывода, на рис. 5.19 приведено графическое обозначение реги- стра этого типа. Линии D и Q соответствуют входам и выходам отдель- ных триггеров. Все синхронизирующие входы предполагаются объе- диненными и подключенными к общей линии. Эта общая линия поме- 6*
Рис, 5,18, Объединение двух схем загрузки для одного регистра.
5.2. РЕГИСТРЫ 165 Рис. 5.19. Графическое обозначение регистра с синхронными D-фиксаторами. чена как линия «разрешение приема» для того/чтобы подчеркнуть тот факт, что она, как правило, не связана с центральным источником Синхроимпульсов той системы, где используется регистр. Сдвиговые регистры Сдвиги данных в регистре — одна из основных операций в циф- ровых системах. С ее помощью решаются такие задачи, как преобра- зование данных из последовательной в параллельную форму и обратно, умножение и деление на степени двойки, позиционирование данных, последовательное хранение данных. Сдвиговый регистр, выполненный на двухтактных D-триггерах, показан на рис. 5.20. Параллельный вход Параллельный выход Рис. 5.20, Однонаправленный сдвиговый регистр на двухтактных D-триггерах,
166 ГЛ 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Так же как и для запоминающего регистра, все входы синхрониза- ции объединены в общую синхролинию. Вход D каждого триггера, кроме самого левого, подключен к выходу Q соседа слева. Поэтому при каждом синхроимпульсе все триггеры, за исключением, разумеется, самого левого, будут принимать текущее состояние своего левого со- седа. Состояние крайнего левого триггера определяется линией «пос- ледовательный вход». Заметим, что состояние крайнего правого триг- гера на рис. 5.20 теряется при каждом синхроимпульсе. Важную модификацию регистра можно получить, соединив выход крайнего пра- вого триггера с входом D крайнего левого. Такой регистр называется циклическим сдвиговым регистром. С помощью регистра, изображенного на рис. 5.20, можно осуществ- лять преобразование последовательных данных, представляющих собой последовательность сменяющих друг друга во времени битов, в параллельную форму. Для этого последовательные данные бит за битом подаются на линию «последовательный вход», а импульсы синхрони- зации — на общую синхролинию. Каждый бит принимается в левый триггер, и одновременно предыдущее состояние этого триггера и всех других триггеров сдвигается вправо. По прошествии нужного количе- ства синхроимпульсов данные в параллельной форме можно будет про- читать на выходах триггеров. С помощью такого же регистра, как на рис. 5.20, можно осущест- вить обратное преобразование, а именно из параллельной формы в последовательную. Для этого данные сначала загружаются в регистр в параллельной форме. Это выполняется в два этапа. На первом все триггеры очищаются (т. е. устанавливаются в состояние логического 0) кратковременной подачей логического 0 на линию «очистка». Рис. 5.21. Двунаправленный сдвиговый регистр, '
5.3 СЧЕТЧИКИ 167 На втором этапе устанавливаются те триггеры, которым соответст- вуют единичные значения на линиях «параллельный вход». Для этого кратковременно подается логическая 1 на линию «загрузка» в тот момент, когда на линии «параллельный вход» поданы входные данные в параллельной форме. Оба этапа выполняются в отсутствие синхро- сигналов. После того как данные загружены в регистр, их можно получить в последовательной форме с выхода правого тригера, подав на регистр серию синхроимпульсов. На регистре рис. 5.20 данные сдвигаются только в одном направле- нии — вправо. Конечно, ничего не стоит переориентировать тот же регистр для сдвига в другом направлении. На рис. 5.21 представлен регистр, позволяющий сдвигать данные в обоих направлениях. Две независимые управляющие линии задают направление сдвига. Пред- полагается, что одновременно на эти линии единичные сигналы никог- да не подаются, но если на одну из линий подана логическая 1, то сдвиг в заданном направлении будет происходить по каждому синхро- импульсу. Если на обе линии поданы нулевые сигналы, то сдвига не будет. Описанные функции реализуются двумя схемами загрузки регистра. Одна схема управляется линией сдвиг вправо. Входные линии этой схемы для каждого триггера соединены с выходными линиями соседнего слева триггера. Другая схема управляется линией сдвиг влево. Входы этой схемы для каждого триггера соединены с выходами соседнего справа триггера. Двунаправленные сдвиговые регистры — это важный компонент в арифметико-логическом устройстве цифрового процессора. Как мы увидим в гл. 6, они также играют важную роль при реализации памяти со стековой организацией. 5.3. СЧЕТЧИКИ Вообще говоря, счетчик — это последовательностная схема, в ос- нове которой лежит регистр и которая в ответ на импульсы на специ- альной линии проходит через предписанную последовательность со- стояний. Поскольку любая последовательная схема имеет лишь ко- нечное число состояний, последовательность состояний каждого кон- кретного счетчика (счетная последовательность) либо завершается не- которым определенным состоянием, либо циклически повторяется. Счетчики с конечным состоянием иногда называют счетчиками с насыщением. Такие счетчики, например, удобны для инициализации некоторых событий после поступления в линию определенного коли- чества импульсов. Естественно, в таких счетчиках нужно предусмат- ривать средства очистки, если счетчик должен работать неоднократно. В этом разделе мы остановимся главным образом на счетчиках'с циклически повторяющейся последовательностью состояний, которые называются счетчиками по модулю. Термин модуль используется также
168 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ для обозначения числа различных состояний в счетной последователь- ности. Счетчики по модулю характеризуются как модулем, так и типом счетной последовательности, которая, в частности, может быть двоич- ной, двоично-кодированной десятичной, в коде Грея и т. п. Двоичные счетчики Двоичный счетчик представляет собой совокупность триггеров, каждый из которых ассоциируется с битом в двоичном представлении числа. Если в счетчике п триггеров, то число возможных состояний счетчика равно 2*, и, следовательно, его модуль также равен 2". Счет- ная последовательность в двоичном суммирующем счетчике начина- ется с 0, доходит до максимального числа 2м— 1, после чего снова проходит через 0 и повторяется. В вычитающем двоичном счетчике последовательные двоичные числа перебираются в обратном порядке, и максимальное число следует за 0 при повторении последователь- ности. Рассмотрим устройство двоичного суммирующего счетчика. В табл. 5.4 приведены 16 первых двоичных чисел. Легко заметить, что значение разряда изменяется всякий раз, когда текущие значения всех разрядов правее рассматриваемого равны 1. Более того, это единст- венная ситуация, при которой значение разряда изменяется. Если мы воспользуемся двухтактными Т-триггерами, то сделанное наблюдение Таблица 5А Последовательность двоичных чисел f>2 b0 0 0 0 0 0 0 0 1 0 0 10 0 0 11 0 10 0 0 10 1 Olio 0 111 10 0 0 10 0 1 10 10 10 11 110 0 110 1 1110 1 1 1 1 .
5.3. СЧЕТЧИКИ 169 подскажет, при каких условиях нужно подать сигнал логической 1 на вход Т. Напомним, что двухтактный Т-триггер меняет свое состояние тогда и только тогда, когда значение на входе Т равно логической 1. Поэтому на входе Т каждого триггера должен быть результат операции И над выходными значениями Q всех расположенных справа тригге- ров. ; На рис. 5.22(a) приведена схема четырехразрядного двоичного суммирующего счетчика. Он состоит из двухтактных Т-триггеров с объединенными синхровходами. Каждый импульс на общей синхрони- зирующей линии вызывает переход к следующему состоянию в счетной последовательности. Соответствующая временная диаграмма показана на рис. 5.22(6). На схеме функции, определяющие значения входов Т, формируются цепочкой двухвходовых вентилей И. Цепочка реализует итерационный процесс формирования значения Ti+1 с помощью операции И над значениями и Qh где 7\ и — вход и выход триггера, соответствующего разряду Ь[. Значение То получается особо, поскольку оно относится к крайнему правому триггеру. На вход TQ подается сигнал с линии «разрешение счета». Если на эту линию подана логическая 1, то на все входы поступят сигналы, нужные для перехода к следующему состоянию. Если на ней логический 0, то на всех входах Т будет также логический 0, и счетчик не изменит своего состояния. Счетчик на рис. 5.22 расширяется до любого большего числа разрядов простым добавлением в цепочку двухвходового вентиля И на каждый дополнительный разряд. Применение цепочек вентилей И для формирования сигналов на входах Т широко распространено в двоичных счетчиках, однако ведет к снижению скорости счета. После прохождения очередного синхроим- пульса следующий синхроимпульс нельзя подавать до тех пор, пока не определятся все значения на входах Т. Однако значение самого левого входа Т не определится до тех пор, пока изменения состояний всех триггеров, вызванные прошедшим синхроимпульсом, не распростра- нятся по всей цепочке. На это для n-разрядного счетчика требуется время, равное времени распространения сигнала через один вентиль, умноженному на п — 1. Можно увеличить скорость счета в двоичном счетчике, заменив цепочку вентилей И на отдельные вентили И для каждого входа Г, как показано на рис. 5.23. В этом случае входы вентилей И подклю- чаются непосредственно к выходам соответствующих триггеров. Следовательно, между моментом установления новых состояний триг- геров по синхроимпульсу и готовностью новых значений сигналов на входах Т будет проходить время, равное задержке распространения сигнала через один вентиль, а не п—1. Однако повышение скорости счета связано с необходимостью использовать вместо двухвходовых многовходовые вентили И. Поскольку счетчики обоих рассмотренных типов имеют одну общую синхролинию, состояние триггеров меняется синхронно, т. е. те триг-
170 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ (*) Синхр JTJTTlJTJTJlJlJblTrLr^ Рис. 5.22. Синхронный двоичный суммирующий счетчик, (а) Схема; (б) Временная ди~ аграмма. РнСз. 5»23. Параллельный синхронный двоичный суммирующий счетчик.
5.3 СЧЕТЧИКИ 171 Рис. 5.24. Асинхронный двоичный суммирующий счетчик. геры, которые по синхроимпульсу должны изменить свое состояние, делают это одновременно. Такие счетчики называются синхронными. На рис. 5.24 показан асинхронный счетчик. Как видно на рисунке, синхронизирующие входы всех триггеров, кроме крайнего правого, соединены не с общей синхролинией, а с выходом соседнего триггера. Поэтому состояние триггера меняется в ответ на изменение состояния соседнего триггера, а не в ответ на внешний синхросигнал. Анализируя счетную двоичную последовательность, легко заме- тить, что значение разряда в данной позиции меняется тогда, когда в соседней справа позиции состояние переходит из 1 в 0. Поэтому счетчик на рис. 5.24 построен из Л4£-триггеров, управляемых отрицательным фронтом синхросигнала, и их синхронизирующие входы подсоединены к выходным линиям Q соседних справа триггеров. На входы Т всех триггеров подается сигнал с общей линии «разрешение счета». К син- хронизирующему входу крайнего правого триггера подключается источник счетных импульсов, которые своим отрицательным фронтом меняют состояние этого триггера, если на линию «разрешение счета» подана логическая 1. Каждое «отрицательное» изменение состояния крайнего правого триггера вызовет изменение состояния второго триг- гера справа и т. д. Другими словами, волна изменений состояния будет распространяться справа налево и закончится на первом триггере с «положительным» изменением состояния. Счетчики описанного типа называются асинхронными, В синхронных системах нужны синхронные счетчики. Последова- тельностные компоненты в таких системах обычно взаимозависимы и управляются от общего источника синхроимпульсов. В таких условиях нужно, чтобы все триггеры во всех компонентах изменяли свое состоя- ние одновременно по синхроимпульсу, позволяя использовать теку- щее состояние триггеров для определения их следующего состояния. Асинхронные счетчики неприменимы в таких ситуациях. Асинхронные счетчики тем не менее применимы в тех случаях, когда их выходы не участвуют в определении состояния других последова-
172 ГЛ. 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ тельностных схем. При помощи выходов асинхронных счетчиков можно управлять визуальными индикаторами, например, в счетчиках импульсов или цифровых часах. Асинхронные счетчики находят широ- кое применение в качестве делителей частоты. Фактически каждый каскад асинхронного счетчика делит частоту пополам, поскольку только половина переходов входного сигнала порождает переходы выходного сигнала. Поэтому деление частоты на любую степень двойки можно осуществить с помощью двоичного асинхронного счетчика с соответствующим числом каскадов. Синхронные счетчики также могут работать в качестве делителей частоты, а также и в других ситуациях, где применимы асинхронные счетчики. Однако асинхронные счетчики в принципе дают более высо- кую скорость счета. Это объясняется тем, что, как только самый правый триггер счетчика сработал по счетному импульсу, на счетчик можно подавать следующий импульс. Нет никакой необходимости ждать распространения волны воздействия от каждого импульса через весь счетчик. Другими словами, интервал между счетными импульсами в асинхронном счетчике может не превышать времени срабатывания одного триггера. В синхронном же счетчике между счетными импуль- сами должно проходить время, не меньшее времени срабатывания одного триггера, плюс время установления значений на всех входах Т. До сих пор мы рассматривали только суммирующие двоичные счетчики. Остановимся теперь на вычитающих. Вычитающие счетчики также могут быть как синхронными, так и асинхронными. Отметим, что при продвижении по двоичной последовательности (см. табл. 5.4) в обратном порядке значение разряда меняется всякий раз, когда теку- щие значения всех разрядов правее данного становятся равными О (или, что эквивалентно, дополнения их значений все равны 1). Именно это соображение лежит в основе конструкции вычитающих двоичных счетчиков. Заметим также, что при обратном движении по двоичной последо- вательности значение данного разряда меняется при переходе состояния его соседа справа из 0 в 1 (или, что эквивалентно, при переходе его дополнения из 1 в 0). Это второе соображение служит основой для асинхронных вычитающих счетчиков. В обоих случаях условия для изменения состояний триггеров вычитающих счетчиков аналогичны ус- ловиям для^ суммирующих счетчиков с той лишь разницей, что они должны опираться на значения инверсных, а не прямых выходов триггеров. Следовательно, показанный на рис. 5.22 синхронный сум- мирующий счетчик можно превратить в вычитающий, простб переклю- чив входы вентилёй И с выходов Q на выходы Q, как показано на рис.: 5.25. Точно так же можно изменить суммирующий счетчик на рис. 5.23. И наконец, аналогично можно сделать асинхронный сумми- рующий счетчик на рис. 5.24 вычитающим, подавая на синхронизирую- щие входы триггеров сигналы не с выходов Q, а с выходов Q.
ГЛ 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ 173 Рис. 5.25. Синхронный двоичный вычитающий счетчик. Десятичные счетчики Десятичный счетчик состоит из нескольких подсчетчиков, соответ- ствующих десятичным разрядам. Подсчетчики считают по модулю 10, и их называют декадными счетчиками. Счетные последовательности декадных счетчиков зависят от способа представления десятичных чисел. Наиболее распространено представление в двоично-кодирован- ном десятичном коде 8421 (8421 BCD), в котором каждая десятичная цифра кодируется четырехразрядным двоичным числом. Счетная после- довательность суммирующего декадного счетчика в этом случае совпа- дает с двоичной последовательностью от 0000 до 1001, после чего следует снова 0, и последовательность повторяется. Схема синхронного суммирующего декадного счетчика в коде 8421 BCD приведена на рис. 5.26. Она представляет собой модифика- Рис. 5.26. Синхронный суммирующий декадный счетчик, работающий в коде 6421 BCD,
174 ГЛ 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис. 5.27. Трехдекадный синхронный суммирующий счетчик, работающий в коде 8421 BCD. цию двоичного суммирующего счетчика, при которой нормальная счетная последовательность прерывается после девяти. Вместо пере- хода к десяти по очередному синхроимпульсу счетчик возвращается к нулю. Для этого в счетчике предусмотрена схема детектирования де- вятки, представляющая собой вентиль И со входами от крайнего левого и крайнего правого триггеров. С помощью этой схемы сигналы на входах Т некоторых триггеров меняются, когда счетчик досчитывает до девяти. В частности, при де- вяти логическая 1 подается на вход Т триггера Ь3 через вентиль ИЛИ, и, следовательно, следующий синхроимпульс установит Ь3 в 0. Точно так же при девяти на вход Т триггера bt через вентиль И подается логический 0, и поэтому останется в нулевом состоянии при следую- щем синхроимпульсе. Состояние двух других триггеров Ь2 и не меняется, поскольку их значения и при нуле, и при десяти равны 0. Способ объединения описанных декадных счетчиков в многоразряд- ный десятичный счетчик показан на рис. 5.27. Синхронизирующие линии всех декадных счетчиков объединяются в одну. Сигналы на ли- нии «разрешение счета» вырабатываются цепочкой вентилей И, на входы которых подаются сигналы от схем детектирования девяток в декадных счетчиках. Таким образом, в каждой декаде сигнал «разрешение счета» будет равен 1 только тогда, когда все декады справа содержат девятки. Счетчики по произвольному модулю Метод, с помрщью которого мы получили из двоичных счетчиков декадные, можно обобщить для получения синхронных счетчиков по произвольному модулю В. Для этого число триггеров п выбирается так, чтобы 2"^ В < 2n+1. Должна быть построена схема детектиро- вания состояния В—1 по аналогии со схемой детектирования девятки,, чтобы прерывать нормальную двоичную последовательность. Детектор состояния В—1 должен устанавливать логическую 1 на входах Г
ГЛ 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ 175 тех триггеров, которые по следующему синхроимпульсу остались бы в состоянии 1, и устанавливать логический 0 на входах Т тех тригге- ров, которые в противном случае перешли бы из нулевого состояния в единичное. Таким образом, счетчик по следующему синхроимпульсу перейдет в состояние 0, а не в состояние В. Счетчики в коде Грея Как последний пример счетчиков рассмотрим счетчики, работаю- щие в коде Грея. Код Грея — это код двоичного представления целых чисел, обладающий особым свойством. При переходе от любого числа в этом коде к следующему числу меняется значение только одного двоичного разряда. Код Грея резко отличается от обычной двоичной последовательности, где изменения могут затронуть любое число раз- рядов. Представления последовательных четырехразрядных двоичных чисел в коде Грея приведены в табл. 5.5. Таблица 5.5 Последовательные числа в коде Грея и в двоичном представлении Двоичное Грея представление числа 67 3 Qi <71 Ь) Ь2 Ь. *>0 0 0 0 0 0 0 0 ( 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0 I •; 0 0 1 1 1 0 1 с 1 0 1 0 1 0 1 0 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 1 п 0 1 0 1 1 1 I о 1 1 0 0 1 1 1 1 0 1 0 0 0 1 1 1 1 Если при переходе от данного числа в последовательности к со- седнему меняются несколько разрядов, маловероятно, что в техничес- кой реализации они изменят свое состояние строго одновременно. Поэтому в процессе перехода к соседнему числу в двоичной последова*
176 ГЛ 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ тельности вполне вероятно кратковременное появление комбинаций, отличных как от исходной, так и от результирующей. Таких проме- жуточных комбинаций не может возникать в коде Грея, поскольку каждый раз меняется только один разряд. В некоторых приложениях это имеет существенное значение. Общее правило формирования последовательности в коде Грея можно задать с помощью индукции. Последовательность в коде Грея, содержащего только один бит go, есть 0,1. Если известна последова- тельность из п битов gn-i- • -gigo, то последовательность из п+1 битов пп. . . gtgo получается сначала прохождением в прямом порядке п-бито- вой последовательности с gn—0 и затем прохождением в обратном порядке n-битовой последовательности с gn — ^- Это свойство легко обнаружить в табл. 5.5. Преобразование числа из двоичного кода Ьп1. . ,bxbo в код Грея gn-i- • -gigo осуществляется легко. Можно показать, что, имея двоич- ное представление, биты соответствующего представления в коде Грея можно получить с помощью соотношений , (для i = 0, 1......И —2), g-„_t = Символ ф обозначает операцию сложения по модулю 2 над двоичными цифрами, что эквивалентно операции Исключающее ИЛИ над логичес- кими переменными. Аналогично по коду Грея можно получить биты Таблица 5.6 Функции входов D для четырехбитового счетчика в коде Грея на D-триггерах Сз <2г е. Со о о Do 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 с 1 0 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 0 0 1 1 0 0 - 0 1 0 0 0 0 0 0 0
ГЛ. 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ 177 двоичного представления из соотношений bn^=gn_u bi = gi®bi+i (для i = n — 2, и—3, 0). Приведенные соотношения применяются рекуррентно. Начинаем с &n-f и каждое вычисление bi+i используем для получения &/. Счетчик в коде Грея можно сконструировать из D-триггеров, найдя соответствующую каждому входу D функцию. Для каждого текущего состояния счетчика нужно сформировать значение входа D каждого триггера, такое, которое будет равно значению триггера при следующем состоянии счетчика. Пользуясь последовательностью в табл. 5.5, можно для каждой строки получить нужные значения входов D четырехбитового счетчика из следующей строки. В табл. 5.6 приведена таблица истинности для четырех функций D как аргументов выходных значений триггеров Q. По этой таблице можно построить выражения для каждого D/ через выходы Qt. Один из возможных вариантов этих выражений выглядит следующим обра- Рис, 5,28» Синхронный счетчик, работающий в коде Грея.
178 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ зом: £\ = QiQo + «?3(№ Qo, D2 = Q2 (Q№ + ~QM, />3 = Q3(QA) + Q2QiQo. На рис. 5.28 представлен четырехбитовый синхронный счетчик в коде Грея, основанный на этих выражениях. 5.4. ДЕШИФРАТОРЫ И СЕЛЕКТОРЫ Зачастую имеющееся представление информации оказывается не- удобным для ее непосредственного использования. Необходимые в таких случаях преобразования часто выполняются логическими устрой- ствами, называемыми дешифраторами. Дешифраторы играют важную роль в микрокомпьютерных системах. Дешифраторы типа «1 из 2"» Дешифратор основного типа, т. е. дешифратор «1 из 2Л», представ- ляет собой комбинационную схему с п входами и 2“ выходами. Каждая выходная линия однозначно соответствует одной из 2п возможных комбинаций входных сигналов. Для данной входной комбинации соот- ветствующая выходная линия принимает определенное значение, рав- ное, скажем, логической 1, отличное от значений на всех других выход- ных линиях. Другими словами, функция, описывающая значение на каждой выходной линии дешифратора, представляет собой один мин- тёрм от п входных переменных (или его дополнение). Самый очевидный способ реализации дешифратора состоит в ис- пользовании п-входового вентиля И для каждой выходной линии. На входы вентилей И подается соответствующая комбинация значений входных переменных или их дополнений. Схема такого дешифратора при п—3 приведена на рис. 5.29. Эта реализация содержит минималь- ное число вентилей И и работает быстрее любой другой. Однако вен- тили должны иметь п входов, а это может оказаться невыполнимым при больших п. Другую реализацию дешифратора на п входов можно получить, комбинируя выходы двух или большего числа дешифраторов с меньшим числом входов и, следовательно, с вентилями И на меньшее число вхо- дов. В частности, n-входовый дешифратор можно сформировать из двух дешифраторов на п/2 входов, каждый из которых подключен к половине входных линий. На рис. 5.30 показан дешифратор на 4 входа, составленный из двух дешифраторов на 2 входа. В дополнение к двум меньшим дешифраторам
5.4. ДЕШИФРАТОРЫ И СЕЛЕКТОРЫ 179 Рис. 5.29. Дешифратор на три входа, или «1 из 8». в этой схеме присутствует по двухвходовому вентилю И для каждого из 2" выходов. К каждому из этих вентилей подсоединено по одному выходу от каждого из меньших дешифраторов, с тем чтобы сформиро- вать все из 2л/2х2п/2=2" возможных комбинаций. Легко видеть, что при такой реализации требуется большее число вентилей и возни- кает дополнительный логический уровень. Однако вентили могут иметь меньшее число входов. Часто для большей гибкости в дешифраторы добавляется еще одна входная линия «разрешение», которая управляет всеми выходны- ми сигналами. Если на линию «разрешение» подать логический 0, то все выходы получат нулевые значения; в противном случае дешифра- тор работает обычным образом. Возможная реализация приведена на рис. 5.31, где «разрешение» подается на дополнительные входы всех выходных вентилей И. Дешифраторы оказываются полезными всякий раз, когда нужно выбрать одну из нескольких альтернатив. Эти альтернативы могут оказаться, например, командами, управляющими сигналами, выпол- няемыми шагами, источниками данных или их получателями. Выбор источников данных и их получателей является важной функцией в
180 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис. 5.30. Дешифратор на 4 входа и 16 выходов, состоящий из двух дешифраторов на 2 входа,
5 4. ДЕШИФРАТОРЫ И СЕЛЕКТОРЫ 181 Разрешение Рис. 5.31. Дешифратор «1 из 4» с линией «разрешение». системах памяти с произвольным доступом, а также в системах ввода/ вывода. Как мы увидим, в запоминающих устройствах с помощью дешифраторов выбираются ячейки для считывания и записи. В систе- мах ввода/вывода дешифраторы применяются для выбора одного из многих портов, посылающих или принимающих данные. Селекторы Функцию выбора данных от одного из нескольких источников выполняют устройства, изготавливаемые в виде модулей и называемые селекторами. Как правило, селектор — это комбинационная схема с одной выходной линией для данных, 2" входными линиями для данных и п управляющими линиями. Каждая из 2п входных линий соответ- ствует одной из 2" возможных комбинаций сигналов на п входных уп- равляющих линиях. При заданной комбинации на входных управляю- щих линиях значение соответствующей входной линии данных пере- дается на выходную линию данных. Схема селектора на 8 входных линий данных показана на рис. 5.32. Вентили И в схеме, подключенные к одному вентилю ИЛИ, связы- вают входные линии данных с выходной линией. По одному входу каждого вентиля И подсоединено к выходам дешифратора типа «1 из 8». Таким образом, дешифратор выбирает лишь какой-то один вентиль И, и через него данные с входной линии поступают на выходную. Схему селектора можно расширить для многобитовых слов, доба- вив вентили И и ИЛИ в соответствии с числом разрядов в слове. Дешифратор достаточно иметь один. Это позволяет выбирать целое слово, а не только один бит.
1Й2 ГЛ 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЪТ Рис. 5.32. Однобитовый селектор с восемью входными линиями данных. Дешифраторы других типов Наряду с дешифраторами типа «1 из 2"» существует много других специальных дешифраторов. Они осуществляют преобразования ко- дов или чисел в те или иные нужные в частных случаях формы. Типичным примером специального дешифратора может служить преобразователь 8421 BCD кода в семисегментный код. Этот преобра- зователь получает десятичную цифру в четырехбйтовом двоично-коди- рованном представлении и формирует значения на семи выходных
5.5. СУММАТОРЫ И ВЫЧИТАТЕЛИ 183 Рис. 5.33. Семисегментный индикатор, линиях, которые используются для управления семью сегментами светового индикатора. На рис. 5.33 показано расположение сегментов в индикаторе на светодиодах. Задача преобразователя — выбрать нуж- ные сегменты, чтобы получить изображение десятичной цифры, пред- ставленной в коде 8421 BCD на входных линиях преобразователя. Функции для всех семи выходных линий а, Ь, с, d, е, f, g пре- образователя приведены в табл. 5.7. Логическая 1 для выходных зна- чений каждой функции означает, что соответствующий сегмент должен светиться. Преобразователь является схемой, реализующей в своей главной части заданные в таблице функции. Однако реально в нее обыч- но добавляются компоненты для того, чтобы обеспечить нужный уро- вень напряжения на выходах для управления индикатором, и другие вспомогательные функции, такие, как гашение левых нулей и т.п. Таблица 5,7 Таблица истинности для преобразователя из кода 8421 BCD в семисегментный код BCD Сегменты *3 ъ *0 а ь с d е f я 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 1 1 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 1 1
184 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ 5.5. СУММАТОРЫ И ВЫЧИТАТЕЛИ Сложение и вычитание — это, конечно, основные операции, вы- полняемые над числами. В этом разделе нас будет интересовать сло- жение и вычитание в применении к двоичным целым числам, как положительным (без знака), так и представленным в дополнительном коде. Как было показано в гл. 2, процесс сложения и вычитания для обеих этих форм один и тот же. Интерпретируя биты как логические переменные, можно сконструировать логические схемы для выполне- ния этих двух операций, называемые соответственно сумматорами и вычитателями. Сумматор для двух n-разрядных двоичных чисел можно создать в виде комбинационной схемы с 2п+1 входными линиями, соответст- вующими разрядам двух операндов и переносу, и с п+1 выходными ли- ниями, соответствующими разрядам результата. Наиболее очевидный прямой метод создания такой схемы состоит в построении минимального набора двухуровневых булевых выражений для п+1 выходных линий. Схему, полученную таким методом, назы- вают параллельным сумматором. Точно так же можно построить парал- лельный вычитатель. Параллельные сумматоры и вычитатели дают самую быструю реализацию сложения и вычитания, поскольку содер- жат только два логических уровня. Однако сложность двухуровневых схем параллельного сложения и вычитания быстро возрастает с ростом разрядности чисел и оказывается уже неприемлемой даже для вполне реальных значений п. Человек складывает и вычитает числа последовательно разряд за разрядом. Независимость операций над отдельными разрядами обеспе- чивается за счет учета переноса или заема в соседнем разряде. Такой процесс также может служить основой для схем сумматоров и вычи- тателей и реализуется довольно просто. Сумматор с последовательным переносом Рассмотрим схему сумматора, основанного на поразрядном про- цессе. Обозначим два складываемых двоичных числа через А =ап_1ап_2 . . .бьао и B—bn_1bn_2- . В гл. 2 мы установили, что при сложении двоичных чисел значения цифр в каждом двоичном разряде должны быть сложены между собой и с переносом из предыдущего разряда. Если результат при этом превышает 1, то возникает перенос в сле- дующий разряд. В логической схеме информацию о переносе в разряд i можно пред- ставить в виде бита переноса равного 1, если перенос из предыду- щего разряда есть, и 0 — в противном случае. Операция, которую нужно выполнить для каждого разряда f, будет тогда заключаться в сложении трех битов ai9 bh и получении значения бита суммы и переноса в следующий разряд ci+i. Фактически ci+1 и представляют
5 5 СУММАТОРЫ И ВЫЧИТАТЕЛИ 185 Таблица 5.8 Определение битов суммы sz и переноса cz + 1 по значениям Ь; и cz при сложении ai ь,- с, Сумма а„ 1 ci G+i 5. 0 0 0 00 0 0 0 0 1 01 0 1 0 1 0 01 0 1 0 1 1 10 1 0 1 0 0 01 0 1 1 0 1 10 1 0 1 1 0 10 1 0 1 1 1 11 1 1 собой просто старший и младший разряды соответственно в двухразряд- ной сумме битов ah bt и q, как это показано в табл. 5.8. По функциям, заданным в табл. 5.8, можно построить соответст- вующие логические выражения. Одно из возможных выражений для St — это каноническая сумма минтермов sz = ар^{ + ар fa + ар;С; + ap fa. Ее можно преобразовать следующим образом: Si = cii (pfa + Ь^ + az (bfa + biC;) = “i © Ci) + at (b^Ci) = а/Ф>(^<®^) = вЖФс/- Аналогично каноническая сумма минтермов для cz + i есть 0+1= aPici + afiiCi 4- afiiCi + ар fa. С помощью карт Карно или алгебраическими преобразованиями можно получить следующее выражение для ci+1: Ci^^api+aiCi+biCi. На рис. 5.34 показана схема, реализующая выражения для Si и fy+i- Эта схема называется полным сумматором, поскольку она сумм»* рует все три бита в разряде, включая перенос. Теперь мы можем строить схему для сложения п-разрядных чисел, покаскадно соединив» полных сумматоров, как показано на рис. 5.35. Разряды двух склады-
ГЛ 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ «< с< Рис. 5.34. Полный сумматор. ваемых чисел подаются на входы и bh а результат появляется на выходах sz. Последний перенос сп является старшим разрядом (п+1)- разрядной суммы. Входная линия переноса в младший разряд с0 яв- ляется еще одним входом всей схемы. Он позволяет задать начальное значение переноса, что удобно для сложения с многократной точностью. Сумматоры на схеме рис. 5.35 называют сумматорами с последова- тельным переносом из-за наличия в них последовательной зависимости от переносов. Каждый полный сумматор в цепочке распространения переносов вносит задержку в двух логических уровнях. Поэтому конечный перенос сп, зависящий от самых правых разрядов я0, bQ и проходит через 2и логических уровней. Таким образом, сумматор с последовательным переносом работает существенно медленнее парал- лельного сумматора, в котором всего 2 логических уровня.
5.5 СУММАТОРЫ И ВЫЧИТАТЕЛИ 187 Вычитатель с последовательным переносом Вычитатель с последовательным переносом можно построить по тому же принципу, что и сумматор. Обозначим через Яп-2--- ...Я1Я0 уменьшаемое, а через В=Ьп_хЬп_2...ЬуЬъ вычитаемое; т. е. вычи- Таблица 5.9 Определение битов разности и переноса Q-m по значениям О-b h и С/ при вычитании ai Ci Ci+1 * 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 L 1 1 татель должен выполнять операцию А—В. Заем в соседнем разряде можно считать отрицательным переносом. Таким образом, разряд переноса ct при вычитании может обозначать наличие заема из преды- дущего разряда. Операции, которые нужно выполнять в каждом разря- де при вычитании, сведены в табл. 5.9. Чтобы сохранить обозна- чения, бит разности по-прежнему обозначен через sz. bt ct Рис. 5.36. Полный вычитатель.
188 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Сравнивая табл. 5.9 с табл. 5.8 для сложения, мы видим, что колонки для S[ идентичны. Следовательно, выражения для в вычитателе и сумматоре совпадают. Чтобы получить выражение ci+l для вычитателя, можно выписать каноническую сумму минтермов и упростить ее. Пол учим выр ажен не И снова легко подметить, что это выражение совпадает с выраже- нием для сумматора, если сц заменить на ait На рис. 5.36 показана схема полного вычитателя, построенного на основе выражений и ci+t для вычитателя. Вычитатель с последова- тельным переносом для n-разрядных чисел можно построить из п полных вычитателей, соединив их покаскадно так же, как и в случае сумматора. Сумматоры/вычитатели Пользуясь сходством булевых выражений для сумматоров и вы- читателей, можно довольно просто построить комбинированную схему, которая сможет и складывать, и вычитать. Для этого достаточно преду- смотреть управляющий вход, с помощью которого избирательно ин- вертировать at в зависимости от требуемой операции. Пусть на управ- ляющей линии К будет значение, равное логическому 0 для сложения и логической 1 для вычитания. Тогда для избирательной инверсии at можно применить вентиль Исключающее ИЛИ. Действительно, рас- смотрим соотношение __ Если /(=0, то первый член в правой части равен нулю, а второй di. Если же К=1, то второй член равен 0, а первый Поэтому выра- жение К ф сц соответствует требуемой нами избирательной инверсии ait Схема на рис. 5.37 является n-разрядным сумматором/вычитателем с избирательной инверсией в схеме вычисления переноса С/+г. Другую возможную схему сумматора/вычитателя можно постро- ить, пользуясь тем фактом, что вычитание можно заменить сложением уменьшаемого с дополнением вычитаемого. По сравнению с первым вариантом эта схема обладает преимуществом, поскольку в качестве модулей позволяет взять полные сумматоры без каких бы то ни было внутренних модификаций. В главе 2 уже было показано, что дополнение можно получить, если прибавить 1 к результату обращения. Обращение логически эквивалентно инверсий каждого бита в числе. Вентили Исключающее ИЛИ можно применить для избирательной инверсии в зависимости от значения управляющего сигнала. И наконец, прибавление 1 к резуль- тату обращения легко реализовать, просто задавая 1 на входе перено- са с0.
Рис. 5.37, Трехзарядный сумматор/вычитатель, составленный из полных сумматоров/вычитателей. 5 5 СУММАТОРЫ И ВЫЧИТАТЕЛИ
190 ГЛ. 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис, 5.38. Сумматор/вычитатель, в котором при вычитании второй операнд представля- ется в дополнительном коде. Схема сумматора/вычитателя на основе этих соображений показана на рис. 5.38. Управляющий сигнал К подается на вентили Исключаю- щее ИЛИ для всех разрядов а также на вход с0. Таким образом, при /С = 1 формируется дополнение В, и схема осуществляет вычитание В из Л. Следует особо подчеркнуть, что две рассмотренные схемы суммато- ров/вычитателей отличаются трактовкой разряда переноса. В первой схеме (рис. 5.37) прямое значение бита С[ в каждом разряде говорит о наличии заема, а именно c, = l, если в разряде i происходит заем. Для схемы на рис. 5.38 о наличии заема в разряде i говорит обратное (т. е. нулевое) значение q. В микропроцессорах используются обе эти схемы. Поэтому различие между ними важно понимать, особенно в отношении самого левого переноса сп. Диапазон предствления чисел и переполнение Любая из описанных схем сложения/вычитания пригодна для ра- боты с операндами без знаков или же с операндами, представленными в дополнительном коде. Для операндов без знаков любая из схем дает правильное представление результата при любых операндах, если сохранить последний перенос сп наряду с п значениями s,. В частности, при сложении двух л-разрядных чисел без знаков бит переноса сп просто будет представлять (л+1)-й разряд суммы. При вычитании двух л-разрядных чисел без знаков сп будет соответствовать (л+1)-му раз- ряду разности со знаком, представленной в дополнительном коде. Если же вычитание выполнялось путем сложения уменьшаемого с до- полнением вычитаемого по схеме, изображенной на рис. 5.38, то пере-;
5.6. БЫСТРОЕ СЛОЖЕНИЕ И ВЫЧИТАНИЕ 191 ное сп будет равен инвертированному знаковому разряду резуль- тата. В компьютере при пересылках арифметических результатов значе- ние левого переноса обычно не сохраняется, поскольку машинные слова имеют фиксированную длину. В таких условиях говорят, что произош- ло переполнение, если результат не помещается в отведенные п разрядов. В частности, для чисел без знаков при сложении переполнение проис- ходит, если перенос сп равен 1, а при вычитании — если разность отри- цательна. При сложении и вычитании операндов со знаками, представленных в дополнительном коде, независимо от используемой схемы суммато- ра/вычитателя результат может занимать только п разрядов. При этом sn_i является знаковым разрядом результата. Как отмечалось в гл. 2, переполнение имеет место в том случае, когда биты переносов сп.л и сп имеют разные значения. Это условие переполнения можно выразить при помощи логической операции Исключающее ИЛИ следующим образом: Переполнение = сп _ j ф сп. 5.6. БЫСТРОЕ СЛОЖЕНИЕ И ВЫЧИТАНИЕ . Значительные задержки в сумматорах и вычитателях с последова- тельным переносом связаны с распространением информации о перено- сах. Как было показано в предыдущем разделе, в n-разрядном сумма- торе или вычитателе значение крайнего левого переноса сп зависит от 2п логических уровней. Для того чтобы уменьшить задержки распро- странения переносов, можно было бы определить значения переносов непосредственно через значения разрядов исходных чисел аь и начального переноса с0. О сумматорах, основанных на этой идее, гово- рят как о сумматорах с ускоренным переносом. Рассмотрим схему такого сумматора для двух двоичных чисел А=ап_1ап_2...а1ай и B=bn_1bn_2...b1b0. Наша цель — найти выражения для значений переносов в зависимос- ти только от входных сигналов сумматора at и bt и переноса сЛ. Кроме того, хотелось бы получить эти выражения в форме сумм произведем ний, чтобы общее число логических уровней в схеме было невелико. Рассмотрим булево выражение для переноса из i-ro разряда в сумма- торе с последовательным переносом Ci+^afii + atCi + biCi = aibi + (ai + bi)cl = gi + PiCi, (5.1) где gi=Qibi, a pi^ai+bt. В выражении (5.1) g{ обозначает перенос, генерируемый в разряде i, т. е. если gt = l, то Chi=1 независимо о»
192 ГЛ 5 ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ значения с;. Член представляет перенос, распространяющийся через разряд i в разряд 1’4-1, а именно если р,- = 1, то ct распространит- ся в cf+1. В выражении (5.1) ci+1 зависит от величины ch которая не является непосредственно входной величиной сумматора. Однако выражение можно раскрыть так, чтобы оно содержало только входные величины. Раскрытие можно выполнить многократной подстановкой выражения самого в себя при уменьшающихся значениях индекса i следующим образом: q+1=e.t4-Pi (gi -1+Pt - iCi _,) = gi + Pigi-l+PiPi-Ji-X = gt + Pigi-x + piPi-x (gi-i + Pi-tCi-J = gl + Pigi-x+PiPi-xgi-t + PiPi-xPi-zCi-2 = gi + Pigi-1 +PiPi-igi-^----\-PiPi-f -PxP^- (5.2) Если теперь построить схемы для каждого ci+i в соответствии с полученным выражением (5.2), то между моментом подачи сигналов на входы и bt и моментом готовности всех сигналов переноса прой- дет время, равное задержке на трех вентилях вместо 2п вентилей для сумматора с последовательным переносом. А именно, один логический уровень потребуется для формирования gt и рь второй — на срабаты- вания вентилей И, формирующих произведения в выражении сН1, и третий — на срабатывание вентиля ИЛИ, формирующего логическую сумму произведений. Чтобы проиллюстрировать описанную схему конкретнее, выпишем уравнения переносов для схем ускоренного переноса в чет? тех азпяд. ном сумматоре: = Ро = Оо + ^в, g2 — a2b2, p2 = a2 + b2, gs = a^, Рз = а» + Ь3, Сх ~ gv 4* /Vo» C2 = g'l+Plgo + PlPoC0. = gt + P2gl + PiPxgo + PtPxPfa c4 = g* + p3gi + p3pigi + PiPiPigo + PiPiPtP^ (5.3) Этими уравнениями для переносов вместе с уравнениями для битов суммы можно воспользоваться для построения четырехбитового сумматора с ускоренным переносом, приведенного на рис. 5,39. Оценивая схему ускоренного переноса на рис. 5.39, мы видим, что она довольно сложна как из-за большого числа вентилей, так и из-за большого числа входов у некоторых вентилей. Общий вид выражений Для переносов говорит о том, что сложность схемы быстро растет о
7 № 592 Рис. 5.39. Четырехразрядный сумматор с ускоренным переносом.
194 ГЛ, 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Рис. 5.40. Схема ускоренного переноса с разбиениехм сумматора на блоки, ростом разрядности складываемых чисел. Поэтому при создании сум- маторов большей разрядности, чем, скажем, 4, схему ускоренного; переноса несколько модифицируют. Модификация состоит в разбиении п разрядов сумматора на блоки по; k разрядов; п предполагается кратным k. Сложение разрядов, образую- щих блоки, выполняется ^-разрядными сумматорами с ускоренным переносом. Конечно, каждый сумматор должен получать на вход пере- нос, соответствующий положению блока. Эта информация формируется; логической схемой, называемой генератором переносов. Общая схема- подобного сумматора представлена на рис. 5.40. • Схема генератора переносов строится по тому же принципу, что и- обычная схема ускоренного переноса. В ней учитывается информация; о том, генерируется ли перенос в данном блоке и распространяется ли» перенос через блок. Пользуясь этой информацией, генератор переносов; формирует сигналы входных переносов в сумматор каждого блока. Для конкретности рассмотрим 16-битовый сумматор, состоящий из 4 четырехбитовых сумматоров с ускоренным переносом. Обозначим блоки справа налево через То, Т\, Т2, Т3, Пусть Gj обозначает усло- вие генерации переноса из блока Th a Р3 — условие распространения переноса через блок Т;. В этих обозначениях определим входные пере- носы в каждый из четырех суммирующих блоков. Перенос в блок равен входному переносу с0 всего сумматора. Перенос в блок Тъ т. е. <z4, равен 1, если перенос генерируется в блоке То (т. е. G0=l) или если перенос распространяется через То (т. е. Росо=1). Таким образом, с4 определяется выражением c^Gq+PqCq, (5.4) Перенос в блок T2i т. е. с8, равен 1, если перенос генерируется, в. блоке ft (G|=1), или если перенос генерируется в То. и распространи-.
5.6. БЫСТРОЕ СЛОЖЕНИЕ И ВЫЧИТАНИЕ 195 ется через 7\ (P1GO=1), или если общий входной перенос с0 распрост- раняется через То и через Л (PlPoCq^V). Таким образом, св определя- ется выражением ' С^+Р^+Р^. Аналогично перенос ci2 в блок Т3 определяется выражением Ciz^Gz^PzGi + PzPiGo+PzPiPoCo. Легко видеть, что формы выражений для генератора переносов и обычной схемы ускоренного переноса совпадают. Следовательно, в обоих случаях можно применить логическую схему одного типа.
coV ГЕНЕРАТОР ПЕРЕНОСОВ <*0 Рз сз £2 Рг Сг Ра Sb А) G Р &3 Рз Сз «2 Р2 G Р со со G Р G Р CQ *i £bfio дд Рю *10 Р9 *9 Рг *2 Pl А Р11 *11 Р5 *5 Р4 *4 Рз *3 Ль Pl4 *М Рв bS Рб ь6 Р7 Ь7 *0 Ро Ао ГЕНЕРАТОР ПЕРЕНОСОВ ГЕНЕРАТОР ПЕРЕНОСОВ Г? Р2 в» Л дм ДА SqPq тг Л 2 42 Л 2 *12 ГЕНЕРАТОР ПЕРЕНОСОВ g\ Рз Сз е2 Pz С2 ft Р) взРз ДА дд ДА ГЕНЕРАТОР ПЕРЕНОСОВ ДА СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ ющий БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИОУ- ющий БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ ющий БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК СУММИРУ- ЮЩИЙ БЛОК’ т ^16 •^Б ▼ •^14 *13 ^2 *11 *10 *9 $7 *3 51 •*0 Рис. 5.42. Шестнадцатиразрядный сумматор с групповым ускоренным переносом, (а) Общая схема сумматора, использующая генератор переносов на рис. 5.41
5.6. БЫСТРОЕ СЛОЖЕНИЕ И ВЫЧИТАНИЕ 197 'I I Рис. 5.42. (б) Суммирующий блок. i * Осталось найти выражения для условий G> и Pj для каждого сум- мирующего блока. Выражение (5.3), выведенное нами ранее, задает значение с4 для сумматора с ускоренным переносом С4 =g3 + p3g2 + p3P2gl + p3^2Plgo+ Дл I генератора переносов определяется выражением (5.4), т. е. Сравнивая эти два уравнения, получаем ; G»=-= g3 + Pig? + PiPzgi + PsPtPigo ; И Po — PsPtPiPo- ; Аналогичные выражения можно выписать для других G; и 1Р}-. На рис. 5.41 приведена схема четырехразрядного генератбра переносов, которая позволяет генерировать переносы и внутри сумми- рующего блока, и между блоками. Она содержит вентили для опреде- ления трех переносов по pt н gt. Кроме того, в ней есть вентили для формирования значений Р и G, управляющих генерацией и распро- странением переносов на следующем уровне генератора переносов. На рис. 5.42 приведен 16-ти разрядный сумматор, разбитый'на четыре блока. На одном уровне генераторы переносов используются для формирования переносов внутри блоков, а на другом —меЖду блоками. Всего в схеме переносов содержится 7 логических уровней. Добавляя 2 уровня на определение разрядов суммы, мы получим об- щее число уровней, равное 9, в то время как в 16-ти разрядном сумма- торе с последовательным переносом мы насчитаем 32 уровня.
198 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Описанную методику групповых переносов можно обобщить на большее число уровней. Так, 64-х разрядный сумматор можно разбить на 4 группы по 4 четырехразрядных блока в каждой. В этом случае в схеме переносов будет 3 уровня при общем числе генераторов 21. Связи между уровнями будут аналогичны связям в двухуровневой схеме на рис. 5.42. Очевидно, что каждый следующий уровень генера- торов переносов добавляет тройку к общему числу логических уровней в сумматоре. Поэтому для 64-х разрядного сумматора число логических уровней равно 12. 5.7. ШИНЫ Любая сложная цифровая вычислительная система представляет собой набор различных функциональных устройств или блоков, выполняющих отдельные части общей работы. Каждый функциональ- ный блок системы Взаимодействует с несколькими другими блоками. Количество связей между блоками, соответствующих всем взаимодей- ствиям, может оказаться очень большим. На практике, однако, число возможных подсоединений к тому или иному блоку лимитируется компоновочными ограничениями интегральных схем или печатных плат. Более того, число связей вообще желательно сводить к минимуму, поскольку они составляют главную часть стоимости устройств. Основ- ной способ уменьшения количества соединений в системах заключа- ется в применении шин. Шины — это информационные каналы, используемые совместно многими устройствами в системе. В общем случае информация по ши- нам передается в виде слов, представляющих собой группу битов. Отдельные биты слова могут передаваться по отдельным линиям в шине, а могут передаваться и по единственной линии последовательно во времени. В первом случае шины называют параллельными, а во втором — последовательными. Основное внимание в этом разделе мы уделим параллельным шинам. Параллельные шины Рассмотрим систему из нескольких модулей, связанных общей па- раллельной шиной. Одна из возможных схем приведена на рис. 5.43. Шина из п линий используется в режиме разделения времени для пере- дачи информации между модулями. Специальный управляющий мо- дуль определяет* в каждый момент времени, какой модуль должен посылать информацию, а какой — принимать. В каждом модуле имеется п-разрядный запоминающий регистр, служащий и для приема, и для посылки информации. В качестве триггеров в регистрах удобнее использовать не двухтактные MS- триггеры, а простые однотактные синхронные фиксаторы, поскольку состояние их выходов в момент записи информации не существенно.
ШИНА (п пинии} Рйе. 5.43, Система с общей параллельной шиной.
200 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ ШИМ о. 1 е 1 *6 д I О • I । д Разрешение передачи (от управляющего модуля} Рис. 5.44. Подключение регистра к шине при помо- щи ТТЛ-вентилей И-НЕ с открытым коллектором. В дальнейшем для простоты будем предполагать, что используются триггеры D-типа. Входные линии регистра в каждом модуле соединены непосредст- венно с соответствующими линиями шин. Поэтому при подаче сигнала «разрешение загрузки» состояние шины передается в регистр. На схеме рис. 5.43 сигнал на линию «разрешение загрузки» для каждого регистра подается по самостоятельной линии из управляющего мо- дуля. Таким образом, управляющий модуль может указать регистр, принимающий информацию из шины. Выходные линии регистра в каждом модуле подключаются к со- ответствующим линиям шины через вентили, допускающие монтаж- ную логику. На рис. 5.43 в качестве таких вентилей показаны три- стабильные формирователи, но, как мы вскоре увидим, можно приме- нять вентили и других типов. В любом случае управляющие сигналы на подключающие вентили подаются из управляющего модуля по отдельным для каждого регистра линиям. Таким образом, управляю- щий модуль может указать регистр, посылающий информацию в шину. Мы исходим из предположения, что в каждый момент времени посылать информацию на шину может только один регистр. Это зна- чит, что при подключении с помощью тристабильных формирователей сигнал разрешения подается только на один модуль. В гл. 4 говори- лось, что в отсутствие сигнала разрешения тристабильные формиро- ватели обладают высоким выходным сопротивлением, и это эквива- лентно отсутствию соединения. Таким образом, тристабильные вен- тили выбранного регистра обеспечивают состояние шины, соответ- ствующее состоянию выбранного регистра. Для подключения регистров к шине можно использовать не только тристабильные формирователи, но и другие вентили, допускающие монтажную логику, например ТТЛ-вентили с открытым коллектором. Как говорилось в гл. 4, при соединении выходов двух ТТЛ-вентилей
6.7. ШИНЫ 201 с открытым коллектором любой из вентилей может обеспечить логи- ческий 0 на общем выходе. Другими словами, логический 0 на выходе одного вентиля «пересиливает» логическую 1 на выходе другого (т. е. логический 0 доминирует над логической 1). Следовательно, если подключение к шине делать с помощью ТТЛ-вентилей с открытым коллектором, то для правильной работы нужно обеспечить, чтобы все соответствующие невыбранным регистрам вентили давали на выходе логические 1. Тогда вентили выбранного регистра, доминируя над всеми остальными, установят нужные логические значения на линиях шины. На рис. 5.44 показана соответствующая схема, использующая вентили И-НЕ с открытым коллектором. Напомним, что выход вен- тиля И-НЕ со входами х и у задается булевым выражением х+у. На рис. 5.44 один вход каждого вентиля И-НЕ, скажем вход х, соеди- нен с линией разрешения, идущей от управляющего модуля, а другой вход, скажем у, соединен с выходом Q триггера в регистре. Таким образом, управляющий модуль сможет указать нужный регистр для посылки информации на шину, подав на линию разрешения этого регистра логическую 1, а на линии всех остальных регистров логи- ческие 0. При этом логические 0 появятся на тех линиях шины, для которых соответствующие триггеры в выбранном регистре содержат логические 0. В некоторых типах вентилей, допускающих монтажную логику, например в вентилях ЭСЛ с открытым эмиттером, наоборот, логиче- ская 1 доминирует над логическим 0. Если для присоединения к шине использовать такие вентили, то на выходе вентилей всех невыбранных регистров должны быть логические 0. Этого, очевидно, легко достичь с помощью вентилей ИЛИ-НЕ. Подытожим логику работы управляющего модуля, обеспечиваю- щую пересылку слова по шинам между модулями: 1. Сначала подается сигнал на линию разрешения передачи в мо- дуль-отправитель. При этом на шине устанавливается состояние вы- бранного регистра через подключающие вентили. 2. Затем подается сигнал на линию разрешения приема в модуль- получатель. При этохм состояние шины загружается в принимающий регистр. Адресные шины Описанная выше схема требует двух управляющих линий на каж- дый подключенный к шине модуль. Таким образом, при т модулях к п линиям шины добавляется 2т управляющих линий. Число линий можно уменьшить, поставив в соответствие каждому модулю иденти- фицирующий этот модуль код. Минимальное число битов для пред- ставления кода при т модулях равно минимальному значению Л,
№ ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ УПРАВЛЯЮЩИЙ МОДУЛЬ ?ис. 5.45. Система параллельной шины с отдельными адресными шинами. при котором 2*^т. Тогда управляющий модуль сможет выбирать отправителя и получателя, задавая идентифицирующие коды. На рис. 5.45 показана схема, в которой используются две адресные ушкы, одна для выбора отправителя, а другая — получателя. Адрес- ные шины содержат k линий, идущих от управляющего модуля ко $сем другим модулям. Одна дополнительная линия от управляющего модуля, стробирующая линия, определяет момент передачи инфор- мации. Шину, ио которой передается информация между модулями; И отличие от адресных шин будем называть шиной данных.
5.7. ШИНЫ 2оа Опознавание «своего» идентифицирующего кода на адресных ши- нах (своего адреса) должно входить в функции каждого модуля. Как показано на рис. 5.45, это делается при помощи двух вентилей И в каж- дом модуле, по одному на каждую адресную шину. Входы вентилей подключаются к адресным линиям либо непосредственно, либо через инверторы в зависимости от значений битов в идентифицирующем модуль, коде. Следовательно, на выходах вентилей, обозначенных соответственно как «выбор получателя» и «выбор отправителя», будут появляться логические 1 тогда и только тогда, когда на соответствую- щую адресную Шину подан идентифицирующий код данного модуля. Как видно цз рис. 5.45, сигнал «выбор отправителя» управляет тристабильными. формирователями, через которые выходные линии регистра модуля подключаются к шине данных. Таким образом, шина данных все время отслеживает состояние регистра, указанного уп- равляющим модулем в качестве посылающего. С другой стороны, сигнал «выбор получателя» вместе с сигналом в стробирующей линии используется для приема данных в регистр. А именно в каждом модуле сигнал «разрешение приема» формируется на вентиле И из сигналов «выбор получателя» и стробирующего сигнала. Таким образом, со- стояние шины данных в момент, определяемый стробирующим сиг- налом, передается на регистр, указанный управляющим модулем в качестве принимающего. Подытожим логику работы управляющего модуля по схеме рис. 5.45 при пересылке слова между двумя модулями: ' 1. Сначала идентифицирующие коды отправителя и получателя устанавливаются на соответствующих адресных шинах. Это приводит к тому, что содержимое посылающего регистра устанавливается на шине данных. 2. Затем кратковременно выдается логическая 1 на стробирующую линию. Это приводит к передаче содержимого шины данных на при- нимающий регистр. Общая шина для адресов и данных Количество линий в шине можно еще уменьшить, передавая адрес- ную информацию по тем же линиям, что и данные. В этом случае коды, идентифицирующие отправителя и получателя, должны поступать на'шину перед передачей по ней данных. Можно выдавать идентифй- цирующие коды одновременно, отведя каждому из них свою половину шины, а можно выдавать их по очереди, отводя под каждый код всю шину. Модули, соответствующие идентифицирующим кодам, должны при этом сохранять информацию о том факте, что они были выбраны ’в качестве отправителя или получателя данных. На заключительном btane между двумя выбранными модулями передаются слова данных в нужном количестве с использованием для этого стробирующего сигнала. ’ '*
Й4 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ На рис. 5.46 показана возможная реализация схемы с общей ши- ной. Шина подключена ко всем модулям, в том числе к управляющему. От управляющего модуля ко всем остальным проходят три дополни- тельные линии: строб отправителя, строб получателя и строб данных. С их помощью сообщается о наличии на шине соответственно иденти- фицирующего кода отправителя, идентифицирующего кода получа- теля и передаваемых данных. В каждом модуле по два D-триггера, выходы которых, помеченные как «выбор отправителя» и «выбор получателя», служат для регист- рации того факта, что модуль выбран для посылки или приема. Сиг- налы на входы D этих триггеров формируются вентилями И, входы которых подключаются к линиям шины непосредственно или через УПРАВЛЯЮЩИЙ Рис. 5.46. Параллельная система с общей шиной для данных и адресов.
5.7. ШИНЫ 205 инверторы в зависимости от значения идентифицирующего кода для данного модуля. К синхронизирующим входам триггеров подсоединены соответствующие стробирующие линии «строб отправителя» и «строб получателя». Таким образом, в триггере «выбор отправителя» выбранного модуля устанавливается логическая 1 по сигналу «строб отправителя». Во всех остальных модулях триггер «выбор отправителя» при этом сбра- сывается. Аналогичным образом по сигналу «строб получателя» в вы- бранном для приема модуле устанавливается 1 в триггере «выбор получателя». |. Тристабильные формирователи, подключающие регистр модуля к шине, управляются логическим И сигналов «выбор отправителе» и «строб данных» от управляющего модуля. Сигнал «разрешение загрузки» на регистр также является логическим И сигналов «выбор получателя» и «строб данных». Это обеспечивает передачу информации с регистра модуля отправителя на регистр модуля получателя по сиг- налу «строб данных». В итоге система шин на рис. 5.46 работает следующим образом: 1. Управляющий модуль выдает на шину код, идентифицирующий отправителя, и возбуждает линию «строб отправителя». При этом в указанном модуле регистрируется тот факт, что модуль является отправителем. 2. Затем управляющий модуль выдает на шину код, идентифици- рующий получателя, и возбуждает линию «строб получателя». При этом в указанном модуле регистрируется тот факт, что модуль яв- ляется получателем. 3. Затем управляющий модуль возбуждает линию «строб данных», что приводит к передаче содержимого регистра модуля-отправителя на регистр модуля-получателя. И этот шаг можно повторить много- кратно для передачи нужного количества слов между теми же двумя модулями. Двунаправленные шины В рассмотренных выше схемах передача по шинам допускалась между любыми двумя модулями. Бывают, однако, случаи, когда один из модулей всегда участвует в передаче и этот модуль управляю- щий. Такая ситуация стандартна для микрокомпьютеров, и в ней воз- можны упрощения в системе шин, поскольку выбирать нужно только один из участвующих в передаче модулей. В некотором условном смысле такую шину можно называть двунаправленной, поскольку данные можно передавать между фиксированным и любым другие модулем в прямом и обратном направлении. 1 Рассмотрим систему с двунаправленной шиной, в которой фикси- рованным участником передачи является управляющий модуль.
506 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Другой участник передачи может «быть выбран любым из описанных способов, т. е. либо восыдиой соответствующего кода по отдельной адресной шине, jua^q по той же шине данных. Но в данном случае должно быть указано направление передачи: к управляющему мо- дулю или из него. Это можно сделать с помощью двух стробирующих сигналов. Один из них может передать на шину содержимое регистра выбранного модуля. Эта информация будет принята управляющим модулем. Другой может вызывать прием регистром выбранного модуля информации, установленной на шине управляющим модулем. Воз- можна вариация, при которой одна линия задает направление пере- дачи, а другая, стробирующая,— момент передачи. Асинхронные «шины Все рассмотренные выше системы шин работали в синхронном ре- жиме. А именно, данные между источником и приемником передава- лись в ответ на импульс в стробирующей линии, выдаваемый управ- ляющим модулем. При этом требуется, чтобы в момент стробирования модуль-отправитель имел данные в доступном виде, а модуль-получа- тель был в состоянии их принять. Если передача данных непосредст- венно затрагивает только регистры в двух модулях и другие доста- точно простые схемы, то синхронная работа вполне осуществима. В таких случаях управляющий модуль может выбрать момент, когда оба модуля готовы принять участие в передаче. Однако во многих ситуациях один или оба обменивающихся дан- ными модуля должны взаимодействовать сразу с несколькими внеш- ними компонентами, время срабатывания которых неизвестно или меняется. Например, посылающий модуль может получать эти дан- ные от измерительного прибора (скажем, цифрового вольтметра), ко- торый срабатывает при определенных внешних событиях. Точно так же принимающий модуль может передавать данные какому-либо управляемому устройству (например, регулятору скорости мотора), которое принимает новые данные только в определенных условиях. В таких случаях синхронная работа шин неприемлема, поскольку управляющий модуль не может предугадать момент для выдачи стро- бирующего импульса. Можно создать шины, работающие в асинхронном режиме. Коорди- нация действий -отправителя и получателя должна опираться при этом не на стробирующие сигналы от управляющего модуля, а на исполь- зование линий, отражающих состояние участвующих в обмене дан- ными модулей. Одна из возможных схем изображена на рис. 5.47. В ней две линии ростояния: «(готовность отправителя» и «готовность получателя». Кроме того, в ней п линий для информации и две стробирующие ли- нии: «строб отправителя» и «строб получателя». Как и прежде, управ- ляющий модуль указывает на модуль-отправитель, подавая его адрес
5.7. ШИНЫ УПРАВЛЯЮЩИЙ МОДУЛЬ Рис. 5.47. Параллельная асинхронная шина. на информационную шину и возбуждая строб отправителя. Анало- гично управляющий модуль указывает на модуль-получатель, подавая его адрес на информационную шину и возбуждая строб получателя. Выбранный модуль-отправитель, посылая сигналы по линии «готов- ность отправителя», сообщает о доступности посылаемых данных. Выбранный модуль-получатель, посылая сигналы по линии «готов- ность получателя», сообщает о возможности принять данные. Координация действий двух выбранных модулей преследует две цели: 1. Передача слова данных должна происходить как можно раньше после того, как обе стороны готовы к передаче. 2. Каждое слово данных должно передаваться один раз и не более. Для гарантированного достижения этих целей предписывается четкая последовательность обмена сигналами по линиям состояния. Часто ее называют рукопожатием. Опишем одну из возможных, но не единственно возможную последовательность. Как показано на рис. 5.48, в начальный момент времени, когда отправитель не готов к передаче данных, линия «готовность отправителя» содержит логиче- ский 0. При этом получатель поддерживает логический 0 на линии «готовность получателя» независимо от своей фактической готовности к приему данных. : Как только отправитель получит данные, которые подлежат пере- даче', он устанавливает на линии «готовность отправителя» логите*
208 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ Готовность отправителя Га,, явность получателя Отправитель еотавит очередное слова Отправитель приготовил слово и ждет, пока получатель вор а во тает предыдущее <с\ Слово передается по шине 7п 'Передача слова завершена, получатель овраватывает слова Рис. 5.48. Последователь- ность «рукопожатия» для асинхронной шины на рис. 5.47. скую 1. В ответ на такое изменение состояния получатель, как только окажется готовым к приему, устанавливает на линии «готовность получателя» логическую 1 (это может произойти сразу же, если полу- чатель уже был готов к приему). Когда на обеих линиях логические 1, происходит передача слова данных между отправителем и получате- лем. Как только получатель примет слово, он снова устанавливает О на линии «готовность получателя». В ответ на это отправитель уста- навливает на линии «готовность отправителя» 0. Причем, пока такой переход к 0 в линии готовности отправителя не произойдет, в полу- чателе блокируется выдача готовности в ответ на готовность отправи- теля. При таком «рукопожатии» получатель узнает о том, что новое слово готово для передачи в отправителе, а отправитель узнает о том, что слово уже принято получателем. Более того, как показывает рис. 5.48, сигналы на линиях состояния в любой момент однозначно определяют действия, которые должны выполнять оба модуля. УПРАЖНЕНИЯ 5.1. Два вентиля ИЛИ-НЕ соединены крест-накрест, как показано на рис. У5.1. Может ли эта схема служить триггером? Если может, обозначьте входы и выходы. Рис. У5.1. 5.2, Сконструируйте двухтактный D-триггер, воспользовавшись в каждой сек- ции схемой У5.1,
УПРАЖНЕНИЯ 209 5.3. Добавив необходимые вентили, преобразуйте двухтактный Т-триггер в D-триггер. Аналогичным образом преобразуйте тип Т в JK и D в 5/?. 5.4. Для всех ли из перечисленных ниже применений необходим двухтактный триггер, а не простой синхронный фиксатор? Объясните почему. (а) Синхронный двоичный счетчик. (б) Сдвиговый регистр. (в) Запоминающий регистр для хранения данных, выводимых только на индикатор. (г) Запоминающий регистр для хранения вводимых в систему данных. (д) Запоминающий регистр для хранения промежуточных результатов в синхронной системе. 5.5. Сконструируйте схему загрузки (см. разд. 5А&) для запоминающего регистра на Т-триггерах. 5.6. Сконструируйте четырехразрядный синхронный двоичный вычитающий счетчик на двухтактных Т-триггерах, . 5.7. Сконструируйте четырехразрядный двоичный вычитающий счетчик с после- довательным переносом. 5.8. Постройте синхронный двоично-кодированный счетчик по модулю 12 на двухтактных 71-триггерах. 5.9. Постройте дешифратор «1 из 8», пользуясь только инверторами и двухвходо- выми вентилями И. 5.10. Сформируйте дешифратор «1 из 16», используя только дешифраторы «I из 4» с линиями разрешения. 5.11. Выпишите булевы выражения в виде суммы произведений для управления семисегментными индикаторами, рассмотренными в разд. 5.4. Воспользуйтесь табл. 5.7, предполагая, что отсутствующие 6 входных комбинаций никогда не встре- чаются. 5.12. Спроектируйте дешифратор для семисегментного индикатора, который поз- волял бы выводить 16 различимых символов для шестнадцатеричных цифр. 5.13. Спроектируйте схему декадного сумматора в виде модуля, допускающего покаскадное объединение в многоразрядный десятичный сумматор. Модуль, как по- казано на рис. У5.13, должен иметь по 4 входные линии для каждого из двух десятич- ных операндов в коде 8421 BCD и 4 выходные линии для суммы в том же коде. Должна быть предусмотрена линия для входного переноса и линия для выходного переноса. На выходных линиях для суммы должна формироваться сумма по модулю 10 двух Рис. У 5.13,
210 ГЛ. 5. ТИПОВЫЕ ЛОГИЧЕСКИЕ УЗЛЫ входных цифр и входного переноса. Выходной перенос должен быть равен 1, если сумма входных операндов превышает 9. При проектировании воспользуйтесь процедурой сложения, описанной в разд. 2.7. А именно, сначала сложение выполняется на двоичном сумматоре с по- следовательным переносом. Затем результат, если он превышает 9, корректируется схемой коррекции. 5.14. Напишите выражение для с5 в сумматоре с ускоренным переносом из разд. 5.6. 5.15. Спроектируйте общую шину, связывающую четыре модуля. Каждый мо- дуль должен содержать четырехразрядный запоминающий регистр, способный как принимать информацию с шины, так и посылать ее на шину. Дополнительный цент- ральный модуль должен указывать на модуль-отправитель и модуль-получатель при помощи отдельных управляющих линий. Для этого включите в центральный модуль два дешифратора «1 из 4», выходные линии которых ведут к отдельным модулям. На входы дешифраторов должны поступать внутренние сигналы центрального модуля, задающего посылающий и принимающий модули. 5.16. В разд. 5.7 говорилось о том, как с помощью ТТЛ-вентилей И-НЕ с откры- тым коллектором можно подключать выходы регистров к линиям шины. Для компен- сации инверсии сигнала в вентиле И-НЕ использовались выходы Q регистра. Кроме того, на вентили И-НЕ подавался сигнал с управляющей линии, который при значе- нии 1 вызывал передачу содержимого регистра на шину. (а) Найдите другую базисную логическую операцию, реализуемую ТТЛ-вентилем с открытым коллектором и пригодную для подключения регистра к шине. Покажи- те, как такой вентиль может подключаться и работать. (б) Покажите, как можно подключить регистр к шипе при помощи ЭСЛ-вентилей ИЛИ-HE с открытым эмиттером. (в) Найдите вторую базисную логическую операцию для ЭСЛ-вентиля с открытым эмиттером. Покажите, как можно с его помощью подключить регистр к шине.
Глава 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Запоминающее устройство (ЗУ), или память,— это усфойство, с по- мощью которого информация существует во времени, точнее, пере- дается от одного момента к другому. Направление передачи, конечно, совпадает с направлением движения реального времени, а именно с движением вперед. Следовательно, ЗУ можно считать каналом, ко- торый позволяет передать в будущее информацию, сгенерированную в настоящем. Все последовательностные схемы и компьютеры в том числе, обладают свойством запоминания, и это позволяет их выходам в данный момент зависеть от входов в предыдущие моменты. Вообще говоря, этим свойством схемы обязаны запоминающим элементам, например триггерам. В этой главе в центре нашего внимания будут структуры запоминающих устройств, состоящих из большого числа запоминающих элементов с некоторой регулярной структурой. Организация запоминающего устройства определяет способы пере- дачи информации в устройство и из него. Обычно информация переда- ется порциями, состоящими из фиксированного числа битов и назы- ваемыми словами. ЗУ можно представлять себе в виде некоторого прост- ранства, состоящего из множества идентифицируемых позиций для размещения слов. В некоторых ЗУ на каждую такую позицию отводятся свои фикси- рованные запоминающие элементы. В этом случае местоположение запоминающих элементов однозначно определяет позицию слова, называемую ячейкой. В других ЗУ слова перемещаются относительно множества запоминающих элементов, сохраняя упорядоченность от- носительно друг друга. В этом случае позиция слова идентифицируется как временем, так и местоположением запоминающих элементов. Во всех случаях, когда слово информации передается в ЗУ, оно поме- щается в некоторую конкретную позицию. Этот процесс называется записью в память. С другой стороны, когда информация передается из памяти, она также выбирается из некоторой конкретной позиции (обычно информация в этой позиции сохраняется). Этот процесс назы- вается считыванием из памяти. Существуют различные способы выбора той позиции, для которой производится операция записи или чтения. Средства выбора позиции и передачи информации в позицию или из нее образуют средства доступа (или выборки). ЗУ делятся на два главных типа: ЗУ с произ-
212 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА вольным доступом и ЗУ с последовательным доступом. К первому типу относят ЗУ, в которых доступ к любой позиции требует примерно одного и того же времени. Другими словами, мы можем наугад выб- рать позицию, и это не отразится на времени, которое затрачивается на чтение или запись. Ко второму типу относят ЗУ, доступ к которым возможен лишь в определенном порядке. В последующих разделах мы рассмотрим ЗУ обоих названных типов. 6.1. ОРГАНИЗАЦИЯ ЗУ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ Память с произвольным доступом — это такое ЗУ, в котором эле- мент данных, запомненный в ячейке, может быть непосредственно считан. Время, необходимое для выборки данной ячейки, оказывается примерно тем же, что и для любой другой ячейки. Каждая ячейка содержит фиксированное число запоминающих элементов и имеет свой идентифицирующий номер. Идентифицирующий номер, состоящий из фиксированного числа битов, называется адресом ячейки. Наличие адресов позволяет различать ячейки при обращении к ним для выпол- нения операций записи и чтения. В общем случае ЗУ с произвольным доступом состоит из несколь- ких блоков, или модулей. Для полупроводниковой памяти модули обычно реализуются в виде отдельных интегральных схем. Состав и функции внешних сигнальных линий выбираются с таким расчетом, чтобы облегчить работу в системе с шинной организацией связей. В число таких линий входят линии для задания адреса слова, к кото- рому производится обращение, линии, по которым передаются дан- ные в модуль или из модуля, и несколько управляющих линий, по- зволяющих задать нужную операцию (запись или чтение). Существует довольно много разновидностей модулей с набором внешних сигналов, соответствующих различным типам шин, однако большинство модулей можно отнести к одной из двух основных моде- лей, показанных на рис. 6.1. Различаются они только линиями данных. У модели на рис. 6.1(a) имеется лишь один комплект линий данных, по которым передаются как поступающие данные при записи, так и выдаваемые данные при чтении. Модель на рис. 6.1(6) содержит два раздельных комплекта линий для поступающих и выдаваемых данных. Обе модели имеют комплект адресных линий, сигналы на которых определяют ячейку, к которой осуществляется обращение для считыва- ния или записи данных. В обеих моделях управляющая линия «запись» задает режим записи («запись»=1) или режим чтения («запись» = =0). Наконец, управляющая линия «выборка модуля» в обоих слу- чаях либо разрешает выполнение операции чтения/записи в данном модуле («выборка модуля»=1), либо запрещает ее выполнение («вы- борка модуля»=0). Для того чтобы модули памяти, соответствующие любой из двух моделей, можно было включать в многомодульную систему ЗУ с шин-
6.1. ЗУ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ 213 Рис. 6.1. Линии внеших сигналов в модулях памяти с произвольным доступом, (а) Мо- дуль с двунаправленными линиями данных, (б) Модуль с раздельными линиями для поступающих и выдаваемых данных. ной организацией, на линиях выдачи данных (т. е. на линиях дан- ных в модели рис. 6.1 (я) и на линиях выходных данных в модели на рис. 6.1(6)) используются вентили, допускающие монтажною логику. Модуль памяти любой модели выдает данные на выходные линии толь- ко при чтении; во всех остальных ситуациях этими линиями могут пользоваться другие модули памяти или устройства, подключенные к линиям. Это особенно важно для случая на рис. 6.1(a), посколь- ку при записи для передачи данных в ЗУ должны использоваться те же линии. Состояние линий выходных данных, когда в модуле не выполняет- ся чтение, конечно, зависит от типа монтажной логики. Например, для монтажного И на схемах ТТЛ с открытым коллектором состояние на свободной линии должно соответствовать логической 1, поскольку в данном случае 0 доминирует над 1 и, следовательно, другое устрой- ство или модуль памяти сможет задать нужное ему состояние на ли- нии. Для монтажного ИЛИ свободное состояние должно быть логиче- ским 0. Для тристабильной монтажной логики свободное состоя- ние — это, конечно, третье состояние с высоким импедансом, экви>- валентное отсутствию соединения с линией. В любом случае линия выходных данных оказывается в свободном состоянии, когда либо подана логическая 1 на линию «запись», либо подан логический 0 на линию «выборка модуля». Внутренняя организация ЗУ с произвольным доступом Рассмотрев внешние характеристики типичных модулей памяти с произвольным доступом, перейдем теперь к их внутренней орга- низации. Одна из возможных схем, позволяющая выбирать нужную ячейку и осуществлять передачу информации в нее или из нее, пред-
214 ГЛ 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА п Адресных ДИНИЙ Вх Вых Вх Вых Вх Вых ЛИНИИ ДАННЫХ Выборка слова Рие, 6.2. Внутренняя организация модуля памяти с произвольным доступом;
6.L ЗУ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ 215 ставлена на рис. 6.2. В запоминающем элементе для хранения одного бита слова применяется асинхронный 7?£-триггер. Помимо триггера, каждый запоминающий элемент содержит вентили для передачи ин- формации между триггером и внутренними линиями данных. Одна из двух операций, чтение или запись, выполняется одновре- менно для всех элементов одной «строки». Каждая «строка» представ- ляет собой ячейку для хранения слова и имеет свой адрес. Дешифра- тор «1 из 2"» служит для выбора ячейки по заданному адресу. На п входных линиях дешифратора возможны 2" комбинаций. Именно на них подается адрес нужной ячейки. Выходные 2" линий дешифратора называются линиями выборки слова. В зависимости от поданной на вход дешифратора комбинации какая-то одна линия выборки слова получает значение логической 1, а все остальные — логического 0. Каждая линия выборки слова используется как линия, разрешающая операцию чтения или записи во всех элементах строки. В каждом столбце имеются по две внутренние линии: одна — для передачи данных в память (вход), а другая — из памяти (выход). Состояние линии «выход» определяется состоянием запоминающего элемента в выбранной строке. Для этого выход триггера в каждом элементе логически умножается на сигнал «выборка слова», а логиче- ская сумма всех результатов поступает в линию «выход». Таким обра- зом, чтение слова из памяти осуществляется подачей адреса нужного слова на вход дешифратора и наблюдением состояния на линиях «выход». Линия «вход» каждого столбца используется для передачи инфор- мации в запоминающий элемент выбранной строки при выполнении операции записи. Это осуществляется с помощью двух вентилей И на каждый запоминающий элемент, которые при наличии сигналов «выборка слова» и «запись» передают сигнал из линии «вход» на вход S триггера, а его дополнение — на вход /?. Таким образом, запись слова в память производится заданием адреса нужной ячейки на входе' дешифратора, а записываемого слова — на линии «вход» и затем — логической 1 на управляющей линии «запись». Нужно обратить внимание, что в приведенном выше описании фи- гурировали сигналы на линиях «запись», «вход» и «выход», являю- щиеся внутренними для модуля памяти. Эти сигналы связаны с внеш- ними по отношению к модулю сигналами с помощью соответствующих вентилей и буферных схем. Такая связь может быть реализована раз- личными способами в зависимости от требуемых внешних характерис- тик модуля. Например, внешние характеристики модуля на рис. 6.1(a) можно получить с помощью схемы рис. 6.3. На ней три внешние линии:' «запись», «выборка модуля» и «данные». Внутренний сигнал «запись»1 получается как И от внешних сигналов «запись» и «выборка модуля». Внутренние линии «вход данных» и «выход данных» для каждого бита' в слове соединяются с внешней линией «данные» через входную буфер-
216 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Рис. 6.3. Связь между внешними и внутренними сигналами в модуле памяти. ную схему и тристабильный выходной формирователь, как показа- но на рисунке. Тристабильный формирователь управляется сигналом И от сигнала «выборка модуля» и инверсии сигнала «запись». Таким образом, внешняя линия данных работает как двунаправленная, пода- вая информацию на линию входа данных при записи и принимая ин- формацию с линии выхода данных при чтении. Двумерная адресация Недостаток рассмотренной схемы ЗУ произвольного доступа свя- зан с большим размером адресного дешифратора. Например, при п= 10 адресный дешифратор должен иметь 210= 1024 выхода. Каждый выход должен быть соединен с запоминающим элементом в строке. Коли- чество связей можно уменьшить, если часть функций дешифратора передать самому запоминающему элементу. Чтобы показать, каким образом это может быть сделано, возьмем один столбец ЗУ с организацией, приведенной на рис. 6.2, и построим из него прямоугольную матрицу. При п= 10 число запоминающих j элементов равно 210. Можно построить матрицу размером 25х25 или > в общем случае 2тх2п~т, как показано на рис. 6.4. Каждый элемент исходного столбца теперь лежит на пересечении новых строки и столб-
6.к ЗУ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ 217 Рис. 6.4. Двумерная адресация в ЗУ с произвольным доступом. ца прямоугольной матрицы. Возьмем два дешифратора с п/2 вход- » ными и 2"'2 выходными линиями в каждом (будем считать, что п четно и матрица квадратная). При /7=10 число 2"/2 равно 32. Выходные ли- нии одного дешифратора будут служить для выборки строки, а дру- гого — для выборки столбца матрицы. Общее число выходных линий в дешифраторах при таком подходе равно 2"/2 +2"/2=2л/2+1, что существенно меньше 2п линий при одном адресном дешифраторе. В каждом запоминающем элементе должна выполняться операция И над линиями выборки строки и столбца. Эта операция даст логи-
КВ ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА рис. 6.5. ЗУ с двумерной адресацией и двунаправленной линией данных. Показана плоскость одного бита всех слов,
6.1. ЗУ С ПРОИЗВОЛЬНЫМ ДОСТУПОМ 21$ ческую 1 только для одного элемента, находящегося на пересечении выбранных строки и столбца, и логический 0 для всех остальных эле- ментов, поскольку для них либо сигнал выборки столбца, либо строки будет равен 0. Выходной сигнал вентиля И выполняет функции сиг- нала выборки бита, который разрешает чтение или запись в данном элементе. Аналогичные двумерные матрицы нужны для всех остальных би- тов в слове. Матрицы можно считать лежащими в параллельных плоскостях. Оба адресных дешифратора работают сразу на все плос- кости, таким образом, все биты ячейки адресуются одновременно- Полезно обратить внимание на то, что число выходных линий в де- шифраторах при этом не увеличивается. ЗУ с внутренней двунаправленной шиной данных Дальнейшее снижение числа внутренних связей в модуле памяти с произвольным доступом можно получить за счет внутренних вход- ных и выходных линий данных, показанных на рис. 6.2. Для этого обе линии данных каждого бита слова заменяются одной двунаправлен- ной линией. При записи информация посылается по этой линии в выбранную ячейку. При чтении информация из выбранной ячейки выдается на эту же линию. Здесь вполне применима монтажная ло- гика и методика ее использования, описанная в гл. 5 в разделах, по- священных' шинам. Применение монтажной логики позволяет полу- чить еще и дополнительную экономию в связи с тем, что становятся ненужными вентили ИЛИ, присутствующие в каждом запоминающем элементе на схеме рис. 6.2 и связывающие все элементы столбца с вы- ходной линией данных. Такая схема модуля памяти приведена на рис. 6.5. На том же ри- сунке приведена логическая схема запоминающего элемента с изме- нениями, требующимися для двумерной адресации и для работы с од- ной двунаправленной линией данных. Сигнал «запись» определяет направление передачи по линии данных. Логическая 1 на линии «запись», как и прежде, разрешает передачу данных в запоминающий элемент выбранной ячейки. Логический 0 разрешает обратную пере- дачу. Это обеспечивается наличием в каждом запоминающем элементе вентиля И, на входы которого подаются три сигнала: инверсия «за- писи», «выборка бита» и,выход триггера. Здесь применяется специаль- ный вентиль И, позволяющий получить монтажное ИЛИ. Соедине- ние выходов вентилей И с линией данных дает монтажное ИЛИ этих выходов. Выборка столбца с помощью селектора данных Последняя рассмотренная схема часто встречается в варианте, представленном на рис. 6.6. Как следует из рисунка, здесь также ис-; пользуется двумерная адресация запоминающих элементов. Однако^
220 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА ЛИНИИ ЛИНИИ АДРЕСА СТОЛБЦА Рис. 6.6. Двумерная матрица для одного бита памяти с произвольным доступом при использовании селектора данных для выборки столбца. вместо того чтобы выделять выбранный столбец в самом запоминаю- щем элементе, выделение столбца делается «на границе матрицы» в специальном двунаправленном селекторе данных. Строка выби- рается обычным способом. Данные между элементами и селектором в каждом столбце передаются по отдельным двунаправленным ли- ниям. При чтении по линиям, соответствующим столбцам, содержимое всех элементов строки посылается в селектор, а селектор уже выби- рает бит одного столбца в соответствии с заданным адресом и выдает этот бит на выходную линию данных. При записи селектор возбуждает линию только одного столбца, соответствующего заданному адресу, подавая в нее значение входной линии данных. Это значение домини- рует над значением, которое выдает в линию элемент выбранной строки. Специальные схемы в запоминающем элементе осуществляют как доминирование («старшинство») поступающего извне значения, так и сохранение этого значения в запоминающем элементе выбранной строки. В результате достигается дальнейшее снижение числа соеди-
6 2. ЭЛЕКТРОННЫЕ СХЕМЫ ОПЕРАТИВНОЙ ПАМЯТИ 221 нений, поскольку с помощью одной линии на столбец выполняется и выборка столбца, и передача данных. Рассмотренные схемы позволяют понять общие принципы работы запоминающих устройств с произвольным доступом. Они обладают возможностями как запоминать информацию в заданной ячейке, так и получать ее из заданной ячейки. Такие ЗУ называются ЗУ со считы- ванием и записью или оперативными ЗУ, сокращенно ОЗУ х). Во мно- гих ситуациях желательно получать информацию из заданных ячеек, не имея возможности изменить их содержимое. ЗУ такого типа назы- вают постоянными ЗУ или, сокращенно, ПЗУ 2). Постоянные ЗУ мы рассмотрим в разд. 6.3, а сейчас остановимся на некоторых электрон- ных схемах оперативной памяти. 6.2. ЭЛЕКТРОННЫЕ СХЕМЫ ОПЕРАТИВНОЙ ПАМЯТИ По способу хранения информации в запоминающих элем-ентах по- лупроводниковые ОЗУ делятся на две основные категории: статичес- кие и динамические. Статические элементы способны хранить инфор- мацию как угодно долго, пока подается электропитание. Всерассмот- ренные нами триггеры обладали этим свойством. • •• Динамические запоминающие элементы, напротив, способны хра- нить информацию только короткое время. Поэтому для сохранения информации ее нужно периодически обновлять, или, другими сло- вами, регенерировать. В качестве динамического элемента, храня- щего бит информации, можно воспользоваться заряженным конден- сатором. Использование динамических элементов приводит к упро- щению схем, снижению потребляемой мощности, а иногда и к повы- шению скорости работы. Для обеих категорий оперативных ЗУ уже существует много раз- личных электронных схем и еще больше, по-видимому, появится в бу- дущем. Их разнообразие отражает не только разнообразие технологий (ТТЛ, МОП, КМОП, ЭСЛ и т. п.) и конструкций, но еще и разнооб- разие требований, предъявляемых к модулям памяти в отношении быстродействия, емкости, плотности упаковки логических элементов и потребляемой мощности. Для иллюстрации мы выбрали и рассмотрим в этом разделе три типичных примера схем, хотя, конечно, из различных технических описаний можно получить детальные сведения о многих других ва- риантах ОЗУ. В качестве примеров мы выбрали статическое ОЗУ на ТТЛ-схемах, а также статическое и динамическое ОЗУ на МОП-с се- мах. Иногда такие ЗУ называют «Запоминающими Устройствами с Произвольной Выборкой — ЗУПВ». В английской литературе к ЗУ описанного типа применяют аббревиатуры RWM (от Read/Write Memory ) и RAM (от Random Access Memory).— Прим, перев. 2> Эквивалентный английский термин — ROM (от Read Only Memory).— Црим> перев.
222 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Статическое ОЗУ на ТТЛ-схемах На рис. 6.7 показана конфигурация модуля статического ОЗУ на ТТЛ-схемах и электронная схема каждого запоминающего элемента. В схеме два транзисторных каскада, соединенных крест-накрест и способных находиться в двух устойчивых состояниях. В каждом тран- зисторе по два эмиттера, что позволяет осуществлять как хранение информации, так и выборку элемента. Такой транзистор открыт, т. е. проводит ток, если открыт (имеет прямое смещение) хотя бы один переход база-эмиттер. Следовательно, состояние транзистора зависит от того из двух эмиттеров, на котором потенциал ниже. Если строка, где находится рассматриваемый запоминающий эле- мент, не выбрана, то соответствующая линия выборки несет низкий потенциал, и он подается на нижние по схеме эмиттеры. В этом слу- чае схема ведет себя, как обычная бистабильная схема, и сохраняет то состояние, в которое она была установлена раньше. А именно если транзистор 1\ открыт, то его коллектор и, следовательно, база тран- зистора Т2 имеют низкий потенциал. При этом Т2 окажется закрытым, что приведет к высокому потенциалу на его коллекторе и базе Т\. Высокий потенциал на базе Л означает, что 7\ открыт, как и было предположено сначала. Таким образом, это состояние стабильно, т. е. самоподдерживается. В силу симметрии противоположное состояние, когда Л закрыт, а Т2 проводит, также стабильно. «Легко видеть, что наша схема аналогична обычному триггеру, составленному из двух вентилей И-НЕ, соединенных крестообразно. Фактически каждый транзисторный каскад нашей схемы выполняет функцию двухвходо- вого вентиля И-НЕ. С другой стороны, если строка с данным элементом выбрана, то линия выборки и нижние эмиттеры транзисторов имеют высокий по- тенциал. Следовательно, проводимость транзистора будет зависеть от верхнего эмиттера. На верхний эмиттер транзистора Т2 подан фик- сированный уровень 1.5 В. Поэтому состоянием схемы можно управ- лять, меняя потенциал верхнего эмиттера в транзисторе 7\ относи- тельно уровня 1.5 В. Если на линию данных подать низкий уровень, то Л станет про- водящим. Это справедливо, так как потенциал коллектора Т2, равный потенциалу базы Т19 должен быть выше 1.5 В, и это гарантирует пря<г мое смещение верхнего перехода, база-эмиттер, достаточное, чтобы; открыть транзистор Л. Проводимость 7\ приводит к низкому по- тенциалу на базе Т2 и к его закрытию. Это состояние схемы ассоции- руется с логической 1. В противоположное состояние схему можно привести, если оста- вить верхний эмиттер 7\ «свободным» (плавающим). В этом случае Ti будет закрыт, что приведет к высокому потенциалу на его коллек- торе и базе Т\. Следовательно, Т2 будет открыт. Это состояние ассо- циируется с логическим 0.
ГСС*+5В Линия Выборки строки 2я-! + 1.5 В Линия данных Замечание: Если запись = 0, то усилитель считывания номинально поддерживает1 на своей входной линии потенциал 1.5 В. Поэтому содержимое считываемого • элемента не разрушается Входные данные Открытый коллектор Запись Усилитель считыва- ния Выходные данный Рис. 6.7. Статическое ОЗУ на ТТЛ-схемах.
224 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА В каждом столбце на линию данных, подсоединенную к верхним эмиттерам всех транзисторов Tlf работает вентиль И-НЕ с открытым коллектором. На один вход этого вентиля подается сигнал с линии «входные данные», т. е. с источника бита, записываемого в рассмат- риваемом столбце, а на другой вход подается сигнал «запись». Если значение сигнала «запись» равно логической 1, то логическая 1 на линии «входные данные» дает низкий потенциал на выходе вентиля И-НЕ, что приводит выбранный запоминающий элемент в состояние Г; с другой стороны, при логическом 0 на линии «входные данные» выход вентиля остается «свободным» (плавающим), что приводит выбранный запоминающий элемент в состояние 0. Если же на линии «запись» логический 0, то запись не должна производится и ни один элемент не должен менять своего состояния,. Более того, в этой ситуации может выполняться операция чтения1. Для достижения обеих этих целей в каждОхМ столбце предусмотрен специальный усилитель считывания, реагирующий на ток. Разрешают щим сигналом для этого усилителя является логический 0 в линии «запись». Когда усилитель открыт, он поддерживает потенциал в ли- нии данных для столбца близким к 1.5 В. Это обеспечивает неизмен- ность состояния запоминающего элемента в выбранной строке, по- скольку оба его верхних эмиттера имеют равные потенциалы. Более того, усилитель реагирует на наличие тока в линии данных столбца и выдает на линию «выходные данные» соответствующее напряжение^ Если транзистор 7\ в выбранном элементе проводит, что соответ- ветствует состоянию 1, ток идет через верхний эмиттер, поскольку на нижний эмиттер подан высокий потенциал. Этот ток, проходя через линию данных и усилитель считывания, даст логическую 1 на линии «выходные данные». Если же выбранный элемент хранит 0, то 7\ не проводит, и отсутствие тока через усилитель устанавливает логиче- ский 0 в линии «выходные данные». Подведем итоги. Чтобы выполнить операцию записи в рассматри- ваемом модуле памяти, прежде всего нужно задать адрес для выборки строки. Затем нужно установить логическую 1 на линии «запись» и подать записываемые данные на линию «входные данные». При этом элемент в выбранной строке примет состояние, соответствующее за- писываемым данным. Состояние элементов в невыбранных строках не изменится. Для выполнения операции чтения нужно поддерживать логический 0 на линии «запись» и задать адрес для выборки строки. Откликнется только элемент в выбранной строке. Состояние этого элемента будет определено по току транзистора 7\. Соответствующее логическое значение при этом появится на линии «выходные данные». Столбцы в описанной конфигурации можно трактовать двумя раз- ными способами. Во-первых, их можно считать различными битами одного слова памяти. В этом случае столбцы работают независимо, как показано на рис. 6.7. Во-вторых, их можно рассматривать как содер- жащие один и тот же разряд от разных слов памяти. В этом случае
6.2. ЭЛЕКТРОННЫЕ СХЕМЫ ОПЕРАТИВНОЙ ПАМЯТИ 225 нужно использовать двунаправленный селектор данных для того, чтобы задать нужный столбец по адресу столбца, как было показано на рис. 6.6. Статическое ОЗУ на МОП-схемах На рис. 6.8 показана некоторая конфигурация модуля статической памяти на МОП-схемах. Как и в предыдущем примере, каждый запо- минающий элемент является бистабильной схемой, или триггером. В нем два соединенных крест-накрест транзисторных каскада, но тран- зисторы, естественно, не биполярные, а полевые. Транзисторы на рисунке нормально закрытые n-канальные (работающие в режиме обогащения), хотя выпускаются ЗУ и с другими типами транзисторов. Показанный на схеме нагрузочный резистор обычно реализуется так- же в виде транзистора по аналогии с тем, как это делалось для МОП- вентилей. Основное отличие между схемами, изображенными на рис. 6.7 и 6.8, помимо различия в типах транзисторов, заключается в способе доступа к запоминающим элементам. В памяти с МОП-элементами для передачи информации к элементу и от элемента выбранной строки в каждом столбце используются две линии, работающие в противо- фазе, или парафазно. Элементы в столбцах подключаются к линиям данных через n-канальные, нормально закрытые МОП-транзисторы. Эти подключающие транзисторы выполняют функции двусторонних ключей в том смысле, что как ток, так и информация может течь в обоих направлениях. Это возможно, поскольку подложки транзис- торов подсоединены к земле, а не к истоку. Когда на затвор подано достаточное положительное напряжение, между истоком и стоком возникает проводимость. Транзистор в этом случае проводит в обоих направлениях, поскольку симметрия транзистора позволяет истоку и стоку при необходимости меняться ролями. Затворы подключающих транзисторов соединены с соответствую- щими линиями выборки строк, которые, как и прежде, являются выходами адресного дешифратора. Следовательно, открытыми ока- зываются подключающие транзисторы только в выбранной строке, определенной поданным на дешифратор адресом. Таким образом обес- печивается связь между линиями данных и выбранными элементами в каждом столбце. Запись осуществляется подачей низкого потенциала на одну из двух парафазных линий в каждом столбце в соответствии со значением на линии входных данных. Благодаря этому в запоминающем эле- менте выбранной строки устанавливается нужное состояние. Парафаз- ные линии данных управляются МОП-транзисторами. Затворы этих транзисторов соединены с выходами вентилей И, определяющих ус- ловия, при которых транзисторы должны быть открыты. Линия «за- пись» соединена со входами обоих вентилей, а линия «входные данные* 8 № 592
Линия выборки строки О ДРУГИЕ Линии выборки строки 2Л~7 Левин линия данных Рис. 6.3. Статическое ОЗУ на МОП-схемах»
6.2. ЭЛЕКТРОННЫЕ СХЕМЫ ОПЕРАТИВНОЙ ПАМЯТИ 227 соединена с правым вентилем непосредственно, а с левым через ин- вертор. Таким образом, когда на линии «запись» логическая 1 и на линии «входные данные» логическая 1, на затворе правого транзистора будет высокий потенциал, и транзистор будет открыт. В результате правая половина запоминающего элемента окажется под низким потенциа- лом, а левая — под высоким. Это стабильное состояние соответствует запомненной логической 1. Если же на линии «входные данные» будет логический 0, а на линии «запись» — логическая 1, то открытым ока- жется левый транзистор, благодаря чему в выбранном запоминающем элементе устанавливается стабильное состояние, соответствующее ло- гическому 0. Если на линии «запись» логический 0, то оба управляющих тран- зистора закрыты, и состояние запоминающих элементов не меняется. На линиях данных в столбце при этом будут значения, соответствую- щие состоянию элемента в выбранной строке, поскольку подключаю- щие транзисторы этого элемента открыты. В частности, значение на левой линии будет равно запомненному в элементе значению. Следо- вательно, операция чтения сводится к определению значения на ле- вой линии, когда сигнал «запись» равен логическому 0. Динамические ОЗУ на МОП-схемах На рис. 6.9 показан модуль динамической памяти на МОП-схе- мах. В основе запоминающего элемента лежит конденсатор и один МОП-транзистор (Т2). На схеме конденсатор показан в виде отдель- нсго прибора, включенного между затвором и истоком транзистора Т2, хотя фактически его функщ и выполняет емкость затвор-подложка, которая существует в любом МОП-транзисторе за счет параллельного расположения электрода затвора по отношению к подложке. Хране- ние данных в таком запоминающем элементе связано с состоянием проводимости Т2, которое определяется зарядом конденсатора. Если заряд конденсатора обеспечивает достаточный положительный по- тенциал на затворе Т2, то Т2 проводит. Это состояние ассоциируется С логическим 0 и не является самоподдержиЁающимся, поскольку конденсатор постепенно саморазряжается. Если же заряд конденса- тора мал или отсутствует, то Т2 не проводит. Это состояние ассоции- руется с логической 1 и является самоподдерживающимся. Кроме конденсатора и транзистора Т2, в каждом запоминающем элементе присутствуют два транзистора для подключения элемента к линиям данных. В каждом столбце две такие линии: одна для за- писи данных в выбранный элемент («запись данных»), другая для счи- тывания данных из выбранного элемента («чтение данных»). Транзис- тор 7\ выполняет функции двустороннего ключа для подключения линии «запись данных» к конденсатору элемента. Если Л активи- рован, то конденсатор можно зарядить или разрядить через эту ли- 8*
228 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Линия выборки строки О А0 с Ai-1 Запись ДРУГИЕ СТОЛБЦЫ Выходные данные £ ! Линия выборки строки 1 Линия выборки строки 7Л~ Записи ОШЬ!Х Входные данные Чтение данных Рис. 6.9t Динамическое ОЗУ на МОП-схемах.
6 2. ЭЛЕКТРОННЫЕ СХЕМЫ ОПЕРАТИВНОЙ ПАМЯТИ 229 нию. Транзистор Т2 подключает линию «чтение данных» к стоку Т2. Если Т3 открыт, то состояние запоминающего элемента опрашивается через линию «чтение данных». Управляются транзисторы 7\ и Т3 соответствующими линиями выборки строк от дешифратора адреса строки. В процессе функционирования данные передаются на конденсатор элемента независимо от вида обращения, т. е. и при записи, и при чтении. При зациси данные на конденсатор поступают по л.инии «вход- ные данные», и в этом случае они замещают данные, которые были раньше. При чтении Данные на конденсатор поступают от самого эле- мента по линии чтения. Таким образом, как можно видеть на рис. 6.9, при чтении возникает цепь обратной связи для данных. Выбор данных, посылаемых на конденсатор, осуществляется се- лектором данных из четырех вентилей, работающим на линию «запись данных». Сигнал в линии «запись» управляет селектором, переклю- чая его либо на «входные данные», либо на «чтение данных». Причем при любом источнике данных сигнал инвертируется, поскольку высо- кое напряжение на конденсаторе соответствует логическому 0, и это противоречит обычным соглашениям в отношении линий данных. Состояние проводимости транзистора Т2 в выбранном элементе преобразуется в напряжение на линии «чтение данных» при помощи нагрузочного резистора. Если Т2 проводит, что соответствует состоя- нию 0, на линии будет низкий потенциал. В противном случае благо- даря резистору линия будет под высоким потенциалом. Как мы отмечали, состояние элемента, хранящего логический О, не является самоподдерживающимся, поскольку конденсатор из-за утечек постепенно разряжается. Через некоторое время заряд дости- гает такого уровня, что состояние становится неотличимым от состоя- ния логической 1. До того как это произойдет, нужно регенерировать элемент, выполнив операцию чтения. Следовательно, модули динами- ческой памяти требуют, чтобы каждая строка периодически регене- рировалась через определенный промежуток времени. Период регене- рации обычно составляет несколько миллисекунд. Чтобы число строк было небольшим, в модулях динамической памяти обычно исполь- зуется двумерная адресация и двунаправленный, селектор выборки столбцов для разных слов. При таком подходе регенерация занимает меньше времени, поскольку регенерируются все слова в строке одно- временно. На практике в запоминающих устройствах, состоящих из несколь- ких модулей, процессом регенерации управляет специальная логиче- ская схема. Эта схема циклически перебирает строки во всех модулях и регенерирует их. При этом, если модуль находится в процессе реге- нерации, могут возникнуть задержки при обращении к памяти от процессора. По сравнению со статической памятью динамическая, очевидно, сложнее и требует больше внешних схем. Однако для некоторых при-
230 ГЛ. 6 ЗАПОМИНАЮЩИЕ УСТРОЙСТВА ложений эти недостатки вполне окупаются целым рядом достоинств. Главное достоинство — это более высокая плотность упаковки ин- формации (число битов на модуль) благодаря меньшему числу элект- ронных компонентов в динамическом запоминающем элементе по срав- нению со статическим. Второе преимущество связано с тем, что ди- намический запоминающий элемент не потребляет тока, за исключе- нием тех относительно коротких отрезков времени, когда к нему об- ращаются. Благодаря этому резко снижается общая рассеиваемая ЗУ мощность. Довольно часто максимальная рассеиваемая мощность оказывается главным фактором, ограничивающим плотность упа- ковки запоминающих элементов, и в таких случаях динамическая па- мять имеет несомненные преимущества. 6.3. ПОСТОЯННАЯ ПАМЯТЬ В компьютерах и других цифровых системах память часто служит источником информации, остающейся неизменной. Примерами могут служить списки, констант, таблицы для преобразования данных и постоянные программы. В таких случаях используются модули па- мяти, в которых изменить записанную информацию невозможно средствами самой использующей модуль системы. Такие модули вы- пускаются и называются постоянными ЗУ (ПЗУ) или памятью типа ROM (Read-Only Memory — память только со считыванием). Приме- нение ПЗУ для хранения неизменяющейся информации в некоторых приложениях дает значительные преимущества, поскольку информа- ция не разрушается даже при выключении питания. Кроме того, в ПЗУ можно достичь много большей плотности упаковки информа- ции, поскольку запоминающие элементы существенно проще. Базовую структуру ПЗУ можно представлять себе состоящей из де- шифратора адреса и совокупности подключенных к нему вентилей ИЛИ, как представлено на рис. 6.10. Как и для ОЗУ, выходные ли- нии дешифратора находятся во взаимно-однозначном соответствии с ячейками ПЗУ. Число вентилей ИЛИ определяется разрядностью слова. Соединив выходную линию дешифратора, соответствующую не- которому слову памяти, с входом некоторого вентиля ИЛИ, мы за- даем значение одного бита в этом слове равным 1, в противном случае это значение будет равно 0. Так, например, на рис. 6.10 в первом, вто- ром и последнем разрядах слово с адресом 0 (строка 0) содержит 10. . .1, слово с адресом 1 содержит 01. . .1, а слово с адресом 2”—1 содержит 11. . .0. Полезно заметить, что, поскольку выходы дешифратора соответст- вуют минтермам, сформированным по битам адреса, ПЗУ описанной структуры является реализацией нескольких функций (их число оп- ределяется длиной слова ПЗУ), каждая из которых имеет вид суммы минтермов. Следовательно, в ПЗУ можно реализовать любую комби- национную функцию или набор функций.
6 3. ПОСТОЯННАЯ ПАМЯТЬ 231 Рис. 6.10. Структура ПЗУ с произвольным доступом. Модуль ПЗУ, вообще говоря, обладает теми или иными доста- точно гибкими средствами, позволяющими устанавливать соединения между линиями выборки строк и вентилями ИЛИ, так чтобы напол- нить модуль нужной информацией. Процесс занесения информации в ПЗУ часто называют программированием ПЗУ, По способу програм- мирования выпускаемые полупроводниковые ПЗУ делятся на следую- щие три основных типа: 1. Программируемые в процессе изготовления. 2. Однократно программируемые у заказчика. 3. Программируемые у заказчика с возможностью стирания и перепрограммирования. Программируемость памяти любого из трех названных типов под- разумевает существование некоторых коммутируемых элементов, или некоторых мест, где можно установить или снять «перемычку», связы- вающую линию выборки строки со входом вентиля ИЛИ. Коммута- ция определяется содержанием ПЗУ, т. е. информацией, которую оно должно хранить, а конкретная реализация «перемычек» и способ программирования зависят от типа ПЗУ.
232 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Постоянная память, программируемая при изготовлении Постоянные ЗУ этого типа обычно программируются на одном из последних технологических этапов их производства. Элемента коммутации представляют собой просто промежутки, часть которых перемыкается на последнем этапе металлизации схемы. Это делается с помощью масок — фотошаблонов, задающих точную форму участков металлизации и изготовляемых по заказу для каждого конкретного наполнения ПЗУ. Маска довольно дорога, но с помощью о^ной маски можно запрограммировать любое число модулей памяти; Следова- тельно, ЗУ, программируемые при помощи масок, рентабельны при крупносерийном производстве. * Пример модуля памяти рассматриваемого типа на pn-диодах по- казан на рис. 6.11. Функции вентилей ИЛИ выполняют рп-диодные вентили И от инверсных сигналов на выходах дешифратора, что по закону де Моргана соответствует операции ИЛИ-HE от неинверти- рованных выходных сигналов дешифратора. На каждый бит в каждом слове приходится один диод. И, как показано на рисунке, в провод- никах, соединяющих диоды с общей линией столбца, имеются прэ п- жутки. Чтобы запрограммировать логический 0 в некотором бите, нужно установить перемычку; в противном случае значение бита будет равно логической 1. Действительно, поскольку общая линия данных в столб- Рис. 6.11. ПЗУ на р/1-диодах, программируемое с помощью маски.
6 3. ПОСТОЯННАЯ ПАМЯТЬ 233 Линия выборки строки 1 Линия выборки отроки 1п 1 Линия выборки строки О Рис. 6.12. ПЗУ на МОП-транзисторах, программируемое с помощью маски. це нормально имеет высокий потенциал, и этот потенциал может стать низким только за счет линии выборки строки. С другой стороны, если перемычка к диоду в выбранной строке отсутствует, то общая линия сохранит высокий потенциал, соответствующий 1 на выходе. Если же перемычка установлена, то общая линия будет иметь низкий потенциал, соответствующий 0 на выходе. Другой пример постоянного ЗУ первого типа на МОП-транзис- торах показан на рис. 6.12. В нем операция ИЛИ-НЕ над выходными сигналами дешифратора выполняется при помощи n-канальных, нор- мально закрытых МОП-транзисторов. Промежутки располагаются в цепи истока каждого транзистора. Как и в предыдущем примере, присутствие перемычки дает логический 0 в данном разряде, а отсут- ствие — логическую 1. Постоянная память, программируемая у заказчика Постоянные запоминающие устройства второго типа, допускаю- щие однократное программирование у заказчика, в иностранной лите- ратуре часто называют памятью типа PROM (Programmable Read
234 ГЛ. 6 ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Усс КЛЮЧ, УПРАВЛЯЕМЫЙ НАПРЯЖЕНИЕМ (замкнут при У? 7,5) Рис. 6,13. ПЗУ с плавкими контактами. Only Memory — программируемая память только со считыванием) х). В этих ЗУ состояние перемычек можно задать уже после изготовления устройства, либо создав, либо разрушив соединение. Наибольшее рас- пространение получили перемычки в виде плавких вставок-предо- В литературе на русском языке сокращения, отличного от ПЗУ, к памяти вто- рого типа обычно не применяют.— Прим, ред.
6.3. ПОСТОЯННАЯ ПАМЯТЬ 235 хранителей (например, из нихрома), которые можно избирательно «пережечь» с помощью внешнего источника тока достаточной силы. Пример устройства такого типа показан на рис. 6.13. Оно анало- гично рассмотренному выше ПЗУ на диодах с той лишь разницей, что в промежутках стоят плавкие перемычки из нихрома и предусмотрены средства для их пережигания. Устройство может находиться в одном из двух режимов: чтение и программирование. Режим определяется зна- чением питающего напряжения Vcc. В режиме чтения Vcc имеет нор- мальное значение 5 В; в режиме программирования Vcc поднимается до 10 В. К линии питания Vcc подключена пороговая схема, которая вырабатывает сигнал «режим чтения», равный логической 1, когда УСС<7,5В. Этот сигнал вместе с внешним сигналом «выборка модуля» используется как разрешающий и для линий выборки строк, и для линии выходных данных. В режиме чтения линии выборки строк работают точно так же, как в рассмотренном выше ПЗУ на диодах. На рисунке показаны вен- тили И-НЕ на входах линий выборки строк. На второй вход этих вен- тилей подается функция ИЛИ от сигналов «выборка модуля» и «ре- жим чтения», и, следоватедьно, на этих входах в режиме чтения будет логическая 1. Вентили И-НЕ в этом случае просто инвертируют вы- ходы дешифратора. Линия, соответствующая заданному адресу, бу- дет нести сигнал логического 0, а все остальные линии — логиче- ской 1. . . Если плавкая перемычка на пересечении столбца и выбранной строки цела, на линии данных в столбце будет низкий уровень (логи- ческий 0); в противном случае — через резистор — высокий (ло- гическая I)., Линия данных в столбце подключена к линии «выходные данные» через тристабильный формирователь. Он управляется сиг- налом «разрешение выхода», являющимся функцией И от сигналов «выборка модуля» и «режим чтения». В режиме программирования Vcc поднимается до 10 В. При этом сигнал «режим чтения» остановится равным логическому 0, и это вы- зывает два эффекта. Во-первых, сигнал «разрешение выборки» ста- новится зависящим от внешнего сигнала «выборка модуля». Таким образом, на линии выбранной строки будет логический 0, только если на линии «выборка модуля» будет логическая 1. Во-вторых, сигнал «разрешение выхода» станет логическим 0, и выходной формирователь окажется закрытым независимо от сигнала «выборка модуля». Кроме того, и это самое главное, потенциал на линиях невыбранных строк поднимется до 10 В, поскольку вентили, работающие на эти линии, питаются от напряжения VCCf и оно определяет уровень логической 1. Чтобы «пережечь» перемычку, задается нужный адрес, активиру- ется линия выборки модуля, дающая разрешение для выборки строк, и затем от источника тока подается определенный ток (скажем, 65мА) на нужную линию «выходные данные». Этот ток проходит через уп- равляемый напряжением ключ на линию данных соответствующего
236 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА столбца. Ключ представляет собой специальную схему, замыкающуюся в том случае, когда напряжение V от источника тока несколько пре- вышает максимальный уровень логической 1, т. е. 5 В/Приложенное напряжение должно быть достаточно высоким. Минуя ключ, ток поте- чет через плавкую перемычку и диод в линию выборки строки, нахо- дящуюся под низким потенциалом (логического 0). Ток, уходящий на все остальные линии выборки, находящиеся под потенциалом около 10* В, будет ничтожен. Именно для того, чтобы ток через все остальные линии строк был малым, и было поднято питающее напряжение до 10 В. Перемычка плавится быстро. После этого дезактивируется линия «выборка модуля». Затем процесс можно повторить для других пере- мычек в этой же строке и для других строк. Обратите внимание, что для программирования нам не потребова- лось никаких новых внешних линий, отличных от используемых в мо- дуле при обычном режиме чтения. Перепрограммируемая постоянная память Постоянные запоминающие устройства третьего типа, которые можно программировать, стирать и программировать заново, назы- вают полу постоянными или перепрограммируемыми ЗУ (ППЗУ), а в зарубежной литературе — EPROM (Erasable Programmable Read- Ohly Memory — стираемая программируемая память только со счи- тыванием). В'ЗУ этого типа используются элементы коммутации, ко- торые можно устанавливать в одно, скажем замкнутое, состояние из- бирательно, а в другое, скажем разомкнутое, коллективно. Програм- мирование таких ЗУ сводится сначала к коллективной установке всех «перемычек» в одно состояние, что равносильно стиранию ранее за- писанной информации, и последующей поочередной установке нуж- ных «перемычек» в другое состояние. Примечательным примером элементов коммутации для ППЗУ слу- жат специальные МОП-транзисторы с изолированным затвором (floa- ting gate). Структура такого транзистора, нормально закрытого, ра- ботающего в режиме обогащения, с каналом p-типа и с затвором, ок- руженным диэлектриком, показана на рис. 6.14. Затвор вообще не имеет вывода, но тем не менее, как мы увидим в дальнейшем, можёт быть заряжен отрицательно. При этом затвор притягивает положи- тельные носители в зону канала точно так же, как действовало бы отрицательное по отношению к подложке напряжение, приложенное к затвору в обычном МОП-транзисторе. При положительном заряде в зоне канала транзистор проводит. С другой стороны, если затвор не имеет отрицательного заряда и, стало быть, не наводит положитель- ного заряда в зоне канала, транзистор закрыт. Затвор получает отрицательный заряд путем инжекции электро- нов из стока через диэлектрик. Для этого на исток подается доста- точно большой положительный потенциал по отношению к стоку»
6.4. ПАМЯТЬ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ 237 ЗАТВОР КАНАЛ ДИЭЛЕКТРИК сток Р Л ПОДЛОЖКА Рис. 6.14. МОП-транзистор с изолированным затвором, применяемый в ППЗУ, В результате возникает поле, наводящее в затворе большой положи- тельный потенциал по отношению к стоку. Грубо говоря, это поле вы- зывает пробой перехода между стоком и диэлектриком, в результате которого возникает поток электронов с достаточно высокой энергией из стока в диэлектрик. Они способны пройти через диэлектрик и достичь затвора. Накопленный на затворе заряд будет сохраняться практически бесконечно, если его специально не удалить. Заряд уда- ляется из затвора облучением кристалла ультрафиолетовым светом с энергией, достаточной для перевода электронов в полосу проводи- мости диэлектрика. Электроны при этом утекают из затвора благо- даря силам взаимного отталкивания. Структура ППЗУ на МОП-транзисторах с изолированным затво- ром может быть аналогичной рассмотренному выше ПЗУ на МОП- транзисторах, показанному на рис. 6.12. В этом случае в роли пере- мычки на каждом промежутке выступает транзистор с изолированным затвором. Конечно, должны быть добавлены схемы, позволяющие приложить необходимые потенциалы, чтобы зарядить затвор выбран- ного транзистора. Выборка транзистора осуществляется при помощи адресных линий и выходных данных. Для того чтобы запрограммировать такое ППЗУ, нужно сначала «разорвать» все «перемычки», что соответствует записи логических 1, облучив кристалл ультрафиолетовым светом достаточной интенсив- ности и длительности, а затем для тех битов, где должны быть логиче- ские 0, последовательно замкнуть перемычки. 6.4. ПАМЯТЬ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ Термин «последовательный доступ» относится к запоминающим устройствам, в которых позиции слов становятся доступными для чтения или записи только в определенном порядке. В ЗУ с последо- вательным доступом каждое хранящееся слово не привязывается к конкретным запоминающим элементам, а скорее к своему положению
2?8 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА относительно других хранящихся слов. Например, слова могут пере- мещаться по запоминающим элементам, но сохранять при этом свою взаимную упорядоченность. В таком случае достаточно обеспечить средства для чтения только некоторых запоминающих элементов. То или иное конкретное слово считывается в тот момент, когда в про-, цессе перемещения по памяти оно окажется на запоминающих эле-| ментах, из которых может производиться чтение. Аналогично инфор-! мация записывается в позицию слова, когда в процессе перемещения эта позиция окажется на элементах, снабженных средствами записи. В некоторых видах ЗУ с последовательным доступом перемещаются сами запоминающие элементы, а позиции механизмов чтения и записи остаются постоянными. Рассмотрим ЗУ, в которых слова перемещаются относительно за- поминающих элементов. По тому, как перемещаются слова, эти ЗУ делятся на два основных типа. В ЗУ первого типа слова перемещаются всегда в одном направлении вдоль цепочки из групп элементов, при- чем каждая группа вмещает одно слово. Информация записывается на группу элементов в начале цепочки и считывается в ее конце. Та- ким образом, данные становятся доступными для считывания в том порядке, в каком проводилась запись. В ЗУ второго типа слова могут перемещаться по цепочке в любом направлении, и информация записывается и считывается на одной и той же группе элементов. Нетрудно видеть, что в ЗУ второго типа слова считываются в порядке, противоположном порядку записи. ЗУ этого типа называются стеками, и их мы рассмотрим в следующем разделе. Рис, 6.15. Модель последовательного ЗУ в виде сдвиговых регистров.
6 4 ПАМЯТЬ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ 239 Рис. 6.16. Последовательная память с циркуляцией. Простейшим примером последовательного ЗУ первого типа может служить сдвиговый регистр. На самом деле в качестве модели ЗУ первого типа со словом из т битов лучше рассматривать группу из т сдвиговых регистров, работающих согласованно, так сказать, «в уни- сон». Как показано на рис. 6.15, сдвиговые регистры состоят из син- хронных D-триггеров, синхронизирующие входы которых соединены вместе. Информация записывается на левом конце и считывается на правом. По каждому синхроимпульсу информация продвигается вправо на одну позицию, а слева записывается новая информация. То, что записано в крайнем правом столбце, при этом теряется. Подобное устройство станет более удобным во многих приложе- ниях, если предусмотреть возврат информации, выталкиваемой на правом конце, и запись ее,на левом, в тех случаях, когда не требуется замещать старые данные новыми. Это можно реализовать с цомощъю схемы, показанной на рис. 6.16 и состоящей из одного регистра. На схеме селектор из двух вентилей И и одного ИЛИ осуществляет выбор между внешними данными и данными, поступающими с правого триг- гера, и результат выбора подает на вход левого триггера. Управляет селектором сигнал «запись». Когда этот сигнал равен логической 1, записываются внешние данные; в противном случае осуществляется циркуляция данных. Вообще говоря, в последова- тельном ЗУ нужно .каким-то образом знать о положении каждого слова. Как показано на рис. 6.16, эту проблему можно решить с по- мощью счетчйка, на вход которого подаются синхроимпульсы, осу- ществляющие, сдвиг. Счетчик должен считать по модулю п, где п — число триггеров в каждом сдвиговом регистре. Таким образом, на счетчике будет одно и то же значение всякий раз, когда некоторое слово будет попадать в некоторую фиксированную позицию. Следова-
240 ГЛ G. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА тельно, текущее состояние счетчика можно связать, например, со словом в позиции считывания. При таком подходе нужное слово для чтения можно выбрать, просто подождав, пока номер его позиции по- явится на счетчике. Можно также в эту позицию записать новые дан- ные извне, установив логическую 1 на линии «запись» до прихода следующего синхроимпульса. Таким образом, содержимое счетчика может служить адресом как при чтении, так и при записи. Доступ к конкретному слову в последовательной памяти, очевидно, требует в среднем существенно больше времени, чем в памяти с про- извольным доступом. И тем не менее ЗУ с последовательным доступом играют важную роль в микрокомпьютерах, поскольку благодаря бо- лее простой структуре они обладают большей плотностью упаковки информации и дешевле в изготовлении. Выпускаются ЗУ с последовательным доступом на триггерах прак- тически по любой из общеизвестных технологий: ТТЛ, ЭСЛ, МОП, КМОП и др. Однако существуют два интересных типа ЗУ с последо- вательным доступом не на триггерах, весьма перспективных для микро- компьютерных применений. Это ЗУ на полупроводниковых приборах, с зарядовой связью (ПЗС) и ЗУ на цилиндрических магнитных доменах (Ц?4Д). (Соответственно charge-coupled memory и magnetic bubble memory.) Приборы с зарядовой связью Приборы с зарядовой связью (ПЗС) напоминают сдвиговые ре- гистры с той лишь разницей, что хранимая информация представ- ляется не состоянием триггеров, а наличием или отсутствием зарядов. Заряды в виде дырок или электронов продвигаются от одной позиции к следующей под действием электродов, которыми снабжена каждая позиция. На рис. 6.17 представлена одна из возможных схем регистра на ПЗС. Устройство представляет собой подложку из полупроводни- кового материала n-типа, покрытого слоем диэлектрика, поверх ко- торого расположено много электродов. Электроды подключены к трем линиям, причем каждый третий электрод подключен к одной и той же линии. На каждую линию подается одна из фаз трехфазного источ- ника синхроимпульсов. На каждую фазу подано отрицательное напряжение относительно подложки. Благодаря этому электроны уходят из зоны, непосредст- венно примыкающей к диэлектрику, вглубь подложки. Поскольку электроны являются основными носителями заряда в n-области, эта зона становится обедненной в смысле носителей заряда. Дырки (но- сители положительного заряда), представляющие логическую 1, вводятся в эту обедненную зону на левом ее конце. Благодаря отрицательному потенциалу электродов дырки ос- таются в обедненной зоне, а не растекаются по всей подложке. В мо- мент введения дырок фаза ближайшего к левому концу электрода
6 4 ПАМЯТЬ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ 2ч 1 О Фз Рис. 6.17. Схема ЗУ на приборах с зарядовой связью, V (фаза 1) отрицательна по отношению к двум другим фазам. В резуль- тате положительно заряженные дырки притягиваются к этому элект- роду и локализуются под ним. Когда более отрицательное напряжение будет на второй фазе, дырки переместятся ко второму электроду, а затем и к третьему, когда более отрицательное напряжение окажется на третьей фазе. Описанная последовательность подачи напряжений непрерывно повторяется, вызывая шаг за шагом продвижение дырок вдоль элект- родов. Наличие именно трех, а не двух фаз гарантирует нам, что дырки будут двигаться в желаемом направлении. Благодаря некоторому перекрытию отрицательных импульсов на фазах для миграции дырок отводится некоторое время. Запись информации в устройство проис- ходит в момент отрицательного импульса на первой фазе, когда дырки или вводятся (логическая 1), или не вводятся (логический 0). При
242 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА движении информации в устройстве каждый бит занимает интервал из трех электродов. Дырки инжектируются (т. е. вводятся) в устройство через смещен- ный в прямом направлении рп-переход. Этот переход образуется между областью p-типа и подложкой n-типа. На другом конце дырки детектируются с помощью обратно смещенного рп-перехода. Дырки' от последнего электрода отсасываются через переход, поскольку зона р обратно смещенного р/г-перехода имеет отрицательный потен- циал по отношению к области п. Возникающий при этом ток создает падение напряжения на подключенном к области р резисторе. Приборы с зарядовой связью благодаря их очевидной простоте имеют потенциально высокую плотность упаковки информации и низ- кую стоимость (в расчете на бит). Это открывает им широкие перспек- тивы в вычислительной технике и особенно в микрокомпьютерах. Память на цилиндрических магнитных доменах В запоминающих устройствах на цилиндрических магнитных до- менах (ЦМД) информация запоминается в виде магнитных доменов, которые перемещаются в тонком слое магнитного материала. Маг- нитные домены это микроскопические области вещества с одинаковым направлением намагниченности, которые всегда присутствуют в фер- ромагнитном материале благодаря ориентации молекул, обладаю- щих магнитным моментом. Постоянные магниты обладают магнитным полем именно из-за присутствия в них магнитных доменов. Доменам в тонком слое ферромагнитного материала можно придать форму ма- леньких цилиндров, приложив внешнее магнитное поле, перпендику- лярное плоскости листа. Такое поле заставляет магнитные домены, ранее имевшие произвольную форму и ориентацию, сжаться в малень- кие цилиндры с осями, перпендикулярными плоскости слоя. Эти ци- линдры (ЦМД), или пузырьки, как иногда говорят, можно перемещать при помощи других магнитных полей. На рис. 6.18 схематически показана возможная структура ЗУ на ЦМД. Устройство представляет собой тонкий лист магнитного ма- териала, перпендикулярно которому приложено магнитное поле, создаваемое постоянным магнитом (последний на рисунке не пока- зан). Над поверхностью листа расположена цепочка маленьких кусоч- ков магнитного материала в форме букв Т и I с толщиной, сущест- венно превышающей толщину листа. Эти Т- и 1-элементы намагничи- ваются переменным магнитным полем, направленным параллельно плоскости листа и создаваемым током в двух катушках. Одна катушка создает поле вдоль оси X, а другая — вдоль оси У. Управляя величиной и направлением тока в катушках, можно создать вращающееся магнитное поле. Когда это поле оказывается направленным вдоль протяженных сегментов Т- и I-элементов, эти сег- менты намагничиваются, причем северный полюс образуется на конце
G 4. ПАМЯТЬ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ 243 КАТУШКА X КАТУШКА Поле постоянного магнита направлено „в страницу' Рис. 6.18. Схема ЗУ на цилиндрических магнитных доменах. сегмента, направленного по полю, и южный полюс —на противопо- ложном конце. Если исходить из того, что все ЦМД сориентированы своим южным полюсом вверх, то окажется, что домены притягиваются к северным полюсам сегментов. Запоминающее устройство работает следующим образом. Инфор- мация записывается на левом конце цепочки за счет того, что либо генерируется домен (логическая 1), либо он не генерируется (логиче- ский 0). В момент записи поле создается катушкой X и направлено влево, и, следовательно, верхняя перекладина левой буквы Т, как впрочем и всех других букв Т, окажется намагниченной с северным полюсом на левом конце. Если домен был сгенерирован в процессе записи, он расположится под этим северным полюсом. Затем, постепенно увеличивая ток в катушке Y и уменьшая его в катушке X, мы получим поле, направленное вверх. Это приведет к перемещению северного полюса по букве Т к середине ее перекла- дины и перемещению туда же домена. Теперь, сменив направление, ток снова будет увеличиваться в катушке X и уменьшаться в катушке Y, создавая поле, направленное вправо. Это приведет к перемещению северного полюса к правому концу перекладины, а домен продолжит свое движение направо. Далее ток меняет направление и увеличивается в катушке У, одно- временно уменьшаясь в катушке X так, чтобы создать поле, направ- ленное вниз. При этом северный полюс появится внизу каждой бук- вы I и домен переместится от буквы Т к соседней справа букве I. Этот цикл непрерывно повторяется, продвигая домены по цепочке слева направо. Информация считывается на правом конце детектором, кото- рый определяет присутствие или отсутствие домена в нужный момент.
244 ГЛ. 6. ЗАПОМИНАЮЩИЕ УСТРОЙСТВА Для того чтобы информация не терялась, достигая правого конца, цепочка обычно делается замкнутой, т. е. имеет форму «петли». Ин- формация циркулирует по этой петле, а считывается и записывается в некоторых ее точках. ЗУ на ЦМД экономически выгодны при относительно больших объемах хранимой информации. Однако увеличение объемов ведет к увеличению среднего времени доступа. Проблема может быть ре- шена заменой одной большой петли несколькими петлями меньших размеров в рамках одного ЗУ. Один из методов состоит в том, что все эти меньшие петли, называемые младшими петлями, пересекаются с одной старшей петлей. Схематически это показано на рис. 6.19. Старшая петля служит для обмена информацией между младшими петлями и внешней средой. В точках пересечения младшие петли могут обмениваться информацией со старшей. Чтобы запомнить информа- цию в младшей петле, она сначала вводится бит за битом в старшую петлю. Затем, когда биты достигнут точки пересечения с нужной млад- шей петлей, осуществляется обмен. Аналогичным образом можно получить хранимую в младшей петле информацию, дождавшись, когда требуемые биты окажутся в точке пересечения с главной петлей, и произведя обмен. После этого информацию можно бит за битом счи- тать из главной петли. Реализация описываемого устройства требует сложных управляю- щих схем для слежения за текущим положением информации, а также выполнения циркуляции и обмена. Однако по сравнению с другими рассмотренными нами видами памяти, где возможны как считывание,
6 4 ПАМЯТЬ С ПОСЛЕДОВАТЕЛЬНЫМ ДОСТУПОМ 245 так и запись, ЗУ на ЦМД обладает одним важным преимуществом — энергонезависимостью, т. е. сохранением информации при выключе- нии питания. И действительно, при выключении питания домены не разрушаются и сохраняют свое местоположение, поскольку Т- и I-элементы остаются намагниченными. Однако, чтобы информацией можно было воспользоваться после включения питания, нужно знать, как она расположена. Эту проблему можно решить, располагая ин- формацию перед выключением питания некоторым определенным образом. Буферные устройства типа очереди В микрокомпьютерах и вообще в цифровых системах важную роль играет передача информации между отдельными, входящими в них компонентами. Часто встречаются ситуации, при которых информация посылается передающим компонентом с переменной скоростью, а принимающий компонент может ее принимать лишь с какой-то огра- ниченной скоростью. Чтобы согласовать различные скорости инфор- мационных потоков двух компонентов, можно воспользоваться буфер- ной памятью типа очереди. Такая память представляет собой ЗУ с последовательным доступом, в котором слова считываются в том же порядке, в каком записываются, но запись и чтение могут произво- диться с различными скоростями. Иногда такие ЗУ называют памятью типа FIFO (First-in First-out — первым вошел, первым вышел). Схема памяти типа очереди представлена на рис. 6.20. Она содер- жит группу линейно связанных регистров. Емкость каждого регистра— одно слово. С каждым регистром связан флажковый триггер, логиче- ская 1 на котором говорит о том, что регистр заполнен, т. е. содержит слово. Для занесения и удаления слов предусмотрены независимые регистры ЯхоИнш данные" Выходные данные Строб записи Ст род *- УПРАВЛЯЮЩАЯ схем А --чтения А А А -А А А А ФЛАГИ ЗАПОЛНЕННОСТИ РЕГИСТРОВ Рис. 6.20, Схема памяти типа очереди (FIFO).
246 ГЛ. 6 ЗАПОМИНАЮЩИЕ УСТРОЙСТВА стробирующие линии. Если слово заносится в очередь слева, оно про- двигается направо, пока не достигнет последнего пустого регистра. В нем оно остается, а флаг этого регистра принимает значение" логи- ческой 1. Флаг крайнего левого регистра служит указателем заполненности всей очереди, т. е. состояния, при котором новое слово занести нельзя^ пока не будет удалено хотя бы одно слово. При удалении слова из очереди освобождается правый регистр. Его флаг принимает значе- ние логического 0, указывая, что регистр пуст. Это заставляет содер- жимое соседнего и всех остальных заполненных регистров сдвинуться направо и заполнить освободившееся место. Если флаг крайнего справа регистра и после этого окажется нулевым, значит, вся очередь пуста. В этом случае не нужно сдвигать содержимое регистров, пока не поступит новое слово. Очередь часто бывает полезна в качестве буфера между компьюте- ром и периферийным устройством. Например, для устройства вывода компьютер при наличии буфера может выдавать информацию в своем темпе независимо от скорости работы устройства, при условии, ко- нечно, что буфер не переполнится. Память ка подвижных магнитных носителях Важный класс памяти представляют собой ЗУ на подвижных маг- нитных носителях. К ним относятся магнитные барабаны, диски и ленты. Информация на этих устройствах запоминается в виде состоя- ния намагниченности участков поверхности некоторого магнитного материала. Чтение и запись в конкретную позицию выполняются при механическом движении поверхности мимо записывающих или счи- тывающих магнитных головок. Два основных вида записи — это запись с насыщением, при которой два крайних состояния намагниченности представляют два логиче- ских значения, и запись с модуляцией по частоте или фазе. Запись с насыщением позволяет получить большие плотности информации, однако она более подвержена ошибкам из-за повреждений или неодно- родностей магнитного слоя и, следовательно, требует более качест- венных магнитных носителей. Хотя все рассматриваемые магнитные ЗУ формально отнрсятся к памяти с последовательным доступом, фактически используемые формы доступа весьма разнообразны. Разные формы доступа приме- няются, например, в магнитных лентах. В кассетных ленточных уст- ройствах информация запоминается на одной дорожке. Посл'едрва- тельности битов фиксированной длины образуют слова. В каждый .мо- мент под головками проходит только один бит.. Поэтому в кассетных лентах доступ оказывается последовательными ho битам, и по словам. С другой стороны, магнитные ленты промышленного стандарта !для компьютеров имеют 7 или 9 параллельных дорожек. Для каждой
6.8. СТЕКИ 247 дорожки отведена своя головка записи и считывания. Таким образом, для этих лент доступно сразу слово из 7 или 9 бит. Магнитные барабаны и диски во многом сходны, поскольку те и другие имеют много концентрических дорожек, расположенных на теле вращения. На барабане рабочая поверхность — это цилиндр, а на дисках — плоская пластинка. В некоторых системах каждая до- рожка снабжается отдельной головкой считывания/записи. В дру- гих — одна головка перемещается с дорожки на дорожку. В любом случае рабочая поверхность движется под головкой или головками при постоянной скорости вращения пакета дисков или барабана. Таким образом, информация на каждой дорожке, разбитая обычно на группы слов, выбирается последовательно. Чтобы выбрать отдельное слово, нужно выбрать и дорожку, и слово на дорожке. При наличии головок на каждой дорожке доступ к дорожкам оказывается произ- вольным. Если же головка одна, то доступ к дорожкам последователь- ный. 6.5. СТЕКИ Стеком называется запоминающее устройство с последовательным доступом, в котором слова считываются в порядке, обратном записи, т. е. по правилу LIFO (Last-in First-out — последним вошел — пер- вым вышел). Стек можно представить себе в виде вертикально распо- ложенного массива запоминающих ячеек, как показано на рис. 6.21, Доступ осуществляется всегда к верхней ячейке — вершине стека. Когда слово записывается в вершину стека, слово, занимавшее ее, Рис. 6.21, Схема работы стека*
248 ГЛ 6 ЗАПОМИНАЮЩИЕ УСТРОЙСТВА (POP) Рис. 6.22. Двунаправленный сдвиговый регистр, соответствующий однобитовому стол- бцу в стеке. и все нижележащие слова сдвигаются вниз на одну ячейку, а содержи- мое нижней ячейки теряется. При этом говорят, что стек опускается. Существует обратная операция, при которой стек поднимается д). Когда стек поднимается, то слово на вершине стека удаляется и его место занимает и тем самым становится доступным слово из второй сверху ячейки. С точки зрения внутренней структуры стек можно представить группой работающих «в унисон» регистров со сдвигом в обоих направ- Слова «опускается» и «поднимается», видимо, еще нельзя считать установив- шимися терминами, поскольку наряду с ними имеет хождение много их эквива- лентов: записать, положить, втолкнуть, занести в стек; взять, прочитать, вытолкнуть, выбрать из стека и т. п. Терминов, эквивалентных английским PUSH и POP не только по смыслу, но также по устойчивости употребления, в литературе на рус- ском языке пока нет.— Прим. ред.
6.5. СТЕКИ 249 лениях, по одному регистру на каждый столбец битов. Один такой регистр показан на рис. 6.22. Он состоит из группы триггеров, управ- ляемых сигналом «направление сдвига» и синхросигналом. По каж- дому синхроимпульсу содержимое каждого триггера передается на соседний триггер в направлении, заданном сигналом «направление сдвига». Опускание стека соответствует одному направлению, подъем — другому. Во многих приложениях применение стека оказывается очень удобным и естественным. Для таких приложений характерно исполь- зование памяти с выборкой не по произвольным адресам слов, а на основе взаимной их упорядоченности. Например, нужные в процессе вычислений операнды можно было бы загрузить в стек в порядке, об- ратном их использованию. Подъем слов из стека будет тогда постав- лять операнды в нужном порядке. Стек играет важную роль в микрокомпьютерах как средство сохра- нения адресов возврата и состояния данных для подпрограмм. Его использование приводит к существенным упрощениям, когда одна подпрограмма вызывает другую, которая в свою очередь мо>Кет вы- звать третью, и т. д. В таких случаях при каждом вызове адрес воз- врата из текущей подпрограммы и другая необходимая информация загружаются в стек. При возвратах информация в нужном порядке выбирается из стека. Моделируемые стеки Во многих микропроцессорах память со стековой организацией реализуется не с помощью сдвиговых регистров, а моделируется на памяти с произвольным доступом. При этом в качестве стека обычно используется просто часть оперативной памяти. Это дает дополнитель- ную гибкость, поскольку емкость стека может меняться при необхо- димости, и максимальная емкость стека оказывается ограниченной только размером оперативной памяти. Кроме того, перенос стека в память дает экономию аппаратуры. Для моделирования стека в памяти с произвольным доступом ис- пользуется суммирующий/вычитающий счетчик. Этот счетчик назы- вается указателем стека. Предполагается, что на счетчике все время находится адрес ячейки памяти, которая соответствует вершине стека. Сначала на счетчик — указатель стека — заносится некоторый на- чальный адрес. Когда слово нужно поместить в стек, оно записывается по адресу, записанному в указателе стека, и указатель уменьшается на 1. Когда слово берут из стека, указатель увеличивается на 1, и затем по полученному адресу читается слово. Таким образом, стек расширяется при заполнении и сжимается при выборке. Указатель стека содержит адрес следующей доступной для записи ячейки. Встре- чающиеся на практике вариации описанной схемы работы в основном касаются того, как продвигается указатель стека.
250 ГЛ 6 ЗАПОМИНАЮЩИЕ УСТРОЙСТВА При работе с моделируемым стеком указатель стека входит в состав микропроцессора. Его содержимое автоматически увеличивается или уменьшается всякий раз, когда при выполнении команд программы встречаются операции со стеком. К командам, использующим стек, относятся вызовы подпрограмм, возвраты из подпрограмм, а также явные команды поднять (POP) и опустить (PUSH) стек. УПРАЖНЕНИЯ 6.1. Рассмотрите модель ОЗУ с трехмерной схемой адресации. В модели для вы- борки слова нужно использовать три дешифратора. (а) Нарисуйте схему, аналогичную рис. 6.4, показывающую связи выходов дешифра- тора с запоминающими элементами для одного бита всех слов. (б) Нарисуйте логическую схему залюмииакидегд элемента для такой моделц» исполь- зуя асинхронный /?5-триггер с отдельными линиями для входов и выходов. (в) Определите число линий выборки слова как функцию п, где п — общее число битов в адресе. 6.2. Предположим, что в ОЗУ на ТТЛ-элементах используется двумерная схема адресации (два адресных дешифратора). Можно ли воспользоваться в этом случае запоминающими элементами, показанными на рис. 6.7, с небольшой модификацией? Если да, то постройте схему модифицированного запоминающего элемента и объясни- те, как он работает. 6.3. Покажите, как можно было бы изменить запоминающий элемент на МОП- схемах, показанный на рис. 6.8, для работы с двумерной схемой адресации. 6.4. Нарисуйте схему диодного ПЗУ, запрограммированного для получения функций и S/ в полном сумматоре. 6.5. Одно из применений стека заключается в снабжении арифметического устройства операндами в нужном порядке при вычислении арифметических выраже- ний. Предположим, что арифметическое устройство, выполняющее четыре основные арифметические операции — сложение, вычитание, умножение и деление, подключено к стеку, как показано на рис. У6.5. В вершине стека находится правый операнд для любой из выполняемых четырех операций. Левый операнд находится в отдельном ре- гистре, который получает информацию из вершины стека, если выполняется операция POP — «поднять стек». Результат арифметического действия, получающийся в ариф- метическом устройстве, передается в вершину стека при выполнении операции PUSH — «опустить стек». Найдите последовательность операций (сложить, вычесть, умножить, поделить, поднять и опустить) и начальный порядок операндов (a, b, с, d, е) в стеке для следую- щего арифметического выражения: а X (b-\-c)—d е 6.6. Некоторое ОЗУ имеет шесть адресных линий и восемь двунаправленных линий данных. Сколько всего битов информации может хранить это ОЗУ? Предположим, нам нужно ОЗУ той же общей емкости, но со словом такой длины, при которой суммарное число адресных линий и линий данных было бы минимальным. Найдите число адресных линий и линий данных для этой минимальной конфигурации. Существует ли второе решение? Если существует, каково оно? 6.7. Предположим, что для решения некоторой задачи требуется ОЗУ на 1024 слова по 8 бит в каждом. Спроектируйте такое ОЗУ из модулей на 256 слов по 4 бита,
УПРгАЖНРНИЯ 251 Лейый операнд Рис. У.6.5. внешние сигналы которых соответствуют модели, показанной на рис. 6.1(a). Полу- ченное ОЗУ также должно соответствовать этой модели. 6.8. Предположим, что нам нужны модули ОЗУ, соответствующие модели на рис. 6.1 (б) с раздельными линиями данных, а мы располагаем модулями только о общими двунаправленными линиями данных. Покажите, как с помощью вентилей можно произвести соответствующее преобразование. Покажите, как можно осущест- вить обратное преобразование. 6.9. Некий инженер получил с завода партию модулей ЗУ, в которых при про- изводстве были допущены монтажные ошибки. Инженер знает, что модули относятся к модели рис. 6.1 (а), но выводы адресных линий и линий данных перепутаны, т. е. не соответствуют документации. Если предположить, что инженер выяснил, какие выводы соответствуют адресным линиям, а какие линиям данных, а также знает функ- ции обеих управляющих линий, может ли он воспользоваться этими модулями?
Глава 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ I I В предыдущих главах мы рассмотрели понятия, лежащие в основе цифровых систем. Теперь в центре нашего внимания будут соответст- венно микропроцессоры и микрокомпьютеры, их функционирование и применение. В настоящее время выпускается много моделей микропроцессоров с очень широким спектром параметров. Мы не будем пытаться изучить их все, а опишем гипотетический микропроцессор с архитектурой (т. е. структурой и языком), обладающей типичными чертами. Таким образом, мы сможем лучше осветить наиболее существенные аспекты функционирования микропроцессоров вообще, не вдаваясь в детали, характерные для тех или иных конкретных моделей. Хотя наш гипо- тетический микропроцессор и не выпускается промышленностью, он близок к некоторым реально существующим моделям, например к про- цессорам серии 8000 фирмы «Интел». В гл. 1 вы уже ознакомились со структурой и функционированием микрокомпьютера. Мы не станем в этой главе повторять ранее сказан- ного и рекомендуем читателю еще раз просмотреть разделы с 1.3 по 1.5 для того, чтобы вспомнить общую схему микропроцессора. 7.1. МИКРОКОМПЬЮТЕР Микрокомпьютер — это система с шинной организацией, состоя- щая из модулей, или блоков, реализованных в виде больших интег- ральных схем. Эти модули обрабатывают информацию, управляют потоком и интерпретацией команд, управляют работой шин, хранят информацию и осуществляют взаимодействие между компьютером и его окружением. Первые четыре функции обычно выполняются одним функцио- нальным блоком — микропроцессором. Функции хранения инфор- мации осуществляет запоминающее устройство. В него могут входить как постоянная память, так и оперативная. Наконец, внешние ком- муникации осуществляют блоки, называемые портами ввода/вывода. Каждый такой порт является интерфейсом между микропроцессором и каким-либо внешним устройством, например терминалом, внешней
7.2. СТРУКТУРА МИКРОПРОЦЕССОРА 253 Рис. 7.1. Структура микрокомпьютера с шинной организацией. памятью для хранения больших объемов информации, контроллером технологических процессов или измерительным прибором. Структура микрокомпьютера, состоящего из подобных блоков, приведена на рис. 7.1. Взаимодействие блоков осуществляется при помощи шин трех типов: адресных шин, шин данных и управляющих шин. В дальнейшем мы будем рассматривать именно такую структуру шин, хотя возможны и другие варианты. 7.2. СТРУКТУРА МИКРОПРОЦЕССОРА Общая структура нашего гипотетического иллюстративного микро- процессора представлена на рис. 7.2. Входящие в его состав компо- ненты говорят о том, что он является процессором с программным уп- равлением. Некоторые компоненты, а именно программный счетчик (счетчик команд), стек и регистр команд, служат для обработки ко- манд. Такие компоненты, как АЛУ, триггер переноса, общие ре- гистры (или рабочие) и регистр адреса данных, служат для обработки данных. Все остальные компоненты, а именно дешифратор команд и блок управления и синхронизации (БУС), управляют работой дру- гих компонентов. Взаимодействие компонентов осуществляется по внутренним каналам передачи данных. Связь микропроцессора с другими блоками (ЗУ и устройствами ввода/вывода) происходит по адресной шине, шине данных и управляющей шине. Микропроцессор работает со словами, состоящими из 8 битов. Такие слова, называемые байтами, удобны при выполнении ариф- метических и логических операций и используются в большинстве выпускаемых микропроцессоров. Поэтому мы будем предполагать, что все данные представляются именно такими словами. Если в рас-
254 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ АДРЕСНАЯ ШИНА{^ (16) (16) 3 СТЕК £ 64 (8) £ С: 1111 ШИНА УПРАВЛЕНИЯ ВЫХ вх N Z Управляющие сигналы ко всем компонентам БЛОК УПРАВЛЕНИЯ И СИНХРОНИЗАЦИИ С, Асе H.L I ________(3) РЕГИСТР КОМАНД (16)__________________ \рЕГИСТР АДРЕСА ДАННЫ)(\ 1100 1101 1110 Триггер переноса (16) Рис. 7.2. Гипотетический микропроцессор. Числа в скобках указывают количество разрядов или линий. ШИНА ДАННЫХ (8) | ПРОГРАММНЫЙ СЧЕТЧИк\ ДЕШИФРАТОР КОМАНД 0000 (Асе) 0001 (Н) 0010 (L) 0011 0100 0101 ОНО 0111 1000 1001 1010 1011 четах встречаются числа «большей длины», то применяются специаль- ные программы для вычислений с «двойной точностью», «тройной точностью» и т. д. С другой стороны, адрес из 8 битов позволяет прямо адресовать только 28 = 256 ячеек памяти. Для реальных задач этого, конечно, мало. Поэтому для задания адреса памяти обычно используется 16 раз- рядов (два байта), и это позволяет прямо адресовать 21Н=65 536 яче- ек1). W Число 65536 часто записывают в виде 64К. Применительно к ЭВМ прописной буквой К часто обозначают величину 210 =1024,
’ 7.2. СТРУКТУРА МИКРОПРОЦЕССОРА 235 Информация к микропроцессору и от него передается по шинам. Шины данных в соответствии с длиной слова состоят из 8 линий, тогда как адресная шина состоит из 16 линий. Как показано на рис. 7.1, адресная шина однонаправленная, а шина данных двунаправленная. Управляющая шина состоит из 5 линий, ведущих к блоку управления и синхронизации, и 8 выходящих из него линий. По этим линиям пере- даются управляющие и тактирующие сигналы между, компонентами микропроцессора и между микропроцессором и другими блоками микрокомпьютера. ’ Счетчик, команд состоит из 16 битов и содержит адрес очередно^ байта команды, считываемого из памяти. Он автоматически увеличи- вается на единицу после чтения каждого байта. Существует связь между счетчиком команд и вершиной стека из 64 регистров. Одна ip функций стека — сохранение адреса возврата из подпрограммы. В стеке могут также сохраняться данные из верхних трех общих регистров и триггера переноса. В то время как слово данных всегда состоит из одного байта, коман- да может состоять из одного, двух или трех байтов. Первый байт лю- бой команды поступает из памяти по шине данных на регистр команд. Этот первый байт подается на вход дешифратора команд, который определяет ее смысл. В частности, дешифратор определяет, является ли команда однобайтовой, или она состоит из большего числа байтов. В последнем случае дополнительные байты передаются по шинам данных из памяти и принимаются или на регистр адреса данных, или на один из общих регистров. Регистр адреса данных содержит адрес операнда для команд, об- ращающихся к памяти, адрес порта для команд ввода/вывода или ад- рес следующей команды для команд перехода. Пятнадцать 8-битовых общих регистров содержат операнды для всех команд’, работающих с данными. Для указания этих регистров используются 4-битовые коды от 0000 до 1110. Регистр 0000 называется аккумулятором (А К) и участвует во всех арифметических и логиче- ских операциях. В частности, он содержит один из операндов перед выполнением операции и получает результат после ее завершения. Обычно обращения к общим регистрам осуществляются при помощи R-селектора или г-селектора. R-селектор позволяет обращаться к лю- бому регистру, тогда как через г-селектор доступны только регистры 0000, 0001 и 0010. Очень полезная возможность, присутствующая во многих маши- нах,— это косвенная адресация. Некоторый вариант косвенной адре- сации встроен и в наш микропроцессор х). Задание несуществующего регистра общего назначения 1111 используется как указание на то, что нужно обратиться к байту памяти по 16-разрядному адресу, который = ' ,1> Такая же косвенная адресация применяется в микропроцессоре Intel £080, Детально косвенную адресацию мы рассмотрим в разд. 7.6.
256 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ получается комбинированием содержимого двух фиксированных об- щих регистров. А именно, старшие 8 разрядов адреса — из регистра 0001, а младшие 8 разрядов адреса — из регистра 0010 (в дальнейшем эти два регистра мы будем называть Н и L соответственно; Н — от слова Higher, высший, или старший, L — от Lower, низший, или младший). Чтобы пояснить подобную косвенную адресацию, предпо- ложим, что регистр 0001, т. е. регистр Н, содержит 1011101, а регистр 0010, т. е. регистр L, содержит 00101011. Тогда любая команда, ссы- лающаяся на регистр 1111, вызовет выборку операнда из ячейки па- мяти с адресом 101110100101011. Все арифметические и логические операции выполняются в ариф- метико-логическом устройстве (АЛУ). Входами АЛУ служат две 8-битовые шины. Одна из них идет от аккумулятора (регистр 0000), а другая — от R-селектора, который выбирает либо один из регист- ров общего назначения от 0000 до 1110, либо ячейку памяти, если задана косвенная адресация. Еще одна входная линия поступает в АЛУ от триггера переноса С, который участвует в некоторых ариф- метических и логических операциях. Результаты из АЛУ передаются в аккумулятор по выходной 8-би- товой шине. Существуют еще две линии, идущие от АЛУ к блоку уп- равления и синхронизации; они передают информацию о наличии или отсутствии двух особых условий: аккумулятор содержит нули (ли- ния Z) и старший разряд аккумулятора равен 1 (линия N). Вторая линия очень удобна при работе с числами в дополнительном коде, когда старший разряд знаковый, причем 1 соответствует отрицатель- ным числам. Триггер переноса и обе линии состояния АЛУ Z и N называются флажками и используются в командах условного пере- хода. Последний компонент микропроцессора — это блок управления и синхронизации (БУС). Он получает сигналы от дешифратора команд, который анализирует команду. Как уже упоминалось, в БУС из АЛУ и от триггера переноса поступают сигналы, по которым определяются условия для передач управления. Все остальные компоненты микро- процессора получают от БУС управляющие и синхронизирующие сиг- налы, необходимые для выполнения команды. С помощью 13 внешних линий реализуется интерфейс устройства управления с другими моду- лями микрокомпьютера. Назначение этих линий мы рассмотрим в сле- дующем разделе. 73, БЛОК УПРАВЛЕНИЯ И СИНХРОНИЗАЦИИ Вообще говоря, микропроцессор состоит из триггеров и комбина- ционных вентилей и работает как синхронная последовательностная схема. Триггеры всех регистров и флажков микропроцессора полу- чают синхроимпульсы по общей линии от внешнего генератора. По-
7.3. БЛОК УПРАВЛЕНИЯ И СИНХРОНИЗАЦИИ 257 Рис. 7.3. Общая схема работы микропроцессора. этому любые изменения содержимого регистров или флажков могут происходить лишь в строго определенные моменты времени. Новые состояния определяются комбинационными схемами по текущим состояниям триггеров и флажков, а также по значениям внешних сигналов. Общая схема работы показана на рис. 7.3. Комби- национные схемы выполняют функции, связанные с передачей дан- ных между регистрами, с обработкой данных, формированием инфор- мации о состоянии, выбором пути при передачах управления и т. п. Поскольку некоторые из этих функций! довольно сложны, реализи- рующие их комбинационные схемы оказываются многоуровневыми и, следовательно, дают заметные задержки при распространении сиг- нала. Частота синхроимпульсов выбирается такой, чтобы в интервале между импульсами успевали переключиться триггеры и сработать комбинационные схемы в расчете на самую большую задержку. На рис. 7.3 показаны также и внешние по отношению к микро- процессору компоненты. В их число входят запоминающие устройства и устройства ввода/вывода. Информация между внешними компонен- тами и микропроцессором передается по шинам также в синхронном режиме. В нашем микропроцессоре частота от тактового генератора по- дается на входную управляющую линию «такт». На обмен данными с внешним устройством уходит два такта, т. е. два периода импульсов синхронизации. В них входит и время срабатывания шин, и время 9 № 592
258 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ отклика внешней компоненты. Поскольку шины участвуют во всех внешних обменах, именно они фактически оказываются «узким мес- том», ограничивающим быстродействие микропроцессора. Поэтому вся синхронизация в микропроцессоре строится вокруг внешних обме- нов. Последовательность синхронизирующих импульсов разбивается на так называемые машинные циклы, по три такта в каждом цикле. При работе микропроцессора в каждом машинном цикле происходит один внешний обмен. Первый и второй такты тратятся на обмен и иногда на обработку данных; третий такт весь выделяется для той переработки данных, которую нужно выполнить между последова- тельными внешними обменами. Н----------Машинный цикл V Т2 Синхроимпульсы | Т3 Период доступности АДРЕСНАЯ f ШИНА ------1 _____п Период доступности Сигнал „ запись " или „Вывод" — Т, Машинный цикл т2 Тз Синхроимпульсы._ АДРЕСНАЯ I ШИНА -----1 Период доступности Сигнал „чтение' или„ввод“ ~ . . ШИНА ДАННЫХ Период t дасяумости. ^мс< 7.4. Временйые диаграммы обменов в иллюстративном микропроцессоре, (а) Диа1- грамма выходных обменов, (б) Диаграмма входных обменов. • - <
7.3. БЛОК УПРАВЛЕНИЯ И СИНХРОНИЗАЦИИ 2ЗД При всех внешних обменах используются шины адресов и данных. Передачи данных делятся на два класса: входные и выходные (по от- ношению к микропроцессору). Каждый класс характеризуется своими временными диаграммами сигналов на шинах. Выходные обмены бывают двух типов. Обмены первого типа, в которых участвует глав- ная память, называются записью; второго,— в которых участвует устройство вывода, называются выводом. В классе входных обменов три типа. Два из них называются чтением и вводом, и в них участвуют соответственно главная память и устройство ввода. Третий тип свя- зан с прерываниями, которые мы рассмотрим в гл. 9. Четыре выходные управляющие шины — «запись», «вывод», «чте- ние» и «ввод» — служат для задания типа и момента обмена. На рис. 7.4(a) приведены временные диаграммы сигналов за машинный цчкл, в котором выполняется выходной обмен. Микропроцессор за- дает как состояние адресной шины, подавая на нее либо 16-разрядный адрес памяти для операции записи, либо 8-разрядный код устройства для операции вывода, так и состояние шины данных. Предполагается, что информация на шинах правильно установ- лена и неизменна, от переднего фронта импульса Тх до переднего фронта импульса Тз1). При операции записи импульс на управляющую линию «запись» подается одновременно с Т2, и он используется для стробирования передачи содержимого шины данных в ячейку главной памяти с адресом, заданным на адресной шине. При ,операции вывода импульс, также одновременно с Т2, подается на управляющую ли- нию «вывод» и используется для стробирования передачи содержимого шины данных в регистр устройства вывода, код которого задан на младшей половине адресной шины. На рис. 7.4(6) показаны временные диаграммы для входных обме- нов. Содержимое адресной шины задается в те же моменты и теми же способами, что и для выходных обменов. Содержимое шины данных на этот раз определяется внешним компонентом. Микропроцессор в интервале между задним фронтом Тх и передним фронтом Т3 уста- навливает логическую 1 на управляющую линию «чтение» или «ввод», и это служит запросом к внешнему компоненту поместить данные на шину данных. Линия «чтение» используется главной памятью, а линия «ввод» —- устройствами ввода. В обоих случаях предполагается, что информация на шине данных достоверна между передними фронтами импульсов Т2 и Т3, и стробирование передачи ее на соответствующий регистр микропроцессора выполняется одновременно с задним фронтом Та. Кроме рассмотренных выше управляющих линий, существует еще восемь: Пуск, Сброс, Стоп, Синхр, Прер, ППрер, ПДП и ППДП. Четыре последние относятся к прерываниям программы и прямому На временной диаграмме рис. 7.4 показаны периоды доступности информации на шинах адреса и данных. Фактические значения сигналов на линиях шин, конечвд определяются конкретными значениями адреса и передаваемых данных, 9*
260 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ доступу в память; они будут рассмотрены в гл. 9. Здесь мы остано- вимся на первых четырех. «Пуск» — это входная линия, которая устанавливает режим автоматической работы микропроцессора. А именно, появление импульса в этой линии приводит к тому, что про- цессор по первому же синхроимпульсу начнет выполнять программу с той команды, адрес которой находился на счетчике команд. «Сброс» — это входная линия, с помощью которой микропроцессор устанавливается в начальное состояние. В частности, по импульсу в линии «сброс» прекращается выполнение программы, счетчик команд устанавливается в нуль, а флажки прерываний (см. гл. 9) сбрасыва- ются. «Стоп» — это выходная линия, на которой поддерживается состояние логической 1 все время, пока микропроцессор не выполняет программы (остановлен). И наконец, «Синхр» — это выходная линия, на которую подается импульс одновременно с третьим синхроимпуль- сом каждого машинного цикла и которая используется в некоторых случаях для согласования работы некоторых внешних компонентов с внутренним машинным циклом микропроцессора. 7.4. СИСТЕМА КОМАНД Обычно микропроцессор выполняет команды из некоторого фик- сированного набора, называемого системой команд. Разные микро- процессоры имеют различные системы команд. Детальное описание системы команд нашего иллюстративного микропроцессора приведено в табл. 7.1 и 7.2. Для каждой команды приводится ее символическое обозначение, формат, а также символическое и словесное описание выполняемого действия. Никаких других команд наш микропроцес- сор выполнять не может, следовательно, решение любой задачи должно быть представлено в виде последовательности этих команд. Формат каждой команды в табл. 7.2 полностью определяет пред- ставление команды в памяти компьютера. Таким образом, команда в памяти хранится как последовательность из нулей и единиц. С дру- гой стороны, для человека много удобнее символические обозначения. Поэтому при написании программ можно пользоваться символиче- ской формой, преобразуя ее в машинный двоичный формат непосредст- венно перед вводом в машину. Во всех наших описаниях мы также для удобства будем пользоваться символической формой представле- ния команд. Фаза выборки и дешифрации В гл. 1 говорилось, что обычно команды выполняются в последо- вательном порядке. Будем предполагать, что все программы начи- наются с команды в ячейке 00001б. Время, нужное, чтобы прочитать команду из памяти, декодировать ее и выполнить, называется команд-
7.4. СИСТЕМА КОМАНД 261 Таблица 7.1 Обозначения, используемые при описании команд, приведенных в табл. 7.2 Обозначение Комментарий (X) г Содержимое X Код из 2 битов, обозначающий один из общих регистров 0000, 0001 и 0010 (т. е. Асе, Н и L) двухбитовыми комбинациями 00, 01 и 10 соответственно R d Номер любого общего регистра от 0000 до 1111 Указатель направления передачи. 0 соответствует «to», 1— «from» (т. е. «в» и «от») • —> Передается на Асе Асе/ Аккумулятор, т. е. общий регистр 0000 Разряд аккумулятора с номером i. Разряды нумеруются .от младших к старшим, Z == 0, 1,... ,7 С Н L НЕ М Триггер переноса Общий регистр 0001 Общий регистр- 0010 Пара регистров Н и L Ячейка главной памяти с адресом (Н) (L); ссылка на нее зада- ется как ссылка на общий регистр 1111 <в2> <в3> м [X] PC Stack; Stack L2 Stack HO2 + A Второй байт команды Третий байт команды Ячейка главной памяти с адресом X Программный счетчик Регистр стека с номером i Младшая половина второго регистра стека Младший разряд старшей половины второго регистра стека Арифметическое сложение Логическое умножение (И) V Логическое сложение (ИЛИ) Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ ним циклом. Ввиду того что команды могут состоять из одного, двух, и трех байтов и что время их выполнения может быть разным, команд- ный цикл не является постоянной величиной. Следовательно, нам необходима некоторая меньшая единица времени. В предыдущем разделе такая единица была введена в виде машинного цикла, состоя- щего из трех тактов синхронизации.
262 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Таблица 7.2 Система команд иллюстративного микропроцессора Замечание: При всех передачах содержимое регистра, из которого передаются дан- ные, не изменяется, если это особо не оговорено. Команды пересылки Команда: MOVE (пересылка) Символическая форма: MOV г to R или MOV г from R Формат! d=0 Описание: (г)--->R или (R)------>г Если d=0, то содержимое общего регистра г передается в общий регистр R. Если d=\, то содержимое общего регистра R передается в общий регистр г. Команды с непосредственной адресацией Команда: LOAD REGISTER IMMEDIATE (загрузка регистра непосредственная) Символическая форма: LRI R Формат: 0 1 1 ! 1 0 J R 1 1 и Первый байт Данные 1 I 1 । । i 1 Второй байт Описание: <В2> —► R Второй байт команды передается в общий регистр R. Команды обращения к памяти Команда: LOAD REGISTER (загрузка регистра) Символическая форма: LDR г Формат: 0 1110 0 г ttt.lr 1 Старшие разряды адреса 1 1 1 । । I I t Младшие разряды адреса ? Первый байт Второй байт Третий байт Описание: (М [<В2> <В3>]) —> г • ’Содержимое ячейки памяти передается в общий регистр г* Старшие 8 разрядов адреса ячейки берутся из второго байта команды, а младшие 8 разрядов — из третьего байта. команда: STORE REGISTER (запоминание регистра) Символическая форма: STR г Формат: 0 1110 1 1 1 1 1 1 г t Первый байт Старшие разряды адреса .1 .._1 . 1 1 L... 1 . ! Второй байт Младшие разряды адреса 1 t 1 L 1 1 L — - - Третий байт
7.4. СИСТЕМА КОМАНД 263 Тсбл. 7.2 (продолжение) Описание: (г)—► МКВзХВз» Содержимое общего регистра г передается в ячейку главной памяти. Старшие 8 разрядов адреса ячейки указаны во втором байте команды, а младшие 8 раз- рядов—в третьем байте. Команды передач управления Команда: JUMP ON CARRY NOT-ZERO (переход при ненулевом переносе) Символическая форма: JCN Формат: 0 11110 0 0 1 1 1 1 . .11 1 Первый байт Старшие разряды адреса । i .1 . _। 1 j 1 Второй байт Младшие разряды адреса \ 1 1 । 1 1 1 1 Третий байт Описание: Если (С) = 1, то <В2> <В3>—> PC Если на триггере переноса 1, то содержимое счетчика команд замещается вторым и третьим байтами команды JCN, причем второй байт замещает старшие 8 раз- рядов счетчика команд, а третий байт — младшие 8 разрядов, что вызывает пере- дачу управления в заданную ячейку. В противном случае, т. е. когда (С) = 0, второй и третий байт команды игнорируются, и выполняется следующая по порядку команда. Команда: JUMP ON CARRY ZERO (переход при нулевом переносе) Символическая форма: JCZ Формат: 0 111110 0 1 1 1 1 1 1 Первый байт Старшие разряды адреса ti»» 1 1 1 Второй байт Младшие разряды адреса । । । 1 1 1 1 Третий байт Описание: Если (С) = 0, то <В2> <В3>—>РС Если на триггере переноса 0, то содержимое счетчика команд замещается вто- рым и третьим байтами команды JCZ, причем второй байт замещает старшие 8 разрядов счетчика команд, а третий байт — младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. Когда (С) = 1, второй и третий байт команды игнорируются, и выполняется следующая по порядку команда. Команда: JUMP ON ACCUMULATOR ZERO (переход при нулевом аккумуляторе! Символическая форма: JAZ Формат: 0 11110 0 1 J 1 1 1 1 1 I Первый байт Старшие разряды адреса • 1 1 _ j 1— । 1 Второй байт Младшие разряды адреса । * । » । 1 « Третий байт
264 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Табл, 7.2 (продолжение) Описание: Если (Асе) = 0000 0000, то <В2><В3>—> PC Если содержимое аккумулятора равно нулю, то содержимое счетчика команд замещается вторым и третьим байтами команды JAZ, причем второй байт заме- щает старшие 8 разрядов счетчика команд, а третий байт—младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. В противном случае, т. е. если (Асе) # 0, второй и третий байт команды игнорируются, и выполняется следующая по порядку команда. Команда: JUMP ON ACCUMULATOR NOT ZERO (переход при ненулевом акку- муляторе) Символическая форма: JAN _ Формат: 0 111110 1 1 1_ „1 . .. 1.. 1 Старшие разряды адреса 1 । . г. .1 1... । I Младшие разряды адреса 1 1 ! । j । Первый байт. Второй байт Третий байт Описание: Если (Асе) 0000 0000, то <В2> <В3>—> PC • Если содержимое аккумулятора не равно нулю, то содержимое счетчика команд • вамещаегся вторым и третьим байтами команды JAN, причем второй байт заме- щает старшие 8 разрядов счетчика команд, а третий байт—младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. Если содержимое акку- мулятора равно 0, второй и третий байт команды игнорируются, и выполняется следующая по порядку команда. Команда: JUMP ON ACCUMULATOR POSITIVE (переход при положительном аккумуляторе) Символическая форма: JAP Формат; 0 11110 10 - 1 1 . .. 1 1 .. I - .1... Первый байт , Старшие разряды адреса 1 1 1 1 1 1 1 Второй байт Младшие разряды адреса I I 1 1 1 1 f Третий байт Описание: Если (Асс7) = 0, то <В2><В3>—> PC Если в старшем разряде аккумулятора 0, то содержимое счетчика команд заме- щается вторым и третьим байтами команды JAP, причем второй байт замещает старшие 8 разрядов счетчика команд, а третий байт — младшие 8 разрядов, тем самым происходит передача управления в заданную ячейку. В противном случае второй и третий байт команды игнорируются, и выполняется следующая по по- рядку команда. Команда: JUMP ON ACCUMULATOR MINUS (переход при отрицательном акку- муляторе) Символическая форма- JAM Формат: 0 1111110 —1_1_I_I_I_I-1_ Старшие разряды адреса Младшие разряды адреса I__J__L—.1 I 1______L Первый байт Второй байт Третий байт
7.4. СИСТЕМА КОМАНД 265 Табл. 7.2 (продолжение) Описание: Если (Асс7)=1, то <В2><В3>—► PC Если в старшем разряде аккумулятора 1, то содержимое счетчика команд заме- щается вторым и третьим байтами команды JAM, причем второй байт замещает старшие 8 разрядов счетчика команд, а третий байт—младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. Если (Асс7) —0, то второй и третий байт команды JAM игнорируются, и выполняется следующая по порядку команда. Команда: JUMP UNCONDITIONALLY (переход безусловный) Символическая форма: JMP Формат: 0 1 1 1,1 0,1 1 Illi —1 1 1 Первый байт Старшие разряды адреса 1. _ । . j 1 1 1 1 Второй байт Младшие разряды адреса 1 I । । 1 1 1 Третий байт Описание: <В2> <В3> —> PC Содержимое счетчика команд замещается вторым и третьим байтами команды JMP, причем второй байт замещает старшие 8 разрядов счетчик кохманд, а тре- тий байт—младшие 8 разрядов, что вызывает передачу управления в заданную ячейку. Команда: JUMP INDIRECT (переход по косвенному адресу) Символическая форма: JHL Формат: П 1 Г' 1 1 0 0‘1 I ।_____I___s__!_____I__I___I— Описание: (Н) (L) —> PC Содержимое счетчика команд замещается содержимым общих регистров Н ц L, причем содержимое Н замещает старшие 8 разрядов счетчика команд, а содер- жимое L — младшие 8 разрядов, что вызывает передачу управления в ячейку с адресом, заданным на регистрах Н и L. , Команды обращения к подпрограммам Команда: JUMP ТО SUBROUTINE (переход на подпрограмму) Символическая форма: JMS ГП Первый । 1 байт Второй байт Третий байт Формат: 0 111111 _!__I__I__!_I__I_ Старшие разряды адреса I_I_I__1__I-1-L Младшие разряды адреса ! __1__I__i_I_L Описание: (Stack,)—>Stackz- + 1 i=l, 2,..., 6310 (PC)—> Stack! <в2> <в3> —► PC Стек-опускается и содержимое счетчика команд помещается в вершину стека. Содержимое последнего регистра стека (Stack64) теряется. Содержимое счетчика команд замещается вторым и третьим байтами команды JMS, причем второй байт замещает старшие 8 разрядов счетчика команд, а третий байт—младшие 8 раз- рядов, что вызывает передачу управления в заданную ячейку.
266 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Табл. 7.2 (продолжение) Команда: RETURN FROM SUBROUTINE (возврат из подпрограммы) Символическая форма: RET Формат: 111110 0 0 _I_i_I_।_I_I_I_ Описание: (StackJ ► PC (Stack/)—>Stack/-i e = 2, 3,..., 6110 (Stack64)Stack 64 Содержимое вершины стека передается в счетчик команд, и стек поднимается. Содержимое последнего регистра стека (Stack64) не изменяется. Арифметические и логические команды Команда: ADD REGISTER (сложение с регистром) Символическая форма: ADD R Формат; о о о R 1 1 1 Описание* (Асе) + (R) —► Асе Перенос —► С Содержимое общего регистра R прибавляется к содержимому аккумулятора. Результат сложения становится новым содержимым аккумулятора, а перенос из старшего разряда становится новым содержимым триггера переноса С. Все числа считаются целыми без знаков. Команда: ADD REGISTER WITH CARRY (сложение с регистром и переносом) Символическая форма: ADC R Формат: 10 0 1 Г 1 1 R 1 1 I Описание: (Acc)-|-(R)+(C) —> Асе Перенос —> С Содержимое общего регистра R и триггер переноса С прибавляются к содер- жимому аккумулятора. Результат сложения становится новым содержимым акку- мулятора, а перенос из старшего разряда становится новым содержимым триггера переноса С. Все числа считаются целыми без знаков. Команда: SUBTRACT REGISTER (вычитание регистра) Символическая форма: SUB R Формат: 10 10 1 1 1 R « 1 । *J Описание: (Асе) —(R) —> Асе Заем —► С Содержимое общего регистра R вычитается из содержимого аккумулятора. Резуль- тат вычитания становится новым содержимым аккумулятора, а заем в старший разряд становится новым содержимым триггера переноса. Все числа считаются целыми без знака. Команда: SUBTRACT REGISTER WITH CARRY (вычитание регистра и переноса)
7.4. СИСТЕМА КОМАНД 267 Табл, 7.2 (продолжение) Символическая форма: SBC R Формат: Описание: (ACC) — (R) — (С) —> Асе Заем —> С Содержимое общего регистра R и триггера переноса С вычитаются из содержи- мого аккумулятора. Результат вычитания становится новым содержимым акку- мулятора, а заем в старший разряд становится новым содержимым триггера переноса. Все числа считаются целыми без знака. Команда: LOGICAL AND (логическое И) Символическая форма: AND R Формат: 110 0 1 1 1 R 1 । I Описание: (Асе) Л (R) —► Асе Над содержимым общего регистра R и аккумулятора поразрядно выполняется операция логического И. Результат становится новым содержимым аккумулятора* Состояние триггера переноса не меняется. Команда: LOGICAL OR (логическое ИЛИ) Символическая форма: OR R Формат: Описание: (Асе) V (R) —► Асе Над содержимым общего регистра R и аккумулятора поразрядно выполняется операция логического ИЛИ. Результат становится новым содержимым аккуму- лятора. Состояние триггера переноса не меняется. Команда: LOGICAL EXCLUSIVE-OR (логическое ИСКЛЮЧАЮЩЕЕ ИЛИ) Символическая форма: XOR R Формат: 1110 1 1 1 R 1 । 1 (Асе) ф (R) Асе- Описание: Над содержимым общего регистра R и аккумулятора поразрядно выполняется операция логического ИСКЛЮЧАЮЩЕГО ИЛИ. Результат становится новым содержимым аккумулятора. Состояние триггера переноса не меняется. Команда: COMPLEMENT ACCUMULATOR (обращение аккумулятора) Символическая форма: СМА формат: 1 1 1 1 0 0 0 0 ________I___________I____________________________I------------1____________I___________I______ Описание: (Асе) —> Асе < * Нули в аккумуляторе заменяются на единицы, а единицы — на нули (т. е- осу- ществляется, обращение кода в аккумуляторе).
С68 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Табл. 7.2 (продолжение) Команда: COMPLEMENT CARRY (обращение переноса) Символическая форма: СМС 11110 0 11 Illi_I_।_I— Формат: Описание: (С) —>С Если состояние триггера переноса С равно 0, оно заменяется на 1. В противном случае — сбрасывается в 0. Команда: RESET CARRY (сброс переноса) Символическая форма: RSC Формат:ГТ| 1 , 1 , 1 , о , 1 , 0 , 0~] Описание: 0 —> С •' Т-рнггер переноса С сбрасывается. Команда: ROTATE ACCUMULATOR AND CARRY LEFT (циклический сдвиг аккут мулятора и переноса влево) Символическая форма: RTL ! Формат: lliioooi । . i 1 1, 1 J i Описание- <С; —> Асс0 t , (Асе/)—>АсС; + 1 £ = 0, 1, 6 (Асс7) —> С Содержимое аккумулятора и триггера переноса С как одно целое сдвигаются циклически влево. Содержимое разряда Асс7 попадает на триггер С, а содержи- мое триггера С—в разряд Асс0. Команда: ROTATE ACCUMULATOR AND CARRY RIGHT (циклический сдвиг аккумулятора и переноса вправо) Символическая форма. RTR Формат: 11110 0 1'0 ____I____I___I_____I___I_____I__1__ Описание: (С) —► Асс7 (Асс^)—►Accz-_| /=1, 2, 7 (Асс0) —С Содержимое аккумулятора и триггера переноса С как одно целое сдвигаются циклически вправо. Содержимое разряда Асс0 попадает на триггер С, а содер- жимое триггера С—в разряд Асс7. Команды ввода/вывода Команда: INPUT (ввод) Символическая форма: 1NP Формат; Первый байт Второй байт
7.4. СИСТЕМА КОМАНД 269 Табл. 7.2 (продолжение} Описание: Устройство ввода [<В2>] —> Асе Байт данных передается в аккумулятор от устройства ввода, номер которого задан вторым байтом команды INP. Команда: OUTPUT (вывод) Символическая форма: OUT формат: 11111110 । . . 1 . 1 1 .1.j_j_ Номер устройства ..1 .1 1 . . j_।.j_ Первый байт Второй байт Описание: (Асе) —> устройство вывода [<В2>] Содержимое аккумулятора передается на устройство вывода, номер которого задан вторым байтом команды OUT. Специальные команды Команда: INCREMENT REGISTER PAIR Н AND L (увеличение на 1 содержимого пары регистров Н и L) Символическая форма: IHL Формат: 1 [1 | 1 । 1 t о । 1 t .0 [~ 1 Описание: (Н) (L) 4- 1 —> HL 16-разрядное двоичное число, содержащееся в регистрах Н и L, увеличивается на 1 по модулю 216. Команда: DECREMENT REGISTER PAIR Н AND L (уменьшение на 1 содержи- мого пары регистров Н и L) Символическая форма: DHL Формат: Описание: (Н) (L) — 1 —>HL 16-разрядное двоичное число, содержащееся в регистрах Н и L, уменьшается на 1 по модулю 21G. Команда: PUSH DATA ONTO STACK (опустить данные в стек) Символическая форма: PUSH Формат: о 1 1 1 t 0 r 1 t 1 г 1 Описание: (Stack/)—>Stackz-+2 i= 1, 2, 6210 0000000 (C) (Acc) —> Stack2 (H) (L) —> Stackx Стек опускается дважды. В результате во втором регистре стека оказывается значение аккумулятора с переносом, а в первом (вершине стека) содержимое пары регистров Н и L. Команда: POP DATA FROM STACK (поднять данные из стека) Символическая форма: POP Формат: 0 1 110 0 1ч1 ti 11 11 ,1
270 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Табл, 7.2 (продолжение) Описание: (Stackx)—► HL (Stack L2) —► Асе (Stack H02)—+C (Stack/)—> Stack/. 2 i = 3, 4, ...» 6410 (Stacky)—>Stackу / = 63, 64 Содержимое вершины стека передается на пару регистров Н и L. Содержимое младшей половины второго регистра стека передается на аккумулятор, а младший бит старшей половины этого же регистра передается на триггер переноса С. Стек поднимается дважды, причем состояние двух нижних регистров остается без изменений Команда: ENABLE INTERRUPT (разрешить прерывания) Символическая форма: Е1Т Формат: 11111011 _I_1_I_I_U-J_I_Z_ Описание: 1 —> флажок прерываний На триггере, называемом флажком прерываний, устанавливается 1 после выполне- ния команды, следующей за данной командой Команда: DISABLE INTERRUPT (запретить прерывания) Символическая форма: DIT Формат: 1111110 0 -1_I_I_I_1 - . J_L__ Описание: 0 —► флажок прерываний Триггер, называемый флажком прерываний, сбрасывается. Команда: NO OPERATION (пустая команда) Символическая форма: NOP Формат: 1 1 1 1 , °,1,1 , п Описание: При выполнении этой команды никаких действий не выполняется. Команда: HALT (останов) Символическая форма: HLT Формат; 111110 10 _।_I_।_I_।-1-1— Описание: Выполнение команд прекращается до прихода импульса на линию „пуск“.
7.4. СИСТЕМА КОМАНД т Рис. 7.5. Информационные потоки в фазе выборки-дешифрации командного цйкла< Первый этап выполнения любой команды — это чтение команды из памяти. Чтение каждого байта команды занимает один машинный цикл. На рис. 7.5 показаны основные информационные потоки в фазе выборки-дешифрации командного цикла. 16-битовый адрес первого байта команды передается в память по шине адреса с программного счетчика. Устройство управления формирует сигнал «чтение», благо- даря которому содержимое адресуемой ячейки выдается из памяти на шину данных и затем принимается на регистр команд. Этот первый байт, содержащий код операции, дешифруется дешифратором команд, при этом выясняется, сколько байтов в команде. Одновременно уве- личивается программный счетчик. Если обнаруживается, что в команде есть еще один или два байта, то затрачивается еще один или два машинных цикла на то, чтобы ана-
272 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ логичным образом выбрать следующий байт или байты из памяти. Однако приемником этих байтов оказывается уже не регистр команд, а либо регистр адреса данных, если команда не является командой с непосредственным адресом (этот путь показан на рис. 7.5), либо один из общих регистров, если команда является командой с непосредст- венным адресом. В любом случае фаза выборки-дешифрации завер- шается после второго синхроимпульса последнего машинного цикла. Фаза выполнения Следующий этап после выборки — это выполнение команды. Для одних команд выполнение завершается третьим оставшимся синхро- импульсом последнего машинного цикла, для других команд требу- ются дополнительные машинные циклы. Количество дополнительных Рис, 7.6. Информационные потоки в фазе выполнения команды MOV г from R при усло- вии R56
7.4. СИСТЕМА КОМАНД 273 циклов определяется в блоке управления и синхронизации в зависи- мости от выполняемой команды. Рассмотрим фазу выполнения некоторых команд нашего микро- процессора. По ходу изложения читателю следует обращаться к табл. 7.2. Команды пересылки Первой рассмотрим команду пересылки (MOV). По этой команде информация передается либо между двумя общими регистрами, либо между ячейкой главной памяти и общим регистром. На рис. 7.6 по- казаны информационные потоки в фазе выполнения команды MOV при передаче между регистрами. В частности, если в команде задано Рис. 7.7. Информационные потоки в фазе выполнения команды MOV г from R, когда R=lllla.
ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ 274 d=l, то в соответствии с табл. 7.2 содержимое любого регистра от 0ie до Е1б, указанного в поле R команды, передается на один из ре- гистров 01б, 11в, 21б, указанный в поле г команды. Эта передача осу- ществляется третьим синхроимпульсом в том же машинном цикле, в котором был выбран первый байт команды. Таким образом, в рас- смотренном случае командный цикл состоит из одного машинного цикла. При R = 111112 команда MOV выполняется иначе. В этом особом случае реализуется упомянутый в разд. 7.2 механизм косвенной ад- ресации. На рис. 7.7 представлен случай, когда по-прежнему d=l. Содержимое общих регистров Н и L, содержащих соответственно старшие 8 и младшие 8 разрядов адреса, подаются на адресную шину. Затем после подачи импульса «чтение» содержимое адресуемой ячейки главной памяти принимается из шины данных на общий регистр г. Ввиду того что для выполнения команды потребовался внешний обмен, командный цикл занял два машинных цикла. Рис. 7.8. Информационные потоки в фазе ввшолнения команды LRI R при R1112.
7.4. СИСТЕМА КОМАНД 275 Команды с непосредственным адресом Перейдем к рассмотрению команды загрузки регистра с непо- средственным адресом LRI R. Ее особенности, как впрочем, и веек команд с непосредственным адресом, состоит в том, что данные явля- ются частью самой команды. С помощью таких команд очень удобно задавать константы. Как уже говорилось раньше, на выборку коман- ды в данном случае затрачивается два машинных цикла. Байт, выбранный в первом цикле, помещается на регистр команд, а байт, выбранный во втором — на регистр адреса данных. После этого, если только R не равен 11112, выполнение команды завершается по третьему синхроимпульсу на втором машинном цикле. А именно, как показано на рис. 7.8, младшие 8 битов регистра адреса данных, Ряс. 7.9. Информационные потоки в фазе вытюлнения команды STO £•
276 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ содержащие второй байт команды, передаются в общий регистр R. Если же R = 11112, то, как и в случае команды MOV, требуется еще один машинный цикл для обращения к памяти х). Команды обращения к памяти Теперь рассмотрим группу команд обращения к памяти. Это трех- байтовые команды, с помощью которых информация передается меж- ду памятью и одним из общих регистров 01с, 11б, 21в, обозначаемых через г. В качестве примера рассмотрим команду запоминания содер- жимого регистра в памяти STR г. Выполнение команды проиллюстри- ровано на рис. 7.9. Содержимое регистра адреса данных, загруженного в фазе выборки- дешифрации вторым и третьим байтами команды, подается на адрес- ную шину, а содержимое общего регистра г подается на шину данных. Затем устройство управления формирует сигнал «запись», стробирую- щий запись данных в адресуемую ячейку памяти. Фаза выполнения требует одного внешнего обмена и занимает один машинный цикл. Следовательно, полный командный цикл занимает четыре машинных цикла: три на фазу выборки-дешифрации и один на фазу выполнения. Команды передачи управления Команды передач управления, или переходы, составляют очень важный класс в системе команд любого компьютера. Они служат для изменения нормальной последовательности выполнения команд или безусловно, или в результате анализа определенных условий. В микропроцессорах обычно бывает много команд такого типа. Ти- пичным представителем можно считать команду «переход при ненуле- вом переносе» (JCN). Поскольку это трехбайтовая команда, фаза выполнения может быть начата на третьем синхроимпульсе третьего машинного цикла. По этому синхроимпульсу БУС опрашивает состояние триггера пере- носа С. Если состояние С удовлетворяет заданному условию, т. е. если С=1, то, как показано на рис. 7.10, содержимое регистра адреса дан- ных передается на программный счетчик. Таким образом, второй и третий байты команды становятся адре- сом команды, которая будет выбираться следующей. Если же, на- против, состояние триггера С не удовлетворяет условию, т. е. С=0, то программный счетчик сохраняет то значение, которое он получил в фазе выборки-дешифрации. Поэтому JCN не окажет влияния на по- рядок выборки команд. Переходы описанного типа называются условными передачами уп- равления или условными переходами, поскольку программный счетчик Авторы не уточняют трактовки команды LRI R при R=llll.— Прим, ред,
7.4. СИСТЕМА КОМАНД 277 Рис. 7.10. Информационные потоки в фазе выполнения команды JCN при С=1. При С=0 перехода не происходит. Рис. 7.11. Взаимодействие между главной прог- раммой и подпрограммой»
278 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Рис.: 7; 12. Команды обращения к подпрограммам, (а) Информационные потоки в фазе выполнения команды JMS. изменяется только при выполнении некоторых условий. Другими примерами команд такого типа могут служить «переход при нулевом аккумуляторе» (JAZ), «переход при отрицательном аккумуляторе» (JAM) и др. К другому типу переходов относятся команды безусловной передачи управления. По этим командам программный счетчик изменяется всег- да-,1 что вызывает переход. В нашем микропроцессоре безусловный пе- реход можно выполнить по прямому адресу (JMP) или по косвен- ному (JHL). . В некоторых микропроцессорах можно встретить команды обхода или пропуска (skip instructions): если1 заданное условие выполнено, следующая команда пропускается; в противном случае она выполни-
7.4. СИСТЕМА КОМАНД 279 Рис. 7.12. Команды обращения к подпрограммам, (б) Информационные потоки в фазе выполнения команды RET, ется. Одно из преимуществ команд пропуска в том, что в них не ука- зан адрес перехода, и, следовательно, они представляются меньшим числом байтов. Команды обращения к подпрограммам Очень часто одну и ту же процедуру нужно выполнить в несколь-. ких точках программы. Вместо того чтобы повторно записывать команды этой процедуры в каждой точке, удобнее и эффективнее офор* мить ее в виде подпрограммы. На рис. 7.11 показано взаимодействие главной программы и подпрограммы. Разумеется, должен быть обес* печен возврат в главную программу в ту же точку, откуда было еде-
280 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ лано обращение, или в некоторую точку, четко определенную относи- тельно точки обращения. Общий подход к решению этой проблемы состоит в том, чтобы пре- дусмотреть специальные команды, с помощью которых можно было бы запомнить исходную точку, а затем вернуться к ней. В нашем иллю- стративном микропроцессоре эти функции выполняют две команды: «переход на подпрограмму» (JMS) и «возврат из подпрограммы» (RET). Информационные потоки для этих команд приведены на рис. 7.12. Сначала рассмотрим команду JMS. По третьему синхроимпульсу третьего машинного цикла содержимое регистра адреса данных, рав- ное адресу входа в подпрограмму, поступает на программный счет- чик, тем самым осуществляется переход. Одновременно старое со- держимое программного счетчика, которое уже было продвинуто и указывало на следующую за JMS команду, помещается в стек. После завершения подпрограммы команда RET позволяет вернуться в глав- ную программу. При ее выполнении стек поднимается, и на програм- мном счетчике восстанавливается адрес команды в главной программе, на которую следует вернуться. Совершенно ясно, что та же пара команд позволяет подпрограмме обратиться в свою очередь к другой подпрограмме и т. д. Это называ- ется вложенными обращениями или вложенными подпрограммами. Единственное ограничение на число уровней вложения налагается размерами стека, поскольку, когда стек опускается, содержимое его нижнего регистра теряется. Поскольку подпрограмма — это тоже программа, ей нужны дан- ные, над которыми производятся вычисления. Вообще говоря, эти данные, называемые параметрами или аргументами подпрограммы, зависят от той точки, откуда было сделано обращение к подпро- грамме. Один из простейших способов передачи параметров — это загрузка их в общие регистры непосредственно перед выполнениехМ команды JMS. При таком подходе подпрограммы составляются в предположении, что необходимые параметры будут находиться в об- щих регистрах, откуда их можно будет легко выбрать. Аналогично подпрограмма может оставить в общих регистрах вычисленные ею результаты для передачи их главной программе. Более детально ор- ганизацию подпрограмм мы рассмотрим в следующей главе. Арифметические и логические команды Все, рассмотренные выше команды были либо командами перехо- дов, либо командами пересылки информации. Обратимся теперь ,к командам обработки информации. К ним относятся команды слое- ния, вычитания, логического И, логического ИЛИ, команды сдвигов м т. д» В .качестве типичного представителя этого класса рассмотрим «сложение с регистром и переносом» ADC R.
7.4. СИСТЕМА КОМАНД 281 Рис. 7.13. Информационные потоки в фазе выполнения команды ADC R, когда R$6 #11112. На рис. 7.13 показаны потоки информации, когда R задает любой общий регистр в диапазоне 0i6, . . Е1б. В соответствии с табл. 7.2 это однобайтовая команда. Следовательно, после второго синхроим- пульса первого и единственного машинного цикла содержимое акку- мулятора и регистра R может быть подано на входы АЛУ в качестве операндов. АЛУ по этим двум операндам и переносу С (считая его пере- носом в младший разряд) вычисляет 8-разрядную сумму и новое зна- чение переноса. Таким образом, по третьему синхроимпульсу машин- ного цикла сумма передается в аккумулятор, а результирующий пере- нос — в триггер переноса С. Выполнение команды ADC R при R = 11112 показано на рис. 7.14. В этом случае второй машинный цикл затрачивается на выборку
282 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ Рис. 7.14. Информационные потоки в фазе выполнения команды ADC R, когда R— = 1Ш2. операнда из памяти по адресу на регистрах Н и Ь.Этот операнд вре- менно заносится в младшие разряды регистра адреса данных и оттуда через R-селектор в нужный момент подается на вход АЛУ. Команды ввода/вывода Теперь рассмотрим группу команд, обеспечивающих передачу информации между микропроцессором и устройствами ввода/вывода. Для конкретности остановимся на команде OUT. Поскольку это двух-
7.4. СИСТЕМА КОМАНД 283 Рис. 7.15. Информационные потоки в фазе выполнения команды OUT, байтовая команда, второй байт во втором машинном цикле будет поменХен в регистр адреса данных в младшую его половину. В связи с задержками распространения сигнала в шинах, а также в логических схемах устройств вывода и самого микропроцессора в фазе выполнения команды используется третий машинный цикл. Этот цикл иллюстрируется на рис. 7.15. По первому синхроимпуль- су третьего машинного цикла содержимое младшей половины регистра адреса данных подается на адресную шину, а содержимое аккумуля- тора через г-селектор — на шину данных. Все устройства вывода де- кодируют содержимое младшей половины адресной шины. Однако только то устройство, которое опознает код на адресной шине как свой }>РД, подает разрешающий сигнал на прием информации с шины дан- ных, в свой входной регистр. По второму синхроимпульсу третьего
284 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ машинного цикла БУС подаст сигнал на линию «вывод» шины управ- ления, который стробирует передачу содержимого шины данных в открытый для приема регистр. Специальные команды Это последний класс команд в наборе команд микропроцессора. Они улучшают как эффективность программ, так и удобство их на- писания. Поскольку пару общих регистров Н и L можно использовать для обращения к ячейкам памяти при косвенной адресации, команды IHL и DHL увеличения и уменьшения значения, хранящегося в этих регистрах, оказываются очень удобными для модификации адре- сов. Команды разрешения и запрещения прерываний будут детально описаны в гл. 9. Пустая команда (NOP) реализует программную за- держку времени. Она бывает нужна при взаимодействии с медлен- ными устройствами ввода/вывода. Команда останова (HLT), очевид- но, позволяет закончить выполнение программы. Две оставшиеся команды в классе специальных команд это команды PUSH и POP, работающие со стеком. Когда выполняется подпрограм- ма или программа обработки прерывания, ей для ввода, вывода и об- работки данных нужны общие регистры. Однако, как правило, они содержат информацию, нужную основной программе или подпрограм- ме. Поэтому содержимое трех верхних общих регистров Асе, Н и L вместе с содержимым триггера переноса С можно запомнить в стеке командой PUSH и затем в нужный момент восстановить командой POP. Это позволяет использовать регистры Асе, Н, L и триггер С при вы- полнении подпрограммы и тем не менее сохранять их содержимое. Более того, поскольку информация сохраняется в стеке, процедура сохранения/восстановления может быть повторена в подпрограмме или в программе обработки прерываний, обеспечивая много уровней вложен и ,1. Фаза выполнения команды PUSH проходит за два синхроимпульса. По третьему синхроимпульсу командного цикла в стек опускается значение переноса С и аккумулятора, а затем по следующему синхро- импульсу, который фактически будет первым импульсом в следующем командном цикле, в стек опускается значение регистров Н и L. Такое совмещение командных циклов в данном случае вполне допустимо, поскольку информационные потоки не интерферируют друг с другом. Потоки информации в фазах выполнения команд POP и PUSH в точности противоположны. В приложении в конце книги приведены все команды нашего ил- люстративного микропроцессора. Табл. П1 содержит команды в ал- фавитном порядке, а табл. П2 — в порядке кодов операций.
7.5 СПОСОБЫ АДРЕСАЦИИ 285 7.5. СПОСОБЫ АДРЕСАЦИИ В процессе изучения системы команд мы видели, что некоторые команды ссылаются на ячейки памяти. Для одних команд — это ячей- ки, откуда нужно прочитать или куда нужно записать обрабатывае- мые данные, для других — это ячейки с командами, на которые нужно передать управление. И в том, и в другом случае адрес ячейки каким-то образохм должен быть задан. Вообще говоря, часть команды, которая используется для задания адреса памяти, называется полем адреса. Поле адреса может содержать: фактический адрес ячейки памяти, как, например, в команде «загрузка регистра» LDR; или же номер об- щего регистра, содержащего адрес ячейки памяти, как, например, в команде ADD при R = 1111; или же само поле адреса может быть объек- том ссылки, как, например, в команде LRI. В последнем случае само поле адреса содержит данные, участвующие в выполняемой операции. Способами адресации называются различные режимы интерпре- тации поля адреса команды. Мы отмечали, что команды могут, вообще говоря, состоять из различного числа байтов. В нашем микропроцессо- ре были однобайтовые, двухбайтовые и трехбайтовые команды. Число слов в команде зависит от используемых способов адресации, допу- стимого размера памяти и архитектуры микропроцессора. Поэтому, стремясь к эффективности программ, создатели микропроцессоров обычно предусматривают в них несколько способов адресации. В этом разделе мы рассмотрим наиболее распространенные способы адресации, хотя, вообще говоря, ни один конкретный микропроцессор, в том числе и наш иллюстративный, не обязан иметь их все. Для крат- кости изложения содержимое поля адреса будем называть исходным адресом, а адрес ячейки памяти, на которую в конце концов формиру- ется ссылка и которая содержит перерабатываемые данные, будем на- зывать эффективным адресом п. Прямая адресация Наиболее естественный способ адресации — это прямая адресация. При прямой адресации в команде просто задается эффективный адрес, т. е. исходный адрес равен эффективному. Если при обращениях к памяти пользоваться только прямой адресацией, то команды, вообще говоря, будут состоять из нескольких слов. В 8-разрядном микро- процессоре, например, при памяти размером в 65536 байтов для пря- мой адресации нужен адрес из двух байтов (16 разрядов). Предположив, что еще один байт нам потребуется для задания самой команды, мы получим команду из 3 байтов. Примером команды с прямой адресацией в нашем микропроцессоре *> Иногда его называют фактическим, действительным или исполнительным адре- сом.— Прим, перев.
286 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ является команда загрузки регистра LDR. Два байта из трех в ко- команде содержат фактический адрес ячейки памяти, которая содер- жит операнд, загружаемый в указанный в команде общий регистр. Непосредственная адресация При непосредственной адресации операнд команды просто явля- ется частью команды. В этом случае операнд в памяти расположен непосредственно вслед за ячейкой, содержащей «операционную» часть команды. Например, в команде LRI второй байт команды пред- ставляет собой константу, которая загружается в указанный в команде регистр. Индексная адресация В некоторых микропроцессорах эффективный адрес может быть получен сложением исходного адреса с содержимым заданного ре- гистра. Такой способ называется индексной адресацией, а соответ- ствующий регистр называется индекс-регистром. Обычно предусматриваются специальные команды для увеличения и уменьшения содержимого индексных регистров, и это облегчает последовательную обработку элементов таблиц в программных цик- лах. Иногда содержимое индекс-регистров автоматически увеличива- ется или уменьшается каждый раз, когда регистр используется для образования эффективного адреса. Этот способ называется автоиндек- сированием. Косвенная адресация Косвенная адресация — это очень эффективный и важный способ адресации в микропроцессорах. При косвенной адресации исходный адрес служит указателем на ячейку, в которой находится эффектив- ный адрес. Таким образом, исходный адрес это «адрес адреса». Случай, когда исходный адрес указывает на общий регистр, со- держащий эффективный адрес, по существу, является частным слу- чаем косвенной адресации. Он называется регистровой косвенной адре- сацией. Регистровая косвенная адресация повышает эффективность программы, поскольку в команде в этом случае адресное поле должно вмещать только ссылку на общий регистр. Примером регистровой косвенной адресации может служить ко- манда ADD R при R = ll 11. Значение 1111 в младших четырех битах команды — это ссылка на общие регистры Н и L. Содержимое этих ре- гистров воспринимается как 16-разрядный эффективный адрес.
7,5. СПОСОБЫ АДРЕСАЦИИ 287 Относительная адресация Относительная адресация в чем-то близка к индексной. В ней эф* фективный адрес получается прибавлением исходного адреса к содер- жимому программного счетчика. Исходный адрес интерпретируется как число со знаком, так что относительная адресация, например, в команде перехода позволяет передать управление вперед или назад от текущего адреса на программном счетчике на заданное в программе «расстояние». Этот способ адресации особенно эффективен в командах переходов, когда переход осуществляется в близкие ячейки, поскольку не требует задания полного адреса, по которому осуществляется пе- реход. Страничная адресация Часто объем памяти микропроцессора превышает «адресное про- странство», т. е. максимальное число адресов для данного формата команд. В таком случае память можно разбить на страницы, размер которых определяется максимальным числом ячеек, адресуемых в команде. Например, если на адрес отводится только 8 разрядов, то каждая страница должна содержать 2е=256 ячеек. Страницам присва- иваются номера в последовательном порядке, начиная с 0. В нашем примере страница 0 будет содержать ячейки от 0 до 255, страница 1 — ячейки 256—511 и т. д. При таком подходе программный счетчик мож- но считать состоящим из двух частей. Старшие разряды — это номер страницы, а младшие — адрес слова внутри страницы. Метод адресации к текущей странице сводится к тому, что Исход- ный адрес в команде считается адресом внутри той страницы, где на- ходится сама команда, т. е. «сдвигом» относительно начала страницы. Этот метод позволяет адресовать ячейки только в текущей странице, а эффективный адрес получается, как сумма адреса начала страницы и исходного адреса в команде. Таким образом, старшие разряды эффек- тивного адреса — это просто старшие разряды программного счетчик^, а младшие разряды — это исходный адрес в самой команде. Другой метод страничной адресации называется адресацией к нуле- вой странице. Исходный адрес трактуется как адрес внутри нулевой страницы. Старшие разряды эффективного адреса полагаются равны- ми нулю, а младшие'— равными исходному адресу. Адресация и к те- кущей, и к нулевой странице является одной из форм относительной адресации и называется страничной относительной адресацией. ' Описанные методы страничной адресации позволяют обращаться Только к ячейкам нулевой и текущей страниц. Чтобы обратиться К’лю- бой ячейке памяти, можно воспользоваться косвенной адресацией. Еблй, например, нужно обратиться к ячейке в странице 7, а программ мный счетчик показывает, что текущая команда находится в етрани*
288 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ це 3, то адрес, относящийся к странице 7, нужно запасти либо в стра- нице 0, либо в странице 3, и тогда операнд в странице 7 будет досту- пен по косвенному адресу. 7.6. НЕКОТОРЫЕ ДРУГИЕ КОМАНДЫ, СПЕЦИФИЧНЫЕ ДЛЯ МИКРОПРОЦЕССОРОВ В выпускаемых микропроцессорах часто можно встретить команды, которых нет в нашем иллюстративном микропроцессоре. Одни из них являются просто разновидностями команд нашего микропроцес- сора, другие более удобны с точки зрения программирования, третьи расширяют вычислительную мощь микропроцессора. Не ставя задачи рассмотреть все возможные виды команд, мы тем не менее приведем наиболее характерные из них. Арифметические и логические команды с операндами в главной памяти В иллюстративном процессоре все арифметические и логические команды работали с операндами, либо находящимися на регистрах микропроцессора, либо адресуемыми косвенно при помощи регистров Н и L. Во многих микропроцессорах встречаются арифметические и логические команды с прямой адресацией операнда в главной памяти. По такой схеме команда сложения, например, прибавляет содержимое ячейки памяти к содержимому внутреннего регистра, служащего ак- кумулятором, и помещает результат во внутренний регистр. При зада- нии в команде прямого адреса операнда в главной памяти длина коман- ды, естественно, возрастает. В некоторых микропроцессорах возможности расширяются еще больше и предусматривается запись результата непосредственно в главную память. Примерами могут служить команды, инвертирующие содержимое ячейки памяти или увеличивающие его на единицу. Команды условных переходов В нашем микропроцессоре выбор направления вычислений вы- полняется с помощью шести команд условных переходов, в которых анализируется три условия: равно ли нулю содержимое аккумулятора, положительно ли оно и равен ли нулю бит триггера переноса. Во мно- гих микропроцессорах, помимо перечисленных, анализируются сле- дующие условия: 1. Переполнение при арифметических операциях. 2. Четность (или нечетность) числа единиц в содержимом регистра. 3. Строгая положительность содержимого регистра (положитель- но и не равно нулю).
7.6. НЕКОТОРЫЕ ДРУГИЕ КОМАНДЫ 289 4. Различные внешние условия, задаваемые сигналами на спе- циальных входных линиях. Во многих микропроцессорах команды условных переходов реа- гируют на состояние отдельных флажковых триггеров. Значения этих триггеров устанавливаются в момент выполнения определенных опе- раций. Например, может существовать флажок знака или флажок чет- ности. На состояние этих флажков влияют только арифметические и (или) логические команды, тогда как другие команды, например за- грузка аккумулятора, оставляют их неизменными. Таким образом, состояние каждого флажкового триггера будет отражать не обязатель- но текущее состояние того или иного регистра, а то его состояние, ко- торое было получено в результате выполнения последней из команд, принадлежащих некоторой категории. Этот подход заметно отлича- ется от принятого нами в иллюстративном микропроцессоре с двумя условиями N и Z, характеризующими состояние аккумулятора. Обычно флажки состояний в микропроцессорах объединяются в специальный регистр. Содержимое этого регистра называется словом состояния программы и анализируется во всех командах условного перехода. Обычно предусматривается возможность передачи слова состояния программы на другие регистры микропроцессора или в главную память. В частности, слово состояния программы может сох- раняться в стеке при вызове подпрограммы. В этом случае, даже если подпрограмма изменит слово состояния программы, при возврате из подпрограммы его можно восстановить. Помимо (или вместо) условных переходов, в некоторых микропро- цессорах применяются другие команды, позволяющие выбирать на- правление вычислений. О командах условного пропуска мы говорили в разд. 7.4. Можно также упомянуть команды условного перехода на подпрограмму и условного возврата из подпрограммы. Команды обработки данных Операции, выполняемые в иллюстративном микропроцессоре при помощи арифметических и логических команд, являются базисными и встречаются в большинстве микропроцессоров. В некоторых микро- процессорах, кроме того, предусмотрены команды десятичной ариф- метики, двоичного умножения, двоичного деления и других операций. Десятичная арифметика встречается в системе команд многих ми- кропроцессоров. Десятичные числа, как правило, представляются в коде 8421 BCD с четырехбитовыми цифрами, размещаемыми в слове данных вплотную друг к другу. Например, в микропроцессоре с вось- мибитовым словом каждое слово интерпретируется как двузначное десятичное целое без знака. Десятичное сложение обычно выполняется методами, описанными в разд. 2.7, т. е. с помощью двоичного сложения и последующей кор- 10 № 592
290 ГЛ. 7. АРХИТЕКТУРА МИКРОПРОЦЕССОРОВ рекции результата. Для коррекции сначала определяются десятичные разряды, в которых выполняется одно из двух условий: (1) десятичная цифра в двоичной системе превышает 9 или (2) возникает перенос из старшего двоичного разряда цифры при двоичном сложении. К каж- дому такому десятичному разряду прибавляется корректирующая циф- ра 6, причем это сложение также выполняется обычным образом в двоичной системе с распространением всех переносов. Реализуется описанная процедура в микропроцессорах обычно од- ним из двух способов. В первом случае предусматривается команда десятичного сложения, которая в процессе выполнения осуществляет и двоичное сложение, и коррекцию-. Во втором — предусматривается отдельная команда десятичной коррекции (decimal-adjust instruction). В этом случае при десятичном сложении сначала выполняется обыч- ная команда двоичного сложения, оставляющая результат в регистре, а затем выполняется команда десятичной коррекции. Для правильной работы эта вторая команда должна располагать необходимой информацией. В частности, должно быть известно о на- личии или отсутствии переносов из каждого десятичного разряда при двоичном сложении. В связи с этим обычно добавляются триггеры, фиксирующие переносы из каждого четвертого двоичного разряда при двоичном сложении. При восьмибитовом слове данных нужен только один дополнительный триггер переноса, поскольку триггер переноса из восьмого разряда — триггер переноса С — уже есть. Умножение и деление — это относительно сложные операции, и аппаратно они реализуются лишь в немногих микропроцессорах. Обычно эти операции выполняются над двоичными целыми числами без знаков. Как правило, по команде умножения перемножается со- держимое двух регистров, и результат двойной длины запоминается в паре регистров. При делении делимое обычно задается парой регист- ров, а делитель — одним. Целое частное при этом помещается в один регистр, а остаток — в другой. Перед выполнением деления, однако, происходит проверка на возможное переполнение частного. Перепол- нение происходит в том случае, когда для представления частного требуется больше разрядов, чем содержится в одном регистре. Тест переполнения можно провести, сравнивая делитель со старшей поло- виной делимого. Переполнения частного не произойдет, если делитель не равен нулю и по крайней мере вдвое превышает старшую половину делимого. В силу сложности операций умножения и деления время их вы- полнения обычно существенно превышает время выполнения других операций. Каждая из них состоит из многих шагов, выполняемых в микропроцессоре последовательно. УПРАЖНЕНИЯ 7.1. Для каждой команды в табл. 7.2 определите число машинных циклов в ко- мандном цикле. Не забудьте рассмотреть особо случаи, когда Ц=11112.
УПРАЖНЕНИЯ 291 7.2. Предположим, что аккумулятор содержит шестнадцатеричное число C6je, общий регистр В16 содержит шестнадцатеричное число 941б, а триггер переноса С со- держит 1. Каким будет содержимое аккумулятора и триггера переноса С после вы- полнения каждой из следующих команд: ADD В ADCB SUB В SBC В AND В OR В XOR В XOR О RTL СМА STR 0. 7.3. Изобразите информационные потоки в фазе выполнения команды MOV г to R при R=llll2 и дайте необходимые пояснения.
Глава 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ Чтобы обработать информацию на микрокомпьютере, нужно шаг за шагом описать весь процесс обработки. Такое описание называется программой. Реальная программа, выполняемая микрокомпьютером, должна состоять только из тех команд, которые предусмотрены его конструкцией. Совокупность этих команд составляет так называемый машинный язык, или язык машинных команд данного компьютера. Как мы видели в гл. 7, команды, выполняемые аппаратурой ми- кропроцессора, довольно просты и немногочисленны. И тем не менее вычислительные возможности микропроцессора, как и любого другого компьютера, вообще говоря, не ограничены, поскольку эти команды можно объединять в программы. Совокупность программ, написанных для микрокомпьютера, составляют его программное обеспечение. Возможно, читатель уже знаком с такими проблемно-ориентиро- ванными языками программирования, как Фортран или ПЛ/1. Разу- меется, составлять программы на этих языках много удобнее, чем на машинном языке. Однако, поскольку фактически выполняемая про- грамма должна обязательно быть на машинном языке, программу на проблемно-ориентированном языке необходимо перед исполне- нием транслировать на машинный язык. В этой главе мы будем изучать программирование для микро- компьютеров. Основное внимание будет уделено программированию на языке машинных команд описанного в предыдущей главе иллю- стративного микропроцессора. На примере нескольких программ мы познакомимся с основными приемами программирования и попут- но глубже поймем работу микропроцессора и пределы его возмож- ностей. В заключение будут рассмотрены такие средства программи- рования, как ассемблеры и компиляторы. Ассемблеры выполняют тран- сляцию на машинный язык программ, написанных в символической форме, близкой к машинному языку. Компиляторы — это трансляторы для проблемно-ориентированных языков, или языков высокого уровня. 8.1. ПРОГРАММИРОВАНИЕ НА МАШИННОМ ЯЗЫКЕ Как уже говорилось, программа должна быть представлена в той форме, в какой ее воспринимает машина. В частности, команды должны бц!ть представлены в виде последовательностей из нулей и
8.1. ПРОГРАММИРОВАНИЕ НА МАШИННОМ ЯЗЫКЕ 293 единиц, поскольку это единственно понятная аппаратуре форма. Однако выписывать длинные последовательности из нулей и единиц довольно утомительно. Поэтому при записи команд применяется более удобная шестнадцатеричная система. Мы видели в гл. 2, что между шестнадцатеричной и двоичной сис- темами счисления преобразования выполняются очень легко. Каждая группа из 4 двоичных цифр соответствует ровно одной шестнадцатерич- ной цифре. Поэтому, если не оговорено противное, все программы на машинном языке в этой книге мы будем записывать шестнадцатерич- ными цифрами. Например, трехбайтовая команда нашего иллюстри- рованного процессора, загружающая в аккумулятор содержимое ячейки памяти с адресом ОНО 1111 1101 10112, имеет вид 01110000 01101111 11011011 В шестнадцатеричных обозначениях эта команда запишется как 70 6F DB Тем не менее и двоичное, и шестнадцатеричное представление машин- ного языка неудобно и ненаглядно для человека. Поэтому, как пра- вило, команды представляются в символической форме — исполь- зуются легко запоминаемые мнемонические обозначения команд. Например, в соответствии с табл. 7.2 предыдущую команду можно записать в виде LDR 0 6F DB Второй и третий байты по-прежнему записаны шестнадцатеричными цифрами, и аккумулятор задан своим номером среди общих регистров, равным 0. Однако операция обозначена трехбуквенным мнемони- ческим именем LDR. В конце книги в приложении приведены для справок две таблицы П1 и П2, в которых устанавливается соответст- вие между шестнадцатеричной и символической формой команд ил- люстративного микропроцессора. Теперь введем соглашение, которое будет действовать до конца книги. Все программы для нашего микропроцессора, если не сделано особых оговорок, мы будем записывать в символической форме. Таким образом, первый байт каждой команды будет выглядеть, как в табл. 7.2 (или П1 и П2). Номера общих регистров в командах мы будем задавать одной шестнадцатеричной цифрой, причем Fle будет обозначать косвенную адресацию. И наконец, значение второго ц
294 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ третьего байта в командах мы также будем задавать шестнадцатерич- ными цифрами. Проиллюстрируем теперь наши соглашения на примере неболь- шой программы, в которой к числу, находящемуся в ячейке 000Ai6 главной памяти, прибавляется шестнадцатеричная константа ЗС. Программа приведена в табл. 8.1. Она выполняется следующим обра- зом. Таблица 8.1 Пример программы: «прибавить константу к числу в памяти и записать результат снова в память* Номер ячейки памяти (шест- надцатерич- ный) Команда на машин- ном языке Команда в символиче- ской форме Комментарий 0000 70 LDR 0 Передача содержимого ячейки памяти 0001 00 00 000А в аккумулятор. 0002 0А 0А 0003 61 LRI 1 Загрузка в регистр 1 величины ЗС. 0004 ЗС ЗС 0005 81 ADD 1 Сложение регистров 0 и 1, сумма в ак- кумуляторе. 0006 74 STR 0 Передача содержимого аккумулятора в 0007 00 00 ячейку 0ООВ. 0008 ОВ OB 0009 FA HLT Останов программы. 000А Исходное число. 000В Сумма. Прежде всего подается внешний импульс на линию «сброс», по которому на программный счетчик устанавливается 0. Затем подается импульс на линию «пуск», и начинается выполнение программы. Вы- бираются 3 байта, составляющие первую команду, и программный счетчик увеличивается на 1 после выборки каждого байта. Первая команда пересылает содержимое ячейки памяти ООО А в аккумулятор. Поскольку программный счетчик продвинулся на 3 единицы, он теперь содержит 0003. Это адрес следующей команды — загрузки ре- гистра с непосредственным адресом. Команда содержит в себе опе- ранд и удобна для задания константы. Ее выполнение приводит к за- сылке значения ЗС, содержащегося во втором байте команды, в об- щий регистр 1. Теперь программный счетчик содержит 0005, т. е. адрес третьей команды. Ее выборка и выполнение приводят к при- бавлению содержимого регистра 1 к содержимому аккумулятора и занесению суммы в аккумулятор. Следующая команда передает со- держимое аккумулятора в ячейку памяти 00В. Последняя команда останавливает микропроцессор,
6.2 РАЗВЕТВЛЕНИЯ В ПРОГРАММАХ 295 8.2. РАЗВЕТВЛЕНИЯ В ПРОГРАММАХ Одно из наиболее мощных свойств компьютеров заключается в их способности принимать решения в ходе выполнения программы. Эти решения принимаются в зависимости от простых условий, сло- Рис. 8.1. Блок-схема программы выбора наибольшего из трех положительных чисел х, у и г.
296 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ жившихся на данный момент. Обычно в результате принятия реше- ния либо сохраняется последовательный порядок выполнения прог- раммы, либо происходит переход на другую часть программы. Слож- ные решения реализуются в виде нескольких простых разветвлений. Чтобы пояснить сказанное, рассмотрим программу, которая вы- бирает наибольшее из трех 8-битовых целых положительных чисел х, у и z. Сначала определяется наибольшее из двух чисел х и у путем Таблица 8.2 Программа отыскания наибольшего из трех 8-битовых целых чисел без знаков х, у и г Ячейка памяти Команда на машин- ном языке Команда в сим- волической форме Комментарий 0000 70 LDR 0 Передача x из памяти в аккумулятор. 0001 00 00 0002 1В 1В 0003 71 LDR 1 Передача у из памяти в регистр 1. 0004 00 00 0005 1С 1С 0006 А1 SUB 1 Вычитание у из х. Триггер С устанавли- вается, если у > х. 0007 72 LDR 2 Передача х в регистр 2 как возможного наибольшего. 0008 00 00 0009 1В IB 000А 7С JCZ Проверка С на наличие заема. Если нет 000В 00 00 заема, то х больше у, и следующая ооос 10 10 команда пропускается. 000D 72 LDR 2 Передача у в регистр 2, замещающая х, 000Е 00 00 если у больше х. COOF 1С 1C 0010 71 LDR 1 Передача г из памяти в регистр 1. ООН 00 00 0012 1D ID 0013 12 MOV 0 from 2 Передача наибольшего из х, у на акку- мулятор из регистра 2. 0014 А1 SUB 1 Вычитание г из наибольшего среди х, у. С устанавливается, если г больше. 0015 12 MOV 0 from 2 Передача наибольшего из х, у в аккуму- лятор как возможного наибольшего. 0016 7С JCZ Проверка С на наличие заема. Если заем 0017 00 00 есть, то г больше; в противном случае 0018 1А 1A следующая команда опускается. 0019 11 MOV 0 from 1 Передача г в аккумулятор как наиболь- шего. 001А FA HLT Останов программы. Наибольшее число в аккумуляторе. 001В Число X 001С Число у 001D Число г
8.2. РАЗВЕТВЛЕНИЯ В ПРОГРАММАХ 297 вычитания второго из первого и проверки заема в старший разряд. Отсутствие заема говорит о том, что х больше или равен у. С другой стороны, присутствие такого заема означает, что у больше х. Затем аналогичным образом отыскивается наибольшее из двух чисел: z и найденного ранее наибольшего из х и у. На рис. 8.1 описанная выше процедура представлена в виде ди- аграммы. Такие диаграммы называются блок-схемами. Они весьма удобны для построения схемы вычисленного процесса. Программа, решающая нашу задачу, приведена в табл. 8.2. Пред- полагается, что три исходных числа х, у и z расположены в ячейках 001В, 001С и 001D. Программа должна поместить наибольшее число в аккумулятор. Первая команда программы загружает х в аккумуля- тор, а вторая помещает у в общий регистр 1. Затем осуществляется их сравнение путем вычитания у из х. Если у строго больше х, тогда возникает заем в старший разряд, который сохраняется в виде еди- ницы в триггере переноса С. Однако еще до проверки переноса С значение х как «пробное» наибольшее из х и у загружается в регистр 2. Эта загрузка не влияет на состояние триггера переноса С. Затем выполняется команда условного перехода по значению С. Переход произойдет, если С имеет нулевое значение. Если С не равно нулю, то претендент на роль наибольшего, т. е. х, заменяется на у. Это делает следующая команда, которая загружает у в регистр 2. Если С=0, то управление передается на команду, хранящуюся в ячей- ке 0010, и в этом случае в качестве большего значения остается х. При любом варианте в этой точке программы наибольшее значение из х и у находится в регистре 2, и оно будет аналогичным образом срав- ниваться с z. Значение z передается из памяти в регистр 1 командой LDR, нахо- дящейся в ячейке 0010. Следующая команда передает наибольшее значение из х и у в аккумулятор. Затем осуществляется сравнение путем вычитания z из содержимого аккумулятора. Если z больше, то возникает заем. Наибольшее из х и у переносится из регистра 2 в аккумулятор на случай, если z окажется меньше. Затем снова про- веряется состояние триггера С командой JCZ. Если С=0, что говорит об отсутствии заема, то делается переход на команду останова. В про- тивном случае выполняется очередная команда, загружающая в ак- кумулятор значение z, и после нее — команда останова. При всех условиях и конечном итоге на сумматоре оказывается значение наи- большего из трех чисел х, у и z. Вообще говоря, принятие решения сводится к организации такой проверки, такого теста, по результатам которого можно было бы выб- рать ту или иную последовательность действий. Наличие команд ус- ловного перехода позволяет микропроцессору выбрать нужную аль- тернативу автоматически, без вмешательства человека. При этом зада- ча программиста — обеспечить, чтобы микропроцессор выполнял нужные действия при любом исходе теста.
298 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ 83. ПРОГРАММИРОВАНИЕ ЦИКЛОВ Цикл в программе — это средство, позволяющее с помощью одной и той же последовательности команд выполнить какие-то действия много раз. В общем случае цикл — это группа команд, выполнение которых многократно повторяется за счет того, что в этой группе есть команда, возвращающая управление снова и снова на первую команду в группе, пока не выполнится некоторое условие окончания цикла. Способность выполнять циклы является одним из фундаментальных свойств ЭВМ. Благодаря циклам можно пользоваться командами по нескольку раз, не дублируя их в памяти, тем самым сокращается размер программы. Чтобы пояснить основную идею, рассмотрим задачу вычисления суммы N чисел. Для ее решения нужно последовательно прибавлять каждое число к текущей частной сумме. Можно в принципе написать программу, в которой для прибавления каждого числа будет использо- ваться своя отдельная последовательность команд. Однако при боль- ших N разумнее написать программу в виде цикла. Вместо того чтобы иметь N последовательностей команд прибавления, в цикле будет одна последовательность, выполнение которой повторится N раз. При этом, конечно, нужно подсчитывать число уже сделанных повто- рений, для того чтобы процесс своевременно закончился. В качестве счетчика можно использовать регистр, начальное сос- тояние которого нужно установить до первого повторения (до начала итераций) и затем проверять (тестировать) и модифицировать при каждой новой итерации. Следующая проблема — обеспечить при каждом прохождении цикла выборку следующего прибавляемого чис- ла. Если предположить, что числа размещены в последовательных ячейках главной памяти, требуемую выборку можно осуществить при помощи указателя, который будет изменяться при каждой итерации. В циклической программе можно выделить инициализирующую часть, предшествующую циклу, его рабочую часть, тест конца цикла и модифицирующую часть. Эти части можно видеть в программе вычисления суммы — см. табл. 8.3. Суммируется содержимое после- довательных ячеек. Первые пять команд составляют инициализирую- щую часть. Общие регистры Н и L используются в качестве 16-бито- вого указателя, содержащего адрес очередного прибавляемого числа. Первые две команды заносят в Н и L адрес первого числа. Затем в регистр 3 помещается начальное значение, равное 10. Регистр 3 бу- дет выполнять функции счетчика количества суммируемых чисел, ко- торые программе еще предстоит обработать. Сумма накапливается в общем регистре 4. Четвертая команда в программе устанавливает в нем нулевое начальное значение. Наконец, в общий регистр 5 загру- жается константа 1, которая будет вычитаться из счетчика в процессе суммирования чисел.
8.8. ПРОГРАММИРОВАНИЕ ЦИКЛОВ 299 Таблица 8.3 Программа вычисления суммы десяти 8-битовых чисел без знаков Ячейка памяти Команда на машин- ном языке Команда в сим- волической форме Комментарий 0000 61 LRI 1 Установка в регистрах Н и L адреса пер- 0001 00 00 вого числа. 0002 62 LRI 2 0003 15 15 0004 63 LRI 3 Установка начального значения счетчика 0005 0А 0А цикла равным 10 0006 64 LRI 4 Установка частной суммы равной 0. 0007 00 00 0008 65 LRI 5 Загрузка константы 1 для уменьшения 0009 01 01 счетчика. 000А 14 MOV 0 from 4 Прибавление очередного числа. 000В 8F ADD F ооос 04 MOV 0 to 4 000D F5 IHL Увеличение Н и L. 000Е 13 MOV 0 from 3 Уменьшение счетчика. 000F А5 SUB 5 0010 03 MOV 0 to 3 ООН 7D JAN Проверка конца цикла. 0012 00 00 0013 0А 0A 0014 FA HLT 0015 ЧИСЛОх Суммируемые числа. 0016 число2 001Е ЧИСЛО! 0 Следующие три команды составляют рабочую часть цикла. Сначала текущая частная сумма передается в аккумулятор из регистра 4. Далее следует команда сложения ADD F, содержащая специальный указатель F, который на самом деле соответствует ячейке главной памяти с адресом на паре регистров Н и L. Содержимое этой ячейки прибавляется к частной сумме в аккумуляторе. После этого результат передается в общий регистр 4. Остальные команды программы служат для тестирования конца цикла и модификации. Сначала команда IHL модифицирует регистры Н и L, так, чтобы они содержали адрес данных, которые должны обрабатываться при следующей итерации. Затем содержимое счетчика цикла передается в аккумулятор, уменьшается на 1 и снова возвра- щается в регистр 3. Поскольку значение счетчика осталось также в аккумуляторе, его можно использовать для проверки, нужно ли про- должать итерации или вычисления завершены. Счетчик показывает число ещё не прибавленных чисел. Следовательно, когда вычисления
300 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ завершаются, в аккумуляторе будет 0. Это условие тестируется командой «условный переход при ненулевом аккумуляторе». Если в аккумуляторе 0, тогда переход не происходит, и программа выходит на команду останова, в противном случае выполняется следующая итерация. Обратите внимание, в описанной программе по команде ADD F вполне можно получить сумму, превышающую емкость аккумулятора, т. е. частная сумма может занять 9 разрядов. Это и есть переполне- ние, о котором мы уже упоминали. Ясно, что если переполнение может^возникнуть, то оно должно детектироваться (в рассматриваемом случае при переполнении после выполнения команды ADD F ока- жется установленным в 1 триггер переноса), и нужно иметь возмож- ность работать с суммами, занимающими более 1 байта. Обычно в подобных задачах применяется процедура сложения «с двойной», «тройной» или большей «точностью». 8.4. ПРОГРАММИРОВАНИЕ СЛОЖНЫХ РАЗВЕТВЛЕНИЙ Исходные концепции, касающиеся принятия решений, мы рассмот- рели в разд. 8.2. Процедура сводилась к тому, чтобы сформировать проверяемое условие, т. е. результат, служащий основой для при- нятия решения, а затем проверить это условие с помощью подходя- щей команды условного перехода. Таким способом микропроцессор выбирает один из двух возможных путей дальнейшего выполнения программы, другими словами, одну из двух ветвей. Эту процедуру легко обобщить на случай большего количества ветвей, т. е. на слу- чай более сложных разветвлений. Для этого нужно сформировать те- стируемую переменную, которая может принимать несколько зна- чений. С каждым из значений связывается своя ветвь в программе. Микропроцессор должен в результате проверок выбрать одну из’ветвей. Один из подходов — это сравнивать тестируемую переменную по- очередно со всеми возможными ее значениями. При положительном результате сравнения с первым значением управление передается на первую ветвь программы. При отрицательном— производится сравнение со вторым возможным значением и т. д. Этот метод показан на рис. 8.2. Другой метод выбора нужной ветви связан с использованием таб- лицы переходов. Основная идея метода состоит в том, чтобы использо- вать тестируемую переменную или достаточно простую функцию от нее в качестве указателя в таблицу переходов, которая содержит на- чальные адреса ветвей. Чтобы проиллюстрировать этот метод, предположим, что нам нужно совершить переход по одному из восьми направлений, и условие раз- ветвления формулируется следующим образом: Перейти на программу 1, если в аккумуляторе 00000001, Перейти на программу 2, если в аккумуляторе 00000010.
8.4 СЛОЖНЫЕ РАЗВЕТВЛЕНИЯ 301 Рис. 8.2. Один из методов прог- раммирования сложных развет- влений. Перейти на программу 8, если в аккумуляторе 10000000. Программа, показанная в табл. 8.4, решает нашу задачу в пред- положении, что тестируемая переменная находится в аккумуляторе. В ячейках с 2000 по 200F расположена таблица переходов, содержа- щая 8 начальных адресов, по которым возможно разветвление. Ос-
302 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ Таблица 8.4 Программа сложного разветвления, использующая таблицу переходов Ячейка памяти Комментарий Команда на машин* ном языке Команда в симво- лической форме 1000 61 LRI 1 Загрузка регистров H, L начальным ад- 1001 20 20 ресом таблицы переходов. 1002 62 LRI 2 1003 00 00 1004 F4 RSC Сброс триггера С. 1005 F2 RTR Сдвиг младшего разряда аккумулятора в триггер С. 1006 78 JCN Если С=1, то содержимое Н, L указы- 1007 10 10 вает на начальный адрес нужной ветви 1008 0Е 0Е программы. 1009 F5 IHL Если С = 0, содержимое пары регистров 100 А F5 IHL Н, L увеличивается дважды на 1 и 100В 7В JMP указывает на следующий начальный 100С 10 10 адрес. 100D 05 05 100Е 1F MOV 0 from F Замена в Н, L указателя на элемент таб- 100F F5 IHL лицы переходов самим адресом перехода 1010 5F MOV 2 from F 1011 30 MOV 1 from 0 1012 F9 JHL Переход на нужную ветвь программы. Таблица переходов: 2000 —. — Начальный адрес ветви 1. 2001 — 2002 — — Начальный адрес ветви 2. 2003 — — 200Е Начальный адрес ветви 8. 200F — — новная задача программы — преобразовать значение тестируемой переменной в соответствующий адрес строки в таблице переходов. Это позволит выбрать нужный адрес из таблицы и передать по нему управление. Первые две команды программы загружают адрес начала таблицы переходов, т. е. 2000, в регистры Н и L. Далее следует цикл, в котором вычисляется адрес в таблице переходов по значению, заданному на аккумуляторе. Первым делом содержимое аккумулятора циклически сдвигается вправо, так, чтобы младший разряд попал в триггер пере- носа. Если после сдвига в триггере переноса окажется 1, то регистры Н и L как раз будут указывать на нужную ячейку в таблице переходов. Если же в триггере переноса 0, тогда содержимое пары регистров Н, L дважды увеличивается на 1, и управление передается на начало
8.8. ПОДПРОГРАММЫ 303 цикла. Процесс повторяется, и на этот раз делается проверка, не соот- ветствует ли следующий элемент таблицы переходов значению тес- тируемой переменной. В какой-то момент по команде перехода в ячейке 1006 микропро- цессор выйдет из цикла на команду в ячейке 100Е. В этот момент со- держимое пары регистров Н, L будет указывать на строку, содержа- щую начальный адрес нужной программной ветви. Четыре команды служат для загрузки этого начального адреса в регистры Н, L. По- скольку начальный адрес в строке таблицы замещает находившийся в Н, L указатель на саму строку, нужно особо позаботиться о том, чтобы не испортить указатель до того, как будет использована нахо- дящаяся в нем информация. Поэтому старшие разряды начального адреса ветви сначала переносятся в регистр 0, а не прямо в регистр Н. После этого указатель в Н, L увеличивается на 1, чтобы указывать на младшие разряды начального адреса, и эти разряды выбираются в регистр L, поскольку указатель больше не нужен. Затем в регистр Н переносятся старшие разряды начального адреса из регистра 0. На- конец, выполняется команда перехода по косвенному адресу, которая заносит содержимое регистров Н, L на программный счетчик, в ре- зультате чего начнется выполнение нужной программной ветви. Недостатки обоих рассмо