Text
                    МИКРОПРОЦЕССОРЫ
И МИКРОКОМПЬЮТЕРЫ


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 на программный счетчик, в ре- зультате чего начнется выполнение нужной программной ветви. Недостатки обоих рассмотренных методов заключаются в том, что перебор всех возможных альтернатив делается последовательно. Это может потребовать заметного времени, особенно при большом числе альтернатив. Задержку можно уменьшить, если процедуру поиска альтернативы организовать в виде двоичного дерева. При такой про- цедуре последовательно отбрасывается половина оставшихся альтер- натив, пока не останется единственная. Для случая с таблицей переходов, например, на первом шаге нужно проверить, лежит ли нужный начальный адрес в первой чет- верке адресов или во второй. Затем на втором шаге нужно установить, принадлежит ли адрес первой или второй паре в выбранной на первом шаге четверке. На третьем шаге выбор сузится до одного адреса. Легко видеть, что такая процедура требует только трех, а не восьми шагов, соответствующих худшему случаю в описанной ранее процедуре. В об- щем случае, если число альтернатив равно N, то при поиске по двоич- ному дереву число шагов будет равно наименьшему целому числу, которое больше или равно log2 N. При больших N это дает большую экономию по сравнению с последовательным перебором альтернатив. 8.5. ПОДПРОГРАММЫ Часто мы сталкиваемся с необходимостью решать одну и ту же задачу в нескольких местах программы. В этом случае можно написать подпрограмму, решающую эту задачу, и обращаться к ней по мере необходимости, не повторяя одни и те же команды в разных точках программы. Таким образом, подпрограмма — это вспомогательная
304 ГЛ 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ программа, которой пользуется главная программа. Поскольку под- программа обладает определенной самостоятельностью, она обычно размещается в отдельной от главной программы области памяти. Вход в подпрограмму и выход из подпрограммы В самом понятии подпрограммы предполагается, что ее можно вызвать (т. е. обращаться к ней) в разных точках главной программы с последующим возвратом на продолжение главной программы. Поэто- му должны существовать средства для сохранения адреса той точки в главной программе, в которую нужно вернуться. Существуют раз- ные методы решения этой проблемы. Один из них заключается в ис- пользовании стека, встроенного в самом микропроцессоре или моде- лируемого в главной памяти. Этот метод принят в нашем иллюстра- тивном микропроцессоре. Как было описано в предыдущей главе, по команде перехода на подпрограмму в нашем микропроцессоре содержимое программного счетчика (а оно в этот момент указывает на следующую команду в главной программе) запоминается в стеке. Впоследствии этот адрес снова загружается в программный счетчик, когда в конце подпрограм- мы выполняется команда «возврат из подпрограммы». Другой подход заключается в том, что адрес возврата сохраняется в области памяти, содержащей саму подпрограмму. Еще один метод, применяемый в некоторых системах, предусматривает сохранение возврата в каком-то специально обусловленном регистре централь- ного процессора. Вообще говоря, желательно, чтобы подпрограмма в свою очередь могла обратиться к другой подпрограмме. Такие обращения называ- ются вложенными. Три упомянутых выше метода предоставляют раз- ные возможности для организации вложенных обращений. При ис- пользовании стека допускается самая общая форма вложенных обра- щений. Стек позволяет одной подпрограмме обращаться не только к другим подпрограммам, но и к самой себе. Это возможно, поскольку при каждом входе в подпрограмму адрес возврата помещается в вер- шину стека, а все ранее запомненные адреса опускаются в стек и тем самым сохраняются. При возвратах запомненные адреса выбираются из стека в порядке, обратном тому, в каком они запоминались. Это соответствует порядку, в котором должны выполняться возвраты. Конечно, число уровней вложенности (т. е. число незавершенных под- программ) ограничивается размерами стека, поскольку каждый адрес возврата занимает один регистр в стеке. Стек нашего иллюстратив- ного микропроцессора имеет 64 регистра и, следовательно, допускает 64 уровня вложений. Метод сохранения адреса возврата в самой подпрограмме позволяет подпрограмме обратиться к другой подпрограмме, но не к себе самой. Действительно, в ходе выполнения подпрограммы ячейка, где сохра-
8.5. ПОДПРОГРАММЫ 305 няется адрес возврата, уже занята и не может принять еще один адрес. Однако этот метод не налагает никаких ограничений на число уровней вложенности, поскольку каждая подпрограмма на каждом уровне предоставляет место для адреса возврата. К числу недостатков этого метода нужно отнести то, что подпрограмму нельзя поместить в по- стоянное ЗУ, поскольку в ячейку с адресом возврата должна произ- водиться запись. Для микропроцессоров, где часто используются по- стоянные программы, это последнее обстоятельство может оказаться решающим при выборе метода. При сохранении адреса возврата в одном фиксированном регистре вложенности подпрограмм вообще невозможны, поскольку в одном регистре можно сохранить адрес только одной подпрограммы. Однако эта проблема может быть решена программно путем добавления в под- программу команд, сохраняющих содержимое регистра в памяти перед обращением к другой подпрограмме. Ячейку для сохранения можно выбрать в области памяти, отличной от той, которую занимает сама подпрограмма, поэтому подпрограммы можно размещать в постоян- ной памяти. Возврат из подпрограммы можно осуществлять, переда- вая управление на ячейку с запомненным адресом. В отношении уров- ней вложенности такая схема эквивалентна предыдущей в том смысле, что подпрограмма может вызвать другие подпрограммы, но не себя. В микропроцессорах применяются все три описанных метода, но доминирует метод с использованием стека. Чаще стек реализуется не на аппаратных регистрах в микропроцессоре, а моделируется в ячейках главной памяти. При этом, как говорилось в гл. 6, в микро- процессоре предусматривается специальный регистр, называемый указателем стека. Указатель стека содержит адрес ячейки, которая считается вершиной стека в текущий момент. В начале главной про- граммы в указателе стека устанавливается некоторое начальное зна- чение. Когда информация заносится в стек или удаляется из него, указатель автоматически продвигается вверх или вниз и, таким обра- зом, все время указывает на вершину стека. Стек расширяется при поступлении новой информации и сжимается при ее удалении. В мо- делируемом стеке практически не возникает ограничений на число уровней вложенности. Параметры подпрограммы Важный аспект понятия подпрограммы связан со способом пере- дачи данных, которые называются параметрами или аргументами, между главной программой и подпрограммой. Существует несколько способов решения этой проблемы. Во-первых, аргументы можно за- гружать в общие регистры перед переходом на подпрограмму. Под- программа, написанная в предположении, что аргументы находятся в регистрах, выполняется и оставляет свои результаты также в ре-
306 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ Таблица 8.5 Пример передачи параметров от главной программы в подпрограмму через общие регистры Ячейка памяти Команда на машин- ном языке Команда в сим- волической форме Комментарий 0020 70 LDR 0 Загрузка первого аргумента в регистр D. 0021 80 80 0022 00 00 0023 0D MOV 0 to D 0024 70 LDR 0 Загрузка второго аргумента в регистр Е. 0025 80 80 0026 50 50 0027 0Е MOV 0 to E 0028 7F JMS Переход на подпрограмму в ячейке 9000. 0029 90 90 002А 00 00 002В — —- Точка возврата из подпрограммы. гистрах. Главная программа после возврата из подпрограммы берет результаты из общих регистров. Иллюстрирует такой подход программа в табл. 8.5. Предполага- ется, что аргументы находились в ячейках памяти 8000 и 8050. Глав- ная программа загружает их в общие регистры D и Е, после чего пере- дает управление на подпрограмму в ячейке 9000 с помощью команды «переход на подпрограмму». Если нужные подпрограмме аргументы находятся в последователь- ных ячейках памяти, в главной программе перед переходом на под- программу можно загрузить в регистры Н и L (или в любую другую пару общих регистров) адрес первого аргумента. Ответственность за вы- борку аргументов возлагается при этом на подпрограмму. Достоинство этого способа в том, что не нужно загружать сразу все аргументы в ре- гистры — программа будет выбирать из их памяти по мере необходи- мости. Такой подход, очевидно, предпочтительнее, когда число аргу- ментов превышает число свободных общих регистров. Кроме того, этот подход решает проблему обратной передачи результатов. Напри- мер, достаточно под результаты зарезервировать часть списка аргу- ментов. В рассмотренном случае главная программа загружала в регистры Н и L адрес первого аргумента и тем самым передавала в подпрограм- му список аргументов. Возможен вариант, когда главная программа передает в подпрограмму не список самих аргументов, а список адре- сов аргументов. В этом случае в регистры Н и L загружается адрес первого адреса в списке адресов аргументов. Таким образом, чтобы
8.6. СЛОЖЕНИЕ С n-КРАТНОЙ ТОЧНОСТЬЮ 307 получить аргумент, подпрограмма должна сначала получить адрес из списка адресов, а уже затем сам аргумент. Этот способ обладает тем преимуществом, что аргументы не обязательно должны располагаться в последовательных ячейках памяти, а могут быть разбросаны про- извольным образом. 8.6. СЛОЖЕНИЕ С n-КРАТНОЙ ТОЧНОСТЬЮ Большинство современных микрокомпьютеров работает со словами длиной 8 бит. Точность представления чисел при такой длине слова составляет примерно 2.4 десятичных знака. Очевидно, для многих задач такая точность недостаточна, и, следовательно, нужны средства для представления чисел с более высокой точностью. Очевидный спо- соб — это представлять одно число двумя или большим количеством слов. Такие числа можно хранить в последовательных ячейках памя- ти или в последовательных общих регистрах. Будем называть их чис- лами n-кратной точности. Проблема тогда сведется к выполнению ариф- метических действий над числами n-кратной точности с помощью команд, работающих с данными размером в одно слово. Наличие команд «сложения/вычитания с переносом» значительно упрощает ре- ализацию сложения и вычитания над числами n-кратной точности. Процедуру сложения чисел без знаков с двойной точностью можно реализовать, например, следующим образом. Младшие слова двух чисел складываются без начального переноса, при этом получается младшее слово суммы и итоговый перенос из старшего разряда. Стар- xL + yl +sl Перенос -^С v Хн+Ун+0+s* Перенос Рис. 8.3. Блок-схема алгоритма сложения чисел с двой- ной точностью.
308 ГЛ. 8 ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ шие слова двух чисел складываются вместе с входным переносом, ко- торый равен итоговому переносу, полученному при сложении млад- ших слов. Окончательный результат, т. е. сумма,— это число с двой- ной точностью и итоговый перенос. В виде блок-схемы эта процедура представлена на рис. 8.3. Таблица 8.6 Подпрограмма сложения чисел с двойной точностью Распределение общих регистров: Rx:XH, R3:YH, R6:SH R2:Xl, R4:Yl, R6:Sl Ячейка памяти Команда на машин- ном языке Команда в символи- ческой форме Комментарий 0000 12 MOV 0 from 2 Загрузка XL в аккумулятор. 0001 84 ADD 4 Сложение YL с XL, С = перенос. 0002 06 MOV 0 to 6 Загрузка SL в регистр 6. 0003 11 MOV 0 from 1 Загрузка Хн в аккумулятор. 0004 93 ADC 3 Сложение Хн, YH и С. 0005 05 MOV 0 to 5 Загрузка SH в регистр 5. 0006 F8 RET Возврат из подпрограммы. В табл. 8.6 показана подпрограмма, реализующая эту процедуру. Исходные числа с двойной точностью обозначены через X и Y, а сум- ма — через S. Предполагается, что общие регистры 1 и 2 содержат соот- ветственно старшую и младшую части X (обозначенные как Хн и XL), а регистры 3 и 4 — старшую и младшую части Y (обозначенные как Yh и Yl). Старшая и младшая части суммы должны быть поме- щены в регистры 5 и 6 соответственно. Первая команда загружает младшую часть X в аккумулятор. За- тем команда сложения складывает младшие части X и Y без началь- ного переноса. Итоговый перенос из старшего разряда устанавливается на триггер переноса С. Затем полученная на сумматоре младшая часть суммы передается в регистр 6. После этого старшая часть X передается в аккумулятор. Далее команда «сложение с переносом» складывает старшие части X и Y и перенос С. В результате старшая часть суммы оказывается в аккумуляторе, а окончательный перенос — в триггере переноса С. Старшая часть суммы передается в регистр 5 следующей командой. Последняя команда — возврат из подпрограммы. 8.7. УМНОЖЕНИЕ Читатель, конечно, обратил внимание на отсутствие команды ум- ножения в системе команд нашего иллюстративного микропроцессора. Отсутствие умножения (так же как и других операций, более сложных,
Обозначения*. X множитель У множимое Рн старшая часть произведения PL младшая^ часть произведения О перенос ? [Выход] Рис. 8.4. Блок-схема процедуры умножения.
310 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ чем сложение и вычитание) типично для большинства микропроцес- соров. Если нет отдельной команды для умножения, то можно, разу- меется, написать подпрограмму, которая будет его выполнять, следуя одной из известных процедур. В частности, можно реализовать про- цедуру получения и сложения частных произведений, как это делается при умножении «в столбик» и как мы это делали в разд. 2.4. Рассмотрим умножение двух 8-битовых чисел без знаков. Вообще говоря, можно осуществить процедуру умножения, накапливая те- кущую частную сумму частных произведений, последние получаются последовательно, начиная с частного произведения, соответствующе- го младшему разряду множителя. Таким образом, каждое частное произведение прибавляется к частной сумме. После каждого сложе- ния частная сумма сдвигается вправо, что соответствует выравнива- нию разрядов различных частных произведений. Каждое частное про- изведение равно либо множимому, если соответствующий разряд мно- жителя равен 1, либо нулю, если разряд множителя равен 0. Сложив все 8 частных произведений и сдвинув результат, мы получим частную сумму, равную полному 16-разрядному произведению. Изложенная процедура показана на блок-схеме рис. 8.4. Символы X, Y, Рн и PL обозначают соответственно 8-битовые значения множи- теля, множимого, старших разрядов произведения (ст. часть) и млад- ших разрядов произведения (мл. часть). Блок-схема представляет собой цикл. Она начинается с двух блоков инициализации цикла. Первый блок устанавливает старшую и младшую части произве- дения (в котором будет накапливаться частная сумма) равными нулю. Второй блок устанавливает значение 8 (соответствующее числу битов множителя) на счетчик, который будет считать число итераций в цик- ле. Следующий блок принадлежит самому циклу. В нем множитель X сдвигается вправо так, чтобы младший бит попал в триггер С для последующего тестирования. Фактически этот бит соответствует те- кущему анализируемому биту множителя, по которому определяется частное произведение для прибавления к частной сумме. В следующем блоке тестируется С. Если С=1, множимое прибавляется к частной сумме, а перенос из старшего разряда попадает в триггер С. В против- ном случае, когда С=0, сложение не производится, поскольку частное произведение равно 0. В любом случае следующий блок вызывает циклический сдвиг стар- шей части частной суммы Рн и переноса С вправо. При этом старшие разряды суммы циклически сдвигаются вправо; содержимое С, где до сдвига находится старший разряд частной суммы, попадает в стар- ший разряд Рн, а младший разряд Рн сохраняется в С. Затем следую- щий блок сдвигает младшие разряды частной суммы PL вправо, «вдвигая» в нее слева значение С. На этом рабочая часть очередной итерации заканчивается. Следующий блок вычитает 1 из счетчика циклов. Затем счетчик тестируется. Если он равен 0, процесс умно- жения заканчивается, в противном случае цикл повторяется.
8.7. УМНОЖЕНИЕ 311 По рассмотренной блок-схеме нетрудно написать программу для микропроцессора. Фактически блок-схема и составлялась в расчете на наш микропроцессор; особенно это видно по действиям с триггером С. Однако большинство промышленных микропроцессоров работает с триггером переноса аналогичным образом, и поэтому для них описан- ная блок-схема программируется так же легко. В табл. 8.7 приведена подпрограмма умножения. Регистры рас- пределены следующим образом: R2—счетчик итераций, R3—мно- жимое Y, R4— множитель X, R5— старшая часть произведения Рн, R6—младшая часть произведения PL. Первые три команды соответ- Таблица 8.7 Подпрограмма умножения целых положительных чисел Распределение общих регистров: R2: счетчик, Rs: множимое Y, R4: множитель X, R5: ст. часть произведения Рн, К в-* мл. часть произведения PL Ячейка памяти Команда на машин- ном языке Команда в сим- волической форме Комментарий 0000 65 LRI 5 Установка нулевых значений в Рн и PL, 0001 00 00 0002 66 LTI 6 0003 00 00 0004 62 LRI 2 Установка на счетчике начального значе- 0005 08 08 ния 8. 0006 14 MOV 0 from 4 Загрузка множителя в аккумулятор. 0007 F2 RTR Циклический сдвиг вправо, мл. бит попа- дает в С. 0008 04 MOV 0 to 4 Запоминание сдвинутого множителя. 0009 15 MOV 0 from 5 Загрузка ст. части произведения в акку- мулятор. 000А 7С JCZ Тест бита множителя. Переход при 0. 000В 00 00 ооос 0Е 0E 000D 83 ADD 3 Сложение множимого со ст. частью про- изведения. 000Е F2 RTR Сдвиг Рн вправо, мл. бит в С. 000F 05 MOV 0 to 5 Запоминание сдвинутого Рн. 0010 16 MOV 0 from 6 Загрузка мл. части произведения в акку- мулятор. ООН F2 RTR Сдвиг С и мл. части произведения впра- во. 0012 06 MOV 0 to 6 Запоминание сдвинутого PL. 0013 F6 DHL Уменьшение счетчика на 1. 0014 12 MOV 0 from 2 Загрузка счетчика в аккумулятор. 0015 7D JAN Тестирование счетчика. Повторение цик- 0016 00 00 ла, если не нуль. 0017 06 06 0018 F8 RET Возврат из подпрограммы.
312 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ ствуют двум первым блокам блок-схемы и осуществляют инициализа- цию цикла. Следующие три команды переносят множитель X в аккуму- лятор из регистра 4, сдвигают его циклически вправо и результат воз- вращают в регистр 4. В результате очередной разряд множителя, определяющий частное произведение, оказывается на триггере пере- носа С. Затем для подготовки сложения и сдвигов старшая часть про- изведения Рн переносится в аккумулятор. Показанное на блок-схеме тестирование С = 1 осуществляется коман- дой «переход при ненулевом переносе». Она обеспечивает пропуск следующей команды при С=0. Эта следующая команда прибавляет множимое Y к аккумулятору (который содержит Рн) и сохраняет перенос из старшего разряда в С. Затем Рн и С циклически сдвига- ются вправо командой RTR. После сдвига новое значение Рн воз- вращается в регистр 5. Затем в соответствии со следующим блоком схемы Pl и С сдвигаются вправо, для чего с помощью трех команд PL из регистра 6 загружается в аккумулятор, циклически сдвигается вместе с С, и результат возвращается в регистр 6. После этого счет- чик в регистре 2 уменьшается на 1 командой DHL, и результат переда- ется в аккумулятор и тестируется командой «переход при ненулевом аккумуляторе». Если аккумулятор содержит 0, то выполняется вы- ход из подпрограммы; в противном случае управление передается на начало цикла. 8.8. ЗАГРУЗКА ПРОГРАММ Важную роль в компьютерах играют средства загрузки исполня- емых программ в память машины. Во многих приложениях, где ми- кропроцессоры выполняют лишь какие-то раз и навсегда установлен- ные функции, программы хранятся в постоянной памяти. Однако в приложениях, требующих большей гибкости и разнообразия, про- граммы загружаются в оперативную память по мере необходимости. Обычно это делает специальная программа-загрузчик, которая вы- полняет операции по вводу требуемой программы с некоторого устрой- ства ввода и размещению ее в памяти. Сам загрузчик может либо раз- мещаться в постоянной памяти, либо вводиться в оперативную память покомандно вручную с пульта управления. Поскольку загрузчик используется для ввода в память самых раз- ных программ и, возможно, данных, ему должна быть сообщена опре- деленная информация. В типичных случаях требуются следующие сведения: 1. Начальный и конечный адрес загружаемой области памяти. 2. Начальный адрес загружаемой области памяти и число вводи- мых слов. 3. Начальный адрес загружаемой области памяти и вид ограничителя (признака конца) вводимой информации.
8.8. ЗАГРУЗКА ПРОГРАММ 313 Кроме ввода программы, на загрузчик могут быть, вообще говоря, возложены дополнительные функции. Например, перемещение про- граммы в памяти. Выполнение такой функции требует от загрузчика изменения ссылок на ячейки памяти в командах таким образом, чтобы они соответствовали новому положению программы. Другая распро- страненная функция загрузчиков — это обнаружение ошибок, на- пример ошибок, возникающих при передаче информации между устрой- ствами ввода и памятью. Рассмотрим простейший загрузчик для нашего иллюстративного микропроцессора. Это позволит нам не только полнее проиллюстри- ровать идеи загрузки, но и рассмотреть выполнение в микропроцессо- ре операции ввода. Будем предполагать, что загружаемая информация (программа или данные) поступает с некоторого устройства ввода. Устройство ввода получает эту информацию слово за словом с неко- торого носителя — бумажной перфоленты или магнитной ленты — и делает ее доступной для микропроцессора через некоторый порт ввода. Будем предполагать, что слова имеют ту же длину 8 бит, что и слова в микропроцессоре. Будем считать, что первые два слова на носителе содержат 16-битовый адрес (старшие разряды в первом байте), указывающий загрузчику начальную ячейку области памяти, куда должна быть загружена информация. Следующие два слова определя- ют конечный адрес области памяти. Далее следует информация, ко- торая должна быть загружена в эту область. Итак, загрузчик получает информацию пословно от устройства ввода. Первые четыре слова — это, как было сказано выше, адрес- ная информация, а остальные — загружаемая. Устройство ввода в силу своей механической природы, как правило, работает сущест- венно медленнее микропроцессора, обрабатывающего вводимые слова. Поэтому нужно запрограммировать микропроцессор так, чтобы он ожидал, когда очередное вводимое слово станет доступным. Поэтому для передачи информации о состоянии устройства ввода мы использу- ем второй порт. В этот порт устройство ввода устанавливает 1 в неко- торый (скажем, крайний левый) бит каждый раз, когда готово очеред- ное вводимое слово. Микропроцессор прежде, чем вводить данные, должен проверять этот бит и при необходимости ждать, пока он не ста- нет равным единице. В тот момент, когда микропроцессор действитель- но вводит слово, этот бит состояния автоматически внешними схема- ми сбрасывается в 0, так чтобы одно и то же слово не было введено дважды п. Работа программы-загрузчика изображена в виде блок-схемы на рис. 8.5. В нескольких точках главная процедура обращается к подпрограмме ввода. Эта подпрограмма сначала вводит данные о со- стоянии устройства ввода, по которым определяется готовность оче- Х) Более детально эти проблемы будут рассмотрены в разд. 9.2,
14* Стоп) Обозначения \ ТА — текущий адрес КА — конечный адрес Слово —введенное слово С )// — старшая часть ( )£ — младшая часть М\х\ — ячейка памяти с адресом х Рис. 8.5. Блок-схема программы-загрузчика.
8.8. ЗАГРУЗКА ПРОГРАММ 315 редкого вводимого слова. При готовности вводится очередное слово (в следующем блоке схемы), при неготовности повторяется опрос со- стояния устройства ввода. Таким образом, микропроцессор зацикли- вается в ожидании готовности слова. Главная процедура четырежды обращается к подпрограмме ввода для ввода первых четырех адресных слов, передавая эти слова каждый раз в новые общие регистры. Затем начинается цикл передачи вводи- мых слов в память. Каждое слово вводится подпрограммой ввода и за- тем передается в соответствующую ячейку памяти, адрес которой за- дается текущим значением адреса (ТА). ТА увеличивается на 1 при каждом прохождении цикла, т. е. при поступлении каждого слова. В конце цикла происходит проверка, не превышает ли ТА значение конечного адреса (КА). Если это так, процедура загрузки заканчива- ется; в противном случае — цикл повторяется. Программа-загрузчик приведена в табл. 8.8. Как легко видеть, она начинается в ячейке 0000. Однако в реальных условиях она могла бы располагаться и в других ячейках, скажем со старшими адресами, чтобы не мешать размещению других программ. Программа обраща- ется к двум портам ввода: к порту 00 — за информацией о состоянии и к порту 01 — за данными. Первая группа команд соответствует главной процедуре. Подпро- грамма ввода начинается с ячейки 001D. Общие регистры 1, 2, 3 и 4 хранят соответственно ТАН TAL, КАН и KAL. Они загружаются адресной информацией, поступающей с устройства ввода. Для этого каждый раз выполняется команда перехода на подпрограмму и команда пересылки. Цикл, показанный на блок-схеме, начинается в ячейке 0010 командой перехода на подпрограмму ввода. После возврата из нее очередное введенное слово находится в аккумуляторе. Это слово переда- ется в ячейку памяти с помощью имеющегося в иллюстративном мик- ропроцессоре механизма косвенной адресации. А именно, команда MOV 0 to F передает содержимое аккумулятора в ячейку памяти, адрес которой задан содержимым регистров 1 и 2 (т. е. Н и L). Поскольку эти регистры содержат значение ТА, слово попадает в нужное место памяти. Следующая команда, IHL, увеличивает на 1 значение ТА. Сравнение адресов ТА и КА осуществляется при помощи проце- дуры вычитания с двойной точностью и последующего условного пе- рехода. Для вычитания с двойной точностью сначала вычитаются младшие части ТА и КА, а затем старшие части с участием заема, оставшегося от младших частей. Окончательный заем остается в триг- гере С. Следующая команда — «переход при нулевом переносе» на начало цикла. При С=0 снова входим в цикл, при С==1 программа ос- танавливается. Подпрограмма ввода начинается с ввода слова из порта состоя- ния 00 в аккумулятор. Левый (т. е. знаковый) бит тестируется коман- дой «переход при положительном аккумуляторе». Если содержимое
316 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ Таблица 8.8 П рог рам ма- заг рузч ик Распределение общих регистров: Rx: ТАН, R3: КАН R2: TAl, R4: KAl Ячейка памяти Команда на машин- ном языке Команда в сим- волической форме Комментарий 0000 7F JMS Обращение к подпрограмме ввода за ТАНф 0001 00 00 0002 1D ID 0003 01 MOV 0 to 1 0004 7F JMS Обращение за TAL. 0005 00 00 0006 1D ID 0007 02 MOV 0 to 2 0008 7F JMS Обращение за КАН. 0009 00 00 000А 1D ID 000В 03 MOV 0 to 3 ооос 7F JMS Обращение за KAL. 000D 00 00 000Е 1D ID 000F 04 MOV 0 to 4 0010 7F JMS Начинается цикл ввода слов. ООН 00 00 0012 1D ID 0013 0F MOV 0 to F Передача слова в М[ТА]. 0014 F5 IHL ТА+1—>ТА. 0015 14 MOV 0 from 4 Вычитание с двойной точностью ТА из КА. 0016 А2 SUB 2 Устанавливается С «И, если ТА > КА. 0017 13 MOV 0 from 3 0018 Bl SBC 1 0019 7С JCZ Проверка заема в С. Если нет заема, 001А 00 00 ввод нового слова. 001В 10 10 001 с FA HLT Останов, 001D FD INP Начало подпрограммы ввода. Ввод слова 001Е 00 00 состояния. 001F 7А JAP Проверка разряда знака в слове состоя- 0020 00 00 ния. Если 0, повторить проверку. 0021 ID ID 0022 FD INP Ввод слова в аккумулятор из устройства 0023 01 01 ввода. 0024 F8 RET Возврат из подпрограммы.
8.9 ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА 317 аккумулятора положительно (старший бит равен 0), устройство ввода не готово. В этом случае управление передается на начало подпрограм- мы, и процесс повторяется. Если старший бит в аккумуляторе равен 1, следующая команда вводит слово из порта 01 в аккумулятор, а ко- команда возврата завершает подпрограмму. Следует обратить внимание на то, что бит готовности в слове состояния был выбран специально совпадающим со знаковым разря- дом аккумулятора. Это позволило выполнить тестирование бита од- ной командой. В общем случае тестируемый бит может оказаться в любом другом разряде. Тогда тестирование проводится путем выделе- ния этого разряда. Для этого достаточно логически умножить слово состояния на слово, называемое маской и содержащее 1 в интересую- щем нас разряде и нули — в остальных. После этого результат те- стируется либо командой перехода при нулевом аккумуляторе, либо командой перехода при ненулевом аккумуляторе. Таким образом, команду JAP, проверяющую левый бит слова состояния, в нашей про- грамме можно будет заменить следующими командами LRI 5 80 (маска) AND 5 JAZ 00 ID 8.9. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА До сих пор мы занимались программированием на машинном язы- ке. Это единственный вид программ, которые непосредственно вос- принимает аппаратура микропроцессора. Однако, как легко видеть, даже не очень сложные задачи требуют для своего решения достаточ- но больших программ, и их составление — дело трудоемкое и кро- потливое. Поэтому создаются специальные средства, облегчающие подготовку программ на машинном языке. Ассемблеры Составлять программы гораздо удобнее, если наряду с символи- ческими именами для команд, называемых мнемоническими кодами операций, можно употреблять для обозначения адресов в командах также символические имена, а не числовые значения. Например, что- бы загрузить содержимое ячейки памяти 538616 в аккумулятор, в на- шем иллюстрированном микропроцессоре нужно выполнить команду из трех байтов 705386 (в шестнадцатеричном представлении). Естест- венно, более удобна и наглядна запись этой команды в виде LDR 0,
318 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ Рис. 8.6. Схема использования ассемблера. X, где LDR — мнемонический код операции, 0 — обозначение общего регистра, а X — символическое обозначение ячейки памяти 5386 х). Мы можем получить эти удобства, если будем располагать некоторым средством, подставляющим числовые значения вместо символических имен (операций и адресов) после того, как программа уже написана. Это и составляет основную функцию программы-ассемблера. Програм- ма, написанная в новой удобной форме, называется программой на язы- ке ассемблера, а каждая команда называется предложением на языке ассемблера или оператором на языке ассемблера. Вообще говоря, программа на языке ассемблера — это, по суще- ству, та же программа на машинном языке с символическими именами для' адресов операндов, символическими именами для адресов команд и мнемоническими кодами операций. Задача ассемблера — заменить каждый мнемонический код операции соответствующим машинным кодом операции, отвести ячейки для каждой команды и каждого опе- рГййДа и подставить вместо символических адресов их числовые зна- чения. Как правило, между предложениями на языке ассемблера и командами на машинном языке существует взаимооднозначное соот- ветствие. Однако бывают случаи, когда по одному предложению ас- семблер генерирует несколько машинных команд. На рис. 8.6 показана схема использования ассемблера. Программа на языке ассемблера называется исходной программой, а генерируемая программа на машинном языке — объектной программой. Ассемблер, 4) Обратим внимание, что во всех уже рассмотренных нами программах графа «команды на машинном языке» содержала реальную программу (в шестнадцатеричных обозначениях). Графа «команды в символической форме» включалась только для облегчения чтения. Теперь речь идет о том, чтобы команды, аналогичные «командам р-символической форме» записывать в реальных программах,
8.9. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА 319 выполняющий функции транслятора и сам являющийся программой, загружается в компьютер вместе с исходной программой. Исходная программа выступает в роли «данных», обрабатываемых программой- ассемблером. В результате генерируется объектная программа. Когда ассемблер работает на том же компьютере, что и объектная программа, он называется собственным ассемблером. Однако часто ассемблер бы- вает написан для большой универсальной ЭВМ, выполняющей про- цесс трансляции. Такой ассемблер называется кросс-ассемблером. В процессе трансляции ассемблер использует таблицы для при- сваивания числовых значений мнемоническим кодам операций и символическим адресам. В ассемблер всегда включается таблица со всеми допустимыми мнемоническими кодами операций и соответству- ющими им числовыми значениями. Так что замена операций выпол- няется просто. Для того чтобы присвоить числовое значение каждому символическому адресу, ассемблер сначала составляет так называемую таблицу имен, в которую заносит все встреченные в программе сим- волические адреса. Затем он отводит область памяти для программы, вычисляет значения для всех символических адресов и после этого вы- полняет соответствующую подстановку. Одно из главных преимуществ языка ассемблера заключается в легкости, с какой делаются вставки и удаления предложений в исход- ной программе. При написании программы часто обнаруживается, что в некоторую точку уже написанной части программы нужно вставить группу команд. В программе на машинном языке это потребует сдвига всех слов программы ниже вставленных команд. Более того, может оказаться, что адресные поля некоторых команд в программе (если, например, есть циклы или переходы) теперь должны ссылаться на пе- реместившиеся команды. Это значит, что все такие адресные поля нужно откорректировать. В программе на языке ассемблера подобных проблем не возникает, поскольку адресам не даются числовые значения. Следовательно, при вставках предложений никаких трудностей не возникает. Точно так же трудностей не возникает и при выбрасывании предположений. Другое полезное свойство многих ассемблеров — это обнаруже- ние ошибок. Конечно, ассемблер не может обнаружить логических ошибок в самом замысле программы; однако он может проверять со- блюдение определенных синтаксических ограничений, наложенных на язык, и сообщить программисту об их нарушениях. Язык ассемблера Чтобы проиллюстрировать тесную взаимосвязь между языком ас- семблера и языком машинных команд, обратимся снова к программе вычисления суммы 10 чисел из разд. 8.3. Программа была приведена в табл. 8.3, причем именно загружаемая в микрокомпьютер программа приведена в графе «команды на машинном языке».
320 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ Программа на языке ассемблера для того же примера приведена в табл. 8.9. Каждая строка соответствует одному предложению на языке ассемблера. Как легко заметить, предложение состоит из четы- рех полей: поля метки, поля операции, поля операндов и поля ком- ментария. Таблица 8.9 Программа на языке ассемблера, соответствующая программе табл. 8.3 Метка Операция Операнды Комментарий LRI 1, H(NUM) ; УСТ. HA H, L АДРЕС ПЕРВОГО LRI 2, L(NUM) ; ЧИСЛА. LRI 3, 10D ; НАЧАЛЕН. ЗНАЧ. СЧЕТЧИКА. LRI 4, 0D УСТ. В 0 ЧАСТИ. СУММУ. LRI 5, ID КОНСТ 1 ДЛЯ УМЕНЬШ. СЧЕТЧИКА. LOOPt MOV 0, 4 ; СЛОЖЕНИЕ ОЧЕРЕДИ. ЧИСЛА. ADD F MOV 4, 0 IHL УВЕЛИЧЕНИЕ Н И L. MOV o, 3 ; УМЕНЬШЕНИЕ СЧЕТЧИКА. SUB 5 MOV 3, 0 JAN LOOP ; ТЕСТИРОВАНИЕ СЧЕТЧИКА. HLT NUM: RES 10D РЕЗЕРВИР. МЕСТА ДЛЯ ЧИСЕЛ. END Поле метки служит для ссылок на адрес данной команды, если та- кие ссылки потребуются. В этом поле употребляются символичес- кие имена, а не числовые адреса. Обычно эти имена должны удовлет- ворять следующим ограничениям. Общее число литер в имени не должно превышать некоторого значения, первая литера должна быть обязательно буквой, а не цифрой, нельзя употреблять в поле метки некоторые зарезервированные слова (например, мнемонические коды операций). Итак, метка — это символический адрес, который можно выбрать таким образом, чтобы программа легче читалась и чтобы можно было при необходимости сослаться на команду. Поскольку в программе приходится ссылаться далеко не на каждую команду, поле метки может оставаться пустым. В программе в табл. 8.9 метка LOOP отмечает начало цикла, т. е. точку, на которую ссылается команда JAN (пере- ход при ненулевом аккумуляторе). Конец поля метки на языке ас- семблера, как правило, отмечается разделителем, например двоето- чием.
8.9. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА 321 Следующее поле в предложении на языке ассемблера — поле опе- рации. Оно содержит мнемонический код операции, следовательно, определяет операцию, выполняемую данной командой. Очевидно, что программисту легче запомнить и употреблять мнемонические, а не числовые операции. Третье поле — поле операндов. В этом поле содержится вся ин- формация, которая нужна, чтобы полностью определить выполня- емую команду. Например, оно может содержать символический адрес памяти, обозначение общего регистра или непосредственно данные. Многие ассемблеры позволяют задавать в поле операндов процедуру вычисления. Например, можно записывать арифметические формулы для вычисления адреса операнда или для команд переходов — число команд, через которое нужно «перепрыгнуть» вверх или вниз. Если поле операндов состоит из нескольких частей, они обычно разделяются запятыми. В качестве символических адресов в поле опе- рандов употребляются имена, которые встречаются в поле метки. Данные в поле операндов обычно могут быть заданы в двоичной, вось- меричной, десятичной или шестнадцатеричной системе. Чтобы ас- семблер мог определить, в какой системе счисления представлены данные, в конце чисел обычно указан однобуквенный код системы счисления (например, В, О, D или Н) п, 2). Для разделения полей операции и операндов между ними должен быть по крайней мере один пробел. За иллюстрациями обратимся снова к программе в табл. 8.9. Первые два предложения показывают, что в поле операндов может встречаться процедура вычисления. В данном случае Н( ) опреде- ляет процедуру, в которой выделяются старшие 8 битов величины, заключенной в скобки. В частности, Н (NUM) интерпретируется как старшие 8 разрядов числового адреса, присвоенного имени NUM. В нашей программе NUM представляет собой символический ад- рес первого элемента суммируемых данных. В сочетании с кодом операции LRI эти 8 разрядов образуют непосредственные данные в команде. Таким образом, предложение на языке ассемблера LRI 1, Н (NUM) вызывает загрузку в общий регистр 1 старших 8 битов ад- реса первого элемента данных. Аналогично L ( ) задает операцию вы- деления младших 8 битов, и, следовательно, L (NUM) означает млад- шие, 8 битов адреса NUM. Эти 8 битов будут интерпретированы ассем- блером в качестве второго байта машинной команды, соответствующей предложению LRI 2, L(NUM). В связи с табл. 8.9 мы отметим еще три момента. Во-первых, число- вые значения задаются в поле операндов вместе с указателем системы * В Ц Коды В, О, D и Н происходят, соответственно, от слов Binary (двоичный), Octal (восьмеричный), Decimal (десятичный) и Hexadecimal (шестнадцатеричный).— Прим, перев. В шестнадцатеричных числах первая литера должна обязательно быть циф- рой: 1,...,9, к числу слева всегда можно приписать 0. И № 592
322 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ счисления. Например, в третьем предложении конструкция 10D означает, что константу 10 нужно считать десятичным числом. Ас- семблер при трансляции переведет эту константу в двоичную систему. Во-вторых, все общие регистры задаются своими шестнадцатеричными номерами. И наконец, в-третьих, запятая между операндами в предло- жении MOV всегда интерпретируется как слово «from», т. е. «из». Та- ким образом, предложение MOV 0, 4 означает загрузку в общий ре- гистр 0 (аккумулятор) содержимого из (from) общего регистра 4. Напомним, что в предложении MOV по крайней мере один из регистров должен иметь номер 0, 1 или 2. Если программист нарушит это огра- ничение, ассемблер обнаружит ошибку и выдаст соответствующее сообщение. Это одна из типичных обнаруживаемых ассемблером оши- бок. Последнее поле в предложении на языке ассемблера — это поле комментария. Оно дает возможность программисту снабдить предло- жение любыми пояснениями, облегчающими чтение и понимание про- граммы. Это поле игнорируется ассемблером в процессе трансляции исходной программы в объектную. Обычно единственное требование к этому полю состоит в том, чтобы ему предшествовал ограничитель (например, точка с запятой). Директивы ассемблера Директивы ассемблера служат для управления некоторыми спе- циальными, типичными для всех ассемблеров функциями. Директивы ассемблера, задаваемые в программе на языке ассемблера, содержат информацию, нужную для управления трансляцией с исходного на объектный язык, но никогда не выполняются как команды при работе объектной программы. Тем не менее директивам присвоены мнемо- нические коды, которые записываются в поле операции. С помощью директив одного типа определяются слова данных. Они позволяют ассемблеру сформировать константу и поместить ее в ячейку памяти. Значение константы задается в поле операндов, а ее символический адрес — в поле метки. Аналогичным образом можно задать символ в коде ASCII. Предположим, например, что мнемони- ческий код операции DB (Define a Byte — определить байт) соответ- ствует директиве определения байта. Тогда при трансляции предло- жения CONST : DB 53Н ассемблер поместит шестнадцатеричное число 53 в ячейку с символи- ческим адресом CONST. С помощью директив другого типа можно зарезервировать группу ячеек памяти и дать этой группе символическое имя. Это оказывается полезным, когда нужно отвести место для входных, выходных или промежуточных данных. Число резервируемых ячеек указывается в
8.9. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ АССЕМБЛЕРА 323 поле операндов, а символический адрес первой ячейки группы — в поле метки. Директива такого типа встречается в программе в табл. 8.9 и имеет мнемонический код операции RES (от REServe — резервировать). Встретив предложение NUM: RES 10D ассемблер зарезервирует десять ячеек памяти (поскольку D — это код десятичной системы), причем первой из них будет присвоен сим- волический адрес NUM. Помимо уже упомянутых директив, существуют директива для задания абсолютного адреса в объектной программе и директива для указания конца программы. Вторая из них присутствует в программе в табл. 8.9 и имеет обозначение END (конец). Она просто указывает ассемблеру, где заканчивается исходная программа. Чтобы пояснить директиву,' задающую абсолютный адрес, предположим, что ее мне- моническое обозначение ORG (от ORiGin — начало). Тогда предло- жение ORG 1000Н информирует ассемблер о том, что следующая команда должна иметь шестнадцатеричный адрес 1000. Поэтому, если бы такое предложение предшествовало программе в табл. 8.9, адрес команды LRI 1, Н (NUM) оказался бы равным 1000; в то же время, если бы это предло- жение оказалось между предложениями HLT и RES, группа ячеек NUM расположилась бы в памяти, начиная с адреса 1000. Макрокоманда Некоторые ассемблеры предоставляют программисту возможности для расширения языка ассемблера при помощи макрокоманд. Макро- команды особенно удобны в тех случаях, когда некоторая последова- тельность команд повторяется в программе много раз. В таких слу- чаях можно определить макрокоманду, соответствующую этой после- довательности. Макрокоманда становится составной частью языка ассемблера, и ее после этого можно использовать в программе как угодно часто. Каждое вхождение макрокоманды в программе при тран- сляции заменяется ассемблером на последовательность машинных команд, которые входят в определение макрокоманды. Очень важно понимать разницу между макрокомандой и подпро- граммой. К подпрограмме обращаются при помощи команды перехода на подпрограмму и возвращаются из нее по команде возврата. Сама подпрограмма находится в памяти в единственном экземпляре, к которому, вообще говоря, обращаются несколько раз. Макро- команде соответствует последовательность команд, и эта последователь- ность вставляется в программу на место каждого вхождения макро- команды. Таким образом, одна и та же последовательность команд 11*
324 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ повторяется в программе много раз, возможно, только с изменением адресов операндов от одного вхождения к другому. Поэтому, вообще говоря, программа с макрокомандами требует больше места в памяти, чем программа, использующая подпрограммы. Однако при использо- вании макрокоманд накладные расходы на связи с подпрограммой ис- чезают и скорость работы программы увеличивается. 8.10. КОМПИЛЯТОРЫ Существуют трансляторы другого класса, называемые компиля- торами, С их помощью, например, транслируются такие языки, как Фортран, ПЛ/1 и Паскаль. Языки, транслируемые компиляторами, часто называют языками высокого уровня. Запись алгоритмического процесса на этих языках обладает относительной машинной независи- мостью. Это означает, что программисту не обязательно знать особен- ности конкретного компьютера, на котором будет выполняться про- грамма, нужно лишь, чтобы машина имела соответствующий компиля- тор. При трансляции программы с языка высокого уровня на язык ма- шинных команд, вообще говоря, каждое предложение исходного язы- ка порождает несколько машинных команд, тогда как для ассембле- ров в основном соблюдается соотношение «один к одному». Поэтому программы, написанные на языках высокого уровня, оказываются значительно компактнее. По сравнению с языком ассемблера языки высокого уровня обла- дают большей мощностью и предоставляют программисту большие удобства. Однако трансляция с языков высокого уровня существенно сложнее, а компиляторы — это большие и сложные программы, тре- бующие для своей работы большой памяти. Более того, в программе на языке высокого уровня нельзя воспользоваться всеми присущими машинному языку тонкостями; например, на них невозможна пря- мая работа с регистрами. Именно эти соображения препятствуют ис- пользованию языков высокого уровня в некоторых приложениях ми- кропроцессоров, особенно для управления процессами в реальном масштабе времени. УПРАЖНЕНИЯ 8.1. Напишите программу, переставляющую три числа, находящиеся в памяти, таким образом, чтобы они оказались расположенными в порядке возрастания. 8.2. Перепишите программу сложного разветвления в разд. 8.4, воспользо- вавшись процедурой поиска по дереву. 8.3. Составьте программу сложения чисел с тройной точностью. 8.4. Составьте программу вычитания с двойной точностью.
УПРАЖНЕНИЯ 325 8.5. Напишите программу сложения двух двухразрядных десятичных чисел. Числа должны быть представлены в коде 8421 BCD с двумя цифрами в одном байте. После сложения двухразрядная сумма должна быть в аккумуляторе, а перенос — в триггере переноса. 8.6. Напишите программу деления двух 8-битовых целых чисел. Сделайте соот- ветствующие предположения относительно переполнения и отбрасывания разрядов в частном. 8.7. Напишите программу умножения двухбайтового целого числа на однобай- товое целое число. Какова максимально возможная длина произведения? 8.8. Напишите программу, которая вводит восемь чисел с относительно медлен- ного устройства и вычисляет их среднее. Считайте, что устройство имеет два порта: один для данных, другой — для информации о состоянии. Левый разряд слова состо- яния принимает значение 1, когда очередное слово готово в порте данных. 8.9. Напишите программу-загрузчик для иллюстративного микропроцессора, предполагая, что вводимые данные имеют следующий формат: Адрес первого слова, старшие разряды. Адрес первого слова, младшие разряды. Счетчик слов, старшие разряды. Счетчик слов, младшие разряды. Загружаемые слова. Адрес первого слова определяет начало загружаемой области в памяти, а счетчик слов — число загружаемых слов. 8.10. Часто в микрокомпьютерных приложениях встречаются элементы данных меньшего размера, чем слова. В таких случаях программист для экономии памяти может размещать в одном слове два или более элементов. Это называется упаковкой. Вообще говоря, перед тем как работать с такими элементами, их нужно выделить в отдельное слово. Это называется распаковкой. Предположим, что десятичные цифры в коде 8421 BCD должны храниться в памяти по две цифры в байте. Напишите под- программы соответствующей упаковки и распаковки. В обеих программах считайте, что индивидуальные (распакованные) цифры находятся в общих регистрах 1 и 2 в младших четырех разрядах, а аккумулятор содержит упакованные данные. 8.11. Составьте программу, которая выводит все нечетные числа, встречающиеся в ячейках памяти от 801б до FF16. Считайте, что устройство вывода способно прини- мать информацию с той же скоростью, с какой ее подает микропроцессор. 8.12. Напишите программу, которая должна определять, произойдет ли пере- полнение, если сложить два числа, находящиеся в регистрах 1 и 2. При переполнении подпрограмма должна останавливаться, в противном случае — возвращать управле- ние главной программе. 8.13. Напишите программу, которая меняет порядок битов в числе на противо- положный. Считайте, что исходное число находится в аккумуляторе и там же нужно оставить результат. Например, число 00010011 должно превратиться в 11001000. 8.14. Предположим, вам нужно определить, где находится самая левая единица в аккумуляторе. Будем считать, что разрядам аккумулятора, как обычно, присвоены номера 0, 1, ..., 7 справа налево. Напишите подпрограмму определения номера самого левого единичного разряда в аккумуляторе. Результат должен быть в аккумуляторе. Как мы увидим в гл. 9 при обсуждении прерываний, такая подпрограмма полезна, когда нужно определить событие самого высокого приоритета среди нескольких воз- можных событий. 8.15. В гл. 2 мы говорили о том, что, когда информация передается между ком- пьютером и периферийными устройствами, она представляется в некотором коде, на-
326 ГЛ. 8. ПРОГРАММИРОВАНИЕ ДЛЯ МИКРОПРОЦЕССОРОВ пример ASCII. Предположим, что шестнадцатеричные числа вводятся с клавиатуры, работающей в коде ASCII, и выводятся на печатающее устройство, работающее также в коде ASCII. В обоих случаях каждая шестнадцатеричная цифра кодируется в коде ASCII и передается отдельно. Тем не менее, когда числа участвуют в вычисле- ниях внутри компьютера, они имеют двоичное представление. Поэтому полезно иметь подпрограммы для преобразования из двоичного представления в шестнадцатеричное ASCII-кодированное представление и обратно. Напишите подпрограмму для преобразования двух шестнадцатеричных цифр в коде ASCII в одно 8-битовое двоичное слово. Напишите также другую подпрограм- му для обратного преобразования. В обеих подпрограммах общие регистры 1 и 2 должны содержать две цифры в коде ASCII, а аккумулятор — двоичное число. Счи- тайте, что бит контроля по четности в коде ASCII всегда равен 0. Обратите внимание на то, что коды десятичных цифр идут подряд и также подряд идут коды шестнадцате- ричных цифр от А до F, но между 9 и А есть интервал в 7 кодов. 8.16. Напишите программу, которая вводит два 2-разрядных шестнадцатеричных числа с клавиатуры терминала в коде ASCII, складывает их и затем выводит 8-бито- вую сумму в виде двух шестнадцатеричных цифр на печать в коде ASCII. Воспользуй- тесь подпрограммами упр. 8.15 для преобразований между двоичным представлением и представлением в коде ASCII. Считайте, что порт данных и для вводного устройства, и для печати имеет код 00, а порт для информации о состоянии обоих устройств имеет код 01. Причем 1 в левом разряде слова состояния говорит о том, что доступен символ от клавиатуры терминала, а 0 в правом разряде говорит о том, что печатающее уст- ройство готово принять следующий символ для печати. Программа должна проверять эти биты перед выполнением соответствующих передач данных на ввод и вывод.
Глава 9. ПОНЯТИЕ ИНТЕРФЕЙСА Микрокомпьютер состоит из различных компонент, в число которых в общем случае входят микропроцессор, модули памяти, регистры ввода/вывода, периферийные устройства. Объединение этих компо- нент составляет существо задачи проектирования микрокомпьютер- ных систем и должно производиться с учетом характера и временных параметров сигналов на стыках между компонентами. Чтобы сигналы были совместимыми, вообще говоря, нужно правильно выбрать ком- поненты и спроектировать специальные вспомогательные схемы, на- зываемые интерфейсными. В отношении микрокомпьютеров можно выделить две основные проблемы интерфейса (проблемы стыковки). Одна проблема состоит в подключении таких компонент, как модули памяти и регистры ввода/ вывода, к шинам микропроцессора. Здесь главное — это синхрониза- ция и управление шинами, а также выборка компонент, обеспечиваю- щая своевременную передачу данных между микропроцессором и вы- бранной компонентой. Другая проблема касается стыковки частей микрокомпьютера о внешними компонентами, такими, как периферийные устройства, ка- налы передачи данных, контроллеры и т. п. Этот интерфейс не вы- ходит непосредственно на шины микрокомпьютера, и поэтому он существенно меньше структуризован. К нему относится преобразова- ние внешних сигналов, которые могут иметь любую природу (в том числе и аналоговую), в сигналы, совместимые с сигналами на шинах, и обратное преобразование. 9.1. ПОРТЫ ВВОДА/ВЫВОДА В соответствии с общепринятым соглашением направление по- токов вводной и выводной информации рассматривается относитель- но микропроцессора. Поэтому портом ввода называется любой источ- ник данных, например адресуемый регистр, подключенный к шине данных микрокомпьютера. Он выдает слово в микропроцессор, когда к нему происходит обращение. Портом вывода называется приемник данных, например адресуемый регистр, подключенный к шине данных микропроцессора. Он получает слово от микропроцессора, когда по- следний к нему обращается. В большинстве микропроцессоров для ад- ресации портов (т. е. для выборки нужного порта) используется адре-
328 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА сная шина или ее часть. Довольно часто адреса портов ввода отлича- ются от адресов портов вывода и от адресов памяти не значениями, а сигналами на соответствующих управляющих линиях.
9.1. ПОРТЫ ВВОДА/ВЫВОДА 329 Порты ввода/вывода иллюстративного микропроцессора На рис. 9.1 показаны типичные схемы порта ввода и порта вывода для нашего микропроцессора. Этим двум портам присвоен уникаль- ный 8-битовый код (адрес устройства), по которому микропроцессор может отличить их от других портов. В нашем случае обоим портам присвоен один код (01100101), что вполне допустимо, поскольку между собой они будут отличаться сигналами в управляющих линиях «ввод» и «вывод». При выполнении команд ввода или вывода на младшую по- ловину адресной шины подается код устройства, взятый из второго байта команды. Специальный вентиль И на восемь входов служит для распознавания кода данного устройства. Входы вентиля подключены к 8 младшим линиям адресной шины, причем в зависимости от кода часть сигналов инвертируется. Выход вентиля И («выборка») использу- ется для выборки обоих портов. Порт ввода имеет 8-битовый регистр, на который поступает ин- формация от некоторого внешнего устройства. Выходы этого регистра подключены к шине данных через восемь тристабильных формирова- телей. Сигнал разрешения на эти формирователи есть результат ло- гического И сигнала «выборка» и управляющего сигнала «ввод» от микропроцессора. Содержимое регистра подается на шину данных, когда (1) «выбор- ка» равна логической 1, т. е. задан код устройства, относящийся к данному порту, и (2) «ввод» равен логической 1, т. е. выполняется команда ввода, и в ее фазе выполнения наступил момент ввода данных. Задача порта — только поместить информацию на шину данных. Даль- нейший ее путь к месту назначения (к аккумулятору в данном случае) определяется микропроцессором. Передача данных осуществляется в третьем машинном цикле коман- ды ввода. Временные диаграммы сигналов в этом цикле показаны на рис. 9.2. В машинный цикл входит три синхроимпульса. В начале пер- вого синхроимпульса Тх микропроцессор подает код соответствующе- го порта на младшую половину адресной шины. По концу Тх подается логическая 1 на линию «ввод», которая остается в этом состоянии до переднего фронта импульса Т3. При этом предполагается, что на шину данных в ответ на сигнал «ввод» будут поданы данные с регистра порта ввода, и они будут доступны в интервале между передними фронтами Т2 и Т3. Стробирование передачи данных на аккумулятор осуществля- ется по концу Т2. Нужно отметить, что описанная логика работы порта ввода нала- гает два ограничения на время срабатывания схем. Одно ограничение связано с тем, что информация должна быть подана на шину данных не позднее, чем через полтакта после прихода сигнала «ввод». Это означает, что задержка в тристабильных формирователях плюс за- держка в двухвходовом вентиле И, управляющем усилителями, не должна превышать одного такта.
330 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА <—----------Машинный цнкп--------------> м------Адрес доступен АДРЕСНАЯ} у ШИНА Управляющая линия ----- „бвод“ ШИНА ДАННЫХ Данные доступны Рис. 9.2. Временные диаграммы ввода данных. В конкретных микропроцессорах мы можем встретить схемы ввода данных, отличающиеся несколько от описанной, однако аналогичные временные ограничения существуют и для них. Как правило, этим требованиям во внешних компонентах удовлетворить легко, поскольку элементы, из которых строятся порты ввода/вывода, обычно оказыва- ются более быстродействующими по сравнению с элементами, из ко- торых строится микропроцессор. Например, в портах ввода/вывода можно использовать ТТЛ-схемы средней степени интеграции, более быстрые по сравнению с большими интегральными МОП-схемами, применяемыми в микропроцессоре. Порт вывода, показанный на рис. 9.1, имеет 8-битовый регистр, используемый для передачи информации внешнему устройству. Ре- гистр построен' из синхронных фиксаторов D-типа, управляемых общей линией разрешения загрузки. Входы D-триггеров подсоедине- ны непосредственно к шине данных. Сигнал «разрешение загрузки» формируется на двухвходовом вентиле И из сигналов «выборка» и «вывод». Таким образом, информация на шине данных, поступившая из аккумулятора микропроцессора, передается в регистр порта вы- вода, когда (1) «выборка» равна логической 1, т. е. задан код данного порта, и (2) «вывод» равен логической 1, т. е. выполняется команда вывода и в ее фазе выполнения наступил момент вывода данных. Передача данных осуществляется в третьем машинном цикле команды вывода. Временные диаграммы сигналов в этом цикле по- казаны на рис. 9.3. По переднему фронту синхроимпульса Tj микро- процессор подает код устройства на младшую половину адресной ши-
9.1. ПОРТЫ ВВОДА/ВЫВОДА 331 -<--------- Машинный цикл------------>*• J-<--------Идре с доступен- и ШИНА ШИНА Г-----------Денные доступны--► ДАННЫХ Управляющая линия „6ывод“ Рис. 9.3. Временные диаграммы вывода данных. ны и данные на шину данных. Затем в момент Т 2 выдается сигнал «вы- вод», стробирующий передачу данных на регистр вывода. Схемы порта вывода так же, как и порта ввода, должны удовлетво- рять определенным временным ограничениям, и так же, как для портов ввода, эти ограничения обычно нетрудно соблюсти благодаря отно- сительно высокому быстродействию схем ввода/вывода. Варианты схем ввода/вывода Различия между только что рассмотренной логикой работы ввода/ вывода в иллюстративном микропроцессоре и логикой работы в не- которых промышленных микропроцессорах в основном касаются вре- менных соотношений и смысла управляющих сигналов. В нашем ми- кропроцессоре сигналы «ввод» и «вывод» выполняли и управляющие, и стробирующие функции. Во многих промышленных микропроцессо- рах сигналы, аналогичные сигналам «ввод» и «вывод», получаются как комбинация других управляющих сигналов. В некоторых случаях предусматривается управляющая линия, которая задает направление передачи по шине данных. Эта линия, назовем ее, скажем, «вывод данных», при значении 1 задает вывод, а при значении 0 — ввод. Для задания же момента передачи служит либо синхролиния, либо другая управляющая линия. Интерфейс портов ввода/вывода с таким микропроцессором можно реализовать аналогично интерфейсу с иллюстративным микропроцессором, сфор-
332 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА мировав сигналы «ввод» и «вывод» следующим образом: Ввод = (Вывод данных) Строб Вывод= (Вывод данных) Строб где Строб — это сигнал, определяющий момент передачи. В некоторых схемах в начале машинного цикла по шине данных посылается управляющее слово, которое определяет тип предстоя- щей передачи: ввод или вывод, чтение из памяти или запись в память. Это управляющее слово запоминается во внешнем регистре и в комби- нации с синхросигналами или с другими управляющими сигналами используется для образования сигналов, аналогичных сигналам «ввод», «вывод»; «чтение» и «запись» нашего иллюстративного микропроцессора. При таком подходе некоторые управляющие линии становятся ненуж- ными. 9.2. КООРДИНАЦИЯ ВЗАИМОДЕЙСТВИЯ С ВНЕШНИМИ УСТРОЙСТВАМИ Как отмечалось в предыдущем разделе, порты ввода/вывода — это средство подключения внешних устройств к микропроцессору. В качестве внешних устройств могут выступать такие приемники и источники цифровой информации, как внешние запоминающие уст- ройства, терминалы, измерительные приборы, контроллеры различных станков или даже другие микропроцессоры. Большинство внешних устройств работает асинхронно по отноше- нию к микропроцессору. Например, терминал, состоящий из клавиа- туры и печатающего устройства, порождает данные при каждом нажа- тии кнопки человеком и воспринимает данные со скоростью, определяе- мой конструкцией печатающего механизма. Поэтому возникает про- блема согласования моментов срабатывания внешнего устройства и микропроцессора. В противном случае при вводе передача может про- изойти в тот момент, когда данные еще не готовы, а при выводе — когда предыдущие данные еще не восприняты устройством. Следова- тельно, взаимодействие между внешним устройством и микропроцессо- ром должно происходить по определенным правилам, которые иногда называют протоколом взаимодействия или рукопожатием. Вообще говоря, работу внешнего устройства можно разбить на последовательность некоторых действий, определяемых его назначе- нием и конструкцией. В результате каждого такого действия либо воспринимается одно слово, находящееся в порту вывода, либо вы- дается одно слово в порт ввода. Например, действие клавиатуры тер- минала заключается в нажатии на одну из клавиш и передачи соот- ветствующего кода в порт ввода. Аналогичным образом действие пе- чатающего механизма сводится к подаче тока в соленоид молоточка того символа, код которого находится в порту вывода.
®.2. ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ 333 Вообще говоря, предполагается, что порт во время выполнения действия в устройстве занят устройством, и, следовательно, микропро- цессор не должен к нему обращаться. И только после завершения действия порт становится доступным для процессора, т. е. готовым к передаче данных. Процесс передачи данных между процессором и устройством ввода/вывода состоит из следующих трех операций: 1. Запуск (инициация) действия в устройстве. 2. Проверка микропроцессором готовности порта. 3. Собственно передача данных. Методы организации ввода/вывода обычно различаются в соответствии с теми способами, которыми реализуются первые две операции. Пуск со стороны программы Один из методов организации ввода/вывода характеризуется про- граммным запуском действия в устройстве для каждого акта передачи данных. При этом сигналы запуска посылаются от процессора к уст- ройству в моменты времени, определяемые программой. Устройство реагирует на эти сигналы выдачей очередного слова в порт ввода или приемом слова из порта вывода. После того как пройдет время, доста- точное для завершения действия в устройстве, программа может сно- ва обращаться к порту. Очень часто само обращение к порту служит сигналом, запускающим действие в устройстве. Например, для слу- чая ввода в результате этого действия в порту появятся данные, ко- торые будут пересылаться при следующем обращении микропроцессо- ра к порту. В качестве иллюстрации рассмотрим считыватель и перфоратор бумажной ленты, подключенные соответственно к порту ввода и порту вывода. Будем считать, что на перфоленте последовательно располо- жены 8-битовые слова. Предположим, что первоначально порт ввода уже заполнен первым словом, полученным считывателем с перфоленты. Обращения к порту ввода могут происходить в разных точках прог- раммы. Помимо того что данные выбираются из порта ввода, каждое обра- щение служит сигналом для запуска считывателя. Считыватель в ответ на этот сигнал читает следующее слово с перфоленты и замещает им прежнее слово в порте ввода. В других точках работающей программы могут выполняться обращения к порту вывода. Помимо загрузки дан- ных в регистр порта, эти обращения служат сигналом для запуска пер- форатора. В ответ на этот сигнал он перфорирует на ленте слово, на- ходящееся в регистре порта. На рис. 9.4 показано, как сигналы пуска могут быть сформированы иллюстративным микропроцессором. Схемы приведены для устройств как ввода, так и вывода. В каждой схеме используется асинхронный RS-триггер, управляющий внешним устройством. Установка триггеров
334 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА УСТРОЙСТВО ВЫВОДА Действие по выводу завершено Выборка Вывод УСТРОЙСТВО ВВОДА Действие по вводу завершено Рис. 9.4. Управляющие триггеры для пуска действия в устройстве ввода/вывода. осуществляется теми же сигналами, которые использовались на рис. 9.1 для управления передачей данных между микропроцессором и соот- ветствующим регистром порта. В частности, триггер выводного порта устанавливается логическим И от сигналов «выборка» и «вывод», а триггер вводного — логическим И от сигналов «выборка» и «ввод». Выходной сигнал от каждого триггера поступает в устройство и вызывает в нем выполнение действия, например протяжку перфо- ленты и возбуждение перфорирующих соленоидов. Результатом дей- ствия, во всяком случае, должно быть принятие выводимых или по- ставка вводимых данных. После завершения действия устройство по- дает сигнал сброса соответствующего управляющего триггера. Этим обеспечивается однократное выполнение действия в устройстве.
9.2. ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ 335 Пуск со стороны устройства Возможен другой метод организации ввода/вывода, при котором действие в устройстве по поводу каждого акта обмена данными запу- скается (инициируется) самим устройством. В этом случае программа должна получать информацию о завершении действия в устройстве и о готовности порта к очередной передаче данных. Для этого служит флаг готовности порта, который устанавливается устройством и перио- дически опрашивается программой, ожидающей обмена с данным пор- том. Обычно для опроса состояния одного или группы устройств ввода/ вывода используется вспомогательный порт ввода — порт состояний. Разряды, входящие в этот порт, характеризуют те или иные условия, относящиеся к группе устройств, и в частности состояния готовности их портов. В программе, осуществляющей ввод/вывод через некоторый порт, сначала опрашивается его готовность, для чего вводится содержимое соответствующего порта состояния. Бит готовности выделяется и те- стируется. Если выясняется, что порт не готов, то операция опроса готовности повтор яется. Типичным представителем устройств, в которых запуск действия осуществляется по инициативе самого устройства, можно считать маг- нитную ленту. Данные на ленте обычно объединяются в блоки, назы- ваемые записями и состоящие из многих слов. Между записями остав- ляются пустые промежутки. Промежутки нужны для торможения ленты и последующего разгона до постоянной рабочей скорости. По- этому в процессе чтения или записи слова данных следуют друг за другом с постоянной скоростью. Обработка одного слова и составляет действие устройства. Более общая схема обмена Объединив оба рассмотренных выше метода, можно получить более общую схему обмена. В этом случае программа и инициирует действие в устройстве, и проверяет готовность порта. На рис. 9.5 показано, как можно в нашем иллюстративном микро- процессоре реализовать интерфейс по такой общей схеме как для ввод- ного, так и выводного порта. Если устройство способно и вводить, и выводить данные, оно подключается сразу к двум портам. Помимо этих двух портов для данных, на рисунке показаны порт состояния и порт управления. Порт состояния — это порт ввода, через который микропроцессор может получить наиболее важную информацию о состоянии устройства. В частности, неготовность вводного порта данных определяется битом 7, а неготовность выводного порта данных — битом 0. Оба эти бита поступают с выходов асинхронных AfS-триггеров. В каждом из этих триггеров устанавливается 1 на время выполнения передачи данных
336 ГЛ. 9.ПОНЯТИЕ ИНТЕРФЕЙСА Л 7 Активация Активация вывода ввода {дня передачи (для передачи блока) блока) Прочее управление Выход данных 6 устройство Разрешение Q7*Q6^Q5Q4Q3Q 2 Qi 1Q о \загрузки WPM- D7,D6,D5|D4|D3,D21Di|Do Разрешение ЛЯЮЩИЙ ПОРТ q^qJqs'qJq^Jq.'qoI»^ ^71^61^51^41^31^21^11 Dp S- Вводной порт данных не готов, начать L вводное действие S А 0,вывод D- *0 ПОРТ СОСТОЯНИЯ состояния S iow| Qj'Qe'QsQ^QsQzQiQo R S /ШипТ Вход данных Впо!Янных от устройства не готов, начать выводное действие Вводное действие завершено Выводное действие завершено Ввод 'вывод 0^ £ S Q Q R S Д S Ло 1 Ни В 5 (д.щнй ишсрфейс и/i.wt дативного микропроцессора с устройством ввода/вы- вода. включающий пор гы ввода и вывода данных, порг состояния и порт управления.
9.2. ВЗАИМОДЕЙСТВИЕ С ВНЕШНИМИ УСТРОЙСТВАМИ 337 между микропроцессором и портом т. е. на время, когда порт занят. Это же состояние сообщает устройству о необходимости выполнить соответствующее действие, т. е. выдать новые данные в случае порта ввода или принять данные в случае порта вывода. Завершив действие, устройство сбрасывает соответствующий бит состояния, и это говорит микропроцессору о готовности порта. Остальные шесть битов состоя- ния могут характеризовать другие возможные ситуации в устройстве, такие, как «конец ленты», «конец блока», «ошибка при вводе» и т.п. Порт управления — это выводной порт, который служит для передачи команд устройству от микропроцессора. Две из этих команд соответствуют битам 7 и 0 и называются «активация ввода» и «актива- ция вывода». Назначение этих команд — чтение или запись целого блока данных. Например, при чтении магнитной ленты бит «активация ввода» устанавливается в 1 в начале блока данных и сбрасывается в О после того, как под магнитными головками пройдут все слова блока данных. В устройстве значения этих командных битов объединяются вен- тилем И с битами неготовности портов для того, чтобы начать или про- должить выполнение действий в устройстве, связанных с актами пе- редачи данных. Так, например, движение ленты и чтение информации с нее продолжается только, если оба бита «активация ввода» и «не- готовность порта» имеют значение 1. Оставшиеся шесть управляющих битов можно использовать для выполнения таких функций, как «пере- мотка ленты», «пропуск блока», «сброс флагов ошибок» и т. п. Для выборки рассмотренных четырех портов предусмотрена спе- циальная схема. Она включает вентиль И с семью входами, подклю- ченными к линиям младшей половины адресной шины, кроме линии Ло. Выход S этого вентиля принимает значение логической 1, если на адресную шину подан любой из двух кодов 10110110 или 10110111. Первый из них соответствует портам состояния и управления, а вто- рой — портам данных. Каждый порт управляется своим трехвходовым вентилем И. Сиг- нал S подается на один из входов в каждом вентиле. Инвертированное значение Ло младшего разряда адресной шины подается на входы вен- тилей двух портов, а именно портов состояния и управления, тогда как на вентили портов данных подается сигнал Ло без инверсии. Таким образом, каждой паре портов присваивается некоторый код устройства. На третий вход вентилей И подается сигнал «ввод», если порт вводной, и сигнал «вывод», если порт выводной. Таким, образом, каждый порт может быть однозначно указан микропроцессором. Кроме того, выходы двух из рассмотренных управляющих вентилей поданы на входы уста- новки соответствующих триггеров состоянн. В табл. 9.1 приведены программы ввода и вывода, которые могут работать со схемой рис. 9.5. Программа ввода начинается в ячейке 100016. Первая команда вводит слово состояния устройства из порта
338 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Таблица 9.1 Фрагменты программы, осуществляющие ввод и вывод Ячейка памяти Комментарий Команда на ма- шинном языке Команда в символи- ческой форме 1000 FD INP Ввод слова состояния. 1001 В6 В6 1002 61 LRI 1 Загрузка маски в Н. 1003 80 80 1004 81 AND 1 Выделение бита 7. 1005 7D JAN Тест бита 7; если равен 1, повторить про- 1006 10 10 верку. 1007 00 00 1008 FD INP Ввод данных. 1009 В7 В7 2000 FD INP Ввод слова состояния. 2001 В6 В6 2002 61 LRI 1 Загрузка маски в Н. 2003 01 01 2004 81 AND 1 Выделение бита 0. 2005 7D JAN Тесг бита 0; если равен 1, повторить про- 2006 20 20 верку. 2007 00 00 2008 FE OUT Вывод данных. 2009 67 B7 ввода В61б. Бит неготовности вводного порта данных (бит 7) выделя- ется из слова состояния при помощи логического умножения на маску 8016. Если этот бит равен 0, что говорит о наличии в порте данных для ввода, то в аккумуляторе будет 0. При невыполнении этого условия следующая команда вызовет переход на повторение проверки состоя- ния. В противном случае следующая команда осуществит ввод данных из порта В7, чем завершается фрагмент программы. Программа вывода начинается в ячейке 200016. Она аналогична про- грамме ввода с той разницей, что в качестве бита неготовности порта анализируется бит 0. Он выделяется при помощи маски 011б. Кроме того, последняя команда, естественно, является командой вывода. 9.3. ПРЕРЫВАНИЯ ПРОГРАММЫ Важнейшее значение имеет способность большинства микропро- цессоров прервать выполняемую программу в ответ на внешнее событие и выполнять программу, специально предназначенную для обработки этого события. Это называется прерыванием программы. Например,
9.8. ПРЕРЫВАНИЯ ПРОГРАММЫ 339 прерывающим событием может оказаться завершение ожидаемого ми- кропроцессором действия во внешнем устройстве. Воспользоваться прерыванием по готовности порта, как правило, много удобнее и эф- фективнее, чем непрерывно опрашивать его состояния. Микропроцес- сор освобождается для выполнения других функций и, в частности, может заняться другим портом ввода/вывода. Прерывание программы для большинства компьютеров напоминает переход на подпрограмму с той разницей, что оно инициируется не командой в программе, а приходом внешнего сигнала по управляю- щей линии. Этот сигнал называется запросом на прерывание. Так же как и подпрограмма, программа обработки прерывания размещается в памяти, начиная с ячейки, в которую должно передаваться управ- ление. Обнаружив запрос на прерывание, процессор откладывает вы- полнение текущей программы и начинает выполнять программу преры- вания. Программа прерывания обычно заканчивается командой возвра- та, после которой продолжается выполнение прерванной программы. Обычно процессор обладает возможностью запрещать (блокировать) прерывания на какие-то отрезки времени, когда их обработка по тем или иным причинам неудобна. При заблокированных прерываниях поступающие запросы на прерывания игнорируются. Обычно в микропроцессорных системах запросы на прерывания могут поступать от нескольких устройств. Поэтому возникает про- блема идентификации устройства, приславшего запрос, с тем чтобы можно было выполнить действия по обслуживанию именно этого устройства. Существует два основных метода решения этой проблемы. Согласно одному из них, должна существовать главная программа об- работки прерываний, которая при поступлении запроса проверяет состояние каждого устройства и находит устройство, требующее об- служивания. Такую схему часто называют системой прерываний с программным опросом. При другом методе информацию, которая идентифицирует устройство, приславшее запрос, формирует аппара- тура. Такую систему прерываний иногда называют векторной при- оритетной системой. Прерывания с программным опросом В схеме прерываний с программным опросом все запросы на пре- рывания поступают по одной управляющей линии. Эта линия яв- ляется выходом вентиля ИЛИ, на входы которого поступают за- просы от индивидуальных устройств. Каждому устройству обычно вы- деляется порт состояния, а в нем отводится один бит, хранящий запрос на прерывание. Когда по общей линии в микропроцессор поступает запрос от любого устройства, выполнение текущей команды заверша- ется и, если прерывания не заблокированы, происходит передача уп- равления в ячейку с фиксированным адресом. С этой ячейки начина-
340 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА ется главная программа обработки прерываний, которая последова- тельно вводит содержимое портов состояний и тестирует биты запросов на прерывания. Обнаружив устройство, запросившее обслуживание, главная программа передает управление программе, обслуживающей данное устройство. Когда запросы поступают одновременно от двух или большего числа устройств, возникают конфликтные ситуации. Их разрешение заложено в самой схеме опроса. Первым обслуживается то устройство, которое раньше попадается в порядке опроса. Конечно, после обслу- живания одного запроса будет обслужен следующий из отложенных запросов и т. д. Таким образом, порядок опроса определяет приори- тетность обслуживания устройств. Главный недостаток такой системы прерываний связан со временем, затрачиваемым программой на опрос состояния отдельных устройств. Часто эта задержка не играет существенной роли, поскольку во многих приложениях микропроцессоры в отличие от больших машин работают с немногочисленными внешними устройствами. Тем не менее сущест- вуют приложения, более чувствительные к подобным задержкам. Для них предпочтительнее векторная система прерываний, поскольку в ней непосредственно указывается устройство, выдавшее запрос. Векторная система прерываний В векторной системе прерываний устройство, вызвавшее преры- вание, идентифицируется с помощью внешних по отношению к микро- процессору схем. Конечно, эти схемы должны разрешать конфликты, возникающие при одновременном поступлении нескольких запросов, и предоставлять обслуживание только одному устройству. Существуют различные способы идентификации прерывающих устройств. Можно, например, иметь в микропроцессоре не одну, а большее число линий для запросов на прерывания и каждую из них предоставить отдельному устройству. В этом случае сигнал на каждой конкретной линии должен вызывать передачу управления в свою ячейку памяти, если только эта передача внутри микропроцессора не заблокирована сигналом прерывания с более высоким приоритетом. Ячейки, в которые передается управление, являются начальными ячейками программ, обслуживающих различные устройства. Этот способ широко применяется в больших универсальных ЭВМ, но в микропроцессорах встречается редко. При большом числе устройств требуется много линий, а количество выводов микропроцессора су- щественно ограничено.
9.3. ПРЕРЫВАНИЯ ПРОГРАММЫ 341 Векторная система прерываний с идентификацией устройств при помощи адресов Способ, которым можно прямо или косвенно воспользоваться в любом микропроцессоре, заключается в том, чтобы посылать в микро- процессор начальный адрес обслуживающей прерывание программы по адресной шине. Этот адрес формируется внешней схемой, которая выбирает устройство для обслуживания в соответствии с некоторой приоритетной схемой. Конечно, если запрос на прерывание поступил только от одного устройства, то именно оно и выбирается. Иллюстративный микропроцессор был задуман в расчете на та- кую схему, и сейчас мы ее опишем. Для обработки прерываний в микропроцессоре предусмотрены две управляющие линии: «Прер» (прерывание) и «ППрер» (подтверждение прерывания). Линия «Прер», входная для микропроцессора, служит для передачи внешних запросов на прерывание (состояние 1 соответ- ствует наличию запроса). Однако микропроцессор реагирует на за- просы прерываний только, если специальный внутренний триггер, флаг прерываний, установлен в 1. Линия «ППрер», выходная для ми- кропроцессора, служит для стробирования подаваемого извне на адресную шину адреса перехода на программу прерывания. На рис. 9.6(a) показаны схемы для одного устройства. Предпола- гается, что устройству принадлежит один порт для ввода данных (на рисунке не показан) и, кроме того, вводной порт состояния и вывод- ной порт управления. Один бит в порте состояния, крайний левый, играет особую роль в рассматриваемом случае. Этот бит, так же как и на рис. 9.5, является сигналом устройству начать операцию ввода. Этот же бит сообщает микропроцессору о занятости устройства и не- готовности порта данных. Инверсия этого бита, а именно сигнал «порт готов», используется для формирования запроса на прерывание от данного устройства. Тем не менее, для того чтобы устройство послало запрос на прерывание, должны быть выполнены еще два условия. Одно из этих условий требует, чтобы определенный бит в порте управления, называемый «маской прерываний», был равен 1. С его помощью программа при необходимости может заблокировать преры- вания от данного конкретного устройства, не запрещая прерываний от других устройств. И наконец, второе и последнее условие состоит в том, чтобы дру- гие, более приоритетные устройства дали разрешение данному уст- ройству. С этой целью строится цепочка, как показано на рис. 9.6(6), которая связывает устройства друг с другом в порядке присвоенных им приоритетов. Каждое устройство в цепочке приоритетов имеет входную линию «П-вход» и выходную линию «П-выход» На линии «П-вход» поддерживается логическая 1, когда ни одно из устройств с более высоким приоритетом не запрашивает прерывания. Эта линия соединена с линией «П-выход» ближайшего более высокого
342 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Маска прерывании в устройстве Другое управление г------*---- ПОРТ УПРАВЛЕ- НИЯ I , I . I , I , I . I . I . 1 —Разрешение QM’Qs'QJQ^'Qi1 Qo загрузки Р7|Рб|^5Р4Рз|^2р1[^О да- S А^Вывод Порт готов Q Флаг занятости устройства и Запрос прерывания от устройства П-вход От вол ее приоритетного устройства ___JT выход К менее приоритетному устройству (а) П-вход Устройство низшего приоритета П-выход п R S (Ю Рис. 9.6. Векторная система прерываний с адресами прерываний, приходящими от уст- ройств, и с использованием цепочки приоритеюв. (а) Схема выдачи адреса прерывания от устройова. (б) Связи в цепочке приоритетов.
9.3. ПРЕРЫВАНИЯ ПРОГРАММЫ 343 по приоритету устройства. В свою очередь, данное устройство форми- рует сигнал на своей линии «П-выход», который подается на линию «П-вход» в устройство с ближайшим более низким приоритетом. Сиг- нал «П-выход» данного устройства формируется как логическое И от сигнала «П-вход» и инверсии запроса на прерывание отданного устрой- ства. Таким образом, приоритет предоставляется устройству, если устройство с более высоким приоритетом не запрашивает прерывания. Три сигнала «маска прерывания», «порт готов» и «П-вход», соответ- ствующие трем упоминавшимся выше условиям, подаются на вентиль И и порождают сигнал запроса прерывания от данного устройства. Когда хотя бы в одном устройстве сигнал запроса прерывания принимает значение 1, такое же значение подается на управляющую линию «Прер» в микропроцессор. Для этого линия «Прер» через ин- вертор подключается к последней линии «П-выход». На этой послед- ней линии «П-выход» будет логический 0, если хотя бы одно устройство дало запрос на прерывание. Получив запрос на прерывание, микропроцессор в соответствую- щий момент откликнется сигналом подтверждения прерывания «ППрер». Сигнал «ППрер» в каждом устройстве поступает на вентиль И вместе с запросом прерывания от устройства. Выход вентиля исполь- зуется для возбуждения группы тристабильных формирователей, ко- торые подают на адресную шину 8-битовый, соответствующий данному устройству адрес. Таким образом, этот адрес поступает в микропроцес- сор и задает начальную ячейку программы, обслуживающей прерыва- ние. Передача адреса в микропроцессор занимает один машинный цикл и аналогична передаче данных из порта ввода. Разница только в том, что момент передачи определяется не’линией «ввод», а линией «ППрер». Внутри микропроцессора события при прерываниях развиваются следующим образом. Если внутренний флаг прерываний сброшен в О, то запрос на прерывание игнорируется. Если же флаг установлен в 1, то логическая 1 на линии «Прер» будет воспринята как запрос преры- вания. После этого сначала завершается выполнение текущей команды. Затем содержимое программного счетчика, т. е. адрес следующей команды, заносится в стек. Флаг прерываний сбрасывается, и тем самым блокируются все прерывания вплоть до момента, когда флаг будет снова установлен в 1 по команде программы. Наконец, один машинный цикл затрачивается на прием 8-битового адреса от преры- вающего устройства. Этот адрес помещается в младшую половину программного счетчика, старшая половина которого сбрасывается. Следовательно, переход осуществляется по адресу, не выходящему за пределы первых 25610 ячеек памяти. Первая команда программы обработки прерывания часто оказы- вается командой перехода на программу, хранящуюся вне первых 2561О ячеек. Таким путем можно освободить место для информации, относящейся к другим прерываниям. Программа обработки прерываний
344 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА пишется с учетом специфики обслуживаемого устройства. Напомним, что при входе в программу прерываний флаг прерываний автоматиче- ски сбрасывается и прерывания блокируются. Программа в процессе работы может установить его в 1, т. е. снять блокировку прерываний, чтобы разрешить другим устройствам, особенно более приоритетным, прерывать данную программу. Если блокировка прерываний не снимается в середине программы, то это делается в ее конце, предпоследней командой. Блокировка пре- рываний снимается с задержкой на одну команду, что позволяет до следующего прерывания выполнить последнюю команду программы данного прерывания. Эта последняя команда — всегда команда возвра- та, она поднимает стек и восстанавливает программный счетчик к тому состоянию, которое он имел в момент прерывания. Векторная система прерываний с шифратором приоритетов В другом варианте векторной системы прерываний, который можно применять с любым микропроцессором, процессору сообщается номер прерывающего устройства. В такой системе прерывание вызывает переход на фиксированную ячейку, где начинается главная программа обработки прерываний. Эта программа вводит данные из специального порта, содержащего номер устройства, запросившего прерывания. Зная этот номер, главная программа передает управление программе, обслуживающей данное устройство. Как и в других схемах, конфликты при одновременных запросах на прерывания от нескольких устройств разрешаются в соответствии с приоритетами устройств. Такую схему можно реализовать аналогично предыдущей схеме, где приоритеты определялись приоритетной цепочкой, а код но- мера устройства указывался самим прерывающим устройством. Одна- ко часто можно встретить другую реализацию этих двух функций. В ней код номера устройства с наибольшим приоритетом, выдавшего запрос не прерывание, формируется комбинационной схемой, называе- мой шифратором приоритетов. На входы шифратора подаются сиг- налы запросов на прерывание от отдельных устройств. Входы пере- нумерованы, начиная с 0, и номер входа соответствует номеру под- ключенного к этому входу устройства. На выходных линиях шифратора формируется двоичный номер старшей среди возбужденных (т. е. содержащих логическую 1) входных линий. В качестве примера рассмотрим конструкцию шифратора приори- тетов, имеющего восемь входов /0, Л, ...» /7. Предположим, что боль- шие номера соответствуют более высоким приоритетам. При восьми входах для представления двоичного номера выбранного входа доста- точно трех выходов. Обозначим эти выходы через Ь2, bi, Ьо в соответ- ствии со старшинством. Воспользуемся интуитивными соображениями и найдем логические выражения для выходных сигналов. Прежде всего заметим, что Ь2 должно равняться логической 1, когда возбужден лю-
9.3. ПРЕРЫВАНИЯ ПРОГРАММЫ 345 бой вход с номером, большим или равным 4: ^2= А+Л+Л+Л- Далее заметим, что Ьг должно иметь значение I, если возбуждены входы /7 или /6, поскольку в двоичном представлении чисел 6 и 7 бит Ьг равен 1. Бит Ьг также равен 1, если возбуждены /2 или /3, но при этом не возбуждены ни /4, ни /5, поскольку бит Ьг равен 1 в двоичном пред- ставлении чисел 2 и 3, но не чисел 4 и 5. Объединение этих двух ус- ловий дает выражение для Ь1=/7+/б+ЛЛ(/з+/2). Наконец, заметим, что Ьо должно иметь значение 1, если возбужден нечетный вход, при условии, что не возбужден ни один из более стар- ших четных входов. Это соображение дает нам следующее выражение для Ьо: Ьо — Л + ЛА+АЛЛ + 1 Например, рассмотрим случай, когда возбуждены входы /ь /2, /4 и /5. Подставляя единичные значения для этих переменных в выра- жении, мы получим &2=1, bi=0 и Ьо=1, что соответствует двоичному представлению числа 5, являющегося номером возбужденного входа с высшим приоритетом. На рис. 9.7 приведена схема векторной системы прерываний с шиф- ратором приоритетов, которую можно применить в иллюстративном микропроцессоре. Запросы на прерывания от устройств (их число не должно превышать 8) поступают на входы шифратора приоритетов, который определяет номер старшего запроса. Полученный трехбито- вый номер поступает в порт ввода и тем самым становится доступным для микропроцессора. Запросы на прерывания от устройств подаются также на входы вентиля ИЛИ, выход которого подключен к линии «Прер» микро- процессора. Таким образом/ микропроцессор получит сигнал пре- рывания, если есть запрос хотя бы от одного устройства. На сигнал «Прер» микропроцессор в соответствующий момент ответит сигналом «ППрер». Этот сигнал служит для подачи фиксированного начального адреса главной программы обработки прерываний на шину данных для последующей передачи его в микропроцессор. После этого начинается выполнение главной программы обработки прерываний. Прежде всего эта программа вводит код номера старшего устройства из числа запросивших прерывание. Далее она может по- ступить одним из двух способов. Она может воспользоваться получен- ным номером для перехода на программу, обслуживающую только данное устройство. Или же она может перейти на программу, общую для многих устройств, которая воспользуется полученным номером для определения кода порта, соответствующего обслуживающему устрой-
34-6 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Рис. 9.7. Векторная система прерываний для иллюстративного микропроцессора с вы- бором прерывающего устройства при помощи шифратора приоритетов. ству. Вторая возможность особенно удобна, когда устройства допу- скают однотипное обслуживание. Как упоминалось выше, такая система прерываний может рабо- тать с любым микропроцессором. Это действительно так, поскольку для передачи в микропроцессор информации о прерывающем устрой- стве не требуется ничего, кроме порта ввода.
9.3. ПРЕРЫВАНИЯ ПРОГРАММЫ 347 Векторная система прерываний с начальной командой, поступающей от устройства В некоторых микропроцессорах применяется система прерываний с посылкой в микропроцессор команды от устройства. Такие микро- процессоры в ответ на поступившее прерывание выбирают очередную выполняемую команду не из памяти, а из схем интерфейса с соответ- ствующим устройством. В отличие от других систем прерываний в данной системе не нужно автоматически сохранять программный счет- чик. Иногда единственной поступающей от устройства команды ока- зывается достаточно, чтобы обработать прерывание. Например, при программной реализации счетчика событий нужно лишь подсчи- тывать число прерываний от некоторого конкретного источника. Для этого достаточно одной команды, увеличивающей на 1 содержимое регистра или ячейки памяти. В таких случаях, выполнив единствен- ную команду, обрабатывающую прерывание, процессор возобновляет выполнение основной программы. Однако в большинстве случаев одной команды недостаточно, чтобы обработать прерывание. В таком случае устройство может послать в микропроцессор команду перехода на подпрограмму, которая и вы- полнит обработку прерывания. Существует множество других систем прерывания программ. Од- нако, как правило, они представляют собой разновидности тех схем, которые мы рассмотрели. Программные аспекты прерывания программы Интересно сравнить механизмы прерывания программы и вызова подпрограммы. В обоих случаях происходит приостановка основной программы на время выполнения вспомогательной. Следовательно, в обоих случаях должна быть организована связь основной программы со вспомогательной, обеспечивающая возобновление работы первой после завершения второй. При организации этой связи нужно преду- смотреть сохранение программного счетчика в таком месте, откуда он может быть восстановлен, например в стеке или в памяти вспомога- тельной программы. Тем не менее тот факт, что вход в программу обработки прерыва- ния вызывается внешним событием, а вход в подпрограмму — коман- дой перехода в «главной» программе, приводит к важным отличиям между программой обработки прерывания и подпрограммой. Точки входа в подпрограмму находятся полностью под контролем програм- миста. В частности, ему точно известны регистры и флаги, использу- емые в программе в момент вызова подпрограммы, и, следовательно, он может сохранить содержимое тех регистров и флагов, которые ис- пользуются также и в подпрограмме.
348 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Прерывание программы, с другой стороны, может произойти в? любой точке, и, следовательно, сохраняться должны все регистры № флаги, используемые в программе обработки прерывания. В свете! этих отличий в некоторых микропроцессорах все регистры и флаги! автоматически сохраняются при прерываниях в стеке или в особой рабочей области памяти и не сохраняются автоматически при вызове! подпрограммы. Для таких процессоров нужны две команды возврата.-] одна, восстанавливающая все регистры и флаги, включая программ-] ный счетчик,— для прерываний и другая, восстанавливающая только^ программный счетчик,— для подпрограмм. Автоматическое сохранение всех регистров имеет как достоинства, так и недостатки. Оно уменьшает число команд, затрачиваемых на сохранение регистров, в программе, обслуживающей прерывание.- Однако это не всегда приводит к экономии времени и даже может при- водить к необоснованным его тратам, когда регистры и флаги сохранять не нужно. В иллюстративном микропроцессоре такого различия между ме- ханизмами прерывания программы и обращения к подпрограмме не проводится. В обоих случаях в стеке автоматйчески сохраняется толь- ко программный счетчик. Содержимое первых трех общих регистров и флаг переноса С можно сохранить и в дальнейшем восстановить коман-’ дами PUSH и POP. Вообще говоря, этих трех регистров должно быть достаточно для работы программы прерывания. Прежде чем пользо- ваться каким-либо из этих регистров или триггером переноса, про- грамма обработки прерывания должна их сохранить в стеке, а после выполнения своей задачи — восстановить из стека. В качестве примера рассмотрим программу обработки прерыва- ния для иллюстративного микропроцессора, решающего следующую несложную задачу. Через устройство ввода/вывода в микропроцессор поступают восьмибитовые целые положительные числа. Микропро- цессор сравнивает каждое из них с константой, скажем 5В16, и выводит, только те из них, которые оказываются меньше этой константы. Пред-, полагается, что процессор выполняет также и другие вычисления,’ так что эта задача должна использовать прерывания. Будем также' предполагать, что других прерываний не будет. Программа обработки прерывания для такого режима работы при- ведена в табл. 9.2. Когда устройство ввода загружает очередное число' в порт ввода, происходит прерывание, и начинается выполнение про- граммы, обрабатывающей прерывания. Первая команда PUSH сох- раняет содержимое трех регистров и триггера переноса. Следующая команда вводит число (предполагается, что порт ввода имеет номер 121б) и загружает его в аккумулятор. Затем производится вычитание константы 5В с предварительной загрузкой ее в регистр. Если введенное число меньше константы, то разность будет отри- цательной, и на триггере переноса установится 1. Если это не так, то команда «переход при нулевом переносе» (JCZ) обходит две следую-
9.Х ПРЕРЫВАНИЯ ПРОГРАММЫ 349 Таблица 9.2 Пример программы обработки прерывания Ячейка памяти Команда на ма- шинном языке Команда в символи- ческой форме Комментарий 0080 77 PUSH Сохранение Acc, H, L и С в стеке. 0081 FD INP Ввод числа. 0082 12 12 0083 61 LRI 1 Загрузка константы 5В в Н. 0084 5В 5В 0085 А1 SUB 1 Вычитание 5В из числа. 0086 7С JCZ Проверка знака разности; обход вывода 0087 00 00 если разность положительна. 0088 8С 8С 0089 81 ADD 1 + 5В для восстановления числа. 008А FE OUT Вывод числа. 008В 12 12 008С 73 POP Восстановление Acc, Н, L, С. 008D FB EIT Снятие блокировки прерываний. 008Е F8 RET Возврат в прерванную программу. щие за ней команды. Эти две команды сначала снова прибавляют к ак- кумулятору константу 5В, чтобы восстановить значение введенного числа, а затем выводят его (порт вывода имеет тот же номер 121б). После этого командой POP восстанавливаются первые три регистра и триггер переноса. Перед возвратом на прерванную программу уста- навливается в 1 флаг прерываний (который был сброшен автоматически при входе в программу прерывания), в результате чего блокировка прерываний снимается. И наконец, последняя команда возвращает управление на прерванную программу. 9.4. ИНТЕРФЕЙС С ГЛАВНОЙ ПАМЯТЬЮ Главная память это, по существу, основная часть микрокомпью- тера, поскольку в ней хранятся программы и данные. В некоторых микрокомпьютерах для хранения команд и данных используются раздельные запоминающие устройства. Они могут отличаться дли- ной слова, способами адресации, методами доступа и скоростью рабо- ты. Однако в большинстве микрокомпьютеров команды и данные разме- щаются в одной и той же памяти. Рассуждения этого раздела можно относить как к раздельным ЗУ, так и к общей памяти. Вообще говоря, главная память микрокомпьютера представляет собой память с произвольным доступом, состоящую из слов с неко- торым числом битов в каждом. Каждое слово имеет свой адрес, по которому процессор может обратиться именно к этому слову. В боль-
350 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА шинстве микрокомпьютеров главная память состоит из модулей; каж- дый из них представляет собой одну интегральную схему. Интеграль- ные схемы соединяются друг с другом так, чтобы слова имели нужный размер и разные адреса. В принципе в рамках одной главной памяти могут объединяться модули как постоянной памяти (ПЗУ), так и памяти со считыванием и записью (ОЗУ). Некоторые ячейки могут быть отведены для постоян- ных программ и констант и реализованы в виде ПЗУ, тогда как дру- гие, отведенные для изменяющихся данных, могут быть реализованы в виде ОЗУ. Может оказаться, что некоторые или все модули имеют разрядность меньше той, которая нужна для данного микропроцессора. В этом случае модули объединяются так, чтобы их суммарная разряд- ность соответствовала нужной и чтобы они работали в параллель. Важное значение имеют временные задержки при обращении про- цессора к главной памяти. Благодаря относительно более высокой степени интеграции модулей ЗУ они обычно работают медленнее элек- тронных компонент, применяемых в портах ввода/вывода. Поэтому, для того чтобы модули ЗУ можно было применять совместно с неко- торым конкретным процессором, они должны обладать определенными временными характеристиками. Модель модуля памяти Интерфейс модуля памяти с микропроцессором характеризуется главным образом временными параметрами и адресацией. Чтобы ра- зобраться в этом интерфейсе, мы построим модель модуля памяти, в рамках которой можно будет представить большинство ОЗУ ста- тического типа. На рис. 9.8 представлены внешние сигнальные линии нашей мо- дели. В ней т входных линий задают адрес слова, а п двунаправленных линий для данных соответствуют числу битов в каждом слове. Таким образом, модуль содержит 2т слов по п битов в каждом. Для управле- Разрешение Рис. 9.8. Модель модуля стати- ческой памяти.
9.4. ИНТЕРФЕЙС С ГЛАВНОЙ ПАМЯТЬЮ 351 ния операциями записи и чтения служат две входные линии ЧТ/ЗП и «разрешение». Модуль находится в режиме чтения, если сигнал на ЧТ/ЗП ра- вен логической 1; в противном случае — он находится в режиме за- писи. Чтобы была выполнена какая-то операция, на линию «разре- шение» должна быть подана логическая 1. Пока на линии разрешения О, линии данных находятся в третьем (свободном) состоянии. Для мо- дулей ПЗУ линия ЧТ/ЗП отсутствует и считается, что модуль посто- янно находится в режиме чтения. Реальные модули в некоторых аспек- тах могут отличаться от описанной модели, а именно: (1) Могут существовать дополнительные линии разрешения, иног- да называемые линиями выборки модуля, которые внутри модуля объединяются с основными линиями разрешения с помощью вентиля И. (2) Двунаправленные линии данных могут быть заменены раздель- ными входными и выходными линиями. (3) Линия «разрешение» может быть заменена двумя, из которых одна управляет чтением, а другая — записью. (4) Формирователи, работающие на линии данных, могут оказаться не тристабильными, а с открытым коллектором или эмиттером. Тем не менее эти вариации не должны оказать серьезного влияния на рассматриваемый ниже интерфейс модулей ЗУ с микропроцессором. Пространство памяти микропроцессора Процесс компоновки памяти микропроцессора из отдельных моду- лей можно представлять себе как процесс заполнения некоторого «про- странства». Пространство памяти микропроцессора можно считать прямоугольной областью, разбитой на множество строк, соответствую- щих адресам. По горизонтали в каждой строке располагаются биты, составляющие слово памяти. Например, в нашем иллюстративном микропроцессоре пространство памяти состоит из 216 строк по 8 бит в каждой. Модули запоминающих устройств различного типа и размеров размещаются в пространстве памяти в соответствии с требованиями конкретного приложения. На рис. 9.9 приведено одно из возможных таких размещений. После того как принято решение о размещении модулей в простран- стве памяти, нужно определить необходимые связи. Линии данных всех модулей подсоединяются к соответствующим линиям шины данных микропроцессора. С помощью адресных линий микропроцессора, во- первых, выбирается модуль или группа параллельно работающих модулей и, во-вторых, ячейка внутри выбранного модуля или модулей. Поскольку слова в одном модуле обычно соответствуют последователь- ным словам пространства памяти, адресные линии модуля (т. е. его внутренние адреса) подсоединяются к младшим адресным линиям микропроцессора. Остальные адресные линии микропроцессора ис- пользуются для выборки нужного модуля. Выборка модуля в нашем
352 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА Рис. 9.9. Пример размещения модулей в пространстве памяти иллюстративного микро- процессора. случае осуществляется при помощи управляющей линии «разрешение». Линия «разрешение» вместе с линией ЧТ/ЗП используется также для определения момента выполнения операции и ее вида. К линиям «разрешение» и ЧТ/ЗП подключаются управляющие линии микропро- цессора. При операции чтения на линию ЧТ/ЗП всех модулей подается логическая 1, и, кроме того, в соответствующий момент логическая 1 подается на линию «разрешение» выбранного модуля. При этом на шине данных появляется содержимое адресуемой ячейки и оно пере- дается в микропроцессор. При операции записи на линии ЧТ/ЗП всех модулей подается логический 0, и, кроме того, в соответствующий мо- мент подается логическая 1 на линию «разрешение» выбранного моду- ля. Это приводит к записи в адресуемую ячейку выбранного модуля или модулей той информации, которую подал микропроцессор на шину данных.
9 4 ИНТЕРФЕЙС С ГЛАВНОЙ ПАМЯТЬЮ, 35а Пример компоновки памяти Схема подключения модулей памяти к микропроцессору показана ца рис. 9.10. Она соответствует размещению, приведенному на рис. 9.9. Всего на схеме семь модулей, отличающихся размерами и типом. Во всех модулях адресные линии соединены с младшими линиями адрес- ной шины, а линии данных — с соответствующими линиями шины данных. Для формирования сигналов на линии «разрешение» берутся комбинации сигналов от нужных линий адресной шины, а также уп- равляющий сигнал «чтение» для модулей ПЗУ или логическая сумма сигналов «чтение» и «запись» для модулей ОЗУ. Таким образом, мо- дуль получает сигнал разрешения только в том случае, когда на адрес- ную шину подана соответствующая комбинация и когда должна про- изойти операция чтения или записи. Точнее, условия, при которых дается сигнал разрешения на каж- дый модуль, можно описать с помощью логических выражений. Обоз- начим через Et сигнал разрешения для модуля Z, а через Aj сигнал на линии / адресной шины. Заметим, что во все сигналы разрешения входит логическое произведение инверсий старших семи линий адрес- ной шины._В сигналы от Е± до Е4, кроме того, входят сигналы «чте- ние», Л7, Л8 и некоторая комбинация из А5 и А6. Эти четыре сигнала задаются следующими выражениями: Е£ = «чтение» А15Л14А13Л12Л11А юЛ 9Л8Л7Л6Лб, £*2= «чтение» Л15Л}4Л13Л12Л цЛ10Л9Л8Л7ЛбЛ5, £*з = «чтение» Л15Л14Л13Л12Л11Л10Л9Л8Л7Л6Л5, Е&=== «чтение» Л15Л14Л13Л12Л цЛ 10Л9Л8Л7ЛбЛ5. В сигналы Еъ и Е6 входит «чтение» + «запись», Л7 и Л8. Сигналы £5 и Е6 равны между собой и определяются выражением £5, £б = («чтение» + «запись») Л15Л14Л13Л12ЛпЛ10Л9Л8Л7. Наконец, Е1 зависит от «чтение» и Л8 и задается выражением £*7 = «чтение» Л15Л14Л13Л12Л41Л10Л9Л8. Следует заметить, что все сигналы Et, кроме сигналов £5 и £б, относящихся к параллельно работающим модулям, взаимно исключаю- щие. Схему на рис. 9.10 можно упростить, если известно, что память не будет расширяться. В этом случае общий множитель А15. . .Л9 мож- но убрать из всех Еь В результате окажется, что к одной и той же ячей- ке можно будет обращаться еще по нескольким адресам, кроме ее «ос- новного» адреса. Как правило, это не вызывает никаких трудностей и может даже использоваться при программировании. 12 № 592
354 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Рис. 9.10. Схема подключения модулей памяти к иллюстративному микропроцессору в соответствии с размещением, показанным па рис. 9.9,
9 4 ИНТЕРФЕЙС С ГЛАВНОЙ ПАМЯТЬЮ 355 Временные параметры памяти Время, затрачиваемое на передачу данных в память и из памяти, как правило, играет важную роль, поскольку память работает медлен- нее электронных компонент малой степени интеграции, используемых в портах ввода/вывода. Для правильного выполнения операций чтения и записи нужно учитывать возникающие задержки. ' При операции чтения, вообще говоря, сначала на модуль памяти должен быть подан адрес, затем подана логическая 1 «разрешения» и, наконец, через определенное время прочитанные данные могут быть взяты с линий шины данных. Главной характеристикой здесь является время задержки между моментом подачи адреса и моментом получе- ния данных. Это время называется временем выборки, и микропроцес- сор должен его учитывать в своей работе, иначе опрос шины данных может быть сделан преждевременно, т. е. до поступления на нее пра- вильных данных. Также существенным является время между момен- том установления логической 1 на линии «разрешение» и поступлением информации на шину данных. Это время обычно меньше времени вы- борки и также должно учитываться микропроцессором. Временные соотношения при чтении показаны на рис. 9.11. Запись в память сложнее чтения и поэтому требует рассмотрения большего числа временных соотношений. При записи на входы модуля памяти нужно подать адрес и данные и, поддерживая состояние этих входов постоянным, подать кратковременные сигналы логической 1 и логического 0 на линии «разрешение» и ЧТ/ЗП соответственно. При этом существенное значение имеют несколько временных интервалов, показанных на рис. 9.12. После подачи адреса должно пройти время, необходимое для сра- батывания внутренних декодирующих схем. Если при наличии логи- ческой 1 на линии разрешения будет подан 0 на линию ЧТ/ЗП до того, как завершится декодирование адреса, то может произойти за- пись в ячейку с неверным адресом. Время между подачей адреса и началом сигнала «запись» часто называют временем предустановки адреса. АДРЕСНАЯ ШИНА /Иная __ разрешения ШИНА ___ ДАННЫХ Адрес доступен до выдачи данных ^выдорки^ X^HHbfe ~ .J доступны Рис. 9.11. Временные соотношения при выполнении операции чтения в модуле памяти, 12*
356 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Адрес доступен-----к АДРЕСНАЯ ШИНА ~ Время -Н Длительность лпредустоноб- импульса к и адреса записи Линия, разрешения Линия ЧТ/ЗП- Задержка снятия данных ШИНА ДАННЫ/ Рис. 9.12. Временные соотношения при выполнении операции записи в модуле памяти. Данные, поданные на вход модуля, записываются в конкретную ячейку в интервале, когда сигнал ЧТ/ЗП равен 0, а сигнал разрешения равен 1. Этот интервал, характеризующий длительность импульса записи, должен быть достаточным для регистрации данных на запоми- нающих элементах. Считается, что в адресуемую ячейку записываются данные, которые находятся на линиях шины данных в момент прохож- дения заднего фронта «импульса записи», но эти данные должны быть установлены за некоторое время до заднего фронта и должны сохра- няться на шине некоторое время после него. Первое время называется временем предустановки данных, второе — временем задержки снятия данных. При рассмотрении временных соотношений должны учитываться дополнительные задержки во вспомогательных вентилях, входящих в интерфейс. Однако этими задержками часто можно пренебречь из-за относительно более высокого быстродействия элементов с малой сте- пенью интеграции. Рассмотрим теперь, каким образом описанные временные соотно- шения должны соблюдаться со стороны микропроцессора. Сначала рассмотрим временную диаграмму, показанную на рис. 9.13, для опе- рации чтения. На ее выполнение затрачивается машинный цикл из трех синхроимпульсов. Микропроцессор работает в предположении,что данные на шине данных доступны между передними фронтами импуль- сов Т2 и Т3. Время от переднего фронта Ть когда на адресную шину подается адрес, до переднего фронта Т2 и составляет время выборки. Поданный адрес определяет модуль памяти (или группу параллель- но работающих модулей) и ячейку внутри модуля (или модулей). По истечении некоторого времени по заднему фронту Ti возбуждается управляющая линия «чтение» микропроцессора, что приводит к подаче сигнала «разрешение» на выбранный модуль. В промежуток между импульсами L и Т2 входит время от разрешения до выдачи данных плюс задержка на формирование сигнала «разрешение».
94 ИНТЕРФЕЙС С ГЛАВНОЙ ПАМЯТЬЮ 357 АДРЕСНАЯ ШИНА Адрес доступен Управляющая линия — „чтение" Данные ШИНА доступны ДАННЫХ ----------------- Рис. 9.13. Временная диаграмма работы иллюстративного микропроцессора при чтении из памяти. При чтении линии ЧТ/ЗП во всех модулях содержат логическую 1, поскольку они управляются инверсией сигнала «запись», поступаю- щего от микропроцессора. Следоцательно, содержимое адресуемой ячейки выбранного модуля поступит на шину данных по прошествии некоторого времени после прихода сигнала «разрешение». Стробиро- вание передачи данных на соответствующий регистр микропроцессора выполняется по заднему фронту Т2. Временная диаграмма для операции записи в иллюстративном микропроцессоре показана на рис. 9.14. Стробирование передачи данных в выбранную ячейку выполняется в течение синхроимпульса Т2. Время от переднего фронта Ть когда на соответствующие шины подаются адрес и данные, до переднего фронта Т2 составляет время Ti Т2 т3 АДРЕСОВ И ДАННЫХ Адрес и данные t доступны Управляющая линия — „запись" Рис. 9.14. Временная диаграмма работы иллюстративного микропроцессора при запи- си в память.
358 ГЛ. 9 ПОНЯТИЕ ИНТЕРФЕЙСА предустановки адреса, а до заднего фронта Т2 — время предустановки данных. Импульс на управляющей линии микропроцессора «запись» по времени совпадает с Т2. Этот импульс управляет работой схемы фор- мирования сигналов «разрешение» и обеспечивает подачу разрешения на модуль, которому принадлежит ячейка с заданным адресом. Им- пульс «запись» вызывает также подачу логического 0 на линию ЧТ/ЗП в модули ОЗУ, задавая тем самым режим записи. Таким образом, длительность импульса записи отличается от длительности синхроим- пульсов только на время задержки, которую вносят вентили схем разрешения. Адрес и данные сохраняются на шинах до переднего фрон- та Т3, в результате чего интервал между импульсами Т2 и Т3 учиты- вает время задержки снятия данных, необходимое для работы ЗУ. Все упоминавшиеся выше временные требования со стороны моду- лей памяти должны быть удовлетворены. Если хотя бы одно из них оказывается неудовлетворенным, должна быть соответствующим обра- зом снижена частота тактовых импульсов. Здесь полезно заметить, что временные диаграммы различных микропроцессоров отличаются друг от друга весьма существенно. Некоторые микропроцессоры спроектированы специально для работы с запоминающими устройствами определенного типа, имеющими свой особый «профиль» временных соотношений. Использование в таком микропроцессоре ЗУ другого типа может привести к очень большому снижению частоты синхронизации ради удовлетворения всего одного какого-нибудь требования. Некоторые микропроцессоры, например, спроектированы в расчете на память практически с нулевым временем задержки снятия данных. Применение с таким микропроцессором па- мяти с достаточно большим значением этого параметра может привести к чрезмерному снижению частоты. Иногда, для того чтобы справиться с описанными трудностями, используются источники задержанных синхроимпульсов или в микропроцессоре, или в памяти. Системы динамической памяти Основное отличие динамической памяти от статической связано с необходимостью периодически регенерировать информацию. Вообще говоря, регенерация происходит, когда выполняется операция чтения или записи. Рассмотрим частный вид модуля памяти, в котором реге- нерация осуществляется при чтении. Модель такого модуля по срав- нению с моделью статического модуля содержит одну дополнительную управляющую линию, показанную на рис. 9.15. Совместное использо- вание двух управляющих линий «разрешение» и «выборка» позволяет выполнить функции, аналогичные функциям линии «разрешение» в ста- тическом модуле. Линия «разрешение» выполняет внутренние управ- ляющие функции в модуле, тогда как линия «выборка» управляет линиями данных, переводя их в третье состояние при логическом 0.
9.4. ИНТЕРФЕЙС С ГЛАВНОЙ ПАМЯТЬЮ 359 При чтении и записи на обе линии сигнал поступает одновременно. Однако при регенерации возбуждается только линия «разрешение». Каждая операция регенерации подновляет содержимое нескольких ячеек в модуле. Внутри модуля слова образуют матрицу из строк и столбцов. Адрес слова состоит из двух частей: адреса строки и адреса столбца. Биты одного слова можно считать расположенными как бы в третьем измерении. Все слова в заданной строке регенерируются одновременно. Операция регенерации сводится к заданию адреса строки и после* дующей подаче сигнала на линию «разрешение» при значении 1 на ли- нии ЧТ/ЗП. Линии адреса столбца не оказывают влияния на регене- рацию и могут содержать любые значения. Каждая строка в модуле динамической памяти должна регенерироваться в пределах ограничен- ного промежутка времени после предыдущей регенерации. Этот про- межуток (период регенерации) обычно порядка нескольких миллисе- кунд. За период регенерации должно быть выполнено столько операций регенерации, каково число строк в модуле памяти. Поскольку в момент регенерации обращаться к памяти со стороны микропроцессора нельзя, должны существовать средства приостановки работы микропроцессора на время регенерации. В разных процессорах эта задача решается разными методами. В некоторых микропроцессо- рах используется специальный управляющий сигнал, приостанавли- вающий работу микропроцессора и дающий возможность выполнить регенерацию. Другую возможность дают средства прямого доступа к памяти, которые будут рассмотрены в следующем разделе. Еще одну возможность провести регенерацию можно получить, кратковременно воздействуя на подаваемые в микропроцессор тактирующие импульсы. Во всех вариантах работа микропроцессора приостанавливается, и процедура регенерации осуществляется внешними управляющими схе- мами. Эти схемы определяют как момент выполнения, так и адрес стро- ки для каждой операции регенерации. § § Р $ Рис. 9.15. Модель модуля динамической памяти.
360 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Пример схемы регенерации Одна из возможных схем регенерации, которую можно было бы применить в иллюстративном микропроцессоре для динамической памяти, приведена на рис. 9.16. Для приостановки микропроцессора на время регенерации блокируется линия тактирования. Это происхо^ дит перед началом каждого машинного цикла, когда адресная шина предполагается установленной микропроцессором в третье состояние. На схеме на рис. 9.16 начало каждого машинного цикла определя- ется с помощью выходной управляющей линии микропроцессора «синхр». На эту линию подается импульс, совпадающий повремени с Рис. 9.16, Схема регенерации динамической памяти для иллюстративного микропро- цессора,
9.Б ПРЯМОЙ ДОСТУП К ПАМЯТИ 361 третьим тактовым импульсом каждого машинного цикла. Время операции регенерации определяется при помощи ^-разрядного счет- чика, увеличивающегося по каждому импульсу в линии «синхр». К выходам триггеров этого счетчика подключен /^-входовый вентиль И, на выходе которого появится логическая 1, если единицы будут на всех k входах. Это условие определяет момент проведения регенерации. Очередной тактовый импульс не пропускается на микропроцессор и используется для регенерации. Для выполнения регенерации в модуле памяти на линию адреса строки подается содержимое четырехбитового счетчика через триста- бильные формирователи. Затем возбуждается линия «разрешение» импульсом от тактового генератора, проходящим через два вентиля. Фактически этим же импульсом регенерации увеличивается счетчик адреса строки для следующей операции регенерации. Кроме того, этим же импульсом продвигается и ^-разрядный счетчик, который при- нимает нулевое значение и прекращает операцию регенерации. Следующий синхроимпульс от тактового генератора будет про- пущен на микропроцессор в качестве первого импульса нового машин- ного цикла. После этого ^-разрядный счетчик снова будет подсчитывать импульсы «Синхр», отмеряя время до очередной операции регенерации. Нужно отметить, что методы регенерации динамической памяти не только меняются от микропроцессора к микропроцессору, но меняются даже для разных приложений микропроцессоров одного и того же типа. Поэтому описанную схему следует воспринимать лишь как иллю- страцию в самом общем смысле. Проектирование реальной схемы реге- нерации требует тщательного учета специфики конкретного микропро- цессора, модулей памяти и характера приложений. 9.5. ПРЯМОЙ ДОСТУП К ПАМЯТИ До сих пор в этой главе мы рассматривали передачи данных между микропроцессором и внешними устройствами или между микропроцес- сором и главной памятью. Однако интерес представляют также прямые передачи между внешними устройствами и главной памятью. Такие передачи можно было бы использовать, например, для начальной загрузки программы в память из устройства ввода. В процессе работы программы данные также могли бы вводиться из устройства в память для последующей обработки, или результаты, получаемые микропро- цессором, могли бы накапливаться в памяти для последующей выдачи на внешнее устройство. Когда в микрокомпьютере существуют средства передачи данных между памятью и внешним устройством без непосредственного вмеша- тельства программы в процесс передачи, они называются средствами прямого доступа к памяти (ПДП). На самом деле, добавив достаточное количество вспомогательных схем, в любом микрокомпьютере можно обеспечить прямой доступ к памяти. Однако, для того чтобы свести
362 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА число информационных каналов к минимуму, в большинстве микропро- цессорных систем предусматриваются специальные средства, позво- ляющие использовать обычные шины для прямого доступа к памяти. Это достигается тем, что на время ПДП-передачи управление шинами забирается из-под контроля микропроцессора и передается внешнему устройству, которое может воспользоваться шинами для передачи данных между устройством и памятью. Выполняемая программа, поскольку она тоже нуждается в об- менах с памятью, как правило, приостанавливается на время «захвата» шин внешним устройством. Хотя существуют некоторые вариации между различными микропроцессорами, освобождение шин со стороны процессора, как правило, происходит при поступлении запроса на ПДП по специальной управляющей линии. В нашем иллюстративном мик- ропроцессоре предусмотрены две управляющие линии ПДП и ППДП; по одной из них подается запрос на прямой доступ к памяти, а по дру- гой — ответ на запрос (подтверждение). Если по линии ПДП извне в микропроцессор приходит логичес- кая 1, то после завершения очередного машинного цикла процессор приостанавливает выполнение программы и освобождает адресную шину и шину данных, переведя их линии в третье (свободное) состоя- ние. После этого микропроцессор выдает подтверждение в виде логи- ческой 1 на линию ППДП. Все это время процессор сохраняет конт- роль и над другими выходными линиями шины управления. В против- ном случае неопределенное состояние управляющих линий могло бы вызвать нежелательные события, например запись в случайную ячейку памяти. В частности, во время подачи 1 на линию ППДП на управляющие линии «чтение» и «запись» микропроцессор подает логический 0. Обычно эти линии подсоединяются прямо к памяти. При наличии прямого доступа нужны соответствующие изменения в схемах, которые дали бы возможность управлять чтением и записью со стороны внеш- него устройства. Достаточно, например, объединить с помощью венти- лей ИЛИ линии «чтение» и «запись» от микропроцессора с аналогич- ными линиями от внешнего устройства, а выходы вентилей соединить с соответствующими линиями памяти. Устройство, желающее получить прямой доступ к памяти, сначала устанавливает логическую 1 на линии ПДП. Затем оно ждет, пока появится логическая 1 на линии ППДП. После этого устройство ис- пользует адресную шину, шину данных и свои линии чтения и записи для обмена данными с памятью аналогично тому, как это делает микропроцессор. Осуществив все необходимые передачи, устройство устанавливает на линии ПДП значение 0, в результате чего микро- процессор снова получает управление шинами. Передачу данных в режиме прямого доступа к памяти можно счи- тать одной из форм ввода/вывода, отличающегося от программируемого ввода/вывода тем, что управляет передачей не программа, а внешние
9.5. ПРЯМОЙ ДОСТУП К ПАМЯТИ 363 схемы. При прямом доступе к памяти экономится время. Кроме того, прямой доступ к памяти в некоторых случаях может оказаться един- ственным способом подключения таких быстрых внешних устройств, как магнитные диски или ленты, когда программируемый ввод вывод может просто не успевать за потоком данных. Передача блоков данных с использованием ПДП Быстрые устройства, подключаемые с использование?.! прямого доступа к памяти, обычно передают данные блоками слов. Программа, выполняемая микропроцессором, как правило, инициирует передачу блока и задает его размер. После этого отдельные слова передаются под управлением схем независимо от программы. Предположим, в программе потребовался ввод некоторого количества слов с магнитной ленты в память. В этом случае программа могла бы содержать команды, с помощью которых на внешние схемы, управляющие прямым досту- пом, было бы передано число вводимых слов и начальный адрес обла- сти памяти, в которую их нужно ввести. Затем программа могла бы установить флаг, запускающий работу схемы ПДП. С этого момента программа могла бы выполнять другую работу, предоставив управле- ние передачей внешним схемам. На рис. 9.17 приведена схема для иллюстративного микропро- цессора, которая управляет блочной передачей данных из устройства ввода в режиме прямого доступа. Схема содержит восьмибитовый бу- ферный регистр для приема данных от устройства и выдачи их на шину данных. Текущий адрес памяти, по которому происходит запись дан- ных, хранится на двух восьмибитовых суммирующих счетчиках (стар- шая и младшая половина адреса). Счетчики соединены последовательно и работают как один 16-битовый счетчик. Для подсчета числа передан- ных слов используется восьмибитовый вычитающий счетчик. Оба адресных счетчика и счетчик слов подключены к микропроцессору как регистры портов вывода. Программа инициирует передачу блока с посылки командами вывода на адресные счетчики младшей и старшей половины 16-битового адреса, а на счетчик слов восьмибитового числа. К выходам счетчика слов подключен вентиль И с инверсными входами, который служит детектором нуля на счетчике. До тех пор пока на счетчике не нуль, на выходе детектора — логический 0, и это разрешает устройству продолжать ввод данных. Устройство в ответ посылает вводимые дан- ные слово за словом, получая их с носителя, например, магнитной ленты. Из устройства поступает сигнал, стробирующий прием данных на буферный регистр. Тот же стробирующий импульс устанавливает 1 на триггере, выход которого подается на линию ПДП в микропроцес- сор. Получив сигнал ПДП, микропроцессор приостанавливает выпол- нение программы в конце очередного машинного цикла и освобождает
Детектор нуля о о о о о d 6 d СЧЕТЧИК Загрузка СЛОВ Вычитающий ^15 S3 лпдп Вывод Счет j Вывод АДРЕС Вывод Счет -SSSSSSSS Q 1 О 1 Q 1 Q ’ Q 1 Q ' Q ’ Q АДРЕС Загрузка С ТА РШ Суммирующий К, D- q^qIq’q’qIq’qIq . Загру3ка МЛАДШ. Суммирующий < 1) 1 D 1 I) 1 D I D 1 D ! D 1 D Флаг запрета передачи ' кДДДДДДЛ. Q ’ Q ’ О 1 Q J Q 1 Q ( Q 1 6 ВУФЕРНЬ/Й Загррзка РЕГИСТР УСТРОЙСТВО ВВОДА лпдп Счет пдп Такт н ' ч Стров вводимых жданных Запись t в память СЧЕТЧИК Г УЛРАВЛ. ПОСЛЕДО- ВАТЕЛЬНОСТИ Счет' J— Вывод ЛПДП Запись Рис. 9.17. Схема управления передачей данных из внешнего устройства в режиме прямого доступа к памяти. i ! к| I ГЛ 9. ПОНЯТИЕ ИНТЕРФЕЙСА
9.6 ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ О ШИНАХ 365 шины. На выходную управляющую линию ППДП при этом подается 1, что вызывает запуск последовательности из 4 импульсов, в которой содержимое буферного регистра передается в память. Управляет этой последовательностью двухбитовый счетчик, на счетный вход которого подаются тактовые импульсы, при условии ППДП=1. Значение 1 на линии ППДП обеспечивает подачу содержимого двух адресных счетчиков на адресную шину, а буферного регистра — на шину данных. Каждый тактовый импульс продвигает двухбитовый счетчик. По первым двум импульсам больше никаких действий не выполняется, но по третьему импульсу в память посылается сигнал записи. Он формируется на двух вентилях. На первый вентиль, вен- тиль И, подается тактирующий импульс и комбинация 10 двухбитового счетчика. На второй вентиль, вентиль ИЛИ, подается выход вентиля И и линия «запись» микропроцессора. Импульс записи обеспечивает за- пись очередного введенного слова в память по адресу на адресной шине. Следующий за импульсом записи тактовый импульс переведет двух- битовый счетчик в состояние 00 и возбудит импульс на линии «счет». Этот импульс увеличит адрес на адресных счетчиках и уменьшит счет- чик слов. Он же сбросит триггер, подсоединенный к линии ПДП. Таким образом, теперь счетчики готовы к передаче следующего слова, и микропроцессор получает разрешение возобновить выполнение про- граммы. Когда счетчик слов дойдет до 0, на выходе детектора нуля появится логическая 1, и это будет означать, что передача блока дан- ных завершена. Устройство прекратит передачу данных до тех пор, пока микропроцессор не инициирует передачу нового блока. Подобного типа передачи часто называют передачами с захватом цикла, поскольку они задерживают выполнение программы примерно на один машинный цикл. Другой тип передачи вызывает полную остановку программы на все время передачи блока. 9.6. ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ О ШИНАХ Рассмотренная выше общая структура шин в основных чертах соответствует большинству микропроцессоров и большинству при- ложений микропроцессоров. Тем не менее имеет смысл остановиться еще на нескольких понятиях, которые могут встретиться при рас- смотрении некоторых микропроцессоров или некоторых приложений. К этим понятиям мы отнесем адресацию портов ввода/вывода как ячеек памяти, мультиплексирование шин и переключение банков памяти. Адресация портов ввода/вывода как ячеек памяти Многие микропроцессоры, включая наш иллюстративный, для выполнения обменов информацией с портами ввода/вывода используют команды и линии управления, отличные от тех, с помощью которых
266 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА осуществляются обмены с памятью. Это позволяет иметь адресацию портов, независимую от адресации ячеек памяти. Однако часто удобнее трактовать порты ввода/вывода как ячейки памяти, т. е. присвоить портам ввода/вывода адреса и обращаться к ним, как к обычным ячей- кам памяти. Обычно это называют отображением портов ввода/вывода на память. Отображение портов ввода/вывода на память можно орга- низовать в любом микропроцессоре, но в некоторых микропроцессор- ных системах этот вариант оказывается единственно возможным, поскольку специальных команд ввода/вывода, так же как и специаль- ных управляющих линий, просто нет. Достоинства такого отображения связаны с возможностью пользо- ваться при работе с портами ввода/вывода любыми командами, обра- щающимся к памяти. Некоторые микропроцессоры обладают богатым набором таких команд с различными способами адресации. Часто в системе команд микропроцессоров предусматриваются арифметичес- кие и логические команды с операндами в главной памяти. Для таких микропроцессоров отображение портов ввода/вывода на память осо- бенно выгодно. В иллюстративном микропроцессоре мало команд, обращающихся к памяти, и тем не менее от адресации портов ввода/вывода как ячеек памяти определенные выгоды получить можно. Две специальные команды ввода/вывода обеспечивают обмен данными только между портом и аккумулятором. При отображении портов ввода/вывода на память появилась бы возможность обмениваться данными с любым из первых трех общих регистров с помощью команд загрузки регистра, за- поминания регистра и пересылки. В интерфейсе с портами ввода/вывода вместо управляющих линий «ввод» и «вывод» нужно было бы исполь- зовать линии «чтение» и «запись» соответственно. Мультиплексирование шин Система шин в нашем микропроцессоре, как и во многих промыш- ленных, состоит из трех раздельных шин, передающих адреса, данные и управляющую информацию. Разделение шин по трем таким функ- циям делает интерфейс с портами ввода/вывода и памятью простым и естественным. Тем не менее в некоторых микропроцессорах какие-то пары названных функций могут объединяться в одной шине. Как уже упоминалось в разд. 9.1, в некоторых микропроцессорах шина данных служит также для пересылки информации, управляющей передачей данных. Как правило, это делается для того, чтобы свести количество контактов интегральной схемы к некоторому приемлемому числу (ска- жем, 40). В некоторых микропроцессорах успех достигается путем объедине- ния функций адресной шины и шины данных. При этом возникает мультиплексируемая шина (ее часто называют общей шиной адресов и данных), по которой передаются адреса в одни моменты времени, а
9 6 ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ О ШИНАХ 367 данные — в другие. Варианты этой схемы в основном различаются способами передачи адресов через общую шину. Если число битов в адресе равно числу битов в слове данных, что имеет место в некоторых микропроцессорах, то все биты адреса одновременно передаются через общую шину. Если же число битов в адресе превосходит число битов в слове данных, как это имеет место в нашем иллюстративном и многих других микропроцессорах, то можно либо предусмотреть дополнитель- ные линии для лишних разрядов адреса, либо передавать адрес после- довательно по частям. В любом случае адресная информация, прошедшая через шины, должна каким-то образом быть запомнена для обращения к соответст- вующей ячейке памяти или порту ввода/вывода. Этого можно добить- ся, подавая в соответствующие моменты от микропроцессора по спе- циальным управляющим линиям сигналы, стробирующие прием адрес- ной информации с шин на регистры. Для работы с микропроцессорами, имеющими общие шины адресов и данных, выпускаются модули памяти со встроенным адресным реги- стром. Как правило, младшие разряды адреса, характеризующие ячейку внутри модуля, принимаются всеми модулями. Старшие же разряды адреса используются для выбора нужного модуля из несколь- ких входящих в систему ЗУ. Выбор модуля можно осуществлять несколькими путями. Старшие разряды адреса могут либо поступать с дополнительных адресных линий микропроцессора, либо с центрального регистра в самой системе ЗУ, куда они могли быть занесены с общих шин ранее. Другой вари- ант выбора требуемого модуля заключается в использовании флаж- кового триггера выборки, имеющегося в каждом модуле. Каждый флажок в этом случае должен устанавливаться при появлении в соот- ветствующий момент времени на общей шине определенной комбина- ции старших разрядов адреса. После того как адрес требуемой ячейки задан, передача данных в ячейку или из нее выполняется через общую шину обычным образом. Как легко видеть, применение общей шины адресов и данных позволяет сократить число контактов в интегральной схеме микропро- цессора. Более того, применение модулей памяти с адресными регист- рами приводит к упрощению монтажных соединений между памятью и микропроцессором. Однако производительность микропроцессорной системы при использовании одной шины и для адресов, и для данных в общем случае должна снижаться. Переключаемые банки памяти Для микропроцессоров, как правило, адресуемое пространство памяти, определяемое числом битов в адресе, оказывается достаточным для большинства приложений. В тех же случаях, когда решаемая зада- ча требует использования памяти большего объема, чем допускает
ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА система адресации, можно обратиться к идее переключаемых банков памяти. Выбор нужного.банка определяется содержимым регистра, называемого указателем банка и подключаемого к микропроцессору в качестве порта вывода. Предположим, что переключаемой должна быть только та часть памяти, в которой содержатся данные, но не команды, поскольку в противном случае переключение банка вызвало бы нарушение после- довательного выполнения команд. Поэтому будем считать, что програм- ма расположена в первой половине пространства, адресуемого обычным образом (в половине с младшими адресами). Переключение банков в этом случае будет затрагивать только вторую, старшую половину адре- суемого пространства. Таким образом, когда старший бит в адресе равен 0, обращение будет всегда производиться к программной по- ловине памяти, к ячейке, задаваемой остальными разрядами адреса. С другой стороны, когда старший бит адреса равен 1, обращение будет производиться к одному из нескольких банков памяти. При такой организации программа может переключать банки, просто посылая номер нужного банка на регистр — указатель бан- ка с помощью команды вывода. Описанную схему переключения банков можно расширить на лю- бое число банков. Если разрядности одного порта вывода недостаточно для нумерации всех нужных банков, то можно воспользоваться двумя или большим числом портов. 9.7. ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ Во многих приложениях микропроцессоры должны работать с непрерывными физическими параметрами. В задачах управления ме- ханическими устройствами, например, обычно мы сталкиваемся с необходимостью опрашивать или управлять такими параметрами, как скорость, координаты в пространстве, сила. В конечном счете эти параметры представляются значениями электрических величин, которые мы будем считать напряжениями. Напряжение, которое представляет физический параметр, мы будем называть аналоговой величиной. Аналоговые напряжения генерируются соответствующими датчи- ками (например, тахометром для скорости, датчиком давления для давления и силы, потенциометром для координаты в пространстве). При управлении параметрами их физические значения генерируются по соответствующим напряжениям с помощью различных приводов (моторов для сил, скоростей или координат, нагревателей для темпе- ратур и т. п.). Микропроцессоры по самой своей природе устройства цифровые и работают с цифровым представлением величин. Чтобы микропроцессоры могли работать с аналоговыми величинами, нужны средства преобразования цифровых величин в аналоговые и обратно.
^епочки 9 7 ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ 369 Цифро-аналоговые преобразования Сначала рассмотрим преобразование цифровых величин в аналого- вую форму. Для простоты пока будем считать их положительные*#. Цифровое двоичное представление величины W состоит из ^-битовой ak-iak-2 • • • Мо- Значение величины определяется полиномом ^ = ^.12"’1 + ^_22^2+ • • • +^2 + а0. Вычисление полинома сводится к домножению отдельных битов на весовые коэффициенты, являющиеся степенями двойки, и в сложении получаемых членов. Это соответствует вычислению линейной комбина- ции битов. Подобные линейные комбинации легко реализуются схе- мами из резисторов. Если мы располагаем напряжениями, представляю-* щими значения отдельных битов, то с помощью схемы из резисторов мы можем получить напряжение, соответствующее значению всего двоичного числа. Одна из таких схем, по внешнему виду напоминающая лестницу (в технической литературе называемая аттенюатором), представ- лена на рис. 9.18(a). Число битов предполагается равным 8. К схеме подключаются 8 идеальных генераторов напряжения, соответствую- щих отдельным битам at. Каждый генератор дает напряжение либо D В, либо 1 В в зависимости от значения соответствующего бита. Таким образом, значение напряжения на генераторе численно равно значению бита. Выходное напряжение Квых, как будет показано, пропорциональ- но сумме значений напряжений на генераторах, взвешенных по сте- пеням 2. Таким образом, «лестница» резисторов выполняет функции цифро-аналогового преобразователя числа N. Вывод формулы для резисторной «лестницы» Чтобы показать, что схема на рис. 9.18 (а) действительно реализует суммирование с весами, воспользуемся принципом суперпозиции линейных схем. Каждый генератор является источником входного сигнала для линейной схемы, состоящей только из резисторов. Принцип суперпозиции позволяет нам вычислить выходное напряжение Увых, суммируя воздействия каждого индивидуального входного напряже- ния. Каждое из этих воздействий можно получить, вычислив Гвых в предположении, что подано только одно входное напряжение, а все остальные входные напряжения равны 0. Рассмотрим воздействие на выход напряжения, соответствующего биту Qi. Генератор напряжения подключен к резистору с сопротивле- нием /?. Обозначим точку на противоположном конце этого резистора через Pj. Сопротивление левой части схемы между точкой Рг- и землей оказывается равным 7?, как показано на рис. 9.18(6). Это легко дока-
^ых ^налоговый.'} Эквивалентное Эквивалентное сопротивление сопротивление слева от Pt y3e/J справа от % (*) 370 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА Рис. 9.18. Цифро-аналоговый преобразователь на резисторах, (а) «Лестница» резисторов, (б) Эквивалентные сопротивления левой и правой частей схемы относительно узла Р/. (в) Эквивалентный делитель напряжения, определяющий действие на напряжение в узле Р,-. (г) Эквивалентный делитель напряжения, определяющий напряжение в узле Р/ + 1 в зависимос- ти от напряжения в узле Р/.
9 7 ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ 371 зать, если вычислять сопротивление, продвигаясь от левого конца схемы направо. Крайний левый резистор с сопротивлением R включен парал- лельно с резистором 7?, идущим к генератору (поскольку на генерато- ре нулевое напряжение, резистор, подключенный к нему, можно счи- тать заземленным). Параллельно включенные резисторы обладают общим сопротивлением /?/2, которое последовательно с расположен- ным правее резистором R/2 дает сопротивление на землю, равное R. Повторяя этот процесс, мы дойдем до узла Pf и убедимся в справедли- вости сделанного утверждения. Точно так же легко видеть, что со- противление правой части схемы от узла Pz на землю равно R. Таким образом, эквивалентную схему можно представить в виде, показанном на рис. 9.18(6). Теперь можно определить напряжение в точке Р,. Сопротивления правой и левой части схемы включены в параллель и дают общее сопротивление /?/2, как показано на рис. 9.18(b). Это сопротивление и сопротивление R резистора, подключенного к генератору ah образуют делитель напряжения. Благодаря этому делителю к точке Pf оказы- вается приложенным часть напряжения at: р /п Напряжение в узле Р.-^-^ . а.- r J 1 R-^-R/2 1 1 з Теперь, продвигаясь от узла к узлу налево, мы можем определить, чему равно выходное напряжение схемы, если в узле Pf напряжение равно 1/3ai. Очевидно, напряжение на соседнем узле Р^+1 равно половине на- пряжения в узле Р,. Действительно, сопротивление между узлом Р^+1 и землей, если не считать резистор, соединяющий узлы Pj и Риь равно R/2. Это значение сопротивления дают два параллельно вклю- ченных сопротивления, а именно сопротивление левой части схемы от узла Pf+i и сопротивление резистора к генератору ah Сопротивление R/2 между РИх и землей вместе с сопротивлением R/2 резистора между Р/ и РИ1 образует делитель напряжения, показанный на рис. 9.18(г). Этот делитель дает в узле Рг+1 напряжение, равное половине от напря- жения в узле Pj, т. е. 1 ’ 3°'- Напряжение уменьшается вдвое при каждом шаге влево от узла к узлу. Поэтому очевидно, что выходное напряжение в узле Р7 зада- ется формулой /?72 • 1 Напряжение в узле Р, + 1 — . ' х напряжение Р,= -^ А / "т" А / Л Напряжение в узле Р7 \ 2 / 3 Суммируя воздействие от всех генераторов, мы получим результи-
372 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА рующее выходное напряжение v = у ¥ВЫХ Z.I 2 ) 3 1 = 0 4 7 = (_LV ±У — “ \ 2 / 3 " \ 2 ) ai ~~ 7 i= о 4 7 = (_LV 1V 9'- \ 2 ) 3 °'’ 7 1 = 0 Сумма в полученном выражении представляет собой полином, определяющий значение N. Таким образом, Увых пропорционально N. Коэффициент пропорциональности равен (^У^-или в общем случае /1 X *-> 1 W з- Преобразование чисел, которые могут принимать как положитель- ные, так и отрицательные значения и представлены в дополнительном коде, можно получить, несколько видоизменив схему для положитель- ных чисел. Представление чисел в дополнительном коде можно счи- тать аналогичным двоичному представлению положительных чисел, только с отрицательным весом у старшего (знакового) бита. Таким образом, число 7V, представленное ^-битовым дополнительным кодом ak-i<ik-2 ••• «А, определяется полиномом = (_2^1) + aft_22^2+ • • • +^2 + «0. Преобразователь в аналоговую форму для этого выражения можно реализовать такой же «лестницей» резисторов, где полярность генера- тора напряжения ak_1 изменена на противоположную. Реализация генераторов напряжения Теперь остановимся на реализации генераторов напряжения, дающих входные сигналы на «лестницу» резисторов. По значению бита at они должны выдавать напряжение, равное или пропорциональ- ное Важно, чтобы генераторы приближались к идеальным, т. е. чтобы их выходные напряжения не зависели от нагрузки со стороны схемы резисторов. Также важна точность выходных напряжений, поскольку она непосредственно влияет на точность всего преобра- зователя. Эти требования можно удовлетворить с помощью аналоговых пере- ключателей, которые соединяют каждую входную линию «лестницы» либо с высокоточным источником эталонного напряжения, либо с зем-
9.7. ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ 373 Рис. 9.19. Схема генератора напряжения, управляемого на двух биполярных тран- зисторах. лей в зависимости от значения at. В качестве такого переключателя можно воспользоваться схемой на биполярных транзисторах с актив- ной нагрузкой, см. рис. 9.19. При этом предполагается, что уровень напряжения, соответствующий логической 1, чуть больше, чем Уэталон. Если at равно логической 1, верхний транзистор будет в состоянии насыщения, в результате чего на выходе схемы будет напряжение, равное эталонному. Если равно логическому 0, то в насыщении будет нижний транзистор, и на выходе будет потенциал земли. Тран- зисторы должны выбираться с пренебрежимо малым падением напря- жения между коллектором и эмиттером в состоянии насыщения. При небольшом числе разрядов (не более восьми) приемлемее результаты можно получить на ТТЛ-вентилях с активной нагрузкой в Vcc = +5 В Рис. 9.20, Схема генератора напряжения на ТТЛ-вентиле с дополнительным рези- стором.
374 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА выходном каскаде и дополнительным резистором, как показано на рис. 9.20. Обычно на части схемы в ТТЛ-вентилях, обеспечивающей высокий выходной потенциал, имеется заметное падение напряжения. Дополнительный резистор между выходом вентиля и эталонным напря- жением (номинально равным +5В) приближает выходное напряжение к эталонному, при условии что нагрузка со стороны резисторов «лест- ницы» достаточно мала. Сопротивление дополнительного резистора на схеме выбрано равным 1 кОм, где-то близко к минимальному значению, при котором нижний транзистор не перегружается. Входные резисторы в «лестнице» нужно выбирать с существенно большими значениями со- противлений. Резисторы порядка 20 кОм обычно оказываются приемле- мыми. Преобразователь на операционном усилителе Вместо лестницы резисторов для суммирования с весами в соответ- ствии с представлением двоичного числа в виде полинома можно использовать операционный усилитель. Операционным называют уси- литель напряжения с большим отрицательным коэффициентом усиле- ния (—Л), который можно запрограммировать для выполнения раз- личных операций. Программирование осуществляется подключением резисторов или других пассивных элементов. На рис. 9.21 показана схема, в которой операционный усилитель запрограммирован для выполнения цифро-аналогового преобразования. Сигналы Vi — это входные напряжения, соответствующие значе- ниям битов at в преобразуемом двоичном числе АС Выходное напряже- ние схемы VBbIX пропорционально значению числа N. Чтобы доказать это, просуммируем токи, проходящие через точку схемы, обозначен- ную как «общая точка». Обозначим напряжение в этой точке через V. Каждый входной источник напряжения соединен с общей точкой через резистор, который мы для общности обозначим через Rt. По закону Ома ток через каждый из этих резисторов равен (Vi—V)/Ri. Выходная линия, подключенная к общей точке через резистор R, вносит свою долю тока, равную (Квых—V)/R. Сумма этих токов должна равнять- ся 0, т. е. Vo-V Vi-V v7-v vBbIX-V _п /?о r Ri ф R Далее, поскольку напряжение V подано на вход операционного уси- лителя, его выходное напряжение Увых должно равняться —AV, где А — коэффициент усиления. Таким образом, V=—VBblxM. Подста- вив V в предыдущее уравнение и собрав члены с VBbIX, мы получим ^1^1 | ^_-Увь,хГ 1 | .1 , ... I | Л | _Ц Яо + “ А V Ro + + + /?, + R + R ) • Это уравнение можно упростить, проведя аппроксимацию, опираю- щуюся на высокое значение коэффициента усиления операционного
9.7 ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ 375 Я/128 У;----I ОЛцая точка, Я/64 ^напряжение / Л/32 Л ОПЕРАЦИОННЫЙ УСИЛИТЕЛЬ Рис. 9.21. Двоичный цифро-аналоговый преобразователь с операционным уси- лителем. усилителя. Обычно это значение бывает не менее 50 000, из чего сле- дует, что член Л//? в правой части уравнения много больше всех осталь- ных членов, входящих в сумму. Поэтому величина выражения в скобках в правой части с хорошей точностью равна Л//?. Вся правая часть при этом становится равной ^ВЫХ ( ^ \ ^ВЫХ А \ R R Следовательно, выходное напряжение Евых определяется выражением V =—R } Квых ' R?) Если теперь подставить значения Rh указанные на рис. 9.20, мы полу- чим у ____ _ О ( У О 1 ^1 I , I ^7 \ ^вых— А ₽ -г Rl2~r • = —(V.,+ 2V\+• • • + 128У7) = - i Vz2\ i-0 Таким образом, значение выходного напряжения равно взятому с об- ратным знаком значению исходного двоичного числа. Аналогичные схемы можно применять для преобразования в анало- говую форму чисел, представленных в коде 8421 BCD (двоично-коди- рованных десятичных), приведя только значения входных сопротив-
376 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА лений в соответствие с весами битов в коде BCD. Двухразрядное деся- тичное число N, представляемое кодом BCD N=b3b2b1b()a3a2a1aQ9 имеет значение л^=(&з28+&2224-&121+&о)1о+(а32з+а221?+б?121+ао). Следовательно, веса битов имеют значения: 80, 40, 20, 10, 8, 4, 2, 1. Поэтому входные резисторы схемы, аналогичной рис. 9.21, должны иметь следующие значения: RRRRRRR 80 40 20 10 8 4 Аналого-цифровые преобразования Мы рассмотрим несколько методов преобразования аналоговых величин в цифровую форму, использующие в режиме «проб и ошибок» цифро-аналоговые (ЦА) преобразователи. При любом способе все на- чинается с некоторого исходного испытуемого числа, которое преобра- зуется цифро-аналоговым преобразователем в аналоговую форму и сравнивается с заданным аналоговым напряжением. По результатам сравнения испытуемое число корректируется. Затем попытка повто- ряется с новым числом и т. д., пока не будет подобрано число, соот- ветствующее заданному напряжению. При этом предполагается, что входное аналоговое напряжение промасштабировано и соответствует диапазону ЦА-преобразователя. Простейший метод подбора — это начать с наименьшего числа в диапазоне (с нуля при положительных числах) и последовательно увеличивать его на 1 до тех пор, пока преобразованное напряжение не превысит входное или не сравняется с ним. На рис. 9.22 показано, как Входное аналоговое напряжение ЦИФРО- АНАЛОГОВЫЙ ПРЕОБРАЗОВАТЕЛЬ ^Преобразо- ванное аналоговое напряжение Г । I I I । I । ' Сорос двоичный считчик. Счет 4-1 L I. I______L в АНАЛОГОВЫЙ КОМПАРАТОР Логическая 1, если вход А превышает вход В Начало преобразования СИНХРОГЕНЕРА ТОР Гис. 9.22. Аналого-цифровой преобразователь с суммирующим счетчиком.
9.7. ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ 377 Рис. 9.23. Аналого-цифровой преобразователь с реверсивным счетчиком. это можно реализовать с помощью суммирующего счетчика. Выхода счетчика поданы на ЦА-преобразователь. Аналоговый выход этого преобразователя и заданное входное напряжение поданы на компаратор (схему сравнения), на выходе которого появляется логическая 1, если заданное напряжение превышает полученное ЦА-преобразователем. Выход от компаратора и сигналы от генератора импульсов подаются на вентиль И, выход последнего подается на счетный вход счетчика. Процесс аналого-цифрового (АЦ) преобразования начинается со сброса счетчика в нуль. После этого счетчик начинает увеличиваться, пока на выходе компаратора не появится логический 0. Это произойдет, когда содержимое счетчика окажется достаточным для того, чтобы выход ЦА-преобразователя превысил или сравнялся с входным на- пряжением. Достигнутое к этому моменту содержимое счетчика и бе- рется в качестве выходного преобразованного числа. Можно существенно улучшить описанный метод АЦ-преобразова- ния, если суммирующий счетчик заменить реверсивным. Тогда для корректировки испытуемого числа можно либо увеличивать, либо уменьшать счетчик. В этом случае появляется возможность непре- рывно отслеживать изменяющееся входное напряжение. Схема такого преобразователя показана на рис. 9.23.
378 ГЛ 9. ПОНЯТИЕ ИНТЕРФЕЙСА Для сравнения заданного аналогового напряжения с выходом ЦА-преобразователя используется компаратор с двумя выходами Н и L. Логическая 1 на выходе Н означает, что напряжение с выхода ЦА-преобразователя превышает входное аналоговое напряжение по крайней мере на некоторую величину А. Логическая 1 на выходе L означает, что выход ЦА-преобразователя по крайней мере на А ниже входного аналогового напряжения. Таким образом, появляется «мерт- вая зона» шириной 2А, в которой ни на одном из выходов нет логиче- ской 1. Каждый из выходов управляет своим вентилем, формирующим сигналы соответственно увеличения и уменьшения счетчика. Процесс преобразования может начинаться с произвольного зна- чения на счетчике. Если это значение велико по сравнению с входным аналоговым напряжением, логическая 1 на выходе Н компаратора при- ведет к тому, что счетчик при очередном импульсе уменьшится на 1. Если же значение на счетчике мало по сравнению с входным аналого- вым напряжением, логическая 1 на входе L приведет к его увеличению. Когда значение на счетчике попадет в диапазон ± А относительно вход- ного аналогового напряжения, оба выхода Н и L примут нулевые значения, и счетчик перестанет изменяться. Если входное аналоговое напряжение изменится после этого, то соответственно изменится и значение на счетчике. Значение А должно выбираться таким образом, чтобы в мертвую зону попадало только одно значение счетчика. Ширина мертвой зоны 2А должна быть больше изменения аналогового напряжения на вы- ходе ЦА-преобразователя при переходе к соседнему числу, что соот- ветствует аналоговому весу младшего бита счетчика ). Однако ширина мертвой зоны не должна быть больше двух весов младшего бита счетчика №мб < 2А < 2№мб. Время срабатывания преобразователя с реверсивным счетчиком зависит от того, насколько далеки друг от друга начальное и результи- рующее значения. Число импульсов счета может варьироваться от О до полного диапазона счетчика. В тех случаях, когда преобразует- ся медленно меняющаяся величина, преобразования, кроме самого первого, завершаются за несколько импульсов. Метод последовательных приближений Во многих случаях, однако, входное аналоговое напряжение от одного преобразования к следующему может сильно изменяться. Это в особенности верно в тех довольно частых случаях, когда один АЦ-преобразователь используется для последовательного преобразо- вания аналоговых сигналов от многих датчиков (режим мультиплекси- рования). Более того, в некоторых приложениях требуется осуществ- лять АЦ-преобразования со строгой периодичностью за фиксированное время, не зависящее от конкретных значений сигнала.
9.7. ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВ МЕЛИ 379 Рис. 9.24. Аналого-цифровой преобразователь, работающий по методу последователь- ных приближений. Метод АЦ-преобразования, выполняемого за фиксированное и относительно небольшое время, существует. Согласно этому методу, назовем его методом последовательных приближений, последовательно подбираются значения битов, все ближе приближающиеся к входному аналоговому напряжению. Для преобразователей, работающих с поло- жительными числами, преобразование начинается с числа, содержаще- го нули во всех битах. Затем старший бит устанавливается в 1, число преобразуется и сравнивается с входным напряжением. Если получен-
380 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА ное число больше входного напряжения, старший бит сбрасывается в 0; в противном случае остается равным 1. Затем следующий бит, стар- ший из оставшихся, устанавливается в 1, и полученное число снова преобразуется и сравнивается с входным напряжением. Если оказы- вается, что число велико, бит сбрасывается. Этот процесс повторяется для все более младших битов, причем значения ранее подобранна старших битов не изменяются. После подбора младшего бита преобра- зование завершается. Схема, реализующая описанный метод, показана на рис. 9.24. Испытуемое число хранится на регистре из /?5-триггеров, переклю- чаемых задним фронтом. Как всегда, содержимое регистра подается на вход ЦА-преобразователя. Выход ЦА-преобразователя и входное аналоговое напряжение поступают на компаратор, выход которого управляет сбросом подбираемого бита. Для организации последовательного просмотра битов испытуемо- го числа слева направо, используется четырехбитовый счетчик и де- шифратор «1 из 8». Входами дешифратора служат три младших разря- да счетчика, которые определяют, какая из восьми выходных линий дешифратора содержит логическую 1. Импульсы от генератора посту- пают на счетный вход счетчика, а также на триггеры регистра испытуе- мого числа в качестве синхроимпульсов. Регистр и счетчик тем самым работают в синхронном режиме, и их состояния меняются по заднему фронту импульсов. Старший разряд счетчика, который равен 1, когда счетчик досчитывает до 8, используется для отключения от генератора и, следовательно, остановки процесса преобразования после 8 им- пульсов. С помощью выходных линий дешифратора осуществляется выбор соответствующих входов на триггерах регистра для сброса подбирае- мого разряда и установки следующего. Сигнал сброса при этом зави- сит от выхода компаратора. Таким образом, когда приходит очередной импульс, триггер, соответствующий активной линии дешифратора, сбрасывается, если число велико, а следующий триггер устанавлива- ется в 1 независимо от результата сравнения. Схема в целом работает следующим образом. Импульс на линии «начало преобразования», который предполагается синхронизирован- ным с импульсами генератора, устанавливает в качестве начального значения испытуемого числа 1 в старшем бите и нули в остальных. Этот же начальный импульс сбрасывает в 0 четырехбитовый счетчик и тем самым открывает импульсы от генератора. Начальное число преоб- разуется в аналоговую форму и сравнивается с входным напряжением. По заднему фронту импульса от генератора старший бит испытуемого числа сбрасывается, если число велико. В любом случае следующий бит будет установлен в 1. Кроме того, счетчик будет увеличен на 1, и процесс повторится для следующего бита. Когда счетчик досчитает до 8, все биты в числе будут определены. Процесс остановится, и на реги- стре будет результирующее число.
9.7. ЦИФРО-АНАЛОГОВЫЕ ПРЕОБРАЗОВАТЕЛИ 381 В общем случае метод последовательных приближений требует k импульсов для преобразования аналогового напряжения в й-битовое число, тогда как метод с реверсивным счетчиком в худшем случае может потребовать 2*—1 импульсов. ‘Аналого-цифровое преобразование с помощью микропроцессора Если аналоговая величина преобразуется в цифровую форму для использования в микропроцессоре, то логично и выгодно, чтобы мик- ропроцессор взял на себя работу по преобразованию. За счет этого можно упростить внешние схемы. Более того, это может упростить и связи между микропроцессором и внешними схемами. Участие микропроцессора в процессе преобразования оказывается особенно эффективным, если преобразовывать нужно много сигналов. В этом случае испытуемые числа для всех аналоговых сигналов можно преобразовывать с помощью единственного ЦА-преобразователя, под- ключенного к выходному порту. Сравнение выхода ЦА-преобразова- теля с каждым входным сигналом выполняет отдельный компаратор. Результат каждого сравнения поступает в микропроцессор по отдель- ной линии в порт ввода. Для большей наглядности рассмотрим схему преобразования сигналов, поступающих по восьми аналоговым каналам, представ- ленную на рис. 9.25. На схеме мы видим один вводной и один выводной порт с общим кодом устройства. Регистр выводного порта принимает с шин данных испытуемое число и подает его на входы ЦА-преобразо- вателя, выход которого подключен к входам восьми компараторов. На второй вход каждого компаратора подается сигнал по одному из восьми аналоговых входных каналов. Выходы компараторов поданы на тристабильные формирователи, образующие порт ввода. Описанных внешних компонент и связей достаточно для того, чтобы можно было программно выполнить аналого-цифровое преобразова- ние для всех восьми каналов. В общем случае программа начинает преобразование для некоторого канала, выводя соответствующее испытуемое число. Это число преобразуется в аналоговое напряжение и сравнивается с входными напряжениями во всех каналах. Результаты всех восьми сравнений программа получает через порт ввода. Она выделяет и тестирует бит, который соответствует интере- сующему ее каналу и определяет новое пробное значение числа. По- добрав число для напряжения в одном канале, микропроцессор пере- ходит к другому каналу и т. д. Таким образом, преобразование по всем каналам ведется в режиме временного мультиплексирования. Следует отметить, что между микропроцессором и внешними схемами не потребовалось передавать информацию о состоянии. Это объясняется тем, что преобразование выполняет микропроцессор, и он контролирует как начало, так и конец преобразования. Если же преобразование вы-
Рис. 9.25. Интерфейс иллюстративного микропроцессора для выполнения АЦ-преоб- разования аналоговых сигналов, поступающих по восьми каналам.
9 8 ПОСЛЕДОВАТЕЛЬНЫЙ ВВОД/ВЫВОД 383 полняется полностью внешними компонентами, то для информации о состоянии нужно выделять специальные порты. Метод преобразования, используемый в программе, может быть любым, включая метод последовательных приближений, методы со счетчиками и другие. Существует интересный программный метод, который оказывается довольно эффективным, когда число битов невелико (скажем, 4), а число каналов относительно велико (скажем, 16 или больше). Согласно этому методу, пробуются последовательно все числа диапазона, начи- ная с 0. Для каждого числа регистрируются результаты всех сравне- ний. Если при пробе очередного числа компаратор некоторого канала изменил свой выход, то это число и берется в качестве результата для этого канала. Перебрав все числа, мы завершим преобразование для всех каналов. При 4 битах и 16 каналах преобразование завершится через 16 попыток, т. е. в среднем будет затрачена одна попытка на канал. 9.8. ПОСЛЕДОВАТЕЛЬНЫЙ ВВОД/ВЫВОД Передача данных между микропроцессором и устройствами ввода/ вывода (например, терминалами) или внешними запоминающими устройствами (например, кассетным магнитофоном) часто осуществля- ется в последовательном режиме. В общем случае передача в последо- вательном режиме происходит по одной линии, причем биты, состав- ляющие слово, передаются друг за другом. Оба случая, с устройствами ввода/вывода и с внешними ЗУ, можно рассмотреть вместе. В каждом из них есть источник информации и ее получатель. Данные поступают от источника и затем либо передаются бит за битом через линию получателю, либо накапливаются бит за би- том в некотором устройстве для последующего использования получа- телем. Путь, по которому передаются данные от источника к получа- телю, в обоих случаях называется каналом. Часто оказывается, что на одном или обоих концах последователь- ного канала данные нужны в параллельной форме. В этом случае нужно предусмотреть средства преобразования данных из одной формы в другую. Естественное решение этой проблемы дают сдвиговые реги- стры. Для преобразования из параллельной формы в последовательную данные сначала параллельно загружаются в сдвиговый регистр. После этого они многократно сдвигаются в одну или другую сторону, в ре- зультате чего на выходе одного из концевых триггеров последователь- но появляются значения всех битов. Для обратного преобразования линия, в которой появляются последовательные данные, подключается к одному из концов сдвигового регистра, и сдвиговый регистр сдвига- ется столько раз, сколько битов в слове данных. После этого все биты слова можно получить в параллельной форме на выходах триггеров регистра.
384 ГЛ 9 ПОНЯТИЕ ИНТЕРФЕЙСА Различают два основных способа передачи данных через последо- вательный канал: синхронный и асинхронный. При синхронной пере- даче данных должна существовать общая для источника и получателя линия синхросигналов, импульсы на которой служат для выделения индивидуальных битов в канале. Как источник, так и получатель интерпретируют один и тот же синхроимпульс как указание на на- личие в канале очередного бита. Поэтому для работы с синхронным последовательным каналом не требуется точно привязываться к абсо- лютному времени. При асинхронном способе источник и получатель не имеют общей синхролинии. В этом случае они должны точно отме- рять время появления каждого бита относительно начала слова. Для этого источник должен помечать начало слова так, чтобы получатель мог его распознать. Синхронная передача Чтобы проиллюстрировать работу синхронного канала, рассмот- рим схему на рис. 9.26. Схема рассчитана на слова из восьми битов, причем один бит — бит контроля по четности. В источнике предусмотрен сдвиговый регистр для преобразования параллельных данных в последовательную форму. Параллельный при- ем данных на регистр стробируется сигналом в линии «загрузка». Семь битов вводимой информации поступают на правые семь тригге- ров регистра. Генератор четности по этим семи информационным би- там формирует значение контрольного бита и подает его на вход вось- мого триггера в регистре. Генератор импульсов синхронизирует работу схем как на стороне источника, так и на стороне получателя. На стороне источника преду- смотрен трехбитовый счетчик, ведущий счет импульсов синхронизации по модулю 8. Состояние 7 на счетчике вызывает появление стробирую- щего сигнала «загрузка» по очередному синхроимпульсу. По этому сигналу происходит загрузка сдвигового регистра источника очеред- ным словом, представленным в параллельной форме на его входах. Во всех состояниях счетчика, отличных от 7, синхроимпульсы посту- пают на линию «сдвиг» сдвигового регистра. Таким образом происходит последовательная выдача восьми битов в линию данных канала. Самый правый бит попадает в канал сразу после загрузки сдвигового регистра при нулевом состоянии счетчика. Левый бит подается в канал после седьмого импульса сдвига. Получатель также имеет восьмибитовый сдвиговый регистр для приема последовательных данных из канала и преобразования их в параллельную форму. Данные из канала поступают на левый вход сдвигового регистра. Синхроимпульсы, посылаемые источником по второй линии канала, подаются в сдвиговый регистр получателя на линию «сдвиг». Таким образом, данные «вдвигаются» в регистр с левого конца.
13 № 592 ИСТОЧНИК ТРЁХБИТРВЫЙ СЧЕТЧИК Рис. 9.26, Синхронный последовательный канал передачи данных. ДетеКГпор нуля Слово получено Счет <21 G 1 Cl Мрос ТРЕХБИТОВЫЙ СЧЕТЧИК
386 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Так же как и на стороне источника, на стороне получателя есть трехбитовый счетчик, считающий синхроимпульсы по модулю 8. Пред- полагается, что счетчики с обеих сторон в некоторый момент были одновременно сброшены и, следовательно, считают согласованно. Каждый раз, когда счетчик получателя досчитывает до нуля, форми- руется сигнал «слово получено», означающий, что очередное слово находится на выходах триггеров сдвигового регистра. Схема контроля четности в получателе формирует сигнал ошибки, если получено слово с неправильной четностью. Канал, связывающий источник с получателем, может принадле- жать к одному из многих типов коммуникационных связей или носи- телей информации. Например, он может представлять собой две линии, связывающие порт ввода/вывода компьютера с периферийным устрой- ством, может оказаться сложной системой, использующей модуляторы и демодуляторы, в случае телефонного канала или радиоканала, или это может быть пара дорожек на кассетной магнитной ленте. Важно, что задержки, которые могут возникать в синхронном канале, одновре- менно и одинаково влияют и на данные, и на синхросигналы, сохраняя их относительные временные соотношения. Представленная на рис. 9.26 частная схема обладает синхронностью как в отношении отдельных битов, так и в отношении самих слов. Это действительно так, поскольку начало каждого слова строго привязано к каждому восьмому синхроимпульсу. Возможны схемы, синхронные в отношении битов и асинхронные в отношении слов. В таких случаях начало слова синхронизируется внешними импульсами. Асинхронная передача При асинхронной передаче данных канал работает асинхронно как в отношении битов, так и в отношении слов. Это означает, что об- щая синхролиния между источником и получателем, выделяющая моменты передачи отдельных битов, отсутствует, и передача слова мо- жет начаться в произвольный момент времени. Тем не менее начало слова должно быть каким-то образом отмечено, чтобы получатель мог определить момент появления каждого бита в слове. Стандартное решение проблемы заключается в обрамлении каж- дого слова стартовым и стоповым битами. Пока по каналу нет переда- чи слов, он находится в некотором состоянии, скажем в состоянии логической 1. Стоповому биту, завершающему слово, соответствует такое же значение 1. Тогда стартовому биту, начинающему слово, соответствует противоположное, нулевое значение. Таким образом, передний фронт стартового бита всегда вызывает переход состояния из 1 в 0 и может быть распознан получателем. Передний фронт стартового бита используется в получателей как признак начала слова, и как на- чало отсчета времени для определения моментов прихода отдельных битов в слове.
ПОЛУЧАТЕЛЬ источник Строб Примак Рис. 9.27. Асинхронный последовательный канал передачи данных. 9.8. ПОСЛЕДОВАТЕЛЬНЫЙ ВВОД/ВЫВОД
3SS ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Схема, реализующая передачу по асинхронному последовательно- му каналу, приведена на рис. 9.27. Она рассчитана на обработку слов, имеющих восемь информационных битов. Для упрощения схемы на ней не показаны компоненты контроля по четности. Как и в случае синхронной передачи, на обеих сторонах имеется по сдвиговому реги- стру для преобразования данных из параллельной в последователь- ную форму и обратно. Сдвиговый регистр источника десятибитовый; помимо восьми информационных битов, он вмещает стартовый и столо- вый биты. Информационные биты поступают на сдвиговый регистр параллель- но с буферного регистра. Буферный регистр в свою очередь получает их извне. Загрузка данных в буферный регистр стробируется внешним сигналом «строб загрузки буфера». Загрузка буфера может происхо- дить в то время, когда предыдущее слово сдвигается в сдвиговом ре- гистре. В этом случае передача слова из буфера в сдвиговый регистр произойдет сразу, как только последний освободится. Если же за- грузка данных в буфер произойдет в момент, когда сдвиговый регистр свободен, эти данные будут переданы в сдвиговый регистр ближайшим же синхроимпульсом. В качестве флага используется D-триггер, хра- нящий признак того, что буфер не содержит данных, готовых к переда- че. Этот триггер сбрасывается при загрузке буфера и устанавливается в 1 (синхроимпульсом при 0 = 1) в момент передачи содержимого буфе- ра на сдвиговый регистр. Импульсы, синхронизирующие работу схем источника, получают- ся путем деления частоты задающего генератора на 16. Как мы увидим в дальнейшем, это позволяет согласовать работу источника и полу- чателя. Число импульсов сдвига в источнике управляется декадным счет- чиком. Каждый импульс сдвига подается также и на его счетный вход. Состояние 9, соответствующее концу передачи слова, детектируется вентилем И. Выходной сигнал детектора девятки блокирует последую- щие импульсы сдвига и счета. В этом состоянии схема бездейст- вует. Когда схема бездействует, может произойти загрузка очередного слова из буфера в сдвиговый регистр. Это делается по импульсу, формирующемуся при наличии сигнала детектора девятки и заполнен- ности буфера. Декадный счетчик продвигается этим же импульсом и переходит в состояние 0. Сдвиговый регистр начинает «выдвигать» в канал новое слово. На стороне получателя биты принимаются на восьмибитовый сдви- говый регистр. Импульс сдвига подается примерно в середине интер- вала передачи бита. Импульс сдвига поступает и на сдвиговый ре- гистр, и на счетчик по модулю 9. Состояние этого счетчика перед нача- лом очередного слова равно 8. Первый же сдвиговый импульс переведет его в нуль, после чего он в конце слова снова досчитает до 8. Таким образом, «вдвинутыми» в сдвиговый регистр будут 9 битов, причем
9.8. ПОСЛЕДОВАТЕЛЬНЫЙ ВВОД/ВЫВОД 389 стартовый бит, пройдя через весь регистр, будет потерян на правом конце. Импульсы сдвига в приемнике формируются на счетчике делителя частоты задающего генератора на 16. В период бездействия канала этот счетчик поддерживается в сброшенном состоянии, и, пока он сброшен, импульсов сдвига нет. Как только по каналу приходит передний фронт стартового импуль- са, сигнал сброса счетчика делителя частоты принимает значение логи- ческого 0, и счетчик начинает считать. На седьмом импульсе формиру- ется сигнал сдвига, приходящийся примерно на середину стартового бита. Каждые 16 последующих импульсов формируется следующий импульс сдвига, приходящийся примерно на середину соответствую- щего информационного бита. Следует обратить внимание, что в том случае, когда после начала стартового бита, но еще до появления сдвигового импульса канал вернется в состояние 1, счетчик делителя частоты снова окажется сбро- шенным. Это будет означать, что за начало стартового сигнала была принята помеха в канале. Схема в этом случае снова перейдет в режим ожидания полноценного стартового сигнала. На стороне получателя также есть буферный регистр. В него загру- жается содержимое сдвигового регистра, если буфер свободен, а сдви- говый регистр заполнен. Признаки заполненности этих регистров хранятся на двух триггерах. Триггер заполненности сдвигового реги- стра — это триггер специального типа со входами S и /?, переключае- мыми фронтом импульса. Вход S возбуждается старшим разрядом счет- чика по модулю 9, когда в регистре сформировалось новое слово. Вход 7? возбуждается при передаче содержимого сдвигового регистра в бу- фер. Триггер заполненности буфера — это обычный D-триггер. Он сбрасывается внешним стробирующим сигналом, когда содержимое бу- фера считывается извне, и устанавливается в 1 (синхроимпульсом при £) = 1), когда в буфер загружается содержимое сдвигового регистра. Наличие буферов в источнике и получателе позволяет каналу работать с максимальной скоростью, предоставляя внешним устрой- ствам время (равное времени передачи 10 битов) для того, чтобы вы- дать или принять очередное слово. Когда в передаче участвует ком- пьютер, важно иметь это дополнительное время, поскольку для того, чтобы откликнуться на информацию о состоянии, например «буфер источника пуст» или «буфер получателя заполнен», компьютеру нужно время для выполнения соответствующих программ. Отметим, что источник и получатель синхронизируются от физи- чески разных генераторов. Они должны быть настроены на как можно более близкие частоты. Если эти частоты будут отличаться, то при передаче слова будет наблюдаться постепенный уход моментов сраба- тывания схем в получателе от середин интервалов, в которых переда- ются отдельные биты. От переднего фронта стартового бита схемы в получателе не должны уходить более чем на половину интервала* ко
390 ГЛ 9. ПОНЯТИЕ ИНТЕРФЕЙСА времени приема 10-го бита. Иначе они вообще уйдут за пределы ин- тервала десятого бита. Это означает, что различие в частотах не долж- ное превышать 5%. Промышленность выпускает модули, выполненные в виде интег- ральных схем и содержащие управляющие схемы, подобные описан- ным для работы с последовательными синхронными и асинхронными каналами как на стороне источника, так и на стороне получателя. Для организации двунаправленного канала на каждом его конце нужно иметь пару модулей двух разных типов. Передающий модуль, называемый трансмиттером, на каждой стороне соединяется с принимающим модулем, называемым ресивером, на противоположной стороне. Для тех случаев, когда каналом явля- ется носитель информации (например, кассетная магнитная лента), выпускаются модули, включающие схемы обоих типов. Существует много разновидностей подобных модулей, и часто они содержат компоненты, повышающие их универсальность. Один из модулей для асинхронной передачи, называемый универсальным асинхронным ресивером!трансмиттером (UART), можно запрограм- мировать для работы с 5-, 6-, 7- и 8-битовыми словами, с контролем по четности, по нечетности или без контроля, с одним или двумя стопо- выми битами. Программирование осуществляется подачей на определенные уп- равляющие линии потенциала высокого или низкого уровня. В модуле предусмотрены дополнительные линии состояния, на которые выда- ются сигналы о возможных ошибках, например «неверная четность», «ошибка кадра» (отсутствие стопового бита в тот момент, когда он должен быть), «перегрузка буфера» (данные поступают в трансмиттер слишком быстро или забираются из ресивера слишком медленно). Аналогичный модуль существует для синхронного режима передачи под названием универсальный синхронный ресивер /трансмиттер (USRT). Подобные модули выпускаются и для работы с конкретными микро- процессорами. Они обычно имеют тристабильные выходные линии, и поэтому их удобно подключать в качестве портов ввода/вывода. Выбор той или иной программируемой возможности в некоторых модулях осуществляется путем записи управляющих слов в специальные внутренние регистры, а не внешним монтажом управляющих линий. За счет этого удается сэкономить число внешних контактов мо- дуля. Для подключения к каналу, соединяющему источник с получателем, часто используются интерфейсные схемы, преобразующие электричес- кие сигналы в нужную форму. Для двунаправленных асинхронных ка- налов между терминалами и компьютером наиболее часто применяются интерфейсные схемы двух стандартных типов. В одной, предназна- ченной для телетайпов и подобных им устройств, логическая 1 ко- дируется током около 20 мА, а логический 0 — отсутствием тока.
9.9. СЕКЦИОНИРОВАННЫЕ МИКРОПРОЦЕССОРЫ 391 В другой, входящей в стандарт El A RS232C, логическая 1 кодируется напряжением —5В, а логический 0 — напряжением +5В. Для асинхронных каналов с большой протяженностью типа теле- фонных линий или внешних запоминающих устройств типа магнитным лент применяются модуляторы и демодуляторы различных видов. В частности, существуют модули, называемые модемами, содержащие модулятор и демодулятор для частотного кодирования данных при ра- боте с телефонными каналами. В таких модемах для передачи в каждом направлении используется своя полоса частот, поэтому одного телефон- ного канала достаточно для работы в обоих направлениях. В одной полосе единица обычно кодируется частотой 1270 Гц, а нуль — 1070 Гц. В другой полосе единице соответствует частота 2225 Гц, а нулю — 2025 Гц. Модемы нужны на обоих концах двуна- правленного канала. С помощью тех же модемов можно асинхронно записывать данные на обычныймагнитофон для записи звука, поскольку указанные выше частоты лежат в звуковой полосе. 9.9. СЕКЦИОНИРОВАННЫЕ МИКРОПРОЦЕССОРЫ Как мы уже говорили, микрокомпьютер — это модульная система, в которую входят микропроцессор, а также память и устройства ввода/ вывода. Микропроцессор для достижения большей гибкости, в свою очередь, может быть разбит на подмодули. В некоторых случаях часть микропроцессора, обрабатывающая данные, отделяется от части, обрабатывающей команды и управляющей последовательностью их выборки. Часть, обрабатывающая данные и состоящая из арифметико- логического устройства и различных регистров данных, в этом случае сама разбивается на несколько идентичных модулей. Каждый такой модуль, называемый микропроцессорной секцией, состоит из арифметико логического устройства и различных регистров определенной разряд- ности. Промышленность выпускает большое количество разнообразных микропроцессорных] секций, отличающихся структурой регистров и набором арифметических и логических функций. Поэтому практичес- ки невозможно построить модель, которая бы включала все многооб- разие существующих частных решений. Тем не менее, чтобы проиллю- стрировать общие концепции, мы рассмотрим упрощенную, но доста- точно представительную модель микропроцессорной секции. Модель, показанная на рис. 9.28, включает четырехбитовое АЛУ и «сверхоперативную», или рабочую, память на 16 слов по 4 бита. АЛУ выполняет восемь различных арифметических и логических действий над двумя четырехбитовыми операндами А и В и дает четы- рехбитовый результат. Выполняемое действие определяется тремя управляющими линиями /<0, /G и /(2 в соответствии с табл. 9.3. Шесть линий, связанных с АЛУ, позволяют соединять секции в каскады. Четыре линии свых, свх, Р и G служат для распространения переносов
392 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА Выходные данные Е 1_________________________________________________________________________________________________________________________________________________________________________________________________I Рис. 9.28. Модель микропроцессорной секции. при операциях сложения и вычитания; две оставшиеся линии SH и SL используются при передаче информации из секции в секцию при операциях сдвига. В частности, свх — это входная линия, несущая значение пере- носа или заема в младший бит, тогда как свых — это выходная линия, несущая значение переноса из старшего бита или значение заема в старший бит. Две выходные линии Р и G дают добавочную информа- цию о переносах, позволяющую соединять в каскады микропроцессор- ные секции вместе со схемами ускоренного переноса. Мы будем пред- полагать, что при реализации двух арифметических операций приме- няется рассмотренная в разд. 5.6 методика ускоренного переноса. Линии SH и SL двунаправленные. Линия SH содержит значение «вдвигаемого» слева бита при сдвиге вправо и «выдвигаемого» налево * бита при сдвиге влево. Линия SL содержит значение «вдвигаемого» 1 справа бита при сдвиге влево и значение «выдвигаемого» направо бита при сдвиге вправо.
9.9. СЕКЦИОНИРОВАННЫЕ МИКРОПРОЦЕССОРЫ 393 Таблица 9.3 Операции, выполняемые АЛУ микропроцессорной секции к2 X, Ко Операция Эффект операции 0 0 0 Сложение А и В Результат= А 4-В-]-свх, сВЬ1Х = конеч. перенос. 0 0 1 Вычитание В из Л Результат = А — В — свх, свых = конеч. заем. 0 1 0 И (Л и В) гi = Oi л Ь[. 0 1 1 ИЛИ (А и В) Ti — ai V b'i. 1 0 0 ИСКЛ. ИЛИ (А и В) ri — сц ф b{. 1 0 1 Сдвиг А влево 1 1 0 Сдвиг А вправо ri~ai + l *7=3, Гз = 5/;, .$£ = a0. 1 1 1 Передача А Результат = A. Обозначения: A = asa2a1aot B=b3b2b!b0 Результат= r3r2rir0. Предполагается, что рабочая память на 16 слов по 4 бита имеет три порта. Каждый порт представляет собой совокупность из четырех ли- ний для данных и четырех адресных линий, причем через каждый порт можно обратиться к любому из 16 слов независимо от обращений через другие порты. Через порты А и В данные читаются из рабочей памя- ти, а через порт С — записываются в нее. На выходах каждого из двух портов чтения непрерывно отслежи- ваются значения тех слов, адреса которых поданы на соответствующие адресные линии. Содержимое памяти изменяется только через порт С. Управляют записью данных через порт С две линии: «разрешение записи» и «синхр». Если линия «разрешение записи» содержит логичес- кую 1, то запись слова по адресу, заданному на адресных линиях, происходит по заднему фронту синхроимпульса. Два порта чтения А и В обеспечивают АЛУ двумя операндами А и В соответственно, а порт С получает результат операции из АЛУ. Операнд А в АЛУ может также поступать извне. Выбор порта А или внешних линий D в качестве источника операнда А осуществ- ляется селектором на два направления. Управляет этим селектором внешняя линия Е: внешние данные выбираются при единичном сигна- ле в этой линии. И наконец, 4 выходные линии данных подсоединены непосредственно к порту А рабочей память В итоге мы видим, что микропроцессорная секция способна выпол- нять операции над данными, находящимися в сверхоперативном ЗУ, и туда же возвращать результаты. Кроме того, операнд может посту* пать извне по четырем входным линиям, и данные из рабочей памяти могут быть переданы во вне по четырем выходным линиям. Выполняе- мая операция, источники операндов и место, куда помещается резуль- тат, определяются входящими в секцию управляющими линиями. Подавая соответствующие сигналы на эти линии, внешние схемы могут
394 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА управлять операциями в микропроцессорной секции. Таким образом, одну и ту же микропроцессорную секцию можно использовать в микро- компьютерах с различной структурой и функциями. В этом заключает- ся существенно большая гибкость и универсальность микропроцессор- ных секций по сравнению с законченными одномодульными микропро- цессорами. - Еще большую гибкость дает возможность объединять секции в каскады, чтобы обеспечить требуемую точность операций над данными. Несколько микропроцессорных секций можно объединить, связав линии сдвигов и переносов. Линия сдвига Sh одной секции всегда соединяется с линией SL соседней левой секции. Что касается перено- сов, то здесь возможны два варианта. Простейший состоит в соединении линии свых с линией свх соседней левой секции. Это приведет к покас- кадному последовательному распространению переносов от секции к секции. Для того чтобы реализовать в полном объеме преимущества, зало- женные в описанной микропроцессорной секции, следует восполь- зоваться схемой генератора сквозных переносов, рассмотренной в разд. 5.6. В этом случае схема генератора переносов получает сигналы по линиям Р и G от каждой секции и выдает сигналы на линии свх в каждую секцию. Линии свых не используются. Вариант каскадиро- вания секций с использованием генератора сквозных переносов приве- ден на рис. 9.29. Чтобы сформировать полный микропроцессор из секций, нужны дополнительные компоненты для управления потоком команд и для их дешифрации. В число дополнительных компонент должны входить программный счетчик, регистр команды, блок управления и синхрони- зации, дешифратор команды, возможно, стек и другие регистры для обеспечения интерфейсов с памятью и устройствами ввода/вывода. Вообще говоря, дополнительные компоненты должны обеспечи- вать чтение команды из главной памяти в соответствии с программным ПРИМЕЧАНИЕ'» Три адресные шины А, В и С и шесть управляющих линий /f2, К к /Го Синхр Разрешение записи а Е от каждой секции соединены вместе Рис. 9.29. Каскадирование микропроцессорных секций с использованием генератора сквозных переносов,
9.9. СЕКЦИОНИРОВАННЫЕ МИКРОПРОЦЕССОРЫ 395 счетчиком и занесение ее на регистр команды. Дешифратор команды вместе с блоком управления и синхронизации по содержимому реги- стра команды должен сформировать сигналы на управляющих и дру- гих входных линиях микропроцессорных секций, чехМ обеспечивается выполнение команды. Программный счетчик должен увеличиваться после чтения каждой команды и соответствующим образом изменяться при передачах управления. Реализация иллюстративного микропроцессора на микропроцессорных секциях В качестве примера рассмотрим, как можно было бы реализовать наш иллюстративный микропроцессор с применением модельных микропроцессорных секций. Для получения восьмибитового слова до- статочно соединить две секции. При этом мы имеем АЛУ и 16 общих регистров. Остальные компоненты должны содержать 16-битовый программный счетчик, стек из 64 слов по 16 битов, 8-битовый регистр команды, 16-битовый регистр адреса данных, дешифратор команды, триггер переноса, необходимые схемы синхронизации и управления, а также различные шинные вентили. Основные связи между этими компонентами показаны на рис. 9.30. На рисунке блок с названием «общие логические схемы» управляет потоками данных между различными компонентами. Временные сиг- налы он получает от блока, названного «схемы синхронизации и управ- ления». Блок «дешифратор команды» по содержимому регистра команды формирует управляющие сигналы в блок общих логических схем и в микропроцессорные секции. В микропроцессорные секции от де- шифратора команды поступают адреса Л, В и С операндов и результа- та в рабочей памяти, а также шесть управляющих сигналов: ^2, Ал, Ко, «разрешение записи», «синхр» и Е. В блок общих логических схем от дешифратора команды поступает либо информация, касающаяся из- менения программного счетчика (при командах переходов), либо инфор- мация о передачах данных в секции или из них. Моменты поступления той или иной информации зависят от сигналов, приходящих от схехМ синхронизации и управления. Как было только что сказано, схемы управления и синхрониза- ции задают моменты срабатывания других блоков. Эти же схемы полу- чают входные сигналы и формируют выходные сигналы управляющей шины. Центральной компонентой в блоке схем синхронизации и управ- ления является четырехбитовый счетчик, задающий временную после- довательность. Этот счетчик подключен к входной управляющей линии «такт» и увеличивается при каждом тактирующем импульсе. В конце каждой команды счетчик сбрасывается в нуль. По состоянию счетчика определяются моменты подачи синхроимпульсов на каждом шаге вы-
> л'М*йЖ'л’ -« . _ V ч .*«» ^кМММЧМ^^
9.9. СЕКЦИОНИРОВАННЫЕ МИКРОПРОЦЕССОРЫ 397 Рис. 9.31. Счетчик и дешифратор временной последовательности. полнения команды. Для этого четыре бита счетчика поступают на вход дешифратора «1 из 16», как показано на рис. 9.31. Сигналы на выходных линиях этого дешифратора, обозначенных St, стробируются тактовыми импульсами. Таким образом, в каждом такте выполнения команды импульс появляется только на одной вы- ходной линии дешифратора, соответствующей номеру тактирующего импульса от начала командного цикла. Сигналы S, поступают в блок общих логических схем и в блок дешифратора команды. В двух этих блоках по сигналам Sz в комбинациях с другими логическими сигнала- ми формируются сигналы, стробирующие различные передачи между регистрами и триггерами. Эти же сигналы в самом блоке схем син- хронизации и управления используются для формирования сигналов в линиях шины управления. Для того чтобы проиллюстрировать работу схемы в целом, рассмот- рим выполнение двух команд. Первые два такта одинаковы для всех команд, поскольку в это время код .операции команды еще только выбирается из главной памяти. Импульс So (передний его фронт) используется для установки адреса команды на адресные шины. Затем устанавливается логическая 1 на линии «чтение». В результате первый байт команды подается из главной памяти на шину данных. Затем по заднему фронту Sx стробируется прием содержимого шины данных на регистр команды. Дешифратор команды после этого определяет тип команды и сообщает блоку общих логических схем о необходимости
398 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА выбрать дополнительные байты, если команда состоит более чем из I одного байта. I Предположим, что выполняется команда ADC (сложение с регист- I ром и переносом). Поскольку это однобайтовая команда, дополнитель- I ные байты не выбираются. При следующем тактирующем импульсе I микропроцессорные секции осуществляют выполнение команды. Оно I сводится к сложению содержимого общего регистра 7? с содержимым аккумулятора, т. е. регистра 0. Результат должен быть направлен в аккумулятор. Чтобы осуществить все это, дешифратор команд подает значение 0000 в качестве адресов А и С и значение 7? в качестве адреса В. На управляющие линии Т<2, Ко подается комбинация 000, означаю- щая сложение, а на линию Е — логический 0, означающий, что вто- рой операнд нужно взять из порта А. Блок схем переноса получает указание подать значение триггера переноса на линию свх. И наконец, на линии «разрешение записи» устанавливается логическая 1. После всех этих установок импульс S2 подается на линию «синхр» микропроцессорных секций. Это приводит к записи вычисленной сум- мы в аккумулятор (т. е. в общий регистр 0). В тот же момент импульс подается в блок схем переноса для стробирования записи конечного переноса на триггер переноса. Одновременно происходит сброс счет- чика временной последовательности, поскольку выполнение команды завершено. В качестве второго примера рассмотрим команду безусловного перехода, в выполнении которой микропроцессорные секции никак не участвуют. После поступления первого байта на регистр коман- ды дешифратор сообщает общим логическим схемам о необходимости считать из главной памяти еще два байта. В результате второй байт выбирается из памяти и запоминается в старшей половине регистра адреса данных по импульсам S3 и S4 (они соответствуют первому и второму тактовым импульсам второго машинного цикла). Третий байт выбирается по импульсам Se и S7 (соответствующим первому и второму импульсам третьего машинного цикла) и запоминается в младшей половине регистра адреса данных. Выполнение команды завершается передачей нового содержимого регистра адреса данных на программ- ный счетчик по импульсу S8. Этим же импульсом S8 сбрасывается счет- чик временной последовательности. О применении микропроцессорных секций Можно сказать, что, вообще говоря, микропроцессорные секции ; предоставляют более гибкие возможности по сравнению с одномодуль- i ними микропроцессорами. В частности, секционирование позволяет | легко получить требуемую точность представления данных. Более | того, секции можно сгруппировать так, чтобы одновременно обрабаты- | вались разные компоненты векторной величины, и тем самым создать i
9.10. СИНХРОНИЗАЦИЯ МИКРОПРОЦЕССОРОВ 399 процессор, работающий с векторами, а не со скалярами. Меняя состав и функции других логических блоков, можно варьировать систему команд микропроцессора. Микропроцессоры, использующие секции, обычно оказываются и более быстродействующими по сравнению с одномодульными благодаря меньшей степени интеграции входящих в них схем. Тем не менее необ- ходимость подключать дополнительные схемы нужно отнести к недо- статкам секционирования. Чтобы как-то компенсировать этот недоста- ток, разработаны и выпускаются модули, управляющие последователь- ностью команд. Чтобы создать законченный микропроцессор из микро- процессорных секций, к такому модулю нужно добавить только регистр команды, дешифратор команд и другие регистры, специфичные для области приложения. Оставляя регистр команды и дешифратор вне модуля, мы сохраняем преимущества гибкости и универсальности* Общепринятый подход при создании модулей, управляющих по- следовательностью команд, сводится к выполнению команды как последовательности микрокоманд. Микрокоманды размещаются в специальной памяти, и их выборка и выполнение осуществляются аналогично обычным командам. Очередность выборки микрокоманд определяется модулем, управляющим последовательностью команд. Части каждой микрокоманды декодируются дополнительными схема- ми и задают сигналы, поступающие в микропроцессорные секции. Те же микрокоманды используются для работы с внешним программ- ным счетчиком и регистром команды в процессе обработки обычных команд. Обычные команды (те, которые входят в набор команд микропро- цессора) размещаются в главной памяти и выбираются из нее на регистр команды в соответствии с программным счетчиком. Осуществляет это последовательность из нескольких микрокоманд. После этого содержи- мое регистра команды используется как адрес микропрограммы, кото- рая специально написана для выполнения данной обычной команды. Таким образом, мы имеем дело с компьютером внутри компьютера, при- чем внутренний компьютер программируется при помощи микроко- манд таким образом, чтобы выполнять команды внешнего компьютера. Следует подчеркнуть, что микропрограммирование означает не программирование для микрокомпьютера, а реализацию набора ко- манд некоторого компьютера в виде совокупности микропрограмм. 9.10. СИНХРОНИЗАЦИЯ МИКРОПРОЦЕССОРОВ В отличие от нашего иллюстративного микропроцессора многие промышленные микропроцессоры нуждаются более чем в однофазной синхронизации. Импульсы в каждой отдельной синхронизирующей линии (в каждой фазе) имеют одну и ту же частоту. Поэтому взаимные временные сдвиги импульсов в разных фазах постоянны. Обычно раз- ные типы передач в микрокомпьютере синхронизируются разными фа*
400 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА зами. Например, регистры процессора могут быть построены на двух- тактных MS-триггерах. В этом случае одна фаза стробирует прием данных в ведущие секции триггеров, а другая — передачу из ведущих в ведомые. Одна из возможных схем формирования двух неперекрывающихся фаз синхроимпульсов с использованием одного генератора импульсов показана на рис. 9.32. Генератор подключен к входу синхронизации триггера Т-типа, на входе Т которого постоянно поддерживается логи- ческая 1. Таким образом триггер переключается при каждом импуль- се от генератора. Как прямой, так и инверсный выходы триггера поданы на вентили И, на вторые входы которых поступают импульсы от генератора. Выходы вентилей и являются линиями фаз. Когда выход Q равен логическому 0, импульс от генератора вызывает импульс на линии фазы 1. Когда выход Q равен логической 1, импульс от генера- тора вызывает импульс на линии фазы 2. Таким образом, импульсы появляются на линиях фаз поочередно. Промежуток между импульсами разных фаз определяется промежут- ком между импульсами генератора и, следовательно, может настраи- ваться в соответствии со специфическими требованиями конкретного микропроцессора. Частота импульсов в каждой фазе равна половине частоты генератора. Длительность импульсов фаз совпадает с длитель- ностью импульсов генератора. Более сложные временные соотношения между импульсами двух фаз можно получить с помощью схемы на рис. 9.33. В этой схеме им- пульсы от генератора поданы на счетный вход счетчика в коде Грея. Рис. 9.32. Схема делителя фаз синхроимпульсов,
УПРАЖНЕНИЯ 401 Рис. 9.33. Обобщенная схема делителя фаз синхроимпульсов. Синхроимпульсы в каждой фазе могут иметь произвольное относитель- ное расположение и длительность за счет комбинирования последова- тельных состояний счетчика. При этом используются специальные «помехоустойчивые» (hazard-free) комбинационные схемы п. Счетчик в коде Грея, применяющийся вместо обычного двоичного счетчика, позволяет уменьшить помехи, возникающие при одновре- менном переключении нескольких разрядов. При четырехбитовом счетчике частота генератора должна быть в 16 раз выше частоты импульсов синхронизации в обеих фазах. Приведенная схема допуска- ет простое обобщение на случай большего числа фаз путем увеличения числа комбинационных схем. УПРАЖНЕНИЯ 9.1. Постройте схему порта ввода для иллюстративного микропроцессора, вос- пользовавшись ТТЛ-вентилями с открытым коллектором вместо тристабильных формирователей. Проследите, чтобы входные данные не оказались инвертирован- ными. Предусмотрите схему детектирования кода устройства, равного 231в и выде- ленного порту. Включите в схему регистр, служащий источником входных данных. 9.2. Во многих задачах встречается функция, реверсирующая порядок разрядов в числе. Хотя это довольно несложная функция, реализовать ее в системе команд большинства микрокомпьютеров не так уж просто. В то же время ее можно легко реализовать с помощью команд ввода/вывода. Спроектируйте устройство для иллюстративного микропроцессора с вводным и выводным портом, решающее эту задачу. Устройство должно быть таким, что, послав С устройством таких схем читатель может познакомиться по книгам, посвя- щенным теории переключательных схем.
402 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА восьмибитовое число в порт вывода, мы могли бы ввести из порта ввода то же число, но с битами в противоположном порядке. Оба порта должны иметь код устройства В21б. Регистры портов вводите только в том случае, если они действительно необ* ходимы. 9.3. К иллюстративному микропроцессору требуется подключить устройство, имеющее 8 источников вводимых данных по 8 бит каждый. Спроектируйте интерфейс, обеспечивающий выбор и подключение источника к шине данных, используя дешиф- ратор «1 из 8» и восемь наборов тристабильных формирователей. 9.4. Спроектируйте интерфейс для упр. 9.3, воспользовавшись восьмибитовым селектором на 8 направлений и одним набором из восьми тристабильных формиро- вателей. 9.5. Интерфейс для упр. 9.3 измените таким образом, чтобы восемь источников данных опрашивались циклически по очереди. Вместо того чтобы иметь индивиду- альный код устройства на каждый источник, используйте только один код (например, 4916) для всех источников. Сделайте так, чтобы при каждом следующем задании этого кода в команде ввода выбирался следующий по очереди источник. В качестве указа- теля на очередной источник можно применить трехбитовый счетчик. Спроектируйте схему такого интерфейса, используя трехбитовый счетчик, дешифратор «1 из 8», три- стабильные формирователи и необходимые вентили. 9.6. Спроектируйте схему интервального таймера для иллюстративного микро- процессора. Схема для отсчета интервала времени должна содержать двоичный вычи- тающий счетчик. Загрузка начального значения на счетчик должна происходить через порт вывода. После этого счетчик должен считать до нуля импульсы от стабильного генератора и, достигнув нуля, устанавливать флаг состояния. В качестве флага состояния используйте бит в некотором порту ввода. С помощью такого ин- тервального таймера программа могла бы определять момент некоторого события (например, операции ввода) относительно какого-то другого момента времени (на- пример, предыдущей операции ввода). Схема должна содержать восьмибитовый вычи- тающий счетчик, подключенный к нему порт вывода, флаг состояния и схему декоди- рования кода устройства. Обратите внимание, что флаг состояния нужно сбрасывать в момент загрузки счетчика и устанавливать в 1, когда счетчик достигает нуля. 9.7. Спроектируйте таймер, аналогичный упр. 9.6, но так, чтобы при достижении счетчиком нуля посылался запрос на прерывание, а не устанавливался флаг состоя- ния. При этом программе не нужно будет непрерывно опрашивать флаг состояния* Схема таймера должна в ответ на подтверждение прерывания выдавать на шину дан- ных адрес 4816 в качестве начальной точки программы, обрабатывающей данное пре- рывание. 9.8. Рассмотрим приложение иллюстративного микропроцессора к задаче управления двигателем и ходовой частью автомобиля. Предположим, что в число за- дач микропроцессора входит слежение за четырьмя параметрами и принятие мер, если возникают следующие критические ситуации: 1. Температура двигателя превысила предел. 2. Дымность выхлопа превысила предел. 3. Давление в тормозной системе ниже нормы. 4. Скорость вышла за допустимые границы. Каждая из перечисленных ситуаций должна вызывать прерывание и выполнение программы, принимающей соответствующие меры. Присвойте этим четырем ситуациям приоритеты и спроектируйте схему, которая будет возбуждать запрос на прерывание, если возникает хотя бы одна критическая ситуация. Предусмотрите, чтобы схема в ответ на сигнал подтверждения прерывания от микропроцессора посылала на шину данных адрес программы, обрабатывающей данное прерывание. Для организации приоритетов воспользуйтесь схемной приори- тетной цепочкой. Считайте, что каждая критическая ситуация вызывает появление ло*
УПРАЖНЕНИЯ 403 гической 1 на отдельной линии. Не вводите внешних триггеров для маскирования этих прерываний. Наконец, не пользуйтесь портами ввода/вывода. 9.9. В разд. 9.3 были выведены выражения для шифратора приоритетов на восемь входов. Шифратор выдавал на выходе трехбитовый номер, соответствующий самой приоритетной возбужденной (содержащей логическую 1) входной линии. Расширьте результат на случай 16 входных и 4 выходных линий. Другими словами, выпишите выражения для каждого из четырех выходов так, чтобы получаемый на них номер со- ответствовал номеру самой приоритетной из возбужденных входных линий. 9.10. Очень часто шифратор приоритетов, подобный описанному в упр. 9.9, реализуется не на вентилях, а с помощью постоянной памяти. Выпишите таблицу ис- тинности для такого шифратора на 4 входа и 2 выхода. 9.11. Спроектируйте систему памяти для иллюстративного микропроцессора, состоящую из 1024 слов ПЗУ, начинающихся с адреса 0, вслед за которыми идут 512 слов ОЗУ. В нашем распоряжении имеются модули тех же типов, что в прототипе на рис. 9.8: 1. ПЗУ 512 словХ4 бита. 2. ОЗУ 128 словХ8 битов. 9.12. Для каждого из приведенных ниже модулей оперативной памяти найдите максимальную частоту синхронизации в иллюстративном микропроцессоре, при ко- торой все временные требования будут удовлетворены. За справками о синхрониза- ции работы микропроцессора обратитесь к рис. 9.13 и 9.14. Задержками в вентилях интерфейса можно пренебречь. Считайте, что для модулей важны лишь следующие параметры: время выборки Тв, время предустановки адреса Тпа, время предуста- новки данных Тпд, время задержки снятия данных Тзсд. Смысл этих парамет- ров проиллюстрирован на рис. 9.11 и 9.12. Рассмотрите модули памяти со следую- щими значениями параметров (в микросекундах): 1. Тв=1.2; 7па=1.0; 7пд=1.0; ТЗСд=0.05 2. Тв=0.9; Тпа=1-5; Гпд=2.0; Гзсд=0.8 3. Тв=0.5; Тпа—1-2; Гпд=2.0; Гзсд=0.1 4. Тв=0.8; Тпа:=1.4; Тпд=1.6; Тзсд=0.2 9.13. Спроектируйте пульт управления универсального компьютера, построен- ного на основе иллюстративного микропроцессора. Пульт должен содержать пере- ключатели и индикаторы, с помощью которых можно было бы занести слово в любую ячейку памяти и узнать содержимое любой ячейки памяти. Нужно воспользоваться средствами прямого доступа к памяти. На пульте должно быть 16 ключей для набора адреса, 8 ключей для набора данных, 8 индикаторов для данных, 1 ключ для актива- ции линии ПДП, 1 ключ для указания занесения в память. Сигнал разрешения на переключатели адреса и данных нужно взять с линии ППДП от микропроцессора. При работе с пультом нужно прежде всего включить ключ ПДП. После этого можно, набирая любой адрес, видеть содержимое ячейки с этим адресом на инди- каторах. Ключ занесения в память должен быть при этом выключен. Для занесения в память нужно набрать адрес, набрать данные на соответствующих ключах и затем кратковременно замкнуть ключ занесения в память. Другие функции пульта, такие, как пуск, индикация и изменение регистров и т. д., не рассматривайте. 9.14. Для того чтобы преобразовать время суток, выраженное в цифровой форме с указанием часа, минуты и секунды, в аналоговое напряжение, пропорциональное времени, истекшему от начала суток, нужен специальный цифро-аналоговый преоб- разователь. Считая, что каждая из временных единиц представлена двумя двоично- кодированными цифрами, постройте ЦА-преобразователь с помощью операционного усилителя и правильно подобранных резисторов. Помните, что время представлено в системе со смешанным основанием. Некоторые цифры десятичные, а некоторые — шестеричные.
404 ГЛ. 9. ПОНЯТИЕ ИНТЕРФЕЙСА 9.15. Спроектируйте двухразрядный аналого-цифровой преобразователь в коде 8421 BCD с помощью реверсивного счетчика. 9.16. Напишите программу для иллюстративного микропроцессора, осуществ- ляющую с помощью схемы рис. 9.25 аналого-цифровое преобразование. Программа должна реализовывать метод последовательных приближений. Преобразование долж- но производиться для всех восьми показанных на рисунке каналов, и результаты должны быть помещены в отведенные ячейки памяти. 9.17. Спроектируйте ресивер и трансмиттер для последовательного канала, синхронного по битам и асинхронного по словам. В таком канале есть общий для ре- сивера и трансмиттера генератор синхроимпульсов, определяющий моменты пере- дачи битов, но передача слова может начинаться на любом синхроимпульсе. Слово на- чинается со стартового бита (логический 0), за которым идут 8 информационных битов, сопровождаемых стоповым битом (логическая 1). В предположении, что фор- матированное слово уже находится в сдвиговом регистре, передача начинается при возбуждении некоторой управляющей линии в трансмиттере. Ресивер ждет прихода по каналу стартового бита, после чего начинает «вдвигать» последующие биты в сдви- говый регистр. Счетчики в ресивере и трансмиттере отсчитывают число обработанных битов и своевременно останавливают процессы сдвига. 9.18. Микропроцессорные секции, рассмотренные в разд. 9.9, можно соединять в каскады, чтобы работать с числами нужной точности. Их можно объединить и дру- гим способом для параллельной обработки данных. Один из подходов заключается в том, чтобы использовать несколько секций для выполнения операций над векторами. В этом случае одна или несколько секций отводится на каждую компоненту вектора таким образом, чтобы вся векторная операция выполнялась за время обработки одной компоненты. Предположим, что нам нужна система обработки векторов из трех восьмибитовых компонент. Покажите, какими способами из четырехбитовых микропроцессорных секций, описываемых моделью на рис. 9.28, можно создать вычислительную часть такой системы. 9.19. Проанализируйте схему делителя фаз на рис. 9.32. Постройте временную диаграмму импульсов обеих фаз и импульсов генератора для трех значений скважно- сти 25, 50 и 75 процентов. Скважностью генератора называется доля времени, в тече- ние которого его выход имеет значение логической 1.
Глава 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Чтобы лучше представить себе взаимодействие компонент, составляю- щих микрокомпьютерную систему, рассмотрим три прикладные зада- чи. Задачи носят иллюстративный характер и потому несколько упрощены, но тем не менее мы надеемся, что в них нашли отражение типичные черты реальных микрокомпьютерных систем. При выборе задач мы стремились показать разнообразие форм ввода/вывода. Во всех трех случаях в основу системы положен иллюстративный микро- процессор и рассматриваются вопросы создания нужной конфигурации, проектирования интерфейсов и программирования п. 10.1. ЭЛЕКТРОННЫЕ ВЕСЫ Первое применение микропроцессора связано с весами, которые можно встретить в продовольственном магазине или в любом другом месте, где продаются товары по весу. Задача состоит в индикации веса товара и его цены в цифровой форме. Входная информация поступает в двух формах: (1) аналоговая величина, соответствующая весу, и (2) цифровая величина, соответствующая цене за килограмм. Напряжение, пропорциональное весу товара, берется с датчика давления. Это напряжение преобразуется в микропроцессоре к двоично-кодированно- му десятичному весу в коде 8421 BCD, который умножается на двоично- кодированную десятичную цену за килограмм, вводимую в микропро- цессор с десятипозиционных наборных переключателей. Для этих двух операций, аналого-цифрового преобразования и умножения, по суще- ству, и применяется микропроцессорная система. Мы должны сделать предположения о диапазонах изменения вход- ных величин. Будем считать, что вес лежит в диапазоне от 0.00 до 9.99 кг, а цена за кг заключена в диапазоне от 0.00 до 9.99 руб. Каждое из чисел, таким образом, будет представлено тремя десятичными циф- рами. Итоговая стоимость, таким образом, могла бы лежать в диапа- зоне от 00.0000 до 99.8001 руб. Однако, поскольку цены обычно округ- ляются до копеек, итоговая стоимость будет представлена четырьмя десятичными цифрами. Приводимые в этой главе программы не претендуют на высокую эффективность. При их составлении основное внимание уделялось простоте и наглядности.
406 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ В микрокомпьютере каждая двоично-кодированная десятичная циф- ра будет размещаться в отдельном восьмибитовом слове. Это может показаться расточительным, поскольку для цифры достаточно 4 битов. Тем не менее возможность отдельно обрабатывать каждую цифру су- щественно упрощает программирование. Цифра всегда будет распо- лагаться в младших 4 битах слова. Электронные весы работают следующим образом. Датчик давления воспринимает вес положенного на весы товара и формирует напряже- ние, пропорциональное весу. Напряжение усиливается и поступает на компаратор. Преобразование аналогового сигнала веса в цифровую форму осуществляется с участием микропроцессора и является частью процесса ввода значения веса. Процедура преобразования сводится к последовательному подбору битов для каждой цифры. Цифры испытуемого числа заносятся на три четырехбитовых регистра вывода. Число преобразуется в аналоговую форму и сравнивается с входным напряжением, соответствующим измеряемому весу. Однобитовый результат сравнения (больше/мень- ше) — вот и вся информация, вводимая в микрокомпьютер в связи с измерением веса. По результату сравнения уточняется очередное пробное значение веса. Завершив подбор значений всех битов, микро- процессор получает вес товара в коде BCD. Затем каждая из трех цифр веса выводится на дополнительные индикационные регистры. Трехразрядный вес умножается на трехразрядный множитель, являющийся ценой за 1 кг товара. Множитель поступает в микропро- цессор с трех наборных колес цифра за цифрой по ходу умножения. В произведении сохраняются только 4 старшие цифры. Эти цифры выводятся на 4 индикационных регистра как итоговая стоимость то- вара. Вся совокупность описанных действий непрерывно повторяется. Блок-схема Алгоритм работы во всех деталях представлен на рис. 10.1 в виде блок-схемы. Она начинается с блока «Сброс, пуск», в котором в микро- процессор посылаются управляющие сигналы «Сброс» и «Пуск». Это делается после включения питания и вызывает запуск выполнения программы с нулевой ячейки. Затем идут три цикла, в каждом из кото- рых методом последовательных приближений подбирается значение одной из трех цифр веса. Будем вес обозначать через W, а отдельные цифры веса (слева направо) — через Ц7Н, и W\.. В каждом цикле работа начинается с некоторого начального зна- чения всех трех цифр веса. Подбор значений битов в каждой цифре начинается со старшего бита, установкой его в 1 и сравнением преоб- разованного в аналоговую форму веса с фактически измеренным весом. Если выясняется, что испытуемое значение веса велико, бит сбрасы- вается в 0. Следует обратить внимание, что при таком методе подбора
10.1. ЭЛЕКТРОННЫЕ ВЕСЫ 407 в испытуемом числе могут появиться цифры, превышающие 9, т. е. недопустимые. Но если предполагать, что ЦА-преобразователь спосо- бен работать с цифрами, большими 9, то в результате сравнения в та- ких случаях всегда будет оказываться, что испытуемое число велико. Следовательно, подбираемый бит будет сбрасываться, и в конце кон- цов все десятичные цифры окажутся в допустимых пределах. Указателем позиции подбираемого бита служит индекс L Его начальное значение 8 соответствует весу старшего бита в десятичной цифре. При переходе в цикле к каждому следующему биту значение i делится пополам. Как показывают скобки [ ], сохраняется только це- лая часть частного, поэтому после обработки четырех битов индекс i примет нулевое значение. По этому условию происходят выходы из циклов. После отыскания всех трех десятичных цифр веса эти цифры выводятся на индикационные регистры. Последующая часть блок-схемы соответствует умножению веса на цену за 1 кг. Десятичные цифры итоговой стоимости будем обо- значать через Р с индексом, соответствующим старшинству цифры. Таким образом, итоговая стоимость Р будет выражаться в рублях как Младшие две цифры не индицируются и по- этому отбрасываются в процессе умножения сразу после того, как учтено их влияние на более старшие цифры. Цифры множителя, т. е. цены за кг, обозначены через М с индексами Н, М и L. Таким образом, цена за 1 кг представляется в виде Путем умножения трехразрядного веса на каждую цифру множителя получаются три частных произведения. Каждое частное произведение цифра за циф- рой по мере их получения прибавляется к сумме предыдущих частных произведений. Сумма частных произведений накапливается в цифрах Р5, Р^ Рз и Р2, которые в конце дают итоговую стоимость товара. Рис. 10.1 содержит также блок-схему программы УМНЦИФ, которая осуществляет умножение на одну цифру. Цифра множителя обозначена как ЦИФ. Подпрограмма начинается со сдвига четырех цифр, образующих предыдущую частную сумму, на один разряд вправо. При этом младшая цифра теряется, а старшая становится равной нулю. За счет сдвига происходит выравнивание разрядов предыдущих частных произведений по отношению к текущему. Те- кущее частное произведение равно результату умножения веса на ЦИФ. Фактически вес прибавляется к частной сумме столько раз, каково значение ЦИФ. Процесс прибавления идет цифра за цифрой для четырех цифр в коде 8421 BCD. Сложение в первых трех разрядах осуществляется аналогичными сегментами блок-схемы. Сначала в каждом разряде в двоичном виде складывается цифра веса с соответствующей цифрой произведения с учетом переноса из предыущего разряда. После этого, если нужно, корректируется результат. Для этого делается проверка, не превы- шает ли полученная цифра 9, и, если это так, из нее вычитается 10, а значение переноса устанавливается равным 1. В четвертом разряде
408 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Рис. ЮЛ. Блок-схема алгоритма «электронные весы». цифра веса равна 0, поэтому к ней только прибавляется перенос из третьего разряда. После сложения во всех четырех разрядах значение ЦИФ умены шается на 1. Если в результате получается 0, то происходит выход, из подпрограммы; в противном случае сложение повторяется. В главной блок-схеме подпрограмма УМНЦИФ используется следующим образом. Сначала четыре цифры произведения устанавли-, ваются равными нулю. Затем в каждом из трех аналогичных сегмен-
10.1. ЭЛЕКТРОННЫЕ ВЕСЫ 409 тов блок-схемы очередная цифра множителя заносится в ЦИФ и происходит обращение к подпрограмме УМНЦИФ. После выполнения всех трех сегментов цифры Р5, Р4, Р3 и Р2 будут содержать произ- ведение. Значения этих цифр выводятся для индикации в качестве итоговой стоимости товара, после чего весь алгоритм повторяется. Интерфейсы ввода/вывода Необходимые компоненты ввода/вывода и их взаимосвязи пока- заны на рис. 10.2. Как легко видеть, на нем 4 порта ввода и 10 портов вывода. Для выборки портов применяется дешифратор «1 из 10». Основные четыре входные линии дешифратора подключены к четырем младшим линиям адресной шины. Кроме того, в дешифраторе имеется линия разрешения, на которой должна быть логическая 1, чтобы одна из выходных линий приняла значение логической 1. На линию разрешения подается логическое И от инверсий ос- тальных четырех линий адресной шины, входящих в код устройства. Следовательно, выходы дешифратора будут возбуждаться от первых десяти шестнадцатеричных кодов устройства от 00 до 09. Выходные линии дешифратора обозначены через $ с индексом, соответствующим коду устройства. Один порт ввода выделен для однобитового результата сравнения пробного значения веса с измеренным. Этот порт имеет код устройства Оби и состоит из тристабильного формирователя, через который выход компаратора подключается к младшему биту шины данных. На линию разрешения тристабильного формирователя подается логическое И от линии So дешифратора портов и линии «ввод» шины управления. Три порта ввода служат для ввода трех цифр множителя Л4Н, /Им, и набираемых на десятипозиционных переключателях. Этим пор-
ГЛ 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ
10.1. ЭЛЕКТРОННЫЕ ВЕСЫ 411 там присвоены шестнадцатеричные коды устройств 01, 02 и 03. В каж- дом из портов по четыре тристабильных формирователя, управляемых сигналами И от соответствующей линии дешифратора портов и управ- ляющей линии «ввод». Десятипозиционные переключатели выдают четырехбитовый код десятичной цифры, соответствующей позиции переключателя. Коди- рование цифр возможно при наличии в переключателе достаточного числа полюсов. На рис. 10.3 показан один из возможных способов кодирования при трехполюсном переключателе. Все порты вывода имеют четырехбитовые регистры для приема информации с четырех младших линий шины данных. Сигнал «разре- шение загрузки» на каждый регистр получается как логическое И от сигнала на соответствующей выходной линии дешифратора портов и сигнала на управляющей линии «вывод». Три порта вывода с шест- надцатеричными кодами устройств 00, 01 и 02 получают цифры проб- ного веса. Эти цифры подаются на вход цифро-аналогового преобра- зователя в коде BCD, который формирует напряжение, пропорцио- нальное пробному весу. Цифро-аналоговый преобразователь содержит три четырехбитовые резисторные «лестницы», по одной на каждую цифру, и трехвходовый сумматор на операционном усилителе. Резисторные лестницы (или аттенюаторы) дают на выходе напряжения, пропорциональные зна- чениям цифр, а сумматор умножает каждое из этих напряжений на соответствующую степень десятки и суммирует результаты. Входные резисторы сумматора определяют коэффициенты, на которые произ- водится умножение. Эти резисторы подобраны с учетом внутреннего сопротивления каждой «лестницы», равного R/3. Как легко видеть, эффективные сопротивления входов сумматора для старшей, средней
412 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Таблица 10,1 Программа для электронных весов Распределение общих регистров: Rx: индекс i R6: Р5\ Ra: Константа 1О1о R2: цифра множителя R7: Р41 Итпго„яя гтпимпгть Rb = Константа 011в R3: Гн 1 Re: р31Итоговая стоимость rc: Константа 0Fle R4: Гм > Вес. R,: P2J R5: Гь J Ячейка памяти Команда на машинном языке Команда в символи- ческой форме Комментарий 0000 6А IRI А 0001 0А ОА 0002 6В LRI В 0003 01 01 0004 6С LRI С 0005 0F 0F 0006 Е0 XOR 0 0007 FE OUT 0008 01 01 0009 FE OUT 000А 02 02 000В 61 LRI 1 ооос 08 08 000D 23 MOV I to 3 000Е 13 MOV 0 from 000F FE OUT 0010 00 00 ООН FD INP 0012 00 00 0013 СВ AND В 0014 79 JAZ 0015 00 00 0016 1А 1A 0017 13 MOV 0 from 0018 А1 SUB 1 0019 03 MOV 0 to 3 001А 11 MOV 0 from 001В F4 RSC 001С F2 RTR 001D 01 MOV 0 to 1 001Е D3 OR 3 001F 03 MOV 0 to 3 0020 FE OUT 0021 00 00 0022 7С JCZ 0023 00 00 0024 11 11 0025 61 LRI 11 0026 08 08 Загрузка констант в регистры. Очистка аккумулятора. Вывод нулей в качестве пробных зна- чений 1Гм и Fh. Установка 8 в i. Установка И7н, равного I, как внутри процессора, так и на внешних схемах. Начало цикла 1: ввод и выделение результата аналогового сравнения. Проверка результата сравнения. Рели пробный вес не велик, обход сброса бита Сброс в U?h бита, соответствующего значению t, поскольку пробный вес велик Изменение i. Установка переноса, если i становится равным 0. Установка в IV'н бита, соответствую- щего i. Вывод нового IV'н ДЛ1 пробы. Проверка t—(Р Если нет — повторение цикла; если да —на обработку Wм- Установка 8 в i. ’
10.1. ЭЛЕКТРОННЫЕ ВЕСЫ 413 Таблица 10.1 (продолжение) Команда на машинном языке Ячейка памяти Команда в символи- ческой форме Комментарий 0027 24 MOV 1 to 4 Установка 8 в как внутри, так и 0028 14 MOV 0 from 4 вовне. 0029 FE OUT 002А 01 01 002В FD INP Начало цикла 2: ввод и выделение 002С 00 00 результата аналогового сравнения. 002D СВ AND В 002Е 79 JAZ Проверка результата сравнения. Если 002F 00 00 пробуемый вес не велик, обход 0030 34 34 сброса бита. 0031 14 MOV 0 from 4 Сброс в Wy\ бита, соответствующего 0032 А1 SUB 1 значению i, поскольку пробный вес 0033 04 MOV 0 to 4 велик 0034 11 MOV 0 from 1 Изменение i. Установка переноса, 0035 F4 RSC если i становится равным 0. 0036 F2 RTR 0037 01 MOV 0 to 1 0038 D4 OR 4 Установка в Wбита, соответствую- 0039 04 MOV 0 to 4 щего i 003А FE OUT Вывод нового №м Для прсбы. 003В 01 01 003С 7С JCZ Проверка / = 0? Если нет —повторе- 003D 00 00 ние цикла 2; 003Е 2В 2B если да —на обработку IFl- 003F 61 LRI 1 Установка 8 в i. 0040 08 08 0041 25 MOV 1 to 5 Установка 8 в IFl как внутри, так н 0042 15 MOV 0 from 5 вовне. 0043 FE OUT 0044 02 02 0045 FD INP Начало цикла 3: ввод и выделение 0046 00 00 результата аналогового сравнения. 0047 СВ AND В 0048 79 JAZ Проверка результата сравнения. 0049 00 00 Если пробуемый вес не велик, об- 004А 4Е 4E ход сброса бита. 004В 15 MOV 0 from 5 Сброс н IFl бита, соответствующего 004С А1 SUB 1 значению i, поскольку пробуемый 004D 05 MOV 0 to 5 вес велик. 004 Е И MOV 0 from 1 Изменение i. Установка переноса, 004F F4 RSC если i становится равным 0. 0050 F2 RTR 0051 01 MOV 0 to 1 0052 D5 OR 5 Установка в W’l бита, соответствую- 0053 05 MOV 0 to 5 щего /. 0054 FE OUT Вывод нового IFl для пробы. 0055 02 02
414 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Таблица 10.1 (продолжение) Команда на машинном языке Ячейка памяти Команда в симво- лической форме Комментарий 0056 7С JCZ Проверка i = 0? 0057 00 00 Если нет — повторение цикла 3; 0058 45 45 если да—на вывод веса. 0059 13 MOV 0 from 3 Вывод 1ГН для индикации. 005А FE OUT 005В 03 03 005С 14 MOV 0 from 4 Вывод Wm. Для индикации. 005D FE OUT 005Е 04 01 005F 15 MOV 0 from 5 Вывод IFl для индикации. 0060 FE OUT 0061 05 05 0062 Е0 XOR 0 Начало умножения: Засылка 0 как 0063 06 MOV 0 to 6 начальных значений цифр произве- 0064 07 MOV 0 to 7 дения. 0065 08 MOV 0 to 8 0066 09 MOV 0 to 9 0067 FD INP Ввод и выделение Ml как цифры мно- 0068 03 03 жителя для подпрограммы. 0069 сс AND C 006А 02 MOV 0 to 2 006В 7F JMS Обращение к УМНЦИФ для получе- 006С 00 00 ния первого частного произведения. 006D 8В 8B 006Е FD INP Ввод и выделение Мц как цифры 006F 02 02 множителя для подпрограммы. 0070 СС AND C 0071 02 MOV 0 to 2 0072 7F JMS Обращение к УМНЦИФ: получить 0073 00 00 сумму первого и второго частного 0074 8В 8B произведения. 0075 FD INP Ввод и выделение Л4н как цифры 0076 01 01 множителя для подпрограммы. 0077 СС AND C 0078 02 MOV 0 to 2 0079 7F JMS Обращение к УМНЦИФ: 007А 00 00 получить полное произведение. 007В 8В 8B 007С 16 MOV 0 from 6 Вывод Р5 для индикации. 007D FE OUT 007Е 06 06 007F 17 MOV 0 from 7 Вывод Р4 для индикации. 0080 FE OUT 0081 07 07 0082 18 MOV 0 from 8 Вывод Р3 для индикации. 0083 FE OUT 0084 08 08 । 0085 19 MOV 0 from 9 Вывод Рг для индикации.
ЮЛ. ЭЛЕКТРОННЫЕ ВЕСЫ 415 Таблица 10.1 (продолжение) Команда на машинном языке Ячейка памяти Команда в символи- ческой форме Комментарий 0086 FE OUT 0087 09 09 0088 7В JMP Переход на начало программы. 0089 00 00 008А 06 06 008В 18 MOV 0 from 8 Начало подпрограммы УМНЦИФ: 008С 09 MOV 0 to 9 Сдвиг цифр произведения Р5Р4, Ри 008D 17 MOV 0 from 7 Р2, на один разряд вправо. Преж- 008Е 08 MOV 0 to 8 нее значение Р2 теряется. Р5 стано- 008 F 16 MOV 0 from 6 новится равным 0. 0090 07 MOV 0 to 7 0091 66 LRI 6 0092 00 00 0093 12 MOV 0 from 2 Проверка цифры множителя, равна 0? 0094 79 J AZ Если нет, продолжить сложения; 0095 00 00 если да — на выход из подпрограммы. 0096 В9 B9 0097 19 MOV 0 from 9 Двоичное сложение W l с Р2. 0098 85 ADD 5 0099 09 MOV 0 to 9 009А АА SUB A Проверка, результат превышает 9? 009В 78 JCN Если да, вычитание 10 и установка 009С 00 00 триггера переноса. 009D 9F 9F 009Е 09 MOV 0 to 9 009F F3 CMC 00А0 18 MOV 0 from 8 Сложение IFm, и переноса, 00А1 94 ADC 4 00А2 08 MOV 0 to 8 00A3 АА SUB A Проверка, результат превышает 9? 00А4 78 JCN Если да, вычитание 10 и установка 00А5 00 00 триггера переноса. 00А6 А8 A8 00А7 08 MOV 0 to 8 00А8 F3 CMC 00А9 17 MOV 0 from 7 Сложение ?з и переноса. 00AA 93 ADC 3 00AB 07 MOV 0 to 7 ООАС АА SUB A Проверка, результат превышает 9? 00AD 78 JCN Если да, вычитание 10 и установка ООАЕ 00 00 триггера переноса. 00AF В1 Bl оово 07 MOV 0 to 7 00В1 F3 CMC 00В2 Е0 XOR 0 Сложение Р5 и переноса. Результат 00B3 96 ADC 6 не может превысить 9. 00В4 06 MOV 0 to 6
416 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Таблица 10.1 (продолжение) Ячейка памяти Команда | на Команда в символн- машинном ческой форме Комментарий языке 00В5 00В6 00В7 00В8 00В9 F6 DHL Уменьшение на 1 цифры множителя. 7В JMP На проверку равенства цифры мно- 00 00 жителя 0; повторить процесс сло- 93 93 жения, если не 0. F8 RET Выход из подпрограммы. и младшей цифр равны соответственно R, 10/? и 100/?, т. е. находятся в нужных отношениях. Следующие три порта вывода, имеющие коды устройств 03, 04 и 05, воспринимают цифры веса, которые должны подаваться на инди- каторы. Код каждой цифры подается на специальный дешифратор, управляющий семисегментным цифровым индикатором. Остальные четыре порта вывода, имеющие коды 06, 07, 08 и 09, получают и ин- дицируют цифры итоговой стоимости товара. Обратите внимание, что все схемы ввода/вывода связаны с мик- ропроцессором только младшими восемью линиями адресной шины, младшими четырьмя линиями шины данных и управляющими линиями «ввод» и «вывод». Программа В табл. 10.1 приведена программа, реализующая алгоритм, пред- ставленный в виде блок-схемы на рис. 10.1. Программа практически не отклоняется от блок-схемы и содержит детальный комментарий. Обратите внимание, что программа занимает ВА1б=186ю ячеек памяти. Следовательно, ее можно разместить в модуле ПЗУ на 256 бай- тов — это единственная дополнительная компонента, помимо самого микропроцессора и схем ввода/вывода. Интересно оценить время, которое требуется микропроцессору, чтобы вычислить стоимость взвешиваемого товара. Если проанали- зировать программу, то легко убедиться, что в худшем случае она выполняется примерно за 1700ю машинных циклов. Каждый машин- ный цикл состоит из трех тактов. Если считать, что время такта равно 1 мкс, то общее время обработки составит (в десятичной системе) 3X1700 мкс=5100 мкс=5.1 мс. Такая задержка для человека неощу- тима.
10.2. ЭЛЕКТРОННЫЙ СВЕТОФОР 417 10.2. ЭЛЕКТРОННЫЙ СВЕТОФОР ДЛЯ УПРАВЛЕНИЯ УЛИЧНЫМ ДВИЖЕНИЕМ Со светофорами мы сталкиваемся повседневно. Иногда они нам серьезно досаждают. Ритм работы светофора обычно рассчитывается на некоторые средние потоки, которые, вообще говоря, меняются в течение суток. Как правило, таким путем удается получать удовле- творительные результаты. Однако в тех случаях, когда фактические характеристики потоков сильно отклоняются от запланированных, пропускная способность перекрестков значительно снижается. В часы пик, например, ритм работы светофоров подстраивается в соответ- ствии с ожидаемыми потоками. Однако, если фактический поток в каком-то направлении больше ожидаемого, даже при небольших перегрузках за счет эффекта накопления могут возникать заторы. Применение микрокомпьютеров для управления светофорами мо- жет помочь преодолеть некоторые трудности. Для успешного при- менения микрокомпьютеров нужно располагать средствами наблю- дения за ситуацией. Для этого применяются датчики, фиксирующие наличие автомобилей в определенных точках и в определенные мо- менты времени. На рис. 10.4 показан перекресток со светофором, которым должен управлять микрокомпьютер. Перекресток образован пересечением двух улиц с четырехрядным движением (два ряда в каждом направ- лении). Из левого ряда каждого направления разрешены левые по- вороты, и в связи с этим светофор снабжен дополнительными стрел- ками левого поворота. Перед перекрестком над каждым рядом распо- ложены подвесные магнитные датчики, фиксирующие наличие машины непосредственно под ними (предполагается, что в машине достаточное количество железа). Во встречных направлениях одинаковые сигналы включаются одновременно. Всего в каждом направлении могут быть четыре сигнала: зеленый, желтый, красный и стрелка поворота налево. Диаграмма, с помощью которой мы будем описывать работу све- тофора, представлена на рис. 10.5. Каждой из восьми пар сигналов на диаграмме соответствует кольцо. Черные части колец означают включенное состояние сигналов. Цикл работы состоит из шести фаз. В каждой фазе включена некоторая комбинация сигналов в течение определенного времени. Конкретно, шесть фаз представляют собой следующие комбинации сигналов: зеленый, желтый, красный со стрел- кой левого поворота для горизонтальной (запад — восток) дороги одновременно с красным для вертикальной (север — юг) дороги; за ними следуют зеленый, желтый, красный со стрелкой левого по- ворота для вертикальной дороги одновременно с красным для гори- зонтальной. Длительности всех фаз, кроме фазы желтого сигнала, могут меняться в зависимости от условий движения. При определении длительности фаз мы должны стремиться к по- вышению пропускной способности перекрестка. Поставим перед 14 № 692
418 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Буква Д обозначает подвесные магнитные датчики Ю Рис. 10.4. Перекресток, управляемый электронным светофором. собой цель избегать ситуаций, в которых по какому-то направлению возникает транспортная пробка из-за недостаточной продолжитель- ности фазы зеленого сигнала. Стратегия будет заключаться в следу- ющем. В конце каждой фазы с переменной длительностью по сигналам от датчиков будем определять наличие машин перед перекрестком. Обнаружив машину в конце фазы, разрешавшей движение в данном направлении, будем считать, что машины ждут и что фаза разрешен- ного движения недостаточно продолжительна. С другой стороны, отсутствие машин будет говорить о том, что длительность фазы ве- лика. Так или иначе в зависимости от ситуации длительность фазы будет подстраиваться, т. е. увеличиваться или уменьшаться. Эту стратегию можно оспаривать, поскольку решение принимается на основе отсутствия или наличия одиночного автомобиля. Самые разные обстоятельства могут быть причиной наличия автомобиля в конце фазы. Автомобиль может находиться в середине или в конце автоколонны, он может быть одиночным, или, наконец, у него мог заглохнуть двигатель. В принципе увеличивать продолжительность фазы только из-за одного автомобиля, ожидающего проезда через
10.2. ЭЛЕКТРОННЫЙ СВЕТОФОР 419 внешнее внутреннее Рис. 10.5. Цикл работы светофора. перекресток, нежелательно. Тем не менее описанная стратегия в целом позволяет достичь поставленной цели и помогает избегать заторов. Блок-схема На рис. 10.6 приведена детальная блок-схема работы светофора в соответствии с описанной выше стратегией. В каждую фазу входит два шага: (1) включение требуемых в данной фазе сигналов и (2) выдержка определенного времени. В фазах с переменной длитель- ностью есть еще один шаг, в котором опрашиваются соответствующие датчики и корректируется длительность фазы для следующего цикла. На блок-схеме длительность фаз обозначается через Т с двухбук- венным индексом. Первая буква либо Г, либо В соответственно для горизонтальной и вертикальной дороги; вторая буква либо 3, либо Л соответственно для зеленого сигнала и стрелки левого поворота. Начальные значения длительностей устанавливаются равными минимально допустимым значениям. Эти значения равны 20 для зе- леного и 8 для стрелки. Приращения для увеличения и уменьшения длительностей равны 5 для зеленого и 2 для стрелки. Длительности 14*
Рис. 10.6. Блок-схема алгоритма «электронный светофор».
10.2. ЭЛЕКТРОННЫЙ СВЕТОФОР 421 ограничены сверху максимальными значениями, которые равны 100 для зеленого и 20 для стрелки. На блок-схеме видно, что длительности фаз никогда не выходят за пределы своих минимальных и максимальных значений. Это до- стигается тем, что в качестве нового значения длительности уста- навливается меньшее между новым значением длительности и верхней границей, когда длительность увеличивается, и большее* между новым значением и нижней границей, когда длительность уменьшается. Интерфейсы ввода/вывода Заметим, что у нас всего восемь датчиков и восемь пар сигналов. Для связи с ними достаточно одного порта ввода с восемью битами для датчиков и одного порта вывода с восемью битами для управ- ления сигналами. Таким образом, компоненты ввода/вывода для электронного светофора довольно просты. Они представлены на рис. 10.7. Усиленные сигналы от датчиков подсоединяются к шине данных через тристабильные формирователи, которые образуют порт ввода. Сигналы включения/выключения ламп светофора с шин данных поступают на восьмибитовый регистр, к выходам которого подсое- динены схемы включения/выключения тока в лампах. Схема выборки портов представлена одним вентилем И, на входы которого поданы инверсные сигналы с младших восьми линий адресной шины. Таким образом, оба порта имеют код устройства 00i6. Выборка одного из двух портов обеспечивается сигналами «ввод» и «вывод». Остальные компоненты относятся к системе прерывания микро- процессора. Механизм прерывания применяется для реализации тай- мера, с помощью которого программа сможет отмерять длительность фаз. Импульсы от генератора с периодом 1 с устанавливают в 1 7)-триггер (импульсы поданы на вход синхронизации, а на вход D по- дана логическая 1), подключенный к линии запроса на прерывание Прер. Каждый импульс вызывает прерывание программы. Программа обработки прерывания при каждом выполнении уменьшает на 1 счет- чик. В начале каждой фазы на этот счетчик заносится длительность данной фазы. Таким образом, счетчик содержит время в секундах, оставшееся в данной фазе, независимо от времени выполнения про- граммы. Микропроцессор отвечает на сигнал, запрашивающий прерывание, сигналом в управляющей линии ППрер. По этому сигналу внешние схемы должны подать на адресную шину восьмибитовый адрес пере- хода на программу обработки прерывания. На рис. 10.7 показаны восемь тристабильных формирователей, которые служат для подачи на адресную шину константы. Они управляются сигналом ППрер, и, следовательно, значение константы служит адресом перехода на программу обработки прерывания. Сигнал ППрер, кроме того, сбра- сывает триггер запроса на прерывание,
422 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ АДРЕСНАЯ ШИНА Л -^т Зеленый Желтый Вертикальное направление {север-юг) Горизонтальное направление (запав- восток) Липпы Выборка —Вывод Схемы включения ламп ПОРТ I <?7' &' Q J б/ От' <Э,' 0,' On I Разрешение ВЫВОД/! Ру । О6, °s । Од । °з । О; । °11 °о | загрузки :^г. S3 ПОРТ ВВОДА Тристабильные формирователи 1 Восток,восток,Запад, Запад, Север, Север, Юг, Юг, левый правый левый правый левый правый левый правый 1 0 0 0 0 10 Адрес для прерывания ППрер ----В ввод — В ивой < S-S —£ Прер Магнитные датчики надрядами движения — Усилители Очистка Логическая 1 Генератор импульсов 1с Рис. 10.7. Связи компонент ввода/вывода в электронном светофоре»
10.2 ЭЛЕКТРОННЫЙ СВЕТОФОР 423 Таблица 10.2 Программа электронного светофора Формат данных, вводимых от датчиков: Формат выводимых сигналов: Распределение общих регистров: R2: таймер (секунды). R3: длительность зеленого по горизонтали Тгз. R4: длительность стрелок по горизонтали Тгл. R5: длительность зеленого по вертикали Твз. R6: длительность стрелок по вертикали Твл. R7: константа 5. R8: константа 2. Команда Ячейка на памяти машинном Горизнт. Вертик. Комментарий Команда в символической форме языке 0000 FB EIT Разрешение прерываний. 0001 67 LRI 7 Загрузка констант 5 и 2 в регистры. 0002 05 05 0003 68 LRI 8 0004 02 02 0005 63 LRI 3 Установка начальных значений длитель* 0006 14 14 ностей по минимуму. 0007 64 LRI 4 0008 08 08 0009 65 LRI 5 00ОА 14 14 000В 66 LRI6 ооос 08 08 000D 60 LRI0 Включение зеленого по горизонтали И 00ОЕ 82 82 красного по вертикали. 0O0F FE OUT 0010 00 00 ООН 53 MOV 2 from 3 Установка Ггз в таймер. 0012 12 MOV 0 from 2 Передача таймера в аккумулятор. 0013 7D JAN Если время не истекло, переход на ожи» 0014 00 00 дание. 0015 12 12 0016 FD INP Ввод с датчиков. 0017 00 00 0018 61 LRI 1 Выделение с помощью маски датчиков 0019 50 50 горизонтальных правых рядов 001А С1 AND 1 С01В 7D JAN Если ли 1 хотя бы на одном датчике. 001С 00 00 Если да—увелич. Тгз; если нет — 001D 2В 2B уменьшен. Тгз-
424 ГЛ 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Таблица 10.2 (продолжение) Команда Ячейка на памяти машинном языке Команда в символической форме Комментарий 001Е 13 MOV 0 from 3 Уменьшение Тгз на 5 с. 001F А7 SUB 7 0020 03 MOV 0 to 3 0021 61 LRI 1 Тестирование нового Тгз- Если меньше 0022 14 14 2О1о, замена на 2010. 0023 А1 SUB 1 0024 7А JAP 0025 00 00 0026 35 35 0027 23 MOV 1 to 3 0028 7В JMP Обход увеличения Тгз* 0029 00 00 002А 35 35 002В 13 MOV 0 from 3 Увеличение Тгз на 5 с, - - - 002С 87 ADD 7 002D 03 MOV 0 to 3 002Е 61 LRI 1 Тестирование нового Тгз» если больше 002F 64 64 1ОО1о, замена на 10010. 0030 А1 SUB 1 - 0031 7Е JAM 0032 00 00 0033 35 35 0034 23 MOV 1 to 3 0035 60 LRI 0 Желтый по горизонтали и красный по 0036 42 42 вертикали. 0037 FE OUT 0038 00 00 0039 57 MOV 2 from 7 Ожидание 5 с. 003А 12 MOV 0 from 2 003В 7D JAN 003С 00 00 003D ЗА ЗА ООЗЕ 60 LRI 0 Красный со стрелкой по горизонтали и 003F 32 32 красный по вертикали. 0040 FE OUT 0041 00 00 0042 54 MOV 2 from 4 Ожидание Тгл с. 0043 12 MOV 0 from 2 0044 7D JAN 0045 00 00 0046 43 43 0047 FD INP Ввод с датчиков. 0048 00 00 0049 61 LRI 1 Выделение датчиков горизонтальных ле- 004А АО A0 вых рядов. 004В С1 AND 1 004G 7D JAN Есть ли 1 хотя бы на одном датчике? 004D 00 00 Если да—на увелич. Тгл; если нет — 004Е 5С 5C на уменьш. Тгл-
10.2. ЭЛЕКТРОННЫЙ СВЕТОФОР 425 Таблица 10.2 (продолжение) Команда Ячейка на памяти машинном языке Команда в символической форме Комментарий 004F 0050 14 А8 MOV 0 from 4 SUB 8 Уменьшение Тгл на 2 c. 0051 04 , MOV 0 to 4 0052 61 LRI I Тестирование нового Тгл. Если меньше 8 0053 08 08 замена на 8. 0054 А1 SUB 1 0055 7А JAP 0056 00 00 0057 66 66 0058 24 MOV 1 to 4 0059 7В JMP Обход увеличения Тгл* 005А 00 00 005В 66 66 005С 14 MOV 0 from 4 У величение Т гл на 2 с. 005D 88 ADD 8 005Е 04 MOV 0 to 4 005F 61 LRI 1 Тестирование нового Тгл- Если больше 0060 14 14 2010, замена на 2010. 0061 А1 SUB 1 0062 7Е JAM 0063 00 00 0064 66 66 0065 24 MOV 1 to 4 0066 60 LRI 0 Красный по горизонтали и зеленый по 0067 28 28 вертикали. 0068 FE OUT 0069 00 00 006А 55 MOV 2 from 5 Ожидание Твз с. 006В 12 MOV 0 from 2 006С 7D JAN 006D 00 00 006Е 6В 6B 006F FD INP Ввод с датчиков. 0070 00 00 0071 61 LRI 1 Выделение датчиков вертикальных правых 0072 05 05 рядов. 0073 С1 AND 1 0074 7D JAN Есть ли 1 хотя бы на одном датчике? 0075 00 00 Если да —на увелич. Твз; если нет — 0076 84 84 на уменьш. Твз* 0077 15 MOV 0 from 5 Уменьшение Твз на 5с. 0078 А7 SUB 7 0079 05 MOV 0 to 5 007А 61 LRI 1 Тестирование нового Твз. 007В 14 14 Если больше 20ю, замена на 2О1о. 007G А1 SUB 1 0070 7А JAP 007Е 00 00
426 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Таблица 10.2 (продолжение) Команда Ячейка на памяти машинном языке Команда з символической форм0 Комментарий 007F 8Е 8Е 0080 25 MOV 1 to 5 0081 7В JMP Обход увеличения Твз. 0082 00 00 0083 8Е 8Е 0084 15 MOV 0 from 5 Увеличение Твз на 5с, 0085 87 ADD 7 0086 05 MOV 0 to 5 0087 61 LRI 1 Тестирование нового Твз. Если больше 0088 64 64 1ОО1о, замена на 1001о, 0089 А1 SUB 1 008А 7Е JAM 008В 00 00 008С 8Е 8Е 008D 25 MOV 1 to 5 008Е 60 LRI 0 Красный по горизонтали и желтый по 008F 24 24 вертикали. 0090 FE OUT 0091 00 00 0092 57 MOV 2 from 7 Ожидание 5 с, 0093 12 MOV 0 from 2 0094 7D JAN 0095 00 00 0096 93 93 0097 60 LRI 0 Красный по горизонтали и красный со 0098 23 23 стрелкой по вертикали. 0099 FE OUT 009А 00 00 009В 56 MOV 2 from 6 Ожидание Твл с. 009С 12 MOV 0 from 2 009D 7D JAN 009Е 00 00 009F 9С 9С 00А0 FD INP Ввод с датчиков. 0ОА1 ' 00 00 00А2 61 LRI 1 Выделение датчиков вертикальных ле» ООАЗ 0А 0А вых рядов. 00А4 - С1 AND 1 00А5 7D JAN Есть ли 1 хотя бы на одном датчике? 00А6 00 00 Если да- на увелич. Твл; если нет — 00А7 В5 В5 на уменьш, Твл. 00А8 16 MOV 0 from 6 Уменьшение Твл на 2 с. 00А9 А8 SUB 8 00AA 06 MOV 0 to 6 ООАВ 61 LRI 1 Тестирование нового Твл. Если меньше ООАС 08 08 8, замена на 8. 00 A D А1 SUB 1 ООАЕ 7А JAP
10.3. УНИВЕРСАЛЬНЫЙ МИКРОКОМПЬЮТЕР 427 Таблица 10.2 (продолжение) Команда в символической форме Команда Ячейка на памяти машинном уровне Комментарий 00AF Q0 00В0 0D 00В1 26 Q0B8 7В ООВЗ 00 00В4 0D 00В5 16 00В6 88 00В7 06 00В8 61 00В9 14 00BA А1 00BB 7Е 00BC 00 00BD 0D 00BE 26 00BF 7В 00С0 00 00С1 0D 00С2 F6 00C3 FB 00С4 F8 00 0D MOV 1 to 6 JMP 00 0D MOV 0 from 6 ADD 8 MOV 0 to 6 LRI 1 14 SUB 1 JAM 00 0D MOV 1 to 6 JMP 00 0D DHL EIT RET Переход на начало всего цикла. Увеличение Гвл на 5 с. Тестирование нового Твл« Если больше 2010, замена на 2010. Переход на начало всего цикла. Обработка прерывания: уменьшение оставшегося времени на 1 с. Программа Программа, реализующая описанную выше блок-схему, приведена в табл. 10.2. Главная программа начинается в ячейке ООООк, а про- грамма обработки прерываний — в ячейке 00C2i6. Обратите внимание, что программа обработки прерываний состоит всего из трех команд и использует общий регистр 2, т. е. младшую половину пары регист- ров Н и L. Вся программа занимает C5ie« 197ю байтов, и, следовательно, ее можно разместить в модуле ПЗУ емкостью 256x8 бит. Поскольку никакой переменной информации в главной памяти не хранится, оперативная память, так же как и в предыдущей задаче, не нужна. 10.3. ПРОСТОЙ УНИВЕРСАЛЬНЫЙ МИКРОКОМПЬЮТЕР Вообще говоря, одно из наиболее важных применений компью- теров — это решение многих, разных по характеру и, как правило, независимых задач. Широкий спектр возникающих при этом потреб- ностей оправдывает проектирование и производство больших и до- рогих универсальных компьютеров. Однако и микропроцессоры^
428 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ даже при их относительной дешевизне, обладают достаточной вычис- лительной мощностью, чтобы служить универсальным вычислитель- ным средством. Рассмотрим простую систему, в которую будут входить иллюст- ративный микропроцессор, клавиатура терминала в качестве устрой- ства ввода, дисплей на электронно-лучевой трубке в качестве устрой- ства вывода и память до 64К байтов. Будем считать, что в постоянной памяти размещается простая операционная система. Она интерпре- тирует и выполняет команды, набираемые на клавиатуре. В число команд могут входить команды для изменения и индикации содержи- мого регистров и ячеек памяти, для запуска программы, находящейся в памяти, для выдачи на экран дисплея программ и данных и для других функций. В ПЗУ могут находиться компиляторы для таких языков высокого уровня, как Бэйсик и Фортран, обращение к которым также выполняется при помощи команд операционной системы. При проектировании системы мы рассмотрим способы взаимодей- ствия микропроцессора с клавиатурой терминала и дисплеем. В учеб- ных целях мы выбрали разные интерфейсы для клавиатуры и дисплея. Клавиатура подключена через стандартный последовательный ин- терфейс с программно управляемым вводом, тогда как дисплей под- ключен через параллельный интерфейс с прямым доступом к памяти. Клавиатура терминала Будем предполагать, что клавиатура работает в коде ASCII. Коды символов состоят из восьми битов, посылаемых в микропроцессор по одной линии последовательно в асинхронном режиме. Формат данных при передаче показан на рис. 10.8. В разд. 9.8 мы говорили о том, что существуют универсальные асинхронные ресиверы/транс- миттеры (UART), и один из них можно было бы применить в каче- стве порта ввода микропроцессора для приема восьмибитовых симво- лов. Однако в учебных целях мы будем считать, что необходимые для приема функции микропроцессор должен выполнять сам по про- грамме. Как показано на рис. 10.9, сигнал по линии от клавиатуры тер- минала поступает в специальный приемник, который приводит сиг- нал на линии к нужному для микропроцессора уровню напряжения. Приемник подключается к микропроцессору через тристабильный формирователь в качестве однобитового порта ввода с кодом устрой- ства 0016. Преобразование последовательного формата каждого сим- вола в восьмибитовое слово выполняет микропроцессор. Это преоб- разование реализует подпрограмма, вызываемая операционной си- стемой всякий раз, когда ожидается поступление символа с клавиа- туры. Блок-схема процесса приема показана на рис. 10.10. Прежде зсего нужно дождаться прихода переднего фронта стартового бита,
10.3. УНИВЕРСАЛЬНЫЙ МИКРОКОМПЬЮТЕР 429 Время Стартовый Младший Старший 2 стоповых йита '------------YS------------' Биты данных Рис. 10.8. Формат символа, передаваемого в микропроцессор с клавиатуры терминала. т. е. первого перехода из 1 в 0 сигнала от клавиатуры. Стартовый бит соответствует подаче на линию нулевого уровня в течение Т мкс. Через время 772 мкс от переднего фронта стартового импульса де- лается проверка, равен ли сигнал по-прежнему 0. Это важно, по- скольку начальный переход от 1 к 0 мог быть вызван случайной им- пульсной помехой. В то же время маловероятно, что другая случайная помеха придет равно через Т/2 мкс. Если сигнал в этой средней точке равен 1, то считается, что было зафиксировано ложное начало стартового бита, и процесс начинается сначала. В противном случае линия опрашивается 8 раз через каж- дые Т мкс, начиная со средней точки стартового бита. Предполагается, что сигнал в эти моменты соответствует серединам передаваемых информационных битов. Значения сигнала, получаемые при после- довательных опросах, «вдвигаются» в слово на левом его конце. После восьми сдвигов вправо слово будет содержать все восемь переданных битов символа в нужном порядке. Подпрограмма, реализующая описанный процесс и начинающаяся с ячейки lOOOie, приведена в табл. 10.3. Подпрограмма мало откло- няется от описанной блок-схемы, и ее легко разобрать по приведенным комментариям. Обратите внимание, что блоки ожидания, показанные на блок-схеме, реализованы в виде программных циклов. В каждом цикле счетчик уменьшается, пока не достигнет нуля. Начальное значение счетчика выбирается в предположении, что такт микропро- цессора равен 1 мкс. Время передачи одного бита Т определяется, исходя из скорости работы клавиатуры, равной 10 символам в секунду. Поскольку на каждый символ приходится 11 переданных битов, мы получаем ско- рость ПО битов в секунду. Таким образом, время Т приближенно равно Т = jjqC « 9091 мкс. Как отмечалось, подпрограмма вызывается операционной системой или другой программой всякий раз, когда нужно принять символ с клавиатуры. Подпрограмма помещает символ в аккумулятор, откуда его забирает главная программа. Поэтому, если нажимать на кла-
АДРЕСНАЯ ШИНА Разрешение Г~ > ППДП ТРИСТАБИЛЬНЫЕ ФОРМИРОВАТЕЛИ Вертикальное отклонение f АНАЛОГОВЫЙ ИНВЕРТОР Горизонтальное отклонение ДА-ПРЕОБРАЗО- ВАТЕЛЬ ДА-ПРЕОБРАЗО- ВАТЕЛЬ 2-0 Детектор всех единиц. Сброс S0 *2 -----Вывод СЧЕТЧИК ПОЗИЦИИ ТОЧКИ РЕГИСТР КОДА СИМВОЛА СЧЕТЧИК ПОЗИЦИИ СИМВОЛА РЕГИСТР Н0М£РА\^ СТРАНИЦЫ H-W i j ,i ,IQ ТРИСТАБИЛЬНЫЙ ФОРМИРОВАТЕЛЬ Выборка Ввод ПРИЕМНИК ПОСЛЕДОВАТЕЛЬНАЯ КЛАВИАТУРА ^0 "^1 *^2 ДЕШИФРАТОР\ Разрешение ,$ИЗАги f 1 Счет Скрученная лара В память г-биг. <э— СЧЕТЧИК Сбросу чтение -с--Вывод § --- — ---*/7/W7^S — < Чтение "Запись ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ из памяти Рис. 10.9. Компоненты ввода/вывода универсального микрокомпьютера.
10.3. УНИВЕРСАЛЬНЫЙ МИКРОКОМПЬЮТЕР 431 Рис. 10.10. Блок-схема подпрограммы приема символов с клавиатуры терминала. виши, когда символ не ожидается (не было обращения к подпро- грамме), ничего принято не будет. Следовательно, нажимать клавиши имеет смысл только тогда, когда микрокомпьютер ожидает определен- ную информацию, например команду, запрошенную операционной системой, команду программы, загружаемой загрузчиком, или дан- ные, требующиеся в ходе выполнения программы. Дисплей на электронно-лучевой трубке В качестве основы дисплея мы примем осциллограф, в котором есть вход г, управляющий гашением луча, а также входы на усилители горизонтального и вертикального отклонения луча. Символы на экране будут формироваться из отдельных точек. Всего на экране
432 гл. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Таблица 10.3 Подпрограмма последовательного приема символа с клавиатуры терминала Распределение общих регистров: R2: счетчик битов. R3: счетчик времени ожидания. R4: константа 1. R6: принимаемый символ. Комментарий Команда Ячейка на памяти машинном языке Команда в символической форме 1000 64 LRI 4 Загрузка константы 1 в регистр 4. 1001 01 01 1002 62 LRI 2 Установка 8 в счетчик битов. 1003 08 08 1004 FD INP Ввод и выделение сигнала для поиска 1005 00 00 начала стартового бита. 1006 С4 AND 4 1007 7D JAN Проверка сигнала. Если 0, то это стар- 1008 10 10 товый бит; если 1, продолжение по- 1009 04 04 иска. 100 А 63 LRI 3 Ожидание 4524 мкс, примерно 1/2 дли- 100В FB FB тельности бита. 100С 13 MOV 0 from 3 100D А4 SUB 4 100Е 03 MOV 0 to 3 100F 7D JAN 1010 10 10 1011 ОС ОС 1012 FD INP Ввод и выделение сигнала для обнару- 1013 00 00 жения ложного стартового бита. 1014 С4 AND 4 1015 7D JAN Проверка сигнала. Если не 0, то старто- 1016 10 10 вый бит ложный; переход на начало. 1017 04 04 1018 63 LRI 3 Ожидание 9042 мкс, примерно длитель- 1019 FB FB ность бита. 101А F7 NOP 101В F7 NOP 101С F7 NOP 101D F7 NOP 101Е F7 NOP 101F F7 NOP 1020 13 MOV 0 from 3 1021 А4 SUB 4 1022 03 MOV 0 to 3 1023 7D JAN 1024 10 10 1025 1А 1A 1026 FD INP Ввод и выделение сигнала для получе- 1027 00 00 ния очередного бита. 1028 С4 AND 4
10.3. УНИВЕРСАЛЬНЫЙ МИКРОКОМПЬЮТЕР 433 Таблица 10.3 (продолжение) Ячейка памяти Команда на машинном языке Команда в символической форме Комментарий 1029 F2 RTR Сдвиг в триггер переноса. 102А 15 MOV 0 from 5 Принятые биты — в аккумулятор. 102В F2 RTR Вдвигание нового бита. 102С 05 MOV 0 to 5 Символ— в регистр 5. 102D F6 DHL Уменьшение счетчика битов. 102Е 12 MOV 0 from 2 Проверка счетчика битов. Если 0, все 102F 7D JAN биты получены; если не 0 — на прием 1030 10 10 новых битов. 1031 18 18 1032 15 MOV 0 from 5 Принятый символ — в аккумулятор. 1033 F8 RET Выход из подпрограммы. выделяется 16 строк по 32 символа в строке. Место для каждого сим- вола представляет собой квадратную сетку (матрицу) 8x8, в узлах которой могут высвечиваться точки. Позиции точек по всему экрану непрерывно сканируются за счет соответствующего управления горизонтальным и вертикальным от- клонением луча. В процессе сканирования нужно управлять входом z таким образом, чтобы высвечивались точки, образующие символы. Интерфейс дисплея с микрокомпьютером использует прямой доступ к памяти. Информация на экран поступает из некоторой об- ласти главной памяти, называемой страницей, без непосредственного вмешательства со стороны микропроцессора. Страница содержит 16x32=512 ячеек в соответствии с количеством символов на экране. В каждой ячейке 8 битов, что хорошо согласуется с числом битов в коде ASCII. Содержимое каждой индицируемой ячейки передается из памяти на специальный буферный регистр с использованием адресной шины и шины данных и с приостановкой микропроцессора на время передачи. Последовательность сканирования экрана выбирается таким об- разом, чтобы минимизировать число обращений к памяти. Сканиро- вание всех точек одного символа завершается полностью, после чего осуществляется переход к следующему символу. А именно, матрица каждого символа сканируется слева направо и сверху вниз. В резуль- тате, как показано на рис. 10.11, форма растра сильно отличается от телевизионного. Схемы, реализующие описанный дисплей и его интерфейс с мик- рокомпьютером, показаны на рис. 10.9. На нем показаны два вось- мибитовых ЦА-преобразователя, которые подают напряжение на усилители горизонтального и вертикального отклонения. Выходное 15 № 592
434 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Рис. 10.11. Форма растра электронно-лучевой трубки. напряжение вертикального отклонения инвертируется (умножается на —1), чтобы минимальным числам на входе ЦА-преобразователя соответствовал верх экрана. Входы ЦА-преобразователей подключены к двум счетчикам таким образом, чтобы получить растр описанной формы. Один 6-битовый счетчик определяет позицию точки внутри матрицы символа. Млад- шие 3 бита этого счетчика определяют позицию точки по горизонтали И. подключены к младшим трем битам ЦА-преобразователя горизон- тального отклонения. Старшие 3 бита счетчика определяют позицию точки по вертикали и подключены к младшим трем битам ЦА-пре- образователя вертикального отклонения. Если не менять значений на других входах ЦА-преобразователей и дать возможность счетчику позиции точки пробежать все значения от 0 до максимального, то мы получим желаемый растр на один символ. Другие биты ЦА-преобразователей подключены к счетчику, зада- ющему позицию символа. В этом счетчике 9 битов. Младшие 5 битов определяют место символа в строке и подключены к оставшимся вхо- дам горизонтального ЦА-преобразователя. Старшие 4 бита счетчика определяют номер строки и подключены к старшим 4 битам верти- кального ЦА-преобразователя. На оставшийся свободным бит верти- кального ЦА-преобразователя (бит 3) подается земля, что соответ- ствует логическому 0. Благодаря этому каждая вторая строка прог пускается, что обеспечивает промежуток между строками. Когда счетчик позиций сиквела Пробегает псе значения от 0 до единиц во
las. универсальный микрокомпьютер 435 всех битах, на экране последовательно проходят сверху вниз 16 строк, и в каждой строке слева направо 32 клетки для символов. В качестве генератора формы высвечиваемых символов исполь- зуются модуль ПЗУ. В этом модуле 213 слов X 1 бит, и он содержит 27 изображений различных символов ASCII в виде битовых матриц 8x8. Фактически изображение символа занимает только левые 5 из 8 столб- цов матрицы, оставляя правые три столбца всегда нулевыми. Тем самым обеспечивается промежуток между символами в строке. Матрица с изображениями символов в ПЗУ размещены таким образом, что младшие 6 битов адреса ПЗУ задают позицию точки в матрице, изображающей тот символ, чей код ASCII (без бита четности) подан на старшие 7 битов адреса ПЗУ. Поэтому на младшие 6 адрес- ных линий ПЗУ поступает значение счетчика позиции точки, и этим достигается отображение позиций точек в памяти на позиции точек на экране, а старшие 7 адресных линий ПЗУ подключены к выходам регистра, в котором содержится код символа. Регистр кода символа получает коды из главной памяти по шинам данных при помощи средств прямого доступа. Адрес ячейки главной памяти, из которой выбирается код символа, определяется состоянием двух регистров, показанных на рис. 10.9. Один из них, 7-битовый регистр номера страницы, задает старшие 7 битов адреса главной памяти. Фактически он определяет одну из 128 страниц главной па- мяти, из которой будут взяты коды всех высвечиваемых на экране символов. В каждой странице 29=512 ячеек. Адрес ячейки в пределах страницы определяется счетчиком по- зиции символа, 9 битов которого и образуют младшие биты адреса главной памяти. Таким образом, все символы в заданной странице высвечиваются на экране последовательно по мере продвижения счетчика позиции символа. Семибитовый регистр номера страницы подключен к микропроцессору как порт вывода с кодом устройства OOie. Следовательно, программа может определить выдаваемую на экран страницу путем вывода ее номера в этот порт. Рассмотрим, в какой последовательности развиваются события при высвечивании на экране символов из некоторой страницы памяти. Предположим, что в регистре кода символа уже находится код не- которого символа ASCII, а счетчик позиции точки равен нулю. Эти регистр и счетчик определяют адрес ПЗУ — генератора символов. Если изображение данного символа имеет точку в позиции 0 (в левом верхнем углу матрицы), тогда ПЗУ выдает 1, которая инвертируется и подается на вход z осциллографа. Нуль на входе z не вызывает гашения луча, в результате чего на экране появляется светящаяся точка. В противном случае точка светиться не будет. Счетчик позиции точки продвигается провентилированным сиг- налом «такт» от микропроцессора. К выходам счетчика подключен вентиль И, являющийся детектором всех единиц. Выход этого детек- тора инвертируется и вместе с сигналом «такт» подается на вентиль И, 15*
436 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ с выхода которого и берутся сигналы продвижения счетчика. Таким образом, счетчик изменяется от 0 до единиц во всех битах, обеспечивая высвечивание всех образующих изображение символа точек. Когда счетчик досчитает до «всех единиц», сигнал продвижения счетчика блокируется, и счет прекращается. В этот момент из страницы главной памяти считывается код сле- дующего символа. Управляющая считыванием последовательность из четырех импульсов задается с помощью двухбитового счетчика, к которому подключен дешифратор «1 из 4». Сигнал разрешения на выходные линии дешифратора формируется на вентиле И из сигнала «такт» и сигнала подтверждения прямого доступа к памяти (ППДП). Следовательно, импульсы на четырех выходных линиях дешифратора будут появляться последовательно по одному синхронно с такти- рующими импульсами при условии, что линия ППДП содержит логическую 1. Последовательность из четырех импульсов запускается после того, как на линию ПДП будет подан сигнал логической 1 с детек- тора всех единиц на счетчике позиции точки. Если сигнал ПДП равен логической 1, микропроцессор, завершив выполнение очередного машинного цикла, приостановит выполнение программы, освободит адресную шину и шину данных, переведя их в нейтральное состояние, и затем установит логическую 1 на линии ППДП. Как только ППДП получает значение 1, двухбитовый счетчик последовательности начинает считать тактовые импульсы. Первый импульс переводит его в состояние 01 и порождает импульс s0. Этот импульс увеличивает счетчик позиции символа на единицу, в резуль- тате чего происходит переход к следующему символу и на экране, и в странице памяти. Адрес следующего символа, составленный из номера страницы и номера позиции символа, подается на адресные шины через 16 три- стабильных формирователей, сигналом разрешения для которых служит ППДП. Этим же сигналом ППДП возбуждается линия чтения из главной памяти. Следовательно, после некоторой задержки шина данных будет содержать код следующего символа, подлежащего выводу на экран. На время выборки из памяти отводятся два такта. Поэтому очередной тактовый импульс только продвигает счетчик последовательности к состоянию 10 и не выполняет никаких других функций. Следующий тактовый импульс продвигает счетчик к состоя- нию 11 и порождает импульс s2, стробирующий прием с шины данных на регистр кода символа. Наконец, при следующем тактовом импульсе счетчик переходит в состояние 00 и появляется импульс s3, который сбрасывает счетчик позиции точки. Это служит концом четырехтактовой последователь? ности прямого доступа к памяти, поскольку при сбросе счетчика позиции точки сигнал ПДП также становится логическим 0. В свою
10,4. ЗАКЛЮЧЕНИЕ 437 очёредь, микропроцессор делает сигнал ППДП нулевым, что вызывает сброс двухбитового счетчика. К этому моменту регистр кода символа содержит код следующего символа, а счетчик позиции точки содержит нули и открыт для про- движения. Следовательно, происходит сканирование и высвечивание на экране точек этого нового символа. Описанный процесс идет, не останавливаясь, так что высвечи- вание всех символов, находящихся в странице памяти, непрерывно повторяется. Частота повторения должна быть достаточно большой, чтобы человеческий глаз не замечал мерцания экрана. Рассчитаем, какой получилась частота для нашего дисплея в предположении, что время такта равно 1 мкс. Число тактов на сканирование одного символа равно 64, т. е. числу позиций точек в матрице символа, плюс еще 4 такта на выборку кода символа. В странице 512 символов; следовательно, время, через которое высвечивание страницы повторяется (время регенерации изображения), равно 512x68—34 816 мкс. Частота повторения ока* зывается, таким образом, равной примерно 28.7 регенераций в секунду, что близко к частоте повторения телевизионного изображения, равного 25 кадрам в секунду. Следует обратить внимание, что описанный дисплей индицирует содержимое страницы главной памяти независимо от ее содержания. Обеспечивать, чтобы в странице находилась нужная информация, должна операционная система или программа пользователя. В па- мяти может быть до 128 страниц, и программа может выбрать для ин- дикации любую из них, послав номер страницы в порт вывода 00i6. 10.4. ЗАКЛЮЧЕНИЕ Благодаря программному управлению и гибкости интерфейсов микропроцессоры, очевидно, являются устройствами с очень широким кругом применений. Этот круг еще более расширяется благодаря низкой стоимости и малым размерам микропроцессоров. Тем не менее; при создании каждой конкретной прикладной микропроцессорной системы важную роль играют вопросы определения необходимых дополнительных компонент и их взаимосвязей. Чтобы облегчить проектирование и комплектацию систем, фирмы^ производители микропроцессорных комплектов включают в их состав различные функциональные подсистемы, оформленные в виде боль- ших интегральных схем. Как правило, такие подсистемы выполняют Основные интерфейсные функции и могут настраиваться на приме- нение в тех или иных конкретных условиях. Например, как говори- лось в разд. 9.8, выпускаются различные универсальные асинхронные ресиверы/трансмиттеры (UART) для управления последовательным вводом/выводом с широким набором возможностей.
438 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Вообще, если функциональная подсистема может настраиваться на те или иные возможности, ее называют программируемой. Про- граммирование может осуществляться подачей на соответствующие управляющие линии уровней напряжений логического 0 или логи- ческой 1; или же загрузкой со стороны микропроцессора управля- ющих слов в регистры, что снижает число необходимых управляющих линий. В состав микропроцессорных комплектов обычно входят следующие подсистемы: 1. Программируемые порты ввода/вывода, содержащие, как пра- вило, схемы нескольких портов для данных, вместе с необходимыми портами управления и состояния. Программируемые возможности обычно связаны с адресацией портов и выбором метода организации ввода/вывода. Часто включаются также схемы, формирующие за- просы на прерывание по информации о состоянии портов. 2. Программируемые интервальные таймеры, состоящие из одного или нескольких реверсивных счетчиков, подключаемых к микропро- цессору в качестве портов ввода и вывода и способных работать в нескольких режимах. В одном из режимов счетчик информирует мик- ропроцессор об истечении заданного интервала времени. В этом случае начальное значение на счетчик загружается микропроцессором, и каждый импульс от внешнего генератора уменьшает счетчик на еди- ницу. Когда счетчик достигает нуля, либо устанавливается флажок состояния, либо выдается запрос на прерывание. В других режимах счетчик может служить в качестве часов реального времени, счетчика событий или источника импульсов с переменной частотой. 3. Контроллеры векторных систем прерывания со схемами раз- решения конфликтов при одновременном поступлении запросов на прерывания и схемами выдачи нужной информации в микропроцессор. 4. Контроллеры прямого доступа к памяти со схемами, управ- ляющими передачей блоков слов между памятью и устройствами ввода/вывода. 5. Контроллеры для регенерации динамической памяти, обеспе- чивающие периодическую регенерацию данных в модулях ЗУ, под- ключенных к микропроцессору. 6. Генераторы тактовых импульсов, выдающие серии синхроим- пульсов с заданной частотой и нужными фазовыми соотношениями, а также другие специальные временные сигналы. f 7. Устройства связи с внешними объектами, содержащие один или несколько ЦА-преобразователей и/или один или несколько АЦ- п.реобразователей, подключаемых к соответствующим портам ввода/ вывода. .8. Расширители арифметических устройств типа умножителей, делителей и генераторов тригонометрических функций, работающие через входящие в их состав порты ввода/вывода.
10.4. ЗАКЛЮЧЕНИЕ 439 В принципе подобные подсистемы-модули проектируются таким образом, чтобы свести к минимуму число связей с микропроцессором. По электрическим и временным характеристикам сигналов они со- гласуются с соответствующими микропроцессорами. Таким образом, проблема проектирования многих микропроцессорных систем сво- дится лишь к соединению таких подсистем-модулей с микропроцес- сором. Хотя, конечно, могут возникать и другие специфические для конкретного приложения проблемы, требующие проектирования спе- циальных схем и компонент. Чтобы еще больше упростить компоновку микропроцессорных систем, разработаны и выпускаются так называемые однокристальные микрокомпьютеры. Помимо микропроцессора, однокристальный мик- рокомпьютер обычно содержит ОЗУ и ПЗУ небольшого объема, несколько портов ввода/вывода и ряд других базовых подсистем. При этом существенно снижается количество соединений в таких микрокомпьютерных системах, где требования к объему памяти и количеству устройств ввода/вывода невелики. В этом случае значи- тельное число выводов к шинам исчезает, тем самым освобождается место для внешних связей с портами ввода/вывода. В некоторых системах одни и те же линии программируются либо для выполнения функций шин, либо для связей с портами ввода/вывода. Большое внимание при создании микрокомпьютерных систем уделяется проверке правильности их функционирования. Сюда входит как отладка программного обеспечения, так и проверка аппаратуры. Благодаря тесному переплетению программных и аппаратных средств и разнообразию взаимодействия компонент вопросы отладки и те- стирования могут оказаться весьма сложными. В связи с этим широкое распространение получили различные приборы и системы, которые позволяют проводить отладку и тестирование программных и аппа- ратных компонент независимо. К числу таких средств относятся: 1. Системы проектирования для конкретных микрокомпьютеров, включающие пульт управления и предварительно скомпонованные аппаратные модули, такие, как плата с микропроцессором, система памяти с ОЗУ и программируемым ПЗУ, порты ввода/вывода и другие интерфейсные блоки. Это дает возможность создавать прототипы будущих систем на самой ранней стадии их разработки. 2. Измерительные комплекты, состоящие из небольших микро- компьютерных систем на одной или нескольких печатных платах. 3. Анализаторы микропроцессоров, которые регистрируют и вы- дают содержимое шин и других линий работающего микрокомпью- тера в каждом машинном цикле. 4. Эмуляторы аппаратуры, позволяющие промоделировать ту или иную часть микрокомпьютерной системы, чтобы получить временные соотношения и передаваемые между различными компонентами сиг- налы.
440 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ 5. Программные инструментальные средства, например программы моделирования микропроцессоров на больших универсальных ЭВМ; а также кросс-ассемблеры и кросс-компиляторы. УЧЕБНЫЕ ПРОЕКТЫ 10.1. Спроектируйте пульт управления для универсального микрокомпьютера, построенного на основе иллюстративного микропроцессора. Пульт должен обладать переключателями и индикаторами для выполнения следующих функций: 1. Показать содержимое любой ячейки памяти. 2. Занести слово в любую ячейку памяти. 3. Показать содержимое любого общего регистра. 4. Занести слово в любой общий регистр. 5. Показать состояние триггера переноса. 6. Показать состояние программного счетчика. 7. Занести адрес на программный счетчик. 8. Остановить и пустить микропроцессор. 9. «Сбросить» микропроцессор. Пульт должен иметь 16 ключей для адреса, 8 ключей для данных, 8 ламп для ин- дикации данных и младшей половины программного счетчика, еще 8 ламп для инди- кации, старшей половины программного счетчика, 9 ключей для возбуждения каждой из 9 перечисленных выше функций. Младшие четыре адресных ключа должны слу- жить для задания номера общего регистра при выполнении функций с общими регист- рами. Ключи на пульте должны действовать только, когда микропроцессор останов- лен, за исключением ключей пуск/стоп и сброс. Когда микропроцессор остановлен, его адресная шина и шина данных находятся в нейтральном состоянии. Следовательно, шинами можно воспользоваться для вы- полнения первых двух функций, связанных с обращением к памяти. Другие функции столь же просто выполнить нельзя, поскольку они связаны с внутренними регистрами микропроцессора. Тем не менее эти функции можно реализовать, заставив микропро- цессор выполнить одну или несколько фиксированных команд, которые осуществляют нужную пересылку данных. Например, содержимое общего регистра (скажем, реги- стра 5) можно узнать, выполнив команду MOV 5 to F. Информацию можно «пере- хватить», когда она появится на шинах данных, и направить в индикационный ре- гистр. Конечно, следует позаботиться о том, чтобы информация не попала в главную память. Нужно сделать так, чтобы информация в регистрах, которые не затрагиваются выполняемой с пульта функцией, не разрушалась. В связи с этим программный счет- чик требует особого внимания, поскольку выполнение команды приводит к его уве- личению. Можно предусмотреть 16-битовый вспомогательный регистр для промежу- точного хранения состояния программного счетчика. При любой остановке микропро- цессора содержимое программного счетчика можно было бы передавать в этот регистр. Для этого достаточно, например, выполнить команду NOP и воспринять содержимое адресной шины в момент выборки команды. Вспомогательный регистр можно инди- цировать или загружать при выполнении двух функций пульта, относящихся к про- граммному счетчику. В момент пуска микропроцессора содержимое вспомогательного регистра могло бы снова загружаться в программный счетчик путем выполнение команды перехода. щ Обратите внимание, что команды, выполняемые для реализации функций пульта, Должны поступать не из памяти, а от схем пульта. Они должны подаваться на шину данных в нужный момент независимо от адресной шины.
УЧЕБНЫЕ ПРОЕКТЫ 441 10.2. На основе иллюстративного микропроцессора или одного из промышленных микропроцессоров спроектируйте следующий простой микрокомпьютер. В нем долж- но быть ОЗУ (емкостью 1К слов или больше) и несколько универсальных портов вво- да/вывода. Для управления микрокомпьютером используется небольшая клавиатура и несколько семисегментных индикаторов на светодиодах, с которыми работает спе- циальная, находящаяся в ПЗУ программа. Клавиатура имеет 16 кнопок для набора шестнадцатеричных цифр от 0 до F плюс несколько кнопок для задания следующих функций: 1. Показать и/или изменить содержимое ячейки памяти. 2. Показать и/или изменить содержимое общего регистра (или других имеющихся в выбранном микропроцессоре регистров). 3. Показать и/или изменить программный счетчик. 4. Сброс. 5. Пуск. 6. Стоп. Могут существовать дополнительные кнопки для чтения информации с внешнего запоминающего устройства (например, кассетного магнитофона) в оперативную память или записи содержимого памяти на внешнее запоминающее устройство. С по1 мощью шестнадцатеричных цифровых кнопок задаются значения адресов и данных; которые должны быть введены. Для индикации должно быть предусмотрено по край- ней мере 6 семисегментных индикаторов: четыре для шестнадцатеричных адресов и два для шестнадцатеричных данных. Специальная программа, хранящаяся в постоянной памяти, должна выполнять функции небольшой операционной системы, т. е. воспринимать сигналы с клавиату- ры, выполнять запрашиваемые с пульта функции и выдавать информацию на индика- торы. Например, функция «показать и/или изменить ячейку памяти» могла бы выпол- няться следующим образом. Во время работы операционной системы сначала нужно нажать клавишу запроса этой функции. В результате операционная система перехо- дит в ожидание четырех цифр адреса, поступающих с клавиатуры. Каждая вводимая цифра индицируется на соответствующем семисегментном индикаторе. После ввода всех четырех цифр операционная система выдает на два семисегментных индикатора для данных содержимое заданной ячейки. Это содержимое при необходимости можно изменить просто вводом с клавиатуры двух шестнадцатеричных цифр. Операционная система работает всегда, когда не работает программа пользова- теля. Нажатие кнопки «пуск» должно вызвать запуск программы пользователя при текущем значении программного счетчика. Кнопки «сброс» и «стоп» должны останав- ливать программу пользователя. 10.3. Интересное приложение микропроцессоров связано с воспроизведением музыки. Основываясь на любом микропроцессоре, спроектируйте музыкальный син- тезатор, который воспроизводил бы мелодию, записанную в главной памяти. Мы предлагаем следующий подход, хотя существует и множество других. Для генерации звуков того или другого тона, которые можно объединять в аккорды, используются восемь (возможно, и другое число) звуковых генераторов переменной частоты (гене- раторов ноты), управляемых микропроцессором. Каждый генератор представляет собой пятибитовый счетчик, на который посту- пают импульсы пересчета от генератора переменной частоты (ГПЧ), частота которого пропорциональна входному управляющему напряжению. Двоичный счетчик выпол- няет функции делителя частоты и позволяет получить тон данной ноты в любой из Иятй октав. Нота в пределах октавы выбирается управляющим напряжением на вхо- де ГПЧ. Управлять каждым генератором ноты можно с помощью двух восьмибитовых портов вывода. Один порт подключается к ЦА-преобразователю, дающему управляю- щее напряжение на' ГПЧ, другой — используется для выбора нужного каскада на двоичном счетчике.
442 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ Можно применить фильтры для улучшения формы сигнала в каждом генераторе ноты. Причем, поскольку фильтры должны быть настроены на узкую полосу частот (в пределах октавы), понадобятся отдельные фильтры на каждый каскад счетчика. Выбранные выходы генераторов нот объединяются и усиливаются. Для того чтобы можно было управлять громкостью звука, можно использовать усилитель с перемен- ным усилением, управляемым еще одним портом вывода. Работа программы состоит в последовательной выборке из памяти описания каждого аккорда и воспроизведении его звучания. Описание аккорда включает набор составляющих аккорд нот, громкость аккорда и его длительность. 10.4. На базе микропроцессора спроектируйте машину, играющую в крестики- нолики с человеком. Игровое поле состоит из 3x3 клеток. В каждой клетке должно быть две лампочки разного цвета, по одной на каждого противника, и одна кнопка для человека. Микропроцессор должен управлять полем при помощи портов ввода/вы- вода. Нужно предусмотреть дополнительные переключатели и индикаторы для пуска микропроцессора, для указания, какой из партнеров ходит первым, для индикации победителя и, возможно, числа побед, одержанных человеком в серии игр. 10.5. Спроектируйте на базе микропроцессора машину, играющую в трехмерные крестики-нолики. Машина должна быть аналогична машине из упр. 10.4, но игровое пространство должно иметь 3X3x3 клетки. Аналогичную машину можно построить с полем 4X4X4. Стратегия игры в трехмерные крестики-нолики гораздо сложнее по сравнению с двумерным случаем, особенно на поле 4X4X4. Поэтому хорошего результата можно добиться, скорее следуя интуитивной стратегии, чем пытаясь найти «выигрыш- ный алгоритм». 10.6. Спроектируйте машину для игры в шашки. Программами для игры в шашки и шахматы много занимались исследователи, работающие в области искусственного интеллекта. Существуют программы, прекрасно играющие в шашки, в то время как шахматные программы пока проигрывают хорошим шахматистам. Естественно, что разработка стратегии игры — это самый сложный аспект в создании машины для игры в шашки. Поэтому, чтобы наша задача была выполнимой, нужно выбрать достаточно простую стратегию, а главное внимание уделить проектированию интерфейсов. Машина должна иметь игровую доску, как в обычных шашках, с тремя лампоч- ками (разных цветов) и с кнопкой в каждом из 32 игровых полей. Лампочки двух цветов представляют шашки двух противников. Лампочка третьего цвета говорит о том, что в данном поле находится дамка. С помощью кнопок человек задает свои ходы. Для этого он должен сначала нажать кнопку в том поле, где находится шашка, совершающая ход, а затем нажать кнопку в том поле, куда она ходит. При взятии не- скольких шашек противника нужно также «нажимать» промежуточные поля, в кото- рые попадает шашка. Микропроцессор должен не только играть в шашки, но и управ- лять игровой доской, воспринимая нажатия клавиш и зажигая нужные лампочки. В конце игры микропроцессор должен объявлять победителя, а во время игры — контролировать допустимость ходов партнера. 10.7. Цифровое управление металлообрабатывающими станками является важ- ной частью автоматизации промышленного производства. Рассмотрим проблему управления прессом, пробивающим отверстия в плоском листе металла. Пресс состоит из стола, перемещающего лист вдоль двух взаимно пер- пендикулярных осей в горизонтальной плоскости, и пуансона над столом, который перемещается вертикально и пробивает отверстие в листе с помощью находящейся внизу матрицы. Перемещения стола вдоль каждой из горизонтальных осей осуществ- ляются с помощью винтовых подач, винты которых вращаются шаговыми моторами. Предположим, что каждый мотор управляется схемой, заставляющей его совершить некоторый единичный поворот по часовой стрелке в ответ на каждый импульс на одной входной линии и против часовой стрелки в ответ на каждый импульс на другой вход- ной линии.
УЧЕБНЫЕ ПРОЕКТЫ 443 Рис. У 10.8. (а) Робот-рука, управляемый микропроцессо- ром. (б) Двухканальный шиф- ратор положения. Схема управления мотором, перемещающим пуансон, обеспечивает полный цикл штамповки отверстия на каждый поступающий на схему импульс. Спроектируйте на базе микропроцессора контроллер для такого пресса. Контрол- лер должен последовательно перемещать лист металла в соответствии с координатами, записанными в памяти, и в каждой позиции пробивать отверстие. Для перемещения стола контроллер должен подавать нужное число импульсов на схемы управления моторами стола, определяемое разностями координат новой и старой позиций. В на- чале работы лист должен находиться в фиксированной исходной позиции, с которой связано начало координат и которая соответствует размещению пуансона над левым нижним углом листа. Для установки листа в исходное положение служат концевые выключатели. Стол перемещается в направлении концевых выключателей, пока они не сработают. Этой начальной установкой должен также управлять микропроцессор. Для простоты можно считать, что координаты позиций штамповки уже находятся в памяти, и не предусматривать средств для их ввода извне. В то же время можно разработать и более полный проект, включающий терминал для ввода координат позиций как вручную, так и с перфоленты. Кроме того, можно предусмотреть про- граммную генерацию координат отверстий в соответствии с задаваемым описанием геометрии их расположения, например вдоль окружности заданного радиуса и т; п. 10.8. Спроектируйте управляемый с помощью микропроцессора обучаемый ро- бот-руку.’ Рука, как показано на рис. У10.8(а), состоит из основания, двух жестких цилиндрических звеньев и захвата с двумя пальцами. Имеется два шарнирных сочле- нения: «плечо», соединяющее основание с первым звеном, и «локоть», соединяющий
444 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ два звена между собой. В каждом сочленении возможны два вращательных движения: одно вращение — вокруг оси, жестко связанной с предыдущим, более близким к ос- нованию элементом руки, другое — вращение звена вокруг собственной оси. Захват жестко связан со вторым звеном. Два «пальца» захвата могут сходиться или расхо- диться, оставаясь параллельными друг другу. Как легко видеть, всего рука имеет пять степеней свободы, пять независимых движений. Каждое движение выполняется с помощью сервомотора постоянного тока. Для управления движением на валу каж- дого сервомотора должен находиться шифратор положения. Можно применить шифраторы положения, аналогичные показанному на рис. У10.8(б). Он представляет собой прозрачный диск с непрозрачными метками, нанесенными вдоль двух концентрических колец. Метки имеют ту же ширину, что и промежутки между ними. С одной стороны диска помещается источник света, с дру- гой — два фотодетектора, по одному на каждом кольце. Фотодетектор дает на выходе логическую 1, если метка находится напротив детектора, и логический 0 в противном случае. Как легко заметить, метки двух колец сдвинуты по отношению друг к другу на половину своей ширины. В результате сигналы фотодетекторов оказываются сдвину- тыми во времени друг относительно друга, и благодаря этому можно легко установить направление вращения с помощью простой последовательностной схемы. Текущее угловое положение также легко определить, подсчитывая число переключений сиг- нала на входах двух фотодетекторов. Для этого можно воспользоваться реверсивным счетчиком, направление счета которого определяется направлением вращения вала. Таким образом, счетчик будет показывать угловое положение вала относительно не- которого начала отсчета, которое можно устанавливать с помощью концевых выклю- чателей. Для подключения руки к микропроцессору схемы управления сервомоторами нужно подключить к портам вывода, а счетчики углового положения — к портам ввода. Для управления каждым сервомотором нужен двухбитовый выводной порт, по одному биту на каждое направление вращения. Число портов ввода зависит от разрядности счетчиков, которая в свою очередь зависит от требуемой разрешающей способности. При восьмиразрядных счетчиках относительная разрешающая способ- ность составляет 1/256. Это примерно 1,5° на шаг (если считать диапазон угловых перемещений равным 360°). Такое разрешение приемлемо для многих применений, и, следовательно, для них будет достаточно одного восьмибитового порта ввода на каждый счетчик. В любом случае разрешающая способность будет определяться ко- личеством меток на диске шифратора и передаточным отношением в приводе от вала к соответствующему шарниру. Описанный интерфейс позволяет микропроцессору и управлять движениями руки, и определять ее положение. В частности, можно запрограммировать микропро- цессор так, чтобы он провел руку через заданную последовательность позиций. Для обеспечения процесса обучения предусматривается кнопка, нажатие которой застав- ляет микропроцессор ввести значения со всех пяти счетчиков. При этом можно вос- пользоваться как системой прерываний, так и опросом бита состояния. * Обучение может выполнять человек, двигая руку робота своими руками от по- зиции к позиции с выключенными моторами. В каждой промежуточной позиции че- ловек нажимает кнопку и позиция запоминается в микропроцессоре. Накопив список последовательных позиций в памяти, микропроцессор может в дальнейшем обеспе- чить многократное выполнение рукой того же движения. t0.9. Спроектируйте на основе микропроцессора контроллер для модели желез- ной дороги. Рассмотрите пути, состоящие из нескольких замкнутых колец и тупиков со стрелками на разветвлениях, причем считайте, что на путях находятся по крайней мере два поезда с моторами постоянного тока. Контроллер должен управлять марш- t рутами поездов в соответствии с поступающими с клавиатуры командами. Должны» । быть предусмотрены, например, такие команды: 1. Проследовать кратчайшим маршрутом из данной точки в указанный пункт на-, Значения и остановиться.
УЧЕБНЫЕ ПРОЕКТЫ 445 2. ^Двигаться по замкнутому кольцу до поступления других указаний. 3. Уйти в тупик. Микропроцессор должен обеспечивать выполнение команд так, чтобы поезда не столкнулись, не попали на закрытые стрелки и чтобы не было других аварий. Для этого микропроцессор должен располагать информацией о текущем положении поез- дов, управлять направлением их движения и скоростью и переключать стрелки. Для этого, чтобы определить положение поездов и управлять их движением, все пути разбиваются на участки. Напряжение питания на каждый участок подается не- зависимо. Присутствие состава на участке можно определить по потребляемому этим участком току. Для этого достаточно в цепь питания «отрицательного» рельса вклю- чить резистор, как показано на рис. У10.9. Если есть потребление тока на участке, то на резисторе возникнет падение напряжения, которое с помощью специального усилителя будет превращено в логическийА'сигнал. В приведенной на рисунке схеме предполагается, что полярность напряжения на рельсах не меняется, Если же поляр- ность меняется, то нужно воспользоваться схемой с диодами на обеих сторонах пути, напоминающей вентиль И. В интерфейс между микропроцессором и железной дорогой будут входить порт вывода для подачи напряжения на каждый участок и бит порта ввода для управления каждой стрелкой. Для управления напряжением, подаваемым на участок, можно вос- пользоваться ЦА-преобразователем с соответствующим токовым формирователем на выходе. Нужно также предусмотреть порт ввода для подключения управляющей клавиатуры. Начальное положение поездов можно считать фиксированным и известным микро- процессору. В дальнейшем он должен следить за их положением, управляя их пере- мещениями, в соответствии с поступающими с клавиатуры командами. Он должен по- давать напряжение на те или иные участки и переключать стрелки. Программа мик- ро-процессора должна также уметь находить кратчайшие маршруты. В модель железной дороги можно ввести много усовершенствований и дополни- тельных элементов, таких, как шлагбаумы, семафоры, устройства для сцепления вагонов, погрузчики и т. п. Микропроцессор мог бы управлять и этими дополнитель- ными элементами.
446 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ 10.10. Спроектируйте домашнюю метеостанцию с микропроцессором, которая измеряет метеорологические параметры и выдает краткосрочный прогноз погоды. В число измеряемых параметров можно включить пять величин: температуру, давле- ние, относительную влажность, скорость ветра и его направление. Для измерения температуры можно воспользоваться термистором, полупровод- никовым прибором, сопротивление которого падает с ростом температуры. Давление можно измерять при помощи датчика давления или же, присоединив какой-либо инди- катор натяжения к стенке герметично запаянной коробки. Относительную влажность можно измерять гигрометром того или иного вида. Он может состоять из двух термис- торов, один из которых сухой, а другой поддерживается во влажном состоянии при помощи фитиля, опущенного другим концом в воду. За счет испарения влажный тер- мистор будет охлаждаться. Зная температуру обоих термисторов, можно определить относительную влажность по общеизвестным таблицам. Скорость ветра измеряется анемометром, представляющим собой ротор с лопастями в виде чашек, которые за- хватывают ветер и приводят ротор во вращение. Наконец, направление ветра можно измерять при помощи флюгера, связанного со специальным потенциометром. Потен- циометр не должен иметь стопоров, ограничивающих вращение, и должен изменять свое сопротивление в диапазоне практически полного оборота на 360°. Микропроцессор должен преобразовывать измеряемые аналоговые сигналы в цифровую форму и вводить получаемые данные. Данные в определенном формате должны выдаваться на индикаторы. На основе собранной информации микропроцес- сор должен делать краткосрочный прогноз и выдавать результаты на специальные индикаторы. В основу прогноза можно положить простые эмпирические правила, например: 1. Хорошая погода имеет тенденцию сохраняться, если давление остается высоким или растет, и небольшой ветер дует с запада или с северо-запада. 2. Нужно ждать дождя, если давление падает, и ветер дует с юга или юго-запада. 3. Дождь или снег скорее всего будет продолжаться, если давление падает, и ветер дует с юго-востока. 4. Температура скорее всего понизится, если давление растет, а умеренный ветер дует с северо-запада. Правила могут быть разными для разных районов земного шара. Они могут изменяться в зависимости от времени года. Кроме того, правила могут адаптивно из- меняться в зависимости от прошлого опыта работы метеостанции. 10.11. Спроектируйте компьютер для авторалли. Авторалли — это спортивное соревнование, в котором команда из двух человек, водителя и штурмана, проходит маршрут (трассу) по дорогам и улицам, следуя заданному описанию и предписанной скорости. Задача штурмана — интерпретировать пункты описания трассы, которые иногда бывают недостаточно четкими, и соответствующим образом информировать водителя. Вдоль трассы располагаются пункты контроля времени, на которых регистри- руется время, затраченное каждым автомобилем на прохождение участка от предыду- щего контрольного пункта или от начала трассы. Это затраченное время сравнивается с теоретическим временем, которое было бы затрачено, если бы автомобиль двигался точно с предписанной для данного участка скоростью. За каждую единицу времени (обычно это секунды) опережения или опоздания начисляются штрафные очки. И это единственная форма контроля за скоростью, поэтому важно выдерживать только среднюю скорость. Обычно штурман на дистанции все время следит за теоретическим временем, вы- числяя его по показаниям счетчика пройденного расстояния и скоростям, заданным в описании маршрута. Это теоретическое время сравнивается с фактическим време- нем, определяемым по часам. Водителю сообщаются результаты сравнения, и он со- ответствующим образом корректирует скорость, чтобы скомпенсировать опережение или опоздание. Иногда трасса бывает оборудована автоматическими пунктами кон-
УЧЕБНЫЕ ПРОЕКТЫ 447 троля времени, на которых время регистрируется, но результаты сравнения с факти- ческим временем не сообщаются. При проведении вычислений нужно учитывать, что показания счетчика пройден- ного расстояния для данного конкретного автомобиля могут отличаться от показаний автомобиля, на котором прокладывалась трасса. Эти отличия могут быть довольно су- щественными, поскольку на показания влияет диаметр колеса и, следовательно, из- ношенность шины. Поэтому в вычислениях участвует поправка, определяемая на спе- циальном калибровочном участке в начале маршрута. Компьютер для авторалли должен проводить вычисления, обычно выполняемые штурманом. А именно, компьютер должен вычислять и выдавать на индикаторы сле- дующие величины: 1. Теоретическое время. 2. Фактическое время. 3. Разность между теоретическим и фактическим временем. 4. Скорректированные показания счетчика пройденного расстояния. Исходными величинами для этих вычислений являются измеренное пройденное расстояние, затраченное время, предписанная скорость и вычисленная поправка. Измеренное пройденное расстояние можно получить, подключив генератор импуль- сов к приводу спидометра. Генератор должен давать один импульс на каждую прой- денную единицу расстояния. Путем подсчета этих импульсов (возможно, с использо- ванием системы прерывания программ) получается измеренное пройденное расстоя- ние. Затраченное время можно получить, подсчитывая импульсы от высокостабиль- ного генератора импульсов (возможно, также с использованием системы прерываний). Наконец, предписанная скорость и поправка должны вводиться с десятичной клавиа- туры и выдаваться на индикаторы. 10.12. Вычислительные возможности микропроцессора можно существенно уве- личить, снабдив его внешним арифметическим устройством, выполняющим операции, не предусмотренные в системе команд микропроцессора. Например, очень полезным мог бы быть умножитель, который получал бы множимое и множитель от микро- процессора через порты вывода, выполнял умножение и передавал бы результат микропроцессору через один или несколько портов ввода. Спроектируйте такой умножитель для какого-либо конкретного микропроцес- сора. Считайте, что исходные операнды имеют размер, равный размеру слова в вы- бранном вами микропроцессоре. Произведение будет иметь вдвое больший размер (16 битов для 8-битового микропроцессора). Поэтому предусмотрите по одному порту вывода на каждый операнд и два порта ввода для произведения. Если время умноже- ния окажется достаточно большим по сравнению с временем выполнения стандартной команды, по-видимому, целесообразно ввести два бита в соответствующих портах управления и состояния. Один бит можно использовать для задания начала умноже- ния, а другой — для информирования микропроцессора о его завершении. В проекте можно воспользоваться выпускаемыми промышленностью модулями умножения. Кроме умножения, можно рассмотреть другие операции и, в частности, деление, сложение и вычитание с плавающей точкой, тригонометрические функции. 10.13. Низкая стоимость микропроцессоров наталкивает на идею объединения нескольких микропроцессоров для повышения скорости вычислений за счет их парал- лельной работы. В принципе, конечно, существует много способов объединения микропроцессоров в систему. Рассмотрите, в частности, систему с одним главным мик- ропроцессором, управляющим несколькими подчиненными микропроцессорами. Главный процессор выполняет основную программу решения задачи и поручает под- чиненным процессорам выполнение отдельных шагов (например, операций расши- ренной арифметики, операций вычисления функций или операций ввода/вывода), входящих в алгоритм решения задачи. Спроектируйте такую мультипроцессорную систему с одним главным микропро- цессором, управляющим двумя или большим количеством подчиненных ему микро-
448 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ процессоров. У каждого микропроцессора должна быть своя система памяти для хранения команд и данных. Передача данных между главным и каждым из подчинен- ных микропроцессоров должна осуществляться через порты ввода/вывода с проме- жуточными запоминающими регистрами. Каждый подчиненный микропроцессор должен иметь библиотеку программ в сво- ей памяти. Главный процессор вызывает выполнение определенной программы в под- чиненном процессоре, посылая ему запрос на прерывание. Подчиненный процессор, выполнив программу, информирует об этом главный процессор, также посылая ему запрос на прерывание. При этом он может либо выполнять команду перехода, пе- редающую управление «на себя», либо в некоторых случаях бездействовать, выполнив команду останова. 10.14. Спроектируйте генератор кода Морзе на основе микропроцессора. Генера- тор предназначен для того, чтобы выдавать комбинации точек и тире, соответствую- щие символам, в выходную линию, которая управляет либо звуковым генератором, либо трансмиттером. Комбинации точек и тире для каждого символа берутся из нахо- дящейся в памяти таблицы. Каждая строка таблицы соответствует одному символу. При восьмибитовых словах комбинации точек и тире удобно представлять так. Точки и тире, представляемые 0 и 1 соответственно, располагаются у левого края слова. Дополнительная единица помещается правее последней точки или тире, и все остальные биты в слове заполняются нулями. Таким образом, дополнительная еди- ница — это всегда самая правая единица, и поэтому она может служить ограничите- лем, т. е. признаком конца последовательности точек и тире. Для генерации кода выбранного символа микропроцессор мог бы передавать представление символа в аккумулятор (или в аналогичный регистр). Затем он мог бы сдвйгать его влево по одному биту в триггер переноса (или в аналогичный флажковый триггер) и по его значению определять продолжительность сигнала на выходной ли- нии. В тот момент, когда единица-ограничитель попадет в триггер переноса, в сумма- торе окажется 0, и это будет означать, что генерация кода символа завершена. Продолжительности всех событий должны определяться выбранной длитель- ностью точки в соответствии со следующими стандартными требованиями: 1. Длительность тире равна трем длительностям точки. 2. Интервал между точкой и тире равен длительности точки. 3. Интервал между символами равен трем длительностям точки. 4. Интервал между словами равен пяти длительностям точки. Генератором можно пользоваться в различных режимах в зависимости от спосо- ба выбора символов. Символы могут вводиться по одному последовательно с клавиа- туры в коде ASCII или определяться сообщениями (например, сообщениями вызова или CQ-прото колом), хранящимися в памяти. Наконец, для тренировки операторов символы могут выбираться случайно по генератору случайных чисел. 10.15. Спроектируйте на основе микропроцессора интерпретатор кода Морзе. Интерпретатор должен принимать комбинации точек и тире на входной линии и пре- вращать их в соответствующие символы в коде ASCII так, чтобы их можно было на- печатать на принтере, работающем в коде ASCII. Для этого интерпретатор должен измерять продолжительность 1 и 0 на входной линии и находить точки, тире, проме- жутки между символами и промежутки между словами. Поскольку сообщения в коде Морзе часто посылаются оператором-человеком, мы должны исходить из того, что скорость передачи, вообще говоря, неизвестна и может меняться на протяжении сообщения. Таким образом, интерпретатор должен адапти- роваться к фактической скорости передачи. Это можно сделать, сначала оценив дли* тельность точки, а затем выразив все остальные длительности через длительность точ* ки, воспользовавшись приведенными в предыдущем упражнении соотношениями. Можно установить порог между длительностями точки и тире (скажем, равным двум длительностям точки) и пользоваться им для их распознавания. Можно также
УЧЕБНЫЕ ПРОЕКТЫ 449 установить порог (скажем в 4 длительности точки) для различения промежутков меж- ду символами и промежутков между словами, а также порог (скажем, в две длитель- ности точки) для различения промежутков внутри символа и промежутков между сим- волами. Наиболее сложная часть этой методики — оценка длительности точки. Оценку можно сделать разными способами; мы рекомендуем следующий. Начальная оценка делается усреднением нескольких промежутков между первыми точками и тире. В дальнейшем оценочная длительность точки все время корректируется по среднему значению длительности нескольких последних точек. Причем каждый раз, когда об- наруживается недопустимая комбинация точек и тире, снова происходит переход, к начальной оценке длительности точки. Для измерения длительности сигналов на входной линии можно опрашивать линию регулярно через определенное время. С помощью счетчиков в программе мож- но следить за числом опросов между переключениями линии. Время между опросами должно быть существенно меньше длительности точки при самой высокой скорости передачи. Принятые символы можно накапливать в памяти в том формате, который был описан в предыдущем упражнении, для последующего преобразования в код ASCII. Можно делать преобразование в код ASCII по ходу приема с помощью соответствую- щей таблицы перекодировки. 10.16. Спроектируйте на основе микропроцессора графический дисплей. Дисплей должен строить изображение из точек на экране электронно-лучевой трубки в соот- ветствии с находящейся в памяти информацией. Возможные позиции точек на экране определяются растром 256X 256. При построении изображения луч должен многократ- но сканировать только те позиции, где расположены светящиеся точки. Для этого на входы осциллографа х и у (горизонтального и вертикального отклонения) должны быть поданы выходы восьмибитовых ЦА-преобразователей, подключенных к портам вывода микропроцессора. В эти порты микропроцессор должен выдавать координаты сканируемых точек. Для того чтобы упростить работу с изображением, хранящимся в памяти, и сни- зить требования к необходимому объему памяти, примем следующий часто применяе- мый способ представления изображения в памяти. Будем считать изображение состоя- щим из нескольких (не более некоторого максимального числа) фрагментов, или под- изображений. Каждый фрагмент представляется в памяти списком пар координат, причем каждая пара задает координаты точки относительно некоторого центра фрагмента. Список пар координат для каждого фрагмента имеет произвольную длину и заканчивается словом-ограничителем из всех единиц. Изображение в целом представляется другим списком, состоящим из триплетов. Каждый триплет соответ- ствует одному фрагменту. Первые два элемента в триплете определяют координаты центра фрагмента на экране. Третий элемент соответствует начальному адресу списка, представляющего фрагмент в памяти. Список триплетов также заканчивается словом- ограничителем из всех единиц. Эти списки содержат полную информацию, нужную микропроцессору для вычисления координат всех высвечиваемых точек. Описанный способ представления изображения позволяет одному и тому же фраг- менту входить в изображение несколько раз. Это дает заметные преимущества, когда изображение содержит несколько аналогичных объектов (людей, автомобилей, де- ревьев и т. п.). Кроме того, фрагменты легко перемещать на экране, просто изменив координаты их центров. 10.17. Спроектируйте управляемое микропроцессором демонстрационное табло с бегущим изображением. Считайте, что поле табло состоит из 32X32 ламп, подклкг ченных к сети переменного тока через управляемые диоды — тиристоры. Тиристорами управляют триггеры портов вывода. При восьмибитовом слове для управления всем табло потребуется 128 восьмибитовых портов. Чтобы изображение воспринималось как движущееся, его нужно периодически, скажем 4 раза в секунду, обновлять. Новое изображение получается за счет внесения
450 ГЛ. 10. ПРИМЕРЫ ПРИМЕНЕНИЙ МИКРОКОМПЬЮТЕРОВ изменений в описание предыдущего изображения. При этом можно воспользоваться предложенным в предыдущем упражнении способом представления изображения в памяти. Тогда меняться будут только некоторые фрагменты, а все остальные будут только перемещаться. Для формирования изображения в виде, удобном для посылки в порты вывода, нужно выделить некоторую область памяти. Каждый раз, когда фор- мируется изображение, эта область сначала заполняется нулями, а затем в процессе обработки совокупности списков в нужные места заносятся единицы. После этого вся область слово за словом выдается в порты вывода, управляющие лампами табло. 10.18. Спроектируйте цифровой вольтметр для измерения параметров кривых переменных напряжений. Вольтметр должен вычислять и выдавать на индикаторы любую из следующих величин: максимум, минимум, размах, среднее квадратичное среднее абсолютной величины и алгебраическое среднее. Для этого нужно опрашивать мгновенные значения напряжения за период и по результатам опроса вычислять тре- буемую величину. За период можно выбрать часть кривой между двумя соседними максимумами. Результат каждого опроса должен быть преобразован в цифровую форму. Для этого нужно воспользоваться ЦА-преобразователем и компаратором. Считайте, что преоб- разуемое напряжение лежит в интервале от —1 до +1 В. Входное напряжение при- водится к этому интервалу с помощью делителя напряжений (на резисторах), управ- ляемого переключателем диапазона измерений. Считайте, что частота измеряемого напряжения лежит в диапазоне от 40 до 120 Гц и что частота опросов около 10 000 в секунду достаточна. Преобразованные резуль- таты опросов можно накапливать в памяти. По накопленным результатам вычисляет- ся требуемая величина, переводится в десятичную систему и выдается на индикаторы. Для выбора вычисляемой величины нужно использовать переключатель, подсоеди- ненный к порту ввода. Число битов в представлении опрашиваемого мгновенного значения напряжения ограничивает точность вольтметра. Для восьмибитового микропроцессора удобно это значение также представлять восемью битами, что соответствует примерно 2.5 деся- тичным знакам и ошибке около 0.4%. В большинстве случаев такая точность достаточ- на, но, если нужно, можно обеспечить и более высокую точность. 10.19. Переработайте проект электронных весов на базе какого-нибудь промыш- ленного микропроцессора и расширьте их возможности. Одно из расширений могло бы, например, быть связано с возможностью задавать стоимость не только за кило- грамм, но и за 100 граммов. 10.20. Переработайте проект электронного светофора на базе какого-нибудь промышленного микропроцессора и другой стратегии. Если нужно, воспользуйтесь дополнительными датчиками, расположенными на некотором расстоянии до пере- крестка, так, чтобы по ним можно было определить наличие очереди машин перед перекрестком.
ПРИЛОЖЕНИЕ Таблица П1 Список команд иллюстративного микропроцессора в алфавитном порядке Символическая, форма. (R₽0.1,.... F) Шестнадцатеричный код Числа foumot (R = 0, .F) ADC R 9R 1 ADD R 8R 1 ANDR CR 1 CMA FO I CMC F3 I DHL F6 I DIT FC 1 EIT FB I HLT FA 1 JHL F5 1 INP FD 2 JAM 7E 3 JAN 7D 3 JAP 7A 3 JAZ 79 3 JCN 7$ 3 JCZ. 7C 3 JHL F9 I JMP 7B 3 JMS 7E 3 LDRO 7G 3 LDR I 71 3 LDR 2 72 3 LRI R 6R 2 MOV 0 from R 1R 1 MOV 0 to R OR I MOV 1 from R 3R 1 MOV 1 to R 2R 1 MOV 2 from R 5R 1 MOV 2 to R 4R 1 NOP F7 1 OR R DR 1 OUT FE 2 POP 73 1 PUSH 77 1 RET F8 1 'RSC F4 1 RTL Ft 1 RTR F2 1 SBC R BR 1 STR Q 74 3 STR I 75 J STR 2 76 3 SUB R AR 1 XOR R ER 1
452 ПРИЛОЖЕНИЕ Таблица П2 Список команд иллюстративного микропроцессора в порядке номеров Шестнадцатеричный Символическая коа (R = 0, 1 F форма ) (R-0, Число байтов 0R MOV 0 to R 1 1R MOV 0 from R 1 2R MOV 1 to R 1 3R MOV 1 from R 1 4R MOV 2 to R 1 5R MOV 2 from R 1 6R LRI R 2 70 LDR 0 3 71 LDR 1 3 72 LDR 2 3 73 POP 1 74 STRO 3 75 STR 1 3 76 STR 2 3 77 PUSH 1 78 JCN 3 79 JAZ 3 7А JAP 3 7В JMP 3 7С JCZ 3 7D JAN 3 7Е JAM 3 7F JMS 3 8R ADD R 1 9R ADC R 1 AR SUB R 1 BR SBC R 1 CR AND R 1 DR OR R 1 ER NOR R 1 F0 CMA 1 F1 RTL 1 F2 RTR 1 F3 CMC 1 F4 RSC 1 F5 IHL 1 F6 DHL 1 F7 NOP 1 F8 RET 1 F9 JHL 1 FA HLT 1 FB E1T 1 FC DIT 1 FD INP 2 FE FF OUT (не используется 2
ЛИТЕРАТУРА Agerwrala, Tilak, Gerald Masson, and Roger Westgate: “Designing with Microprocessors”, Institute of Electrical and Electronic Engineers, Inc., New York, 1976. Altman, Laurence (ed.): “Microprocessors”, Electronics Book Series, McGraw-Hill Publications, New York, 1975. Aspinall, D., and E. L. Dagless (eds.): “Introduction to Microprocessors”, Academic Press, Inc., New York, 1977. Barna, Arpad, and Dan I. Porat: “Introduction to Microcomputers and Microprocessors”, John Wiley & Sons, In., New York, 1976. Bibbero, Robert J.: “Microprocessors in Instruments and Control”, John Wiley & Sons, Inc., New York, 1977. ”EDN Microprocessor Design Series”, Cahners Publishing Company, Boston Mass., 1974. ------- “EDN Microprocessor Design Series Volume II”, Cahners Publishing Company, Boston, Mass., 1975. Garland, Harry: “Introduction to Microprocessor System Design”, McGraw-Hill Book Company, New York, 1979. Hilburn, John L., and Paul M. Julich: “Microcomputers /Microprocessors: Hardware, Software, and Applications”, Prentice Hall, In., Englewood Cliffs, N. J., 1976. (Русский перевод: Хилбрн Дж., Джулич П. Микро-ЭВМ и микропроцессоры.— М.: Мир, 1979.] Klingman, Edwin Е.: “Microprocessor Systems Design”, Prentice-Hall, Inc., Engle- wood Cliffs, N. J., 1977. [Русский перевод: Клингман Э. Проектирование микро- процессорных систем.— М.: Мир, 1980.] Korn, Granino A.: “Microprocessors and Small Digital Computer Systems for Engineers and Scientists”, McGraw-Hill Book Company, New York, 1977. Leahy, William F.: “Microprocessor Architecture and Programming” John Wiley & Sons, Inc., New Yofk, 1977. Lee, Samuel C. (ed.): “Microcomputer Design and Application”, Academic Press, Inc., New York, 1977. Lesea, Austin, and Rodnay Zaks: “Microprocessor Interfacing Techniques”, 2d ed., SYBEX Inc, Berkeley, Calif., 1978. Leventhal, Lance A.: “Introduction to Microprocessors: Software, Hardware, Program- ming”, Prentice-Hall, Inc., Englewood Cliffs, N. J., 1978. Lin, Wen C. (ed.): “Microprocessors: Fundamentals and Applications”, IEEE Press, New York, 1977. McGlinn, Daniel R.: “Microprocessors: Technology, Architecture and Applications”, John Wiley & Sons, Inc., New York, 1976. Motorola Semiconductor Products, Inc.: “Microprocessor Applications Manual”, Me Graw-Hill Book Company, New York, 1975. Osborne, Adam: “An Introdution to Microcomputesr Volume I: Basic Concepts”, Adam Osbone and Associates, Inc., Berkeley, Calif., 1976. ------- “An Introduction to microcomputers Volume II: Some Real Products”, Adam Osborne and Associates, Berkeley, Calif., 1976,
454 ЛИТЕРАТУРА If ------ “8080 Programming for Logic Design”, Adam Osborne and Associates, Inc., Berkeley, Calif, 1976. Peatman, John B.: “Microcomputer-Based Design”, McGraw-Hill Book Company, New York, 1977. Rao, Guthiconda V.: “Microprocessor and Microcomputer Systems”, Van Nostrand Reinhold Company, New York, 1978. Sippl, Charles J.: “Microcomputer Dictionary and Guide”, Matrix Publishers, Inc., Champaigne, Ill., 1975. ------ “Microcomputer Handbook”, Petrocilli/Charter, New York, 1977. Soucek, Branko: “Microprocessors and Microcomputers”, John Wiley & Sons, Inc., New York, 1976. Veronis, Andrew: “Microprocessors: Design and Applications”, Reston Publishing Com- pany, Inc., Reston, Va., 1978. Weller, W. J., A. V. Shatzel, and H. Y. Nice: “Practical Microcomputer Programming: The Intel 8080”, Nothern Technolgy Books. Evanston, Ill., 1976. Zaks, Rodnay: “Microprocessors: From Chips to Systems” SYBFX Inc., Berkeley, Calif., 1977.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Автоиндексирование (autoindexing) 286 Авторалли 446 Адрес (address) 13, 212 Адресации способ (addressing mode) 285 Адресация индексная (indexed) 286 — косвенная (indirect) 286 — непосредственная (immediate) 286 — относительная (relative) 287 — прямая (direct) 285 — страничная (page) 287 Адресная шина (address bus) 17, 201 Аккумулятор — АК (Асе) 14, 255 Алфавитно-цифровые коды (alphanume- ric) 50 Аналоговая информация 16, 368 Аналого-цифровой преобразователь (апа- log-to-digital converter) 16, 376 Аппаратура (hardware) 11 Аргумент подпрограммы 280, 305 Арифметика двоичная (binary) 31 — десятичная (decimal) 41 Арифметико-логическое устройство (ari- thmetic-logic unit) 14, 256 Архитектура микропроцессора 252 Асинхронная передача данных 386 Асинхронные входы 160 Ассемблер 292, 318 Ассоциативности закон 61 Аттенюатор 369 Буферный усилитель [см. Формирова- тель] Ввод (input transfer) 259 Векторная приоритетная система (vecto- red interrupt scheme) 339 Вентиль (gate) 77, 102 Весы электронные 405—416 Взвешенный код (weighted code) 41 Вложенные обращения (nested subrou- tines) 280, 304 Вольтметр цифровой (digital) 450 Восстановитель (restorer) 103 Время выборки (read-access time) 355 — задержки сигнала (propagation delay) 105 ----снятия данных (data hold time) 356 — предустановки адреса (address setup time) 355 ----данных 356 Вывод (output transfer) 259 Высокая степень интеграции (large scale integration) 10 Вычитатель (subtractor) 184 — параллельный 184 — с последовательным переносом (rip- ple-carry subtractor) 187 База (base) 96 Байт (byte) 12, 253 Биполярный транзистор (bipolar jun- ction transistor) 96 Бит (bit) 12, 24 — четности (parity bit) 47 Блок-схема программы (flow-chart) 297 Блок управления и синхронизации БУС (timing and control unit) 256 Большая интегральная схема — БИС 10 Булева алгебра 53 Булево выражение (Boolean expression) 57 Буфер вентиля 103 Гарвардского типа машина 13 Генератор кода Морзе 448 — напряжения (voltage generator) 373 — переносов (look-ahead-carry genera- tor) 194 — тактовых импульсов (clock) 15, 400 Данных шина (data bus) 17 Двоичная арифметика (binary) 31 Двоичное дерево 303 Двоично-кодированная десятичная схема (binary-coded decimal scheme) 41
456 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ ----------- 8421 BCD Двойного отрицания закон (involution law) 61 Двойственности принцип (duality) 62 Двумерная адресация 217 Двухтактный триггер [см. MS-триггер] Двухфазный источник синхроимпульсов 150 Делитель фаз синхроимпульсов (phase splitting circuit) 401 Десятичная арифметика (decimal) 41 Десятичной коррекции команда (decimal adjust instruction) 290 Дешифратор (decoder) 178 — команды (instruction decoder) 255 Динамическая память (dynamic memory) 227 Диод 94 Диодно-транзисторная логика — ДТЛ (DTL) 104 Диодный вентиль 103 Директива ассемблера 322 Дисплей на электронно-лучевой трубке 431—437 — графический 449 Дистрибутивности закон 61 Дифференциальная схема (differential ci- rcuit) 124 Диффузия 94 Длительность импульса записи (write pulse width) 355 Дополнительный код числа (2’s comple- ment representation) 37 Дырки (holes) 92 Железной дороги модель 444 Загрузка программ (loading) 312 Загрузчик (loader) 312 Законы (теоремы) булевой алгебры 61 Запись (write transfer) 259 Запоминающее устройство — ЗУ (me- mory unit) 12, 211 — — на цилиндрических магнитных до- менах (magnetic bubble memory) 243 — оперативное — ОЗУ (read-write random access memory) 230 ----постоянное — ПЗУ (read-only me- mory — ROM) 223 -------- программирование 231 ----с произвольным доступом (random access memory — RAM) 212 Запрос на прерывание (interrupt request) 339 Затвор (gate) 99 Зона проводимости (conduction band) 92 И (логическое умножение, дизъюнкция) (AND) 54 Идемпотентности закон (idempotent law) 61 ИЛИ (логическое сложение, конъюнк- ция) (OR) 55 ИЛИ-HE (NOR) 83 Инвертор 77 Индекс-регистр 286 И-НЕ (NAND) 80 Интегральная инжекционная логика— И2Л (IIL) 129 --------Шоттки 132 Интерпретатор кода Морзе 448 Интерфейс 327 Исключающее ИЛИ (exclusive OR) 85 — ИЛИ-HE [си. Эквивалентность] Исток (source) 99 Исходная программа (source program) 318 Исходный адрес (stated address) 285 Канал (channel) 99 Каноническая сумма минтермов 59 Каноническое произведение макстермов 65 Карта Карно (Karnaugh map) 68 Клавиатура терминала (keyboard) 428— 431 КМОП-вентили (CMOS-gates) 136—140' Код операции (operation code) 15 — самодополнительный (self-comple- menting) 42 — с избытком 3 (exess-3 code) 42 — 2 из 5 42 — ASCH 48 Коллектор (collector) 96 Команда (instruction) 14—15 Командный цикл (instruction cycle) 15,260 Команды иллюстративного микропроцес- сора (instructions) — арифметические 266, 280 — ввода/вывода (input/output) 268, 282 — логические 267 — обращения к памяти (memory referen- ce) 262, 276 — — к подпрограммам (subroutine) 265, 279 — передач управления (jump) 263, 276 — пересылки (move) 262, 273 — с непосредственной адресацией (im- mediate) 262, 275 — специальные (special) 269, 284 ' Комбинационная схема (combinational network) 56, 77 > Комментарий (comment) 322 Коммутативности закон 61 Компилятор (compiler) 292, 304
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 457 Комплементарная логика — КМОП (CMOS-logic) 136 Контрольный бит четности (parity bit) 47 Косвенная адресация (indirect addressing) 255 Коэффициент объединения по входу (fan- in) 105 — разветвления по выходу (fan-out) 105 Крестики-нолики 442 Кросс-ассемблер 319 Круговой перенос (end-around carry) 40 «Лестница» резисторов 369 Литерал 70 Литеры (characters) 50 Логика с эмиттерными связями — ЭСЛ (emitter-coupled — ECL) 121 Логические диаграммы 77 Макрокоманда (macroinstruction) 323 Макстермы (maxterms) 66 Маломощные ТТЛ-схемы (low-power TTL) 118 Машинный цикл (machine cycle) 15, 258 Метеостанция 446 Метка (label) 320 Метод совершенной индукции (perfect induction) 62 Микрокоманда 339 Микропрограммирование 399 Микропроцессор 10 Миникомпьютер 10 Минимальная сумма 70 Минимальное произведение 73 Минтермы (minterms) 59 Модем 391 Монтажная логика (wired logic) 111 МОП-вентили (MOSFET-gates) 134—135 МОП-транзистор (MOSFET) 99, 132 т-r — с изолированным затвором (flo- ating gate) 236 де Моргана закон 61 Музыки воспроизведение 441 Мультиплексированная шина 366 Мультипроцессорная система 447 Насыщение транзистора (saturation) 98 НЕ (отрицание, инверсия, дополнение) (NOT) 56 Недоопределенные условия (don’t саге conditions) 75 фон-неймановского типа машина 13 Неосновные носители заряда (minori- ty charge carriers) 93 Нормально закрытый транзистор (nor- mally off) 100 — открытый транзистор (normally on) 100 Носители заряда (charge carriers) 92 Обратное смещение (reverse bias) 95 ’ Обратный код числа (l’s complement rep- resentation) 35 Обращение (complementing) 36 Объектная программа (object program) 318 Однокристальный микрокомпьютер (sing- le chip microcomputer) 439 Оперативное запоминающее устройство (read-write random access memory) --------динамическое на МОП-схемах (dynamic MOS) 227 --------статическое на МОП-схемах (stau tic MOS) 225 -----------на ТТЛ-схемах (static TTL) 223 Оператор (statement) 318 Основание системы счисления (base, ra- dix) 22 Основные носители заряда (majority charge carriers) 93 ‘ • Открытый коллектор (open collector — о. с.) 114 Отрицательная логика (negative logic) 104 Очередь (queue) 245 Память [см. также Запоминающее ус- тройство] — на подвижных магнитных носителях 246 — на цилиндрических магнитных доме- нах (magnetic bubble memory) 242 — постоянная — ПЗУ (read-only me- mory — ROM) 131, 230 -----перепрограммируемая — ППЗУ (erasable programmable read-only me- mory) 236 — co считыванием и записью — ОЗУ (read-write memory — RWM) 13, 223 — с последовательным доступом (seque- ntial access memory) 237 — с произвольной выборкой — ЗУПВ (random access memory — RAM) 13 Параметр подпрограммы 280, 305 Переключаемые банки памяти (switching memory banks) 368 Переключательная алгебра [см. Булева алгебра] Перенос (carry) 39 Переполнение (overflow) 39, 191
458 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Переход (jump) 18 — безусловный (unconditional) 278 — на подпрограмму (jump to subroutine) 18 — условный (conditional) 276 Периферийные устройства (peripherals) 15 Подложка (substrate) 99 Подпрограмма (subroutine) 18, 279, 304 Позиционная система счисления 22 Полевой транзистор (field effect tra- nsistor) 99 Положительная логика (positive logic) 104 Полупроводник (semiconductor) 92 — п-типа93 — p-типа 93 Помехоустойчивость (noise immunity) 105 Порт ввода/вывода 15, 328 «Последним вошел — первым вышел» (last-in first-out) 19 Последовательностная схема (sequential network) 56—57, 144 Последовательный ввод-вывод (sequen- tial input/output) 383 Постоянное запоминающее устройство — ПЗУ (read-only memory — ROM) 230 --------перепрограммируемое — ППЗУ (erasable programmable read-only me- mory) 236 Предложение языка ассемблера [см. Опе- ратор] Прерывание программы (program inter- rupt) 19, 338 Прерывания с программным опросом (polled interrupt scheme) 339 Прессом управление 443 Приборы с зарядовой связью — ПЗС (charge-coupled devices) — CCD) 240 Принстонского (фон-неймановского типа) машина 13 Приоритетов цепочка (daisy-chain) 342 — шифратор (priority encoder) 344 Программа 292 Программирование ПЗУ 231 Программное обеспечение (software) 11, 292 Программный счетчик, или счетчик ко- манд (program counter) 14, 255 Протокол взаимодействия 332 Прямое смещение (forward bias) 95 Прямой доступ к памяти — ПДП (direct memory access — DMA) 16, 361 — код числа (sign-magnitude represen- tation) 33 Пульт для микрокомпьютера 440 Рабочий регистр (scratchpad register) 14 Разрешения линия (enable) 114 Рассеиваемая мощность (power dissipa- tion) 105 Рассогласование синхронизации (clock skew) 157 Реального времени система (real time system) 10 Регенерация динамической памяти (re- fresh operation) 359 Регистр (register) 21, 161 — адреса данных (data address register) 255 — команды (instruction register) 14, 255 — общего назначения (general purpose) 14, 255 — рабочий (scratchpad register) 14 — сдвиговый (shift) 165 Режим обеднения (depletion mode) 100 — обогащения (enhancement mode) 100 Рекурсия 19 Ресивер 390 Робот-рука 443 Рукопожатие (handshaking) 207 Светофор электронный 417—427 Сдвиговый регистр (shiftregister) 165 ---- циклический 166 Секция микропроцессорная (micropro- cessor slice) 391 Селектор 181 Семисегментный индикатор (seven-seg- ment readout) 183 Символы [см. Литеры] Синхронная передача данных 384 Синхронный триггер (clocked flip-flop) 147 Система реального времени (real time system) 10 Слово (word) 12, 211 — состояния программы (program status word) — PSW 14, 289 Собственный ассемблер (self-assembler) 319 Совмещенная транзисторная логика (mer- ged transistor logic) 129 Стандартная сумма произведений [см. Каноническая сумма минтермов] Стандартное произведение сумм [см. Каноническое произведение макстер- мов] Стандартные ТТЛ-схемы (standard-TTL) 118 Статическое ОЗУ (static memory) 222 * Стек (stack) 18, 247 — моделируемый (simulated) 249, 305' Сток (drain) 99
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ 459 Стробирующая линия (strobe line) 202 Сумматор (adder) 184 — параллельный 184 — полный (full) 185 — с последовательным переносом (ripple carry) 186 — с ускоренным переносом (look-ahead carry) 191 — микрокомпьютера 11 Сумматор/вычитатель 188 Схема (circuit) — с непосредственной связью (direct- coupled) 104 — с общим эмиттером (common emitter) 98 — с тремя состояниями (three state) 114 Счетчик (counter) 167 — асинхронный (asynchronous) 171 - г- в коде Грея 175 — декадный 173 — десятичный 173 — команд, или программный (program counter) 14, 255 — синхронный (synchronous) 171 ---в коде Грея 177 ---двоичный вычитающий (binary- down) 173 --------суммирующий (binary-up) 170 Таблица истинности (truth table) 56 — переходов (branch table) 300 Тактовый генератор [см. Генератор так- товых импульсов] Транзистор биполярный (bipolar tran- sistor) 96 — МОП (MOS) 99 Транзисторно-транзисторная логика — ТТЛ (TTL) 105 --------с диодами Шоттки — ТТЛДШ (Schottky TTL) 121 Трансмиттер 390 Триггер (flip-flop) 144 — переключаемый фронтом синхроим- пульса (edge-triggered) 155 — переноса (carry) — С 256 — типа D 154 ----JK 153 ----MS 149 — — RS (SR) 145 --------синхронный (clocked) 147 ----Т 154 —, трехступенчатый (with data lockout) 157 Тристабильная схема (three state) 114 Указатель стека (stack pointer) 249, 305 Умножение в микропроцессоре 310 Универсальная операция 80 Универсальный асинхронный ресивер/ трансмиттер — UART 390 — простой микрокомпьютер 427 — синхронный ресивер/трансмиттер — USRT 390 Упаковка (packing) 325 Управления устройство (control unit) 14 — шина (bus) 17 Усилитель операционный (operational amplifier) 374 Устройства ввода-вывода (input/output units) 15 Фаза выборки и дешифрации (fetch and decode) 260 — выполнения (execute) 272 Фиксатор (latch) 148 Флажок (flag bit) 14 Формат команды (instruction format) 14 Формирователь (driver) 78 — фаз (phase splitter) 150 Центральное процессорное устройство — ЦПУ (central processing unit — CPU) 11 Центральный процессор — ЦП (central processor) 11 —12 Цикл — в программе (loop) 298 — командный (instruction cycle) 260—261 — машинный (machine cycle) 258 — синхронизации (clock cycle) 149 Цилиндрические магнитные домены (mag- netic bubbles) 242 Цифра (digit) 22 Цифро-аналоговый преобразователь (digit-to-analog converter) 16, 369 Шашки 442 Шина (bus) 16 — асинхронная 206 — данных (data bus) 203 — двунаправленная (bidirectional) 205 — общая (single bus) 203 — параллельная (word-parallel) 198 Шоттки диод 119 — транзистор 121 Число (number) 22 — с n-кратной точностью (multipreci- sion) 307 Чтение (read transfer) 259
460 ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ Эквивалентность (Equivalence) 85 Эмиттер (emitter) 96 Эмиттерный повторитель (emitter follo- wer) 125 Эффективный адрес (effective address) 285 JK-триггер 153 L (регистр) 256 LIFO 19, 247 Язык ассемблера (assembly language) 318 — высокого уровня (high level language) 29, 324 — машинный (machine language) 292 Ячейка памяти (location) 13, 111 MS-триггер 149 ORG 323 Асе (регистр) 14, 255 ASCII 48 n-канальный транзистор 101 р-канальный транзистор 101 BCD 41 рп-диод (p/i-junction diode) 94 POP 250 PROM 233 PSW 14 CCD 240 PUSH 250 D-триггер 154 DB 322 DMA 16 R-селектор 255 г-селектор 255 RAM 13 RES 323 EPROM 236 ROM 13, 230 RS-триггер (SR-flip-flop) 147 PWM и FIFO 245 I\ W X’l X о Т-триггер 154 UART 390 H (регистр) 256 Univac 1 9 USRT 390
ОГЛАВЛЕНИЕ От редактора перевода ................................................... 5 Предисловие.............................................................. 7 Глава 1. Микропроцессоры и микрокомпьютеры: Общие сведения....................,........................................ 9 1.1. Новая эра вычислений............................................ 9 1.2. Микропоцессоры и микрокомпьютеры.............................. 10 1.3. Типовая структура микрокомпьютера.............................. II 1.4. Функционирование микрокомпьютера.............................. 17 1.5. Еще два понятия................................................ 18 1.6. О последующих главах.......................................... 20 Глава 2. Системы счисления и арифметика ................................ 22 2.1. Позиционные системы счисления..........................* 22 2.2. Преобразование чисел из одной системы счисления в другую .... 25 2.3. Двоично-восьмеричные и двоично-шестнадцатеричные преобразования 29 2.4. Двоичная арифметика............................................ 31 2.5. Двоичные числа со знаком..................................... 33 2.6. Сложение и вычитание чисел со знаком........................... 38 2.7. Двоично-кодированные десятичные числа и десятичная арифметика 41 2.8. Обнаружение ошибок..............................................47 2.9. Алфавитно-цифровые коды . , ................................... 48 Упражнения.......................................................... 50 Глава 3. Булева алгебра и логические схемы ............................. 53 3.1. Булева алгебра как математическая система...................... 53 3.2. Таблицы истинности и булевы выражения.......................... 56 3.3. Теоремы булевой алгебры........................................ 60 3.4. Применение теорем булевой алгебры.............................. 63 3.5. Упрощение булевых выражений с помощью карт Карно............... 67 3.6. Логические схемы............................................. 76 3.7. Логические вентили других типов................................ 78 Упражнения........................................................ 86 Глава 4. Цифровые электронные схемы................................. 91 4.1. Полупроводниковые диоды и транзисторы.......................... 91 4.2. Логические элементы........................................... 102 4.3. Транзисторно-транзисторная логика (ТТЛ)....................... 105 4.4. Монтажная логика.............................................. 111 4.5. Разновидности ТТЛ-схем........................................ 118 4.6. Логические элементы с эмиттерными связями (ЭСЛ)............... 121 4.7. Интегральная инжекционная логика (И2 Л)....................... 129 4.8. Логические элементы на полевых транзисторах................... 132 4.9. Логические элементы на КМОП-структурах........................ 136 Упражнения....................................................... И0
462 ОГЛАВЛЕНИЕ ’ Глава 5. Типовые логические узлы........................................144 5.1. Триггеры , . ,................................................ 144 5.2. Регистры . . ,................................................ 161 5.3. Счетчики , . , , .......................................... 167 5.4, Дешифраторы и селекторы ..................................... 178 5.5. Сумматоры и вычитатели..................................... 184 5.6. Быстрое сложение и вычитание.................................. 191 5.7. Шины . . ..................................................... 198 Упражнения . . . .................................................. 208 Глава 6« Запоминающие устройства........................................211 6.1. Организация ЗУ с произвольным доступом........................ 212 6.2. Электронные схемы оперативной памяти.......................... 221 6.3. Постоянная память............................................. 230 6.4. Память с последовательным доступом ........................... 237 6.5. Стеки . . .................................................... 247 Упражнения , , , *................................................. 250 Глава 7. Архитектура микропоцессоров....................................252 7.1, Микрокомпьютер................................................ 252 7.2. Структура микропроцессора..................................... 253 7.3, Блок управления и синхронизации............................... 256 7.4. Система команд , . ».......................................... 260 7.5. Способы адресации............................................. 285 7.6. Некоторые другие команды, специфичные для микропроцессоров . . 288 Упражнения . . . .................................................. 290 Глава 8. Программирование для микропроцессоров ..... 292 8.1. Программирование на машинном языке............................ 292 8.2. Разветвления в программах................................... 295 8.3. Программирование циклов....................................... 298 8.4. Программирование сложных разветвлений......................... 300 8.5. Подпрограммы.................................................. 303 8.6. Сложение с n-кратной точностью................................ 307 8.7. Умножение..................................................... 308 8.8. Загрузка программ............................................. 312 8.9. Программирование на языке ассемблера.......................... 317 8.10. Компиляторы ................................................. 324 Упражнения ........................................................ 324 Глава 9. Понятие интерфейса.............................................327 9,1. Порты ввода/вывода........................................... 327 9,2, Координация взаимодействия с внешними устройствами........... 332 9.3. Прерывания программы......................................... 338 9.4. Интерфейс с главной памятью.................................. 349 9.5. Прямой доступ к памяти....................................... 361 9.6. Дополнительные сведения о шинах.............................. 365 9.7. Цифро-аналоговые преобразователи............................. 368 9.8. Последовательный ввод/вывод.................................. 383 9.9. Секционированные микропроцессоры............................. 391 9.10. Синхронизация микропроцессоров............................... 399 Упражнения , , , , ,............................................... 401
ОГЛАВЛЕНИЕ 463 Глава 10. Примеры применений микрокомпьютеров ..... 405 10.1. Электронные весы...................................... 405 10.2. Электронный светофор для управления уличным движением . . . 417 10.3. Простой универсальный микрокомпьютер.................. 427 10.4. Заключение ................................................ 437 Учебные проекты............................................. 440 Приложение......................................................451 Литература...................................................... 453 Предметный указатель............................................ 455 УВАЖАЕМЫЙ ЧИТАТЕЛЬ! Ваши замечания о содержании книги, ее оформлении, качестве перевода и другие просим присылать по адресу: 129820, Москва, И-ПО, ГСП, 1-й Рижский пер., д. 2, издательство «Мир».
Дональд Д. Гивоне, Роберт П. Россер микропроцессоры и микрокомпьютеры Вводный курс Научный редактор К. Г. Батаев Мл. научный редактор Н. С. Полякова Художник Э. А. Смирнов Художественный редактор В. И. Шаповалов Технический редактор В. П. Сизова Корректор М. А. Смирнов И Б Кв 3285 Сдано в набор 27.07.82. Подписано к печати 06.01.83. Формат 60Х 901Лв. Бумага типографская Ke 1. Гарнитура латинская. Печать высокая. Объем 14,50 листов. Усл. печ. л. 29,00. Усл. кр.-отт. 29/00. Уч.-изд. л. 30,21. Изд. 1/2091. Тираж 30 000 экз. Заказ Кв 592/36. Цена 2 р. 40 к. ИЗДАТЕЛЬСТВО «МИР» Москва, 1-й Рижский перм 2. С матриц ордена Октябрьской Революции и ордена Трудового Красного Знамени Первой Образцовой типографии имени А. А. Жданова Союзполиграфпрома при Государственном комитете СССР по делам изда- тельств, полиграфии и книжной торговли. Москва, Ж-54, Валовая, 28. Отпечатано в Ленинградской типографии Кв 6 ордена Трудового Красного Знамени Ленинградского объединения «Техническая книга» им. Евгении Соколовой Союзполиграфпрома при Государственном комитете СССР по делам издательств, полиграфии и книжной торговли. 193144, г. Ленинград, ул. Моисеенко, 10.