Электроника
СБИС
Издательство«Мир>>
VLSI Electronics Microstructure Science Volume 14 VLSI Design
Norman G. Einspru...
24 downloads
424 Views
116MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Электроника
СБИС
Издательство«Мир>>
VLSI Electronics Microstructure Science Volume 14 VLSI Design
Norman G. Einspruch Edited by
Norman G. Einspruch College of Engineering University of Miami Coral Gables, Florida
1986 ACADEMIC
PRESS,
INC.
Harcourt Brace Jovanovich, Publishers Orlando Boston
San Diego London
N e w York
Sydney
Tokyo
Austin Toronto
Электроника СБИС Проектирование микроструктур Под редакцией Н. Айнспрука Перевод с английского Н. Л. Николаева и Я. Л. Теплицкого под редакцией д-ра техн. наук И. П. Норенкова
Москва «Мир» 1989
Б Б К 32.97 Э45 УДК 519
Авторы: Ганнетт Дж., Домич А., Катевенис М., Паттерсон Д., Пшибилски С., Секуин К-, Фостер М., Хеннесси Дж., Шербурн Р., мл.
Электроника СБИС. Проектирование микроструктур: Э45 Пер. с англ./Под ред. Н. Айнспрука. — М.: Мир, 1989. —• 256 е., ил. ISBN 5-03-000477-7 В коллективной монографии американских ученых рассматриваются архитектурные особенности СБИС-микропроцессоров, в частности таких высокоэффективных устройств, как микроЭВМ с сокращенными наборами команд (RISC). Значительное внимание уделяется методам проектирования структур СБИС, позволяющим существенно повысить надежность и выход годных изделий. Рассмотрены проблемы создания и применения кремниевых компиляторов — программных средств для автоматического преобразования описаний реализуемых функций в детальное представление топологии СБИС. Д л я специалистов по микроэлектронике, вычислительной технике, автоматизации проектирования электронных устройств, а также студентов старших курсов и аспирантов соответствующих специальностей.
Э
2302030300-206 041(01)-89
125-89
Редакция
I S B N 5-03-000477-7 (русск.) I S B N 0-12-234114-7 (англ.)
ББК 32.97
литературы по
электронике
1986 by Academic P r e s s Inc. перевод на русский язык, «Мир»,
От редактора перевода
Тенденция к росту степени интеграции микросхем, сохраняющаяся в микроэлектронике, привела к появлению сверхбольших интегральных схем (СБИС). С одной стороны, техника СБИС — это новые возможности создания сложных систем, с другой — увеличение трудностей проектирования. Предлагаемая вниманию читателей книга посвящена рассмотрению основных проблем проектирования процессоров в виде СБИС, начиная с методологии проектирования, принятия архитектурных проектных решений и кончая средствами проектирования. Освещаемые в книге вопросы отличаются новизной и слабо отражены в отечественной литературе. В то же время успех создания современных высокоэффективных ЭВМ и других видов радиоэлектронной аппаратуры в значительной мере определяется доступностью информации, связанной с накопленным положительным опытом проектирования СБИС. Именно такой опыт отражен в данной книге. По мере усложнения проектируемых объектов вопросам методологии проектирования придается все более важное значение. В случае СБИС уже достигнута степень интеграции 106 транзисторов и этот показатель продолжает быстро расти. Если при проектировании БИС решались задачи, относящиеся только к функционально-логическому, электрическому и топологическому иерархическим уровням, то проектирование СБИС нужно начинать с архитектурного уровня. Существенно возрастает взаимозависимость результатов проектирования на разных уровнях, повышается роль верификации проектных решений и одновременно увеличиваются трудности ее эффективной реализации. Это связано с размещением на одном кристалле как операционного, так и управляющего блоков, воплощающих алгоритмы параллельной и конвейерной обработки данных с микропрограммным или аппаратно реализуемым управлением. Появление СБИС сделало возможной реализацию супермини-ЭВМ на малом числе кристаллов. Однако простое переложение архитектуры существующих универсальных ЭВМ на несколько кристаллов новой машины не будет эффективным, поскольку вместо традиционных условий проектирования выдвигаются новые специфические требования к правильному распределению имеющихся ресурсов — площади,
возможностей рассеивания мощности — между процессорами, памятью, трактами связи и т. д. Учет особенностей 'СБИС привел к появлению архитектуры ЭВМ с сокращенной системой команд, получившей название RISC-архитектуры. Эта архитектура позволяет реализовать аппаратным способом те операции, которые вносят определяющий вклад в затраты времени, и тем самым уменьшить задержки. Остальные операции могут быть реализованы как композиция команд, вошедших в сокращенный список. Проблема создания процессоров с RISC-архитектурой включает в себя исследование состава команд и структур данных в обрабатываемых классах задач, выбор структуры памяти, согласованной со структурой операндов, организацию использования регистровой памяти. Наиболее трудной для решения проблемой проектирования СБИС считается проблема тестируемости. Проверка правильности схемы требуется на этапах и проектирования, и изготовления, и эксплуатации. Однако число выводов у корпуса интегральной микросхемы на несколько порядков величины меньше, чем число логических вентилей на кристалле СБИС внутри корпуса. Следовательно, условия доступа к различным частям схемы для обнаружения дефектов крайне ограничены. Именно невозможность проверки работоспособности СБИС делает практически неприемлемыми многие проекты схем, выполненные без достаточного учета требований контролепригодности. Существенный прогресс в решении этой проблемы достигнут благодаря разработке специальных способов проектирования контролепригодных и самотестирующихся схем. Введение дополнительных аппаратных средств для повышения контролепригодности хотя и приводит к снижению быстродействия и увеличению рассеиваемой мощности, является необходимым в практике проектирования и изготовления схем с высокой степенью интеграции. Наиболее существенным достижением последних лет в области средств проектирования БИС и СБИС стало появление кремниевых компиляторов. Кремниевая компиляция — автоматическое получение детального описания проекта СБИС по высокоуровневому описанию функций кристалла. Эффективность использования кремниевого компилятора существенно зависит от характера его входного языка. В развитых кремниевых компиляторах применяются языки описания алгоритмов или языки уровня регистровых передач. Возможно построение как универсальных, так и специализированных кремниевых компиляторов. Специализация позволяет приблизить характеристики автоматически синтези-
рованных СБИС к характеристикам кристаллов, спроектированных с участием опытных разработчиков в интерактивном режиме работы с ЭВМ. Создание и внедрение кремниевых компиляторов в практическую деятельность разработчиков — важный резерв сокращения сроков проектирования,, основной путь разработки специализированных процессоров для различных типов радиоэлектронной аппаратуры. Данная книга освещает состояние проблем методологии проектирования, разработки RISC-архитектур и способовповышения тестируемости СБИС, создания кремниевых компиляторов. Она написана на уровне, доступном для широкого круга разработчиков радиоэлектронной аппаратуры, полезна для специалистов, занимающихся созданием как собственно аппаратуры на СБИС, так и средств автоматизированного проектирования СБИС. И. П. Норенков
Предисловие
"Человеческая цивилизация преодолела рубеж второй промышленной революции. Первая промышленная революция, начало которой положило создание паровой машины, позволила человеку многократно увеличить свои физические возможности. Вторая промышленная революция, базой для которой служит полупроводниковая электроника, позволяет человеку многократно увеличить свои интеллектуальные возможности. Электроника СБИС (сверхбольших интегральных схем), последнее слово в области полупроводниковой электроники, представляет собой знаменательный пример применения современных научных знаний для удовлетворения требований новой техники и технологии. Настоящая серия книг публикуется в связи с тем, что сейчас явно ощущается потребность в развернутом описании состояния и перспектив электроники СБИС с прогнозированием будущих тенденций и представлением научной базы, обеспечивающей успешное развитие этой области. Книги настоящей серии предназначаются для научных работников и инженеров, которые хотели бы познакомиться с этой быстро развивающейся областью; для ученых, ведущих фундаментальные исследования и интересующихся проблемами физики и химии материалов и технологических процессов; для разработчиков электронной техники, которым необходимо знать основные принципы построения и ограничения, определяющие характеристики создаваемых ими микросхем; для системотехников-архитекторов, которым требуется организовать совместную работу СБИС, и для инженеров, которые будут применять СБИС при решении конкретных прикладных задач. Настоящая серия охватывает самые различные темы — от описания поведения материалов на микроскопическом уровне, скоростных характеристик приборов и видов технологических процессов, применяемых при изготовлении СБИС, до подробного изложения проблем использования СБИС для построения машин и систем. Каждый из томов серии состоит из ряда взаимосвязанных отдельных глав, каждую из которых готовили известные высококвалифицированные специалисты по данному вопросу. Главы написаны таким образом, что конкретные интересующие читателя темы можно изучать и осваивать, не обращаясь к другим томам серии.
1 Существует общее мнение, что фундаментальная наука, которая служит основой для разработки технологии ИС, в значительной степени отстала от требований времени и нуждается в притоке свежих сил и новых идей. Этот вопрос рассматривается в отчете Национального исследовательского совета (Национальная академия наук/Национальная инженерная академия) под названием «Научные, инженерные и технологические проблемы микроструктур». Мы надеемся, что настоящая серия книг станет основой и стимулом для развертывания дальнейших работ по физике и химии структур с субмикронными размерами и по использованию этих структур на благо человечества.
Глава 1 Методология проектирования процессорных СБИС* Дж. Л. Хеннесси (J. L. Hennessy) и С. Э. Пшибилски (S. A. Przybylski) Лаборатория вычислительных систем, факультет электротехники Станфордский университет, Станфорд, шт. Калифорния
I. Введение
Современная технология ИС дает возможность изготавливать кристаллы, содержащие сотни тысяч транзисторов. Проектировать системы подобного масштаба по-прежнему сложно. Архитектор системы сталкивается с проблемами, связанными с разбиением системы на части, с выработкой технических требований для этих составных частей, с написанием спецификаций для интерфейсов подсистем и их верификацией и с построением системы в целом. Благодаря высокому уровню технологии ИС сейчас можно изготавливать однокристальные процессоры, которые по своей сложности и функциональным возможностям сравнимы с самыми высокопроизводительными крупными компьютерами, построенными с использованием стандартных микросхем малой, средней и большой степени интеграции (МИС, СИС и БИС). Эти крупные компьютеры, такие, как Сгау-1, IBM-360/91 и CDC-7600, разрабатывались очень долго и вследствие этого имели очень высокую стоимость проектирования. Для микропроцессора, который характеризуется низкой ценой в сочетании с довольно малой длительностью жизненного цикла, столь большие расходы на проектирование очень трудно оправдать. Кроме того, технология ИС развивается так быстро, что длительные усилия по проектированию и достигнутая оптимальность схемы могут оказаться сведенными на нет из-за появления новой, более совершенной технологии. Использование СБИС как средства реализации замыслов разработчика обусловливает необходимость соблюдения нескольких основных правил. 1. Бездефектность — важнейшая задача проектирования. Устранение ошибок схемы кристалла сопряжено с серьезными трудностями и требует много времени. Немедленно про* Проектирование процессора M I P S , который используется в качестве примера в настоящей главе, осуществлялось при поддержке Управления перспективных исследований и разработок министерства обороны США ( D A R P A ) по статьям MDA903-79-C-680 и MDA903-83-C-0335.
верить правильность вносимых изменений тестированием невозможно, приходится ждать от нескольких недель до нескольких месяцев. Это вынуждает накапливать изменения для одновременного внесения в схему кристалла и настоятельно требует почти идеальной разработки. 2. Степень гибкости проектирования исключительно высока: разработчики определяют логическую организацию системы, ее деление на составные части, физическое размещение и даже детали индивидуальных транзисторов, задающих усилителей и логических вентилей. 3. Несмотря на такую гибкость, вряд ли возможно скомпенсировать на каком-либо одном уровне или этапе проектирования дефекты, допущенные на более высоких уровнях, Эти ограничения связаны как с принципиальными особенностями технологии (лимитирующими такие параметры, как размеры кристалла, мощность рассеяния и быстродействие) , так и с необходимостью избегать создания; дополнительных сложностей на более низких уровнях. При этом проблему быстродействия необходимо учитывать и решать на всех уровнях и этапах проектирования. В настоящей главе мы сосредоточим внимание на проектировании микропроцессоров общего назначения. Хотя конкретные компромиссные технические решения могут меняться, изложенные здесь концепции и методы непосредственно приложимы и к специализированным СБИС-процессорам. Поскольку для изготовления микропроцессоров широкого коммерческого применения основными сейчас являются МОП-технологии, здесь будут излагаться преимущественно методологии проектирования именно этих схем. Мы рассмотрим проблему проектирования СБИС-компьютера как четыре отдельных, хотя и тесно переплетающихся этапа: составление спецификации архитектуры, выбор логической организации процессора (логическое проектирование), физическое проектирование и электрическая (схемная) реализация. Спецификация архитектуры предполагает определение набора команд и поведения всех компонентов, видимых пользователю процессора. Здесь обязательно описываются регистровая структура, функциональные устройства и устройства памяти с учетом режимов адресации. Описываются также характер и связь с частными вариантами системы, а в некоторых архитектурах — и интерфейс ввода-вывода. Архитектура обычно не зависит от реализации — она не препятствует выбору той или иной конкретной технологии, хотя может быть гораздо более совместимой с каким-то одним» а не другим видом технологии.
Реализация архитектуры начинается с того, что прежде всего определяется логическая организация процессора. Взаимодействие функциональных устройств описывается в сочетании со структурой управления и потактовой временной диаграммой, определяющей последовательность операций, при помощи которых будет реализовываться каждый процесс в архитектуре. Здесь необходимо также детально определить иерархию и схему распределения памяти. Некоторые вопросы, решаемые на этом этапе проектирования, могут быть не связанными с архитектурой (например, использование кэш-памяти), а некоторые (такие, как схема распределения памяти) могут определяться архитектурой. При наличии всей этой информации можно будет с достаточно высокой точностью рассчитать скоростные характеристики процессора, выражающиеся количеством тактов (циклов частоты синхронизации) на команду. Физическое проектирование — это процесс разбиения всего центрального процессора (ЦП) и системы памяти на физические компоненты, из которых строится разрабатываемая машина: стойки, схемные платы и микросхемы. С появлением СБИС такой этап физической декомпозиции начинает играть еще более важную роль: высокая относительная стоимость перехода через границы кристаллов делает определение этих границ исключительно ответственной задачей. В рамках одной ИС функциональные блоки необходимо размещать таким образом, чтобы наиболее эффективно использовать дефицитную площадь кристалла, причем с учетом ограничений по межсоединениям, свойственных выбранной технологии реализации. К этапу физического проектирования мы относим также задачу декомпозиции функциональных блоков на реализующие их логические схемы. Под электрическим проектированием мы понимаем преобразование логических схем в электрические схемы с транзисторами и связанную с этим задачу определения топологии. Мы будем иметь дело главным образом с современными усовершенствованными методами электрического, схемного проектирования, чтобы добиваться высоких скоростных характеристик и успешно решать проблемы минимизации мощности рассеяния и занимаемой площади. В прошлом эти четыре этапа проектирования процессоров часто оказывались отделенными друг от друга. Влияние технологии реализации на логический и архитектурный уровни было минимальным. Аналогичным образом после определения схемы центрального процессора на уровне логических вентилей большинство высокоуровневых аспектов в дальнейшем, на этапах физического и детального электриче-
Рис. 1. Этапы процесса проектирования.
ского проектирования, просто игнорировались. Преимущество такой линейной декомпозиции заключалось в том, что процесс проектирования имел в значительной степени нисходящую, последовательную природу. Благодаря этому удавалось ограничить сложность всего процесса до такой степени, что им можно было сравнительно легко управлять. Группа разработчиков составлялась из отдельных подгрупп, которые работали самостоятельно над различными задачами и передавали результаты «вниз» по такой концептуальной цепочке. Появление МОП СБИС как жизнеспособной технологии реализации привело к существенному изменению, углублению и укреплению взаимосвязей между различными этапами проектирования. Некоторые взаимосвязи подобного рода иллюстрирует рис. 1. Если показанные здесь дополнительные связи «снизу вверх» с учетом соответствующих ограни-
чений и взаимозависимостей не организовать должным образом, то полученный в результате разработки компьютер не достигнет своего максимально возможного быстродействия. Комплексный подход к проектированию процессора предусматривает одновременную разработку: 1) архитектуры, 2) логической структуры, которая обеспечивает эффективное декодирование и выполнение набора команд архитектуры и которая хорошо отображается на кремнии, а также 3) временной диаграммы, тесно связывающей логическую структуру со схемотехникой (с известными заранее скоростными характеристиками), которая будет использоваться на предполагаемых критических путях. Благодаря параллельному продвижению различных этапов проектирования появляется возможность получить готовую схему, которая будет гораздо более эффективно использовать особенности конкретной технологии реализации и, следовательно, значительно превосходить схемы, проектируемые более примитивными способами. II. Методология архитектурного проектирования
СБИС-процессоры по своей архитектуре и логической организации во многих отношениях напоминают центральные процессоры современных вычислительных машин, реализуемые с применением стандартных микросхем (ТТЛ, ЭСЛ и т. д.). Поэтому методологии проектирования, связанные с оптимизацией и решением проблем сложности процессоров больших ЭВМ и СБИС-процессоров, также схожи. МОП-технология налагает некоторые дополнительные ограничения, которые подчеркивают взаимосвязь между архитектурой и реализацией. Это заставляет разработчика архитектуры более четко представлять себе последствия принимаемых им решений. Архитектуру компьютера следует оценивать по ее эффективности с точки зрения выполнения прикладных программ и по уровням скоростных характеристик, достижимых при различных способах реализации данной архитектуры. Для процессора общего назначения пригодность архитектуры как базы для выполнения прикладных программ определяется ее эффективностью поддержки языков высокогоуровня. Специализированный компьютер можно рассматривать как машину с архитектурой, ориентированной на ограниченный класс языков и прикладных программ. Например,.
•специализированный однокристальный компьютер для граических приложений, такой, как «Геометрическая машина» 1J, работает с одним конкретным входным языком, описывающим геометрические преобразования. Природа языка и необходимые скорости выполнения примитивов этого языка диктуются структурой прикладных задач. В других случаях в качестве языка программирования удобно использовать универсальный язык, однако прикладные программы, которые предполагается выполнять на этом процессоре, имеют различные частоты использования различных операций или накладывают дополнительные ограничения по скорости. К этой категории можно отнести, например, специализированный процессор сигналов: здесь вычислительные операции используются гораздо чаще, чем обычно, причем время для них является критическим фактором. Ниже мы обсудим проблемы, которые возникают при определении пригодности той или иной архитектуры как базы для эффективного выполнения программ, л то, каким образом архитектура влияет на логическую организацию процессора; в заключение мы дадим некоторые рекомендации, которые должны помочь в оценке эффективности архитектуры с точки зрения как выполнения прикладных программ, так и реализации с применением СБИС.
?
А. Архитектура как база для эффективного выполнения про-
грамм. Эффективность архитектуры необходимо оценивать с учетом как стоимости, так и скоростных характеристик, получаемых при различных реализациях этой архитектуры для программ определенных категорий. Эта оценка должна исходить из реалистических предположений относительно используемого языка программирования и класса решаемых прикладных задач. Поскольку большинство программ пишется на языках высокого уровня, испытания для сравнительной оценки скоростных характеристик должны производиться путем измерения количественных показателей именно для таких программ; испытания с использованием программ на языке ассемблера не слишком целесообразны, поскольку они фактически не отражают скоростных характеристик для языков высокого уровня. Чтобы оценить эффективность предлагаемой архитектуры •с точки зрения выполнения программ, написанных на языке высокого уровня, необходимо иметь компилятор языка высокого уровня для этой архитектуры. При этом качество и структура компилятора будут влиять на получаемые количественные показатели архитектуры. Например, в зависимости от того, предусматривает ли компилятор распределение
регистров или глобальную оптимизацию, может существенно меняться соотношение количества употребляемых команд («профили программ»). Некоторые разработчики архитектуры считают, что необходимо исключать или «нейтрализовать» влияние компилятора; обычно при этом используется некоторый примитивный компилятор. Такой подход несостоятелен по двум причинам. Во-первых, измерения на примитивном компиляторе не позволяют оценить корректность технических решений для условий, когда имеется более совершенный компилятор. Если, например, применяется компилятор, не содержащий средств распределения регистров, разработчик архитектуры может сделать вывод, что машина должна иметь лишь очень небольшое количество регистров — поскольку они недостаточно интенсивно используются. Во-вторых, менее очевидная причина заключается в том, что архитектура определяет простоту или сложность построения компиляторов. Чтобы эффективно использовать возможности некоторых архитектур, особенно со сложными и многовариантными командами, нужен хороший компилятор. Некоторые из подобных особенностей архитектуры не удается эффективно использовать или могут потребоваться методы компиляции, фактически неприемлемые из-за высокой стоимости компиляции. Без создания реального компилятора все эти факторы количественно оценить трудно. Благодаря правильному использованию компилятора можно определить рациональный подход к выбору тех или иных компромиссных решений при разработке набора команд процессора. Предположим, что базовая структура набора команд уже имеется. Эта структура определена с учетом требований принятых языков программирования, прикладных задач, проблем реализации и общего состояния техники компиляторов. В качестве исходного рубежа нужно взять соответствующий список операторов, некоторые режимы адресации и набор правил их комбинирования. После этого компилятор можно использовать как инструментальное средство для оценки различных аспектов архитектуры. Рассмотрим следующую ситуацию, которая вполне может возникнуть в процессе проектирования многих наборов команд. Для архитектуры предлагается ввести новый набор режимов адресации. Дополнительные режимы адресации потребуют увеличения длины командного слова с учетом расширенного формата представления операндов. Можно оценить целесообразность введения этих дополнительных режимов адресации для компилятора путем сравнения качества кодогенератора при наличии и при отсутствии подобных архитектурных возможностей. Чтобы произвести подобную
оценку, необходимы в первую очередь такие данные, как времена выполнения программ (выражающиеся количеством, команд) для альтернативных вариантов архитектуры; к числу дополнительных полезных данных относится частота использования новых режимов адресации и различие в динамической пропускной способности при выполнении команд. Эти дополнительные данные необходимы для подтвержденияосновного количественного показателя архитектуры (скорости выполнения, выражаемой количеством команд) и для понимания других следствий предлагаемых расширений набора команд. К аналогичной процедуре измерений можно прибегать при рассмотрении вопроса о добавлении или замене того или иного кода операции. В любом случае для. полной оценки предлагаемых расширений архитектуры необходимо производить расчеты дополнительных расходов на реализацию; эту проблему мы более подробно обсудим ниже. При разработке архитектуры недостаточно учитыватьтолько требования компилятора, поскольку аппаратура не может выполнять прикладные программы без операционной системы. Чтобы обеспечить максимальные функциональные возможности при достаточной эффективности работы, операционной системе нужна определенная архитектурная поддержка. Если необходимые средства в архитектуре отсутствуют, создатели операционной системы будут вынуждены) отказаться от реализации в ней некоторых функций уровня пользователя — иначе это повлечет за собой значительныепотери в скорости, из-за которых данная архитектура окажется неприемлемой. Некоторые разработчики считают, чтоархитектура должна предусматривать специальные средства; поддержки для определенных функций операционной системы. Подобные средства архитектуры должны подвергаться: точно таким же процедурам оценки, которые используются при анализе предлагаемых изменений набора команд. Естественно, что проводить подобные оценки гораздо труднее,, поскольку в них участвует и операционная система, а нетолько компилятор. Единственным приемлемым методом получения количественных данных, которые отражают влияние средств поддержки операционной системы, предназначаемых для включения в архитектуру, являются, по-видимому, испытания с использованием существующих операционных систем. Данные по работе операционной системы в совокупности с оценочными значениями времени выполнения программ операционной системы (в процентах от общеговремени выполнения) могут служить основой для определения потенциального выигрыша в скорости благодаря архи2—708
тектуре по сравнению с машинами, не имеющими подобных специальных средств архитектурной поддержки. Естественно, при оценке подобных средств мы должны также учитывать стоимость их реализации. Б. Архитектура и требования по реализации. Характер архи-
тектуры оказывает определяющее влияние на вид логической организации, необходимой для достижения заданных уровней быстродействия при реализации данной архитектуры. Аналогичным образом, имея ту или иную структуру для реализации, можно в широких пределах менять конкретные •средства поддержки различных архитектурных аспектов. Это особенно справедливо для случая, когда реализация осуществляется с использованием СБИС, — здесь взаимосвязи архитектуры и ее реализации наиболее явно выражены. Важное значение имеют три ключевых свойства технологии реализации, которые, как правило, выделяются при рассмотрении этих взаимосвязей. Это средние скорости переключения для логических вентилей, расходы на передачу данных и влияние переходов через границы кристаллов. В МОП-схемах более высокая плотность компоновки достигается за счет снижения быстродействия; это обусловливает целесообразность параллельных вычислений. Другими словами, в системе целесообразнее использовать много низкоскоростных компонентов вместо меньшего количества высокоскоростных компонентов. Такая исходная методология проектирования стала основной при разработке ряда самых разнообразных изделий, от систолических матриц [2] до кристалла тракта обработки данных для компьютера Micro VAX-I [3]. В случае систолических матриц индивидуальные процессоры могут быть довольно низкоскоростными, поскольку высокое общее быстродействие достигается благодаря использованию параллельно работающих конвейерных аппаратных модулей. Как правило, обмены и передачи данных обходятся дороже, чем вычисления. Поэтому архитектуры, которые требуют более крупномасштабных глобальных взаимодействий, будут существенно терять при реализации. Таким образом, разработчик архитектуры должен стремиться к тому, чтобы везде, где это только возможно, организовывать локальные вычисления и обмены данными. Переходы через границы кристаллов приводят к двум основным последствиям. Вопервых, они накладывают жесткие ограничения на пропускные способности при передачах данных внутри и вне кристалла. Во-вторых, они создают существенные различия в
задержках распространения сигналов на кристалле и вне кристалла. Такое разделение всех объектов системы на расположенные на кристалле и вне кристалла играет особенно важную роль. Разработчик должен использовать ресурсы кристалла для хранения глобальных данных, чтобы тем самым снижать требования по внекристальным обменам. Масштаб и сложность архитектуры могут вынудить разработчика произвести разбиение системы на составные части неоптимальным образом, что приведет к очень большим потерям в связи с обменами данными между кристаллами. Еще один фактор, который тесно связан как с архитектурой, так и с выбранной логической организацией, — это сложность проектируемой схемы. Сложность схемы влияет и на сроки проектирования, и на скоростные характеристики при любых средствах реализации, однако особенно важное значение этот фактор приобретает в случае СБИС, когда решать проблемы сложности гораздо труднее. Большие затраты на отладку и проверку вариантов схемы путем многократных итераций приводят к тому, что завершить проектирование сложных схем в приемлемые сроки исключительно трудно. Возможности достижения оптимальных скоростных характеристик также обычно ограничиваются, если базовая схема очень сложна. А если разработчик имеет ограниченные ресурсы для завершения проектирования сложной схемы, ему приходится мириться с неоптимальными скоростными характеристиками, лишь бы добиться работоспособности кристалла. Наиболее важным следствием этого факта с точки зрения проектирования является то, что ни одна дополнительная архитектурная возможность не обходится бесплатно. В лучшем случае ее введение усложняет схему, увеличивает время проектирования, а часто приводит также к снижению тактовой частоты, если не реальной скорости работы. Архитектура влияет на скоростные характеристики аппаратуры преимущественно на уровне логической организации, где архитектура предъявляет определенные требования. Менее заметно архитектура отражается на более низких уровнях реализации, на которых основное значение начинает приобретать технология и ее особенности. Технология играет важную роль как фактор, обусловливающий предпочтительный выбор одних организационных подходов и нежелательность других. Перед принятием тех или иных архитектурных решений полезно анализировать их с точки зрения реализации. Оценочное количество команд служит показателем архитектурной ценности предлагаемых расширений. На уровне реализации главным вопросом становится максимальная
тактовая частота, достижимая для обеих рассматриваемых архитектурных альтернатив. В совокупности количественные показатели архитектуры и реализации позволяют с достаточной степенью уверенности установить, относится ли данная особенность к архитектуре. Естественно, гораздо труднее определить стоимость реализации, поскольку обычно практически нецелесообразно включать в схему кристалла все возможные предлагаемые средства. Лучше всего подобные расходы способны, по-видимому, оценивать опытные разработчики. Важно правильно учитывать взаимозависимости между особенностями операционной системы и набором команд проектируемого микропроцессора. Эти взаимозависимости могут приводить к отказу от определенных методов реализации или к снижению быстродействия по сравнению с достижимым в других условиях. Классическим примером подобных взаимозависимостей может служить обработка ситуаций, когда в системе подкачки страниц по требованию нужная страница в памяти отсутствует. Поддержка такого режима в операционной системе может оказаться практически невозможной ('или в лучшем случае обойтись очень дорого), если другие архитектурные решения не будут ориентированы на реализацию этого режима. Так, весьма трудно и дорого обходится решение проблемы команд, которые производят запись в те или иные блоки процессора до гарантированного завершения данной команды (если только не отсутствует нужная страница в основной памяти). Разработчик архитектуры должен хорошо представлять себе взаимозависимость подобных средств и факторов на уровне как архитектуры, так и реализации. Очевидно, что главная цель реализации — создание наиболее высокоскоростной аппаратуры для данной архитектуры; это можно сформулировать в виде двух правил. 1. Необходимо добиваться минимальной длительности цикла тактовой частоты для системы. Здесь подразумевается как уменьшение накладных затрат времени на выполнение команд, так и организация аппаратных средств таким образом, чтобы свести к минимуму задержки в каждом такте. 2. Необходимо добиваться минимального количества тактов, затрачиваемых на выполнение каждой команды. Такая минимизация должна осуществляться на основе прогнозируемой частоты употребления команд в программах. Первое правило — это по сути цель архитектуры; отметим, что оценка архитектурных «усовершенствований» должна учитывать их влияние на скоростные характеристики
остальных компонентов данной архитектуры. Второе правило может потребовать повышения быстродействия наиболее часто используемых компонентов даже за счет снижения скоростных характеристик некоторых других составных частей. Необходимость такого компромисса может привести также к уменьшению значимости редко используемого усовершенствованного средства из-за снижения его скорости. Этот процесс оценки и выбора тех или иных решений является по сути процессом итеративной настройки. Осознание необходимости технических компромиссов такого рода вместе с тем фактом, что усложнение архитектуры обусловливает дополнительные накладные расходы, привело к появлению архитектур с сокращенным (или упрощенным) набором команд [4, 5]. В подобных RISC-архитектурах исключаются команды, встречающиеся в программах достаточно редко, причем эти сложные команды строятся как последовательности более простых команд. Благодаря этому накладные расходы на команду удается существенно уменьшить, так что инженеру при реализации архитектуры не приходится по-разному относиться к различным командам. И действительно, в большинстве машин с упрощенными наборами команд для разработчиков аппаратуры и компиляторов исключаются сложные компромиссные технические решения, поскольку команды выполняются, как правило, за один такт. Простой набор команд обеспечивает возможность повышения рабочей тактовой частоты, а однотактное выполнение команд упрощает управление машиной. А упрощение управления дает возможность в конкретной машине легче реализовать потенциальные преимущества параллелизма путем конвейеризации [6] или вводить дополнительные средства, которые явно окупаются при реализации, примером чему могут служить регистровые окна RISCархитектуры [7]. III. Методология организационного проектирования
Взаимосвязь между архитектурой процессора и его логической организацией всегда оказывала большое влияние на технико-экономические показатели (соотношение цены и скоростных характеристик), достижимые для архитектуры. В случае СБИС это влияние распространяется вплоть до нижних уровней реализации. Мы проиллюстрируем некоторые из компромиссных технических решений и методы их оценки на примерах, относящихся к процессору MIPS. Хотя эти примеры специфичны для данного процессора, проблемы, которые они иллюстрируют, являются общими для
большинства универсальных СБИС-процессоров и многих, процессоров специального назначения. Многие из технических решений, используемых в обыч-! ных процессорах, применимы и в СБИС-процессорах. Орга-' низация тракта обработки данных (операционной частипроцессора) должна решить ряд вопросов, не связанных по> сути с техникой СБИС; но использование СБИС для реализации архитектуры определяет некоторые компромиссныетехнические решения, причем ограниченная площадь кремниевого кристалла может даже исключать некоторые альтернативы. При проектировании тракта обработки данных, необходимо принимать некоторые важные структурные решения, в том числе по следующим вопросам: 1. Сколько шин должен иметь тракт обработки данных? 2. Какие функциональные блоки должен он содержать?' Нужен ли многорегистровый циклический сдвигатель или подойдет простой однобитовый сдвигатель? 3. Нужны ли специальные средства для выполнения операций умножения и деления целых чисел и чисел с плавающей точкой? 4. Какие выбрать времена работы для блоков тракта* обработки данных? Времена доступа и коэффициенты использования должны соответствовать структуре конвейера. Структура конвейера может также определять требования по длительности цикла и по задержкам для компонентов; тракта обработки данных. 5. Каким образом организовать регистровый блок: с использованием шины или как запоминающее устройство произвольной выборки (ЗУПВ)? Сколько должно быть портов?' 6. Какого типа арифметико-логическое устройство (АЛУ) необходимо? Будет ли оно укладываться в предполагаемуюфизическую компоновку кристалла? Схема тракта обработки данных в значительной степени1 определяется ограничениями, накладываемыми общей организацией системы и физической компоновкой кристалла. От исходных принципов, принятых для тракта обработки данных, практически зависит временная диаграмма основного' цикла машины. Например, применение в системе двух или трех шин при работе с регистрами обусловит выполнениеопераций обратной записи (обратного копирования) немедленно или с задержкой; в случае обратной записи с задержкой могут потребоваться в свою очередь такие структурныерешения, как обходные пути передачи для сохранения скоростных характеристик. Проблемы выбора структуры и реализации трактов обработки данных обсуждаются в работах, посвященных RISC-процессору Университета Берклю
{8—11], MIPS-процессору [12, 13] и компьютеру Micro VAX-I [3]. Схема тракта обработки данных является важным, но в достаточной степени простым компонентом общей структуры СБИС. Гораздо более сложную проблему часто представляет организация и реализация основного машинного цикла и управления. Именно функции управления являются самым критическим моментом в проектировании высокоскоростных СБИС-процессоров. Сложность и эффективность •функций управления связаны с тем, что, например, в высокоскоростном МОП-процессоре для повышения быстродействия необходимо использовать методы логической организации довольно высокого уровня. Ниже мы рассмотрим роль конвейеризации, наиболее широко распространенного способа повышения пропускной способности машины; мы увидим, что сложность реализации конвейерной машины определяется преимущественно архитектурой. При применении конвейерной структуры узким местом становится выборка и интерпретация команд. Для интерпретации наборов команд используются, как правило, два метода — микропрограммная и аппаратная реализация. Мы рассмотрим относительные достоинства и недостатки обоих методов и проанализируем, каким образом выбор того или иного подхода отражается на архитектуре, схеме и топологии кристалла. А. Конвейеризация. Классическим методом повышения быстродействия процессора в конкретной реализации является конвейеризация. Главное достоинство конвейеризации заключается в том, что она дает возможность повысить пропускную способность в d раз, где d — так называемая глубина конвейера: если максимальная возможная средняя скорость выполнения операций есть г, то конвейеризация глубиной d обеспечивает в идеальном случае среднюю скорость выполнения, равную rd. Поскольку возможная скорость выполнения отдельных операций ограниченна, подобный подход служит отличным средством повышения быстродействия для МОП-схем. Глубина конвейера — это множитель идеальной формулы увеличения быстродействия. На практике такой полный выигрыш в быстродействии недостижим по нескольким причинам. Во-первых, эта формула не учитывает задержки, которые возникают в случае, когда данные, необходимые для выполнения текущей команды, еще не подготовлены предыдущей командой, находящейся на обработке в конвейере. Во-вторых, еще более существенные задержки возникают, когда прохождение команд по конвейеру прерывается из-за
передач управления. Передача управления требует, чтобы процессор вычислил исполнительный адрес ветвления и произвел упреждающую выборку соответствующей команды; а сделать это практически невозможно без задержки конвейера по меньшей мере на один такт. Проблема усложняется для условных передач управления, которые требуют анализа условия, а также вычисления целевого адреса. В-третьих, сложности управления конвейером и обработки исключительных ситуаций, нарушающих обычное прохождение команд по конвейеру, требуют добавления дополнительных средств к основной логике управления конвейером, что приводит к снижению возможной скорости выполнения операций на каждой ступени конвейера. Чтобы максимально повысить скорость работы, разработчик может пойти на увеличение количества ступеней (тактов) конвейера на команду. При этом возникают две серьезные проблемы. Во-первых, не все команды будут выполняться за одно и то же число тактов конвейера. Многие команды, в частности простые, будут лучше всего выполняться при использовании конвейеров, содержащих две, три или максимум четыре ступени. Поэтому конвейер глубиной п будет работать вхолостую в течение периода, соответствующего разности между п и средним количеством тактов, затрачиваемых на команду. Другими словами, коэффициентповышения быстродействия благодаря конвейеризации определяется количеством активных ступеней на среднюю команду, а не просто глубиной конвейера. На этом основании мы могли бы сделать вывод, что гораздо более эффективными будут более сложные команды, использующие большее число ступеней конвейера. В то же время это потенциальное преимущество может оказаться сведенным на нет из-за нескольких других проблем: смесей команд, частоты ветвлений, готовности или неготовности операндов и особенностей реализации, связанных с определением длительности такта конвейера. В смесях команд доминирующую роль играют простые команды. Измерения для вычислительных машин типаVAX показали, что наиболее часто в программах встречаются простые команды пересылки и команды АЛУ с использованием регистров и простых режимов адресации памяти. Выполнение этих команд требует обычно лишь небольшого количества ступеней конвейеров. Таким образом, в случае увеличения длины конвейера значительная доля тактов будет тратиться вхолостую. Частота ветвлений в компилированном коде ограничивает целесообразную длину конвейера, поскольку она определяет
среднее количество команд, которые будут выполняться, прежде чем придется очищать и перезагружать конвейер. Это количество зависит от набора команд. Измерения для компьютера VAX, которые провел Кларк [14], показали, что между каждыми двумя состоявшимися ветвлениями выполняются в среднем три команды; измерения для архитектуры Паскаль-машины Adept [15] дали даже более короткие значения отрезков между ветвлениями. Команды ветвления, которые не приводят к фактической передаче управления, могут также вызывать задержку в конвейере, поскольку команды, следующие за ветвлением, не могут менять состояние машины, прежде чем проанализировано условие ветвления, если только не предусматривается возможность аннулирования подобных изменений, когда фактическая передача управления не происходит. Аналогичные измерения для таких машин с более простыми архитектурами, как MIPS и IBM-801, показали, что команды ветвления составляют 15—20% динамической смеси команд. Если учесть уровни наборов команд, то показатели для компьютеров VAX и машин с более простой архитектурой по сути эквивалентны. Это важный момент; измеренная таким образом частота ветвлений будет отражать частоту ветвлений в программах на исходном языке. Архитектурные аномалии в некоторых случаях будут приводить к увеличению частоты ветвлений, однако количество операций (а не команд) между ветвлениями, как правило, не зависит от набора команд. Это число, часто называемое длиной отрезка, и возможность в конвейерном режиме выполнять индивидуальные команды должны определять оптимальный выбор глубины конвейера. Чтобы увеличить глубину конвейеризации для заданной смеси команд, разработчик должен предусматривать меньший объем работы для каждой ступени конвейера. Это приводит к интересным последствиям с точки зрения реализации; наиболее важным является тот факт, что приходится уменьшать время, отводимое на передачу информации состояния между ступенями конвейера. Эта информация необходима для того, чтобы определять, можно ли конвейеру продолжать движение вперед; как правило, это информация о текущем состоянии машины, о возникновении тех или иных особых ситуаций и о взаимозависимостях между командами. Чтобы добиться сокращения такта конвейера, накладные расходы на передачу этой информации должны составлять постоянный процент длительности такта конвейера. Другими словами, если мы сокращаем такт, мы должны сократить и время на формирование, передачу и использование этой информации. В вы-
сокопроизводительных машинах применяются такие методы,, как задержанный выбор (см. ниже), которые помогают несколько смягчить подобные жесткие временные ограничения. В случае СБИС ограничивающим фактором часто является способность передавать эту глобальную информацию состояния. В связи с этим многие СБИС-процессоры имеют такты конвейера большей длительности с большим объемом работ на ступень. Высокопроизводительные крупные компьютеры,, такие, как суперкомпьютер Сгау-1, часто используют короткие конвейеры с большим объемом параллельной аппаратуры для настройки и выбора и высокоскоростными глобальными средствами связи. Другие проблемы, такие как распределение сигналов синхронизации и управления, также обусловливают использование тактов конвейера большей длительности в СБИС-процессорах. Таким образом, если имеются данные эмпирических динамических измерений для конкретного набора команд, можно вычислить эффективность конвейера длины d по формуле (d/ra)—fbCb—id—h, где га — время на ступень конвейера [это время почти постоянно для конвейеров длиной три или четыре (обычно это наиболее распространенные длины для СБИС-процессоров); оно уменьшается для конвейеров длиной два или при отсутствии конвейеризации (d= 1); значение Га растет в случае, когда конвейеры имеют длину пять или более]; /ь — частота ветвлений; Сь — потери на ветвлениях; id —среднее число холостых тактов конвейера на команду и h — прочие потери в работе конвейера из-за отсутствия операндов и т. д. Величина h учитывает и некоторые другие приостановки конвейера. Эти приостановки в обычном случае происходят по следующим причинам: 1. Отсутствие операндов из-за их неготовности или задержек на доступ к памяти. Задержки на доступ к памяти могут возникать в связи с отсутствием данных в кэш-памяти, с ошибками буфера преобразования адресов и с неготовностью памяти. 2. Приостановки на запись, возникающие в случае, когда буфер полный и делается попытка выполнить операцию записи в память. В СБИС-процессорах с простой архитектурой реализуются новые способы управления конвейером и делается попытка повысить коэффициент использования конвейера путем уменьшения затрат на ветвления. В процессорах с архитектурой RISC и MIPS используются только отложенные ветвления; таким образом, при команде ветвления конвейер приостанавливается только в случае, когда компилятор не может найти полезные команды для выполнения во время тактов, необхо-
димых для определения адреса ветвления, анализа условия ветвления и упреждающей выборки целевой команды, если лри ветвлении происходит фактическая передача управления. Измерения говорят о том, что эти задержки при ветвлениях в 50% случаев можно эффективно использовать. В крупных компьютерах применяется альтернативный метод — прогнозирование ветвлений. Если удастся точно предсказать, будет ли производиться фактическая передача управления при ветвлении, можно будет значительно снизить потери в работе конвейера при ветвлениях. Такие простые методы, как фиксация результата конкретного ветвления при последнем выполнении этой команды, позволяют обеспечить точное прогнозирование в 90% случаев и более. Б. Интерпретация команд. Существуют два основных метода интерпретации набора команд: микропрограммирование и аппаратно-реализованное управление. Главная черта, различающая эти методы, — наличие или отсутствие микропрограммного счетчика и памяти микропрограмм, которая занимает значительную часть площади кристалла. В случае реализации без памяти микропрограммы и контроллера последовательности будет использоваться чисто аппаратное управление и большинство команд будет выполняться за один проход через конвейер. На компоновочных планах кристаллов, приводимых в следующем разделе, видно, что в архитектурах с более сложными наборами команд значительную часть площади кристалла занимает память микропрограмм, примерами тому могут служить микропроцессоры 68000 фирмы Motorola 16 000 фирмы National и 80286 фирмы Intel. В кристаллах трактов обработки данных компьютера Micro VAX-1 и в RISC-микропроцессоре практически нет управляющей памяти, поскольку команды, которые они реализуют, весьма близки к уровню операций, реализуемых трактом обработки данных. Естественно, поскольку Micro VAX-I реализует архитектуру семейства VAX, здесь используется большой объем внекристального микрокода. Кристалл MIPS представляет некий промежуточный подход, и мы обсудим схему его блока управления ниже. При выборе конвейерной структуры быстродействие определяется преимущественно конкретной реализацией блока команд. Одна из задач конвейеризации — как можно ближе подойти к достижению главной цели, выполнять по одной команде в каждом такте частоты синхронизации. Для большинства команд этого можно добиться в исполнительном устройстве машины. Команды, требующие длительного времени выполнения, например операции с плавающей точкой,
во многих случаях можно эффективно конвейеризировать в исполнительном устройстве. Хотя для выполнения таких длинных сложных операций требуется много тактов, конвейеризация в устройстве команд в сочетании с малой частотой употребления таких сложных команд в сравнении с более простыми делает их влияние на среднее количество тактов на команду не слишком существенным. Наиболее узким местом общего процесса интерпретации команд является устройство выборки и дешифрации команд. Использование сложных команд переменной длины обходится гораздо дороже по реализации выборки и дешифрации; это весьма серьезно по двум причинам. Во-первых, это не позволяет организовать эффективную конвейеризацию. Наборы команд высокого уровня характеризуются очень короткими отрезками между ветвлениями (вследствие высокоуровневой природы команд). В связи с этим процессор должен иметь число тактов конвейера, затрачиваемых на выборку и дешифрацию команд, как можно более близкое к единице. Если для выполнения этих функций отвести большее число тактов, то процессор будет часто терять такты вхолостую. Отметим, что такие потери будут наблюдаться и при упреждающей выборке, и при дешифрации команд; обе фазы становятся более сложными в случае команд произвольной длины. Во-вторых, большинство выполняемых команд — это все же простые команды. В случае компьютера VAX самыми употребительными командами являются пересылки (обычно между регистром и ячейкой памяти) и простые операции АЛУ. А наиболее часто используемыми режимами адресации являются «регистровый» и «регистровый с байтовым смещением». Таким образом, затраты на выборку и дешифрацию могут во многих случаях быть такими же или даже более высокими, чем затраты на выполнение команд. Сложности дешифрации команд могут привести также к снижению эффективности и для простых, коротких операций. Например, на выполнение операций типа «регистр-регистр» в компьютере VAX-11/780 затрачиваются два такта, причем половина этого времени уходит на выборку и дешифрацию даже для> очень простых команд. А в процессоре MIPS на выборку и дешифрацию команд затрачивается в среднем приблизительно треть времени выполнения; аналогичные доли общего цикла отводятся на эти цели и в процессорах RISC и 801. Устройство управления процессора MIPS представляет интересный промежуточный вариант между микропрограммным блоком (с большим ПЗУ для хранения микропрограмм), применяемым в большинстве коммерческих процессоров, и по
существу отсутствующей секцией управления RISC-микропроцессоров. Устройство управления MIPS-процессора состоит из двух отдельных частей: дешифратора команд IDU и главного конвейерного контроллера МРС. Дешифратор команд выполняет исключительно функции декодирования команд. Регистр команд является для него входом, а на выход он выдает набор сигналов управления, образующих слово горизонтального микроуправления для тракта обработки данных. Некоторые из этих сигналов управления остаются закодированными и в дальнейшем декодируются при помощи программируемых логических матриц (ПЛМ) и простых дешифраторов, расположенных вдоль тракта обработки данных. Схема дешифратора команд в существенной степени определяется структурой набора команд. В RISC-архитектуре команды кодируются достаточно свободно, а это означает, что при декодировании не возникает особых сложностей. В компьютерах VAX на дешифрацию команд затрачивается много тактов, причем для каждого операнда декодирование идет отдельно. В процессоре MIPS дешифрация команд производится в параллельном режиме за один такт частоты синхронизации, однако для этого приходится использовать несколько параллельно включенных ПЛМ. В схему дешифратора команд входят три ПЛМ, при помощи которых осуществляется декодирование трех основных категорий команд: MIPS-процессора. При этом индивидуальные ПЛМ реализуют следующие функции: 1. ПЛМ загрузки/запоминания/ветвления декодирует команды загрузки, запоминания и ветвления. 2. ПЛМ АЛУ декодирует команды арифметико-логического устройства. 3. ПЛМ класса команд определяет, к какому классу относится данная команда. Все три ПЛМ работают параллельно, причем выходной сигнал ПЛМ класса команд используется для коммутациивыхода одной из двух других ПЛМ дешифратора команд на фактические линии управления. Такой способ отложенного выбора играет особенно важную роль для высокопроизводительных машин; он широко используется также в блоке МРС устройства управления. Следует отметить, что этот подход: в случае широкого набора команд был бы невозможен, поскольку количество различных комбинаций линий управления увеличилось бы до неприемлемо большого уровня. При простом наборе команд дешифрацию команд можно* осуществлять за один такт без учета состояний, в то время) как для обеспечения работы конвейера и управления процес-
сором при возникновении таких непредсказуемых событий, вызывающих значительное изменение состояний процессора, как прерывания и отсутствие нужной страницы, необходима микромашина, учитывающая многие возможные состояния. Однако подобная микромашина не принимает непосредственного участия в декодировании или выполнении команд, если не считать того, что она диктует последовательность шагов конвейера. В более сложной архитектуре структура микромашины должна обеспечивать как соблюдение последовательности команд, так и обработку исключительных ситуаций. Каскадное соединение логических схем, необходимых для декодирования сложной команды, приводит к увеличению времени декодирования. Поскольку декодирование обычно производится при помощи программируемых логических матриц, постоянных запоминающих устройств или аналогичных лрограммируемых устройств, возможно возникновение значительных задержек из-за взаимодействия между такими устройствами и при прохождении сигналов в логических схемах устройств, которые сами являются, как правило, тактированными. Поэтому в таких процессорах, как MIPS, взаимодействие между двумя половинами устройства управления ограничивается приблизительно десятком управляющих линий, при помощи которых определяется появление команд типа TRAP («Ловушка»), отражающихся на общем состоянии машины. Архитектура набора команд влияет на схему дешифратора команд и в значительной степени определяет структуру главного устройства управления. В процессоре MIPS главный конвейерный контроллер МРС отвечает за координацию основных действий процессора, в том числе за инициирование нормальных командных циклов процессора при обычных условиях и за обработку исключительных ситуаций (отсутствие нужной страницы в основной памяти или в кэш-памяти, прерывания, внутренние ошибки и т. д.), когда они возникают. Наиболее сложным моментом этой задачи является обработка исключительных ситуаций, которые требуют вмешательства операционной системы, поскольку это, как правило, вызывает необходимость прекратить выполнение нормального •потока команд, запомнить текущее состояние выполнения и передать управление коду супервизорного уровня, чтобы «упрятать» состояние программы пользователя и начать обработку ошибки. Даже в компьютерах простых архитектур контроллер МРС сразу становится центральным элементом, работа которого в значительной мере критична по времени. Это связано с тем, что многие события, требующие, чтобы контроллер .МРС менял состояние процессора, прекращая выполнение
команд или откладывая операции записи для выполняющихся команд, происходят в конце машинного цикла. Речь идет о таких событиях, как, например, арифметическое переполнение и отсутствие нужной страницы в основной памяти, когда приходится, как правило, почти сразу прекращать выполнение нормальной последовательности команд. Архитектура может упростить решение некоторых из подобных проблем, предусматривая возможность организации выполнения команд таким образом, чтобы их можно было без нежелательных последствий прерывать практически в любой момент, почти до конца цикла выполнения. Здесь главное в том,, что операции записи в регистры откладываются до конца выполнения команды. Даже при таком подходе при проектировании контроллера МРС будут возникать серьезные проблемы: как правило, несколько битов важной информации придется передавать и обрабатывать в большинстве схем кристалла, поскольку эти биты участвуют в выборе режимов МРС. В случае процессора MIPS из-за таких прибывающих с задержкой сигналов потребовалось вместо одной ПЛМ. контроллера МРС использовать ПЛМ, окруженную набором произвольных логических схем и мультиплексоров. Как мы видим, сложность схемы устройства управления быстро растет, когда разработчику приходится для достижения целевых скоростных характеристик применять такиеструктурные решения, как конвейеризация. Подобные решения находят отражение на всех схемных и архитектурных уровнях. На уровне системы команд сложность и недостаточное внимание к конвейеризации значительно увеличивают трудности обеспечения эффективного управления конвейерным режимом. Это в свою очередь приводит к снижению быстродействия, поскольку замедляется выполнение самых: коротких по времени операций в устройстве управления. Структура набора команд влияет также на организацию машины тем, что она определяет по сути вид необходимой логики выборки и дешифрации команд. Для сложных команд (переменной длины) потребуется управление микропрограммного типа, поэтому для достижения высокого быстродействия разработчику приходится усложнять или удлинять конвейер. Подобные изменения структуры конвейера затрудняют управление им и вызывают другие подобные эффекты (например, увеличивают накладные расходы при ветвлениях), которые могут существенно уменьшить целесообразность реализации таких решений. Построение тракта обработки данных такжеопределяется в значительной степени структурой конвейера. Сочетания перекрывающихся конвейерных операций определяют такие ключевые особенности организации тракта обра-
ботки данных, как использование шины, доступ к регистровому блоку и относительные скорости выполнения операций АЛУ и других операций тракта обработки данных (таких, >хак доступ к регистрам и взаимодействие с шиной). Правда, некоторые проблемы взаимодействия обычно удается решить •благодаря применению специализированных микросхем, однако сложность набора команд всегда будет сказываться как на сроках проектирования, так и на достигаемых временных характеристиках. IV. Методология физического проектирования
Процесс физического проектирования заключается в том, чтобы преобразовать чисто логическое описание функциональных блоков и их межсоединений (организацию процессора) в представления уровня логических вентилей и подробный компоновочный план кристалла. Наиболее ответственные задачи физического проектирования связаны с распределением имеющейся площади кремниевого кристалла и мощности рассеяния между различными функциональными блоками. Как и для других задач проектирования, для физического проектирования исходной основой служат представления более высокого уровня абстракции, т. е. выбранная организация и архитектура, причем с учетом практических ограничений и требований реальной топологии. В настоящем разделе мы рассмотрим механизм и цели подобного преобразования и ограничения, накладываемые МОП-технологиями. Главная проблема процесса отображения организации и архитектуры процессора на топологию кристалла состоит в том, чтобы свести к минимуму количество глобальных связей. Длинные проводники занимают дефицитную площадь кристалла и приводят к снижению скорости взаимодействия между блоками (из-за больших емкостных нагрузок). Эти проблемы являются особенно острыми для МОП-технологии, тде для прокладки глобальных связей имеется малое число слоев металлизации. Цель физического проектирования заключается в нахождении такого планарного отображения архитектуры, при котором количество соединений между блоками минимально. Решение этой задачи осложняется тем, что начальные оценки размеров различных функциональных блоков, как правило, недостоверны. Весьма компактный компоновочный план кристалла, созданный, однако, исходя из неправильной оценки размера ПЗУ микропрограмм, может существенно измениться с расширением трассировочных каналов, если окажется, что это ПЗУ должно быть вдвое большие. Таким образом, разработчик должен учитывать чувстви-
тельность конкретной конфигурации функциональных блоков к изменениям размеров этих блоков. Во многих случаях размеры лишь небольшого количества блоков необходимо считать неопределенными, т. е. с высокой вероятностью подверженными изменениям. ПЗУ, ПЛМ и управляющая логика в процессе отработки схемы, как правило, разрастаются, в то время как модули тракта обработки данных, размер микрокомандного слова и число регистров к моменту начала детального физического проектирования обычно уже четко зафиксированы. Таким образом, оптимальная организация кристалла позволяет большинство пар взаимодействующих функциональных блоков размещать вплотную друг к другу, с общими границами, и при этом обладает достаточной гибкостью, чтобы избежать коренной переработки из-за отличия окончательных размеров блоков от первоначальных оценок. Тесное размещение взаимодействующих блоков играет особенно важную роль для тех элементов схемы, которые, как ожидается, будут располагаться на критических путях кристалла. К числу других ограничений, которые необходимо учитывать при физическом проектировании, относятся геометрические параметры кристалла, размер необходимых трассировочных каналов и равномерное распределение контактов ввода-вывода по периметру. Процесс физического проектирования является в принципе иерархическим. После завершения высокоуровневого проектирования кристалла в целом этот процесс повторяется для каждого функционального блока. Подблоки, из которых состоят основные функциональные блоки, необходимо рассчитать, разместить и в свою очередь разделить на элементы следующего уровня и так вплоть до уровня логических вентилей. Однако этот процесс не является прямолинейно нисходящим. Это процесс итеративного приближения к оптимуму с многократными одновременными переходами сверху вниз и снизу вверх. Начальные оценки размеров и мощности рассеяния базируются на исходных топологиях ключевых мультиплексируемых элементов с резервированием дополнительной площади для размещения внутренних соединений и логики. Таким образом осуществляется частичная обратная связь нижних и верхних уровней иерархии. После выбора первоначального варианта относительного размещения и ориентации функциональных блоков самого верхнего уровня иерархии мы получаем приблизительное расположение портов ввода-вывода, которые используются как исходное ограничение для размещения и ориентации подблоков. Когда в процессе такой нисходящей декомпозиции выясняется, что внутренняя струк3—708
тура некоторого критического подблока оказывается излишне сложной и в конечном итоге приведет либо к значительному ухудшению скоростных характеристик, либо к увеличению требуемой площади кристалла, начинается итеративное совершенствование схемы и топологии. Для выхода из подобных ситуаций обычно приходится добиваться стройности и рациональности структуры в одной части кристалла за счет другой секции, где неупорядоченность и нерегулярность, в большей степени допустимы. Для процессов физического, логического и электрического' проектирования важную роль играют интерфейсы между функциональными блоками, выбираемые на самом верхнем уровне иерархической структуры. Модули, схемные платы и кристаллы образуют естественные границы, по которым крупные схемы могут разделяться на удобные для работы отдельные компоненты. Поскольку количество транзисторов на кристалле сейчас резко увеличилось и превысило 100 000г очевидной стала также необходимость четко устанавливать и определять внутренние интерфейсы кристаллов. В описаниях этих внутренних интерфейсов в дополнение к обычной семантической и временной информации должна содержаться также информация о топологических и электрических параметрах. Таким образом, одной из задач процесса начального физического проектирования является выбор подобных границ и определение механизмов, гарантирующих их непротиворечивость и совместимость на всех уровнях. Рис. 2—6 показывают, что на практике разработчики обычно разбивают процессор на секцию тракта обработки данных и секцию управления. Процессы физического проектирования для этих двух видов схем совершенно различны по характеру. А. Проектирование трактов обработки данных. Если количе-
ство блоков тракта обработки данных и общая структура их межсоединений определены при выборе организации процесса в целом, то главными вопросами физического проектирования тракта обработки данных становится линейное упорядочение функциональных блоков и шаг расположения двоичных разрядов каждого функционального блока. Линейное упорядочение имеет важное значение потому, что максимальное количество шин в какой-либо одной точке с большой вероятностью будет определять шаг для всего тракта обработки данных, а увеличение расстояния между источниками и потребителями сигналов по критическим путям будет увеличивать длительность такта машины. Наиболее распространенный стратегический подход состоит в том;
б Главный контроллер конвейерный (МРС)
Дешифратор команд
Деишсрраторы микропрограммных слов Управляющие блоки ПрограммМногоре метро- Регистро- ный счетчик и преобВый цик- вый АЛУ лический блок разователь адресов сдвига тель
Рис. 2. Микропроцессор
M I P S . Микрофотография план кристалла ( б ) .
(а)
и компоновочный
,
б
СдВигатель
Регистровый блок
Мультиплексор и промежуточные регистры
1 1 Meuiucppamop команд и управляющие блonи
ПС
Рис. 3. Микропроцессор R I S C II. Микрофотография (о) и компоновочный) план кристалла ( б ) . (С любезного разрешения Манолиса Катевениса.)
чтобы разместить основные функциональные блоки (АЛУ и многорегистровый циклический сдвигатель) на одной стороне, интерфейс памяти на другой стороне, а регистровый блок в середине кристалла. Именно так сделано в микропроцессорах MIPS [13] (рис. 2) и НР9000 [16]. Другой стратегический принцип предусматривает размещение регистрового блока на одной стороне кристалла. Это особенно целесообразно' в случае, если такой блок имеет необычно большой размер, как, например, в RISC-процессорах [8] (рис. 3). Во многих случаях удобно размещать схемы связи с памятью по обе стороны тракта обработки данных, как в микропроцессорах NS32032 фирмы National и Micro VAX-II фирмы DEC [17]
useiw
Блок шины упреждающей Выборки и дешисррато ра команд Блок адресов памяти
Деш.исрратор микрокоманд
Регистровый блок
АЛУ и блок нормализации
Рис. 4. Микропроцессор NS32032. Микрофотография (а) и компоновочный план кристалла (б). (С любезного разрешения фирмы National Semiconductor Corporation.)
1 Блок адресов шины
Исполнительный блок
Блок адресов
Блок команд блок данных
шины
Рис. 5. Микропроцессор iAPX286. Микрофотография (а) и компоновочный план кристалла (б). (С любезного разрешения фирмы Intel Corporation.)
б Регистровый блок и H3V констант
Программный счетчик и АЛУ
Многорегистровый циклический сдвигатель и степ Дешифратор микрокоманд
Рис. 6. Микропроцессор Micro VAX-1. Микрофотография (а) и компоновочный план кристалла ( б ) . (С любезного разрешения фирмы Silicon Compilers Inc.).
(рис. 4). Один из вариантов подобного подхода предполагает размещение блока адресов на одной стороне, а порта данных и блока нормализации на другой стороне кристалла. Несколько новейших микропроцессоров, наиболее известными из которых являются приборы iAPX86 и iAPX286 фирмы Intel (рис. 5), не содержат какого-то одного четко
выделенного блока тракта обработки данных. Это дает возможность осуществлять оптимизацию топологии отдельных блоков без ограничений, связанных с необходимостью выдерживать постоянный шаг расположения отдельных разрядов. ! Недостатком подобного подхода является сложность прокладки соединений между блоками и меньшая гибкость в построении схемы. В качестве примера компромиссного решения можно привести кристалл тракта обработки данных компьютера Micro VAX-I [3] (рис. 6). Здесь регистровый блок, ПЗУ констант, многорегистровый циклический сдвигатель и стек операндов имеют один шаг координатной сетки, а АЛУ реализуется с собственным, гораздо большим шагом. В этом случае дополнительные расходы на трассировку оказались приемлемыми, поскольку на кристалле размещались только средства тракта обработки данных. Сложность такой трассировки была сведена к минимуму благодаря довольно малой плотности используемых каналов прокладки соединений. Такая декомпозиция схемы позволила также включить в тракт данных все регистры, необходимые для задуманной архитектуры, без нежелательного дисбаланса геометрических размеров кристалла. Тракт данных микропроцессора NS32032 имеет две секции, в одной из которых используется значительно больший шаг координатной сетки, чем в другой. Здесь основную сложность представляет область стыковки обеих секций, где осуществляется переход с одной величины шага на другую. При проектировании тракта обработки данных с постоянным шагом координатной сетки важно выбрать оптимальное значение шага расположения отдельных двоичных разрядов. Шаг должен быть достаточно большим, чтобы можно было реализовать самый сложный функциональный блок, но не настолько большим, чтобы задержки распространения управляющих сигналов стали слишком значительными. Это последнее ограничение играет особенно важную роль для многоразрядных (32-бит) микропроцессоров, изготавливаемых по технологиям с однослойной металлизацией. Использование всего одного слоя металлизации для реализации шин тракта обработки данных заставляет линии управления, пересекающие тракт, делать поликремниевыми. Распределенная задержка этих проводников с высоким омическим сопротивлением становится весьма значительной для линий с большой нагрузкой при ширине проводников в диапазоне от 1000 до 2000 мкм в зависимости от технологии. Частичным решением этой проблемы может быть применение ряда супербуферов между старшими и младшими 16 разрядами, как это сделано в процессоре RISC I [9], или каскадное соединение старшей
и младшей половин тракта обработки данных, расположенных в направлении шин, т. е. создание более длинного тракта с постоянной разрядностью 16 бит; такой подход приняли разработчики микропроцессора М68000 фирмы Motorola. Еще один возможный вариант — это помещение дешифраторов сигналов управления и усилителей между обеими половинами тракта обработки данных, как в микропроцессоре NS32032. Такой подход целесообразен, когда желательно иметь независимый доступ к старшей и младшей половинам тракта, но оказывается неудачным, если требуется декодировать несколько полей управляющего микрослова: обе половины тракта данных становятся чрезмерно обособленными. Часто бывает необходимо выбрать шаг для тракта обработки данных почти в самом начале цикла проектирования, чтобы разработку топологии различных функциональных блоков можно было осуществлять параллельно. К сожалению, на ранних этапах проектирования редко удается четко установить, какой именно блок будет определять минимальный шаг для всего тракта обработки данных. Неправильный выбор шага может привести либо к недостаточной плотности компоновки тракта, либо к необходимости перераскладки некоторых блоков, если впоследствии шаг придется увеличивать либо к неэффективной топологии участков, где происходит переход с одной величины шага на другую. Зависимость между величиной шага и длиной тракта обработки данных обычно не проявляется в явном виде, поскольку минимальную длину многих функциональных блоков часто ограничивает шаг топологии усилителей управляющих сигналов, поэтому оказывается проблематичным создание тракта обработки данных с большой шириной и малой длиной участка кристалла. Б. Устройства управления. Декомпозиция устройства управления является, как правило, гораздо более трудоемкой и кропотливой работой, чем декомпозиция соответствующих модулей трактов обработки данных. Корень этой проблемы в том, что устройства управления имеют в принципе менее регулярную и более сложную структуру, которая гораздо существенней отражается на низких уровнях иерархии проектирования. Для упрощения решения этой задачи обычно идут по пути реализации большинства архитектурных возможностей при помощи микропрограммных ПЗУ. К сожалению, как было показано в п. III.Б, это приводит к определенным ограничениям по скорости. В большинстве существующих интегрально-схемных процессоров используются одноуровневая или двухуровневая структура микрокода с некоторыми
произвольными логическими схемами декодирования и управления между памятью микрокода и трактом обработки данных. Подобная физическая организация принята, в частности, в таких процессорах, как НР9000, NS32032, iAPX286, М68000 и однокристальный процессор MicroVAX-II. Ряд выпускаемых в настоящее время микропроцессоров имеет асинхронно работающие блоки интерфейса памяти, которые осуществляют упреждающую выборку команд. В некоторых микропроцессорах основные функции управления реализуются с использованием ряда параллельно работающих блоков. Именно такая структура выбрана разработчиками процессоров Bellmac-32A [18], NS32032 и микропроцессоров семейства iAPX86 [19]. Благодаря такому подходу уменьшается сложность каждого из блоков управления, а также создаются более естественные возможности для организации параллельной работы. Аналогичную архитектуру имеет также микропроцессор MIPS, в котором дешифратор команд отделен от основного блока управления — «Главного контроллера конвейерного» (МРС). Альтернативный вариант— полностью аппаратное управление, как в микропроцессоре Z8001/2. Наиболее серьезные проблемы такого подхода заключаются в том, что возрастает трудоемкость процесса проектирования, повышая вероятность ошибок, а разработанное устройство управления оказывается менее гибким. В соответствии с общими целями процесса физического проектирования главные задачи разработки структуры управления состоят в том, чтобы создать такую топологию, при которой управляющие блоки располагаются по возможности ближе к управляемым и к источнику входных задающих сигналов одновременно. В. Другие задачи. Основным исходным документом для физического проектирования служит входящий в спецификацию логических и временных параметров список операций, которые должны выполняться в каждом цикле. В рамках процесса декомпозиции, проходящего параллельно с электрическим проектированием, осуществляется распределение ресурсов времени и мощности по всем основным блокам и их подблокам. Кроме того, неотъемлемой частью подобного рекурсивного размещения компонентов является разводка шин питания, земли и синхронизации по кристаллу. Хотя эта часть работы по проектированию редко серьезно отражается на окончательном варианте организации и компоновки кристалла, это обязательная и во многих случаях нетривиальная задача. Особенно непросто найти эффективное решение этой
задачи в тех случаях, когда применяются сложные или чувствительные схемы, которые не допускают чрезмерных фазовых сдвигов сигналов синхронизации или электрических помех по земле. Эта последняя проблема наиболее часто возникает для групп контактных площадок, когда большое число мощных усилителей срабатывает одновременно. Г. Взаимосвязи с другими аспектами проектирования. Про-
цесс физического проектирования наиболее тесно связан с логической организацией кристалла И с электрическим проектированием. Взаимосвязи между физическими и электрическими аспектами проектирования ИС будут обсуждаться в п. V.B. Даже небольшие изменения в логической организации могут существенно сказаться на оптимальности физической топологии. Наличие или отсутствие многоразрядной выделенной шины между двумя блоками может привести к значительным изменениям потерь площади кристалла. Как правило, шины совместного использования многими абонентами гораздо легче уложить в топологию, чем набор специальных шин с практически случайными межсоединениями. В подобных обстоятельствах наличие лишь одного или двух слоев металлизации может оказаться очень серьезным ограничением. Использование множества специальных, выделенных шин допустимо только тогда, когда имеется та или иная специализированная структура, предназначаемая для соединения функциональных блоков и предусматривающая прежде всего простое геометрическое размещение этих блоков. Аргументом в пользу выделенных шин служит обычно то, что их можно сделать гораздо более высокоскоростными, чем общую унифицированную шину с многими источниками и многими потребителями. В связи с этим применение выделенных шин вполне оправдано для решения определенных критических задач, несмотря на некоторые очевидные неудобства. Например, для передачи управляющих слов микропрограммы, информации об исключительных ситуациях и связи программного счетчика с регистром адресов памяти целесообразно использовать выделенные шины вследствие временных ограничений, высокой приоритетности и высоких темпов трафика соответственно. Разработчик структуры микропроцессора должен иметь очень четкое представление об использовании каждой линии связи между функциональными блоками, чтобы определять, можно ли эти линии объединять без ущерба для общих скоростных характеристик. Подобное объединение может даже способствовать улучшению характеристик, поскольку физическая топология с уменьшенными накладными
расходами площади кристалла на трассировку проводников будет либо более компактной и благодаря этому обеспечивать более высокую скорость работы, либо будет иметь больше места для размещения дополнительных функциональных блоков. При оценке и планировании длительности цикла машины необходимо также учитывать тесные взаимосвязи между физической топологией и логической организацией кристаллов. В отличие от менее специфичных видов схем, для которых величины задержек на логических вентилях позволяют просто, но достаточно точно оценивать длительность цикла, для МОП-схем очень важную роль играют задержки на межсоединениях. Поэтому важно учитывать физическую ориентацию функциональных блоков относительно предполагаемых критических путей, а также их собственные времена срабатывания. В действительности может оказаться необходимым изменить логическую организацию в какой-то некритической части схемы, чтобы обеспечить оптимальную физическую топологию для какого-либо ответственного функционального блока. Изначальное влияние физической топологии на уровень архитектуры определяется тем фактом, что реальная площадь кремниевого кристалла ограничивается из-за выхода годных и проблем скорости и в связи с этим ее, как правило, не хватает. Архитектуру, которая в принципе требует слишком больших аппаратных ресурсов для достижения приемлемых уровней быстродействия, нельзя будет реализовать в виде одной ИС. Столкнувшись с таким обстоятельством, разработчик архитектуры должен оценить место различных кристаллов с точки зрения верхних уровней архитектуры. В качестве примеров, иллюстрирующих два разных подхода, можно привести микрокомпьютер iAPX432 [20], в котором два кристалла, реализующие центральный процессор, являются по сути неделимым устройством, и архитектуру iS32000 [21], которая предусматривает включение подчиненных процессоров, работающих с непосредственным управлением от основного набора команд. Более лимитирующим фактором, чем конечный размер технологичного допускающего изготовление с приемлемым выходом годных кремниевого кристалла, является ограниченное количество выводов у большинства распространенных корпусов ИС. До последнего времени, когда появились корпуса с матричным расположением выводов и безвыводные носители кристалла, максимальное число выводов двухрядного корпуса достигало 64. С увеличением длины слова микропроцессора с 8 до 32 бит распределение этого весьма скудно-
го количества выводов стало камнем преткновения для специалистов по разработке и по реализации архитектуры. При этом не только обычно не хватает выводов ИС, но и вносятся значительные потери времени на переход с кристалла на кристалл. Особенно острой эта проблема является для разработчиков многокристальных процессоров. Так, разработчикам процессора 432 фирмы «Intel» из-за чрезвычайно ограниченного количества выводов кристаллов пришлось пойти на использование очень малоразрядного (16-бит) тракта передачи управляющего слова микропрограммы между кристаллом дешифратора команд и исполнительным кристаллом. Важный вопрос, решение по которому должен принять разработчик логической организации, заключается в том, следует ли делать шины адресов и данных раздельными или мультиплексированными, т. е. с уплотнением по времени. Мультиплексированные шины, подобные применяемым в микропроцессорных семействах iAPX86 и NS32000, значительно уменьшают число требуемых выводов корпуса за счет увеличения сложности как внешних, так и внутренних схем процессора, а также снижают максимальную пропускную способность канала обмена с памятью. Раздельные шины позволяют иметь более простые интерфейсы, как в случае семейства М68000, либо организовать обращение к памяти с совмещением или с параллельной обработкой адресов и данных, как в случае микропроцессора MIPS. V. Проблемы электрического проектирования Говоря о процессе электрического проектирования, мы подразумеваем все задачи, которые относятся преимущественно к методологии реализации. Здесь мы имеем в виду выбор технологии изготовления, видов схем и схемных решений, способов синхронизации, детальный анализ критических путей и, что наиболее важно, переход от логических формул и подробного компоновочного плана кристалла к топологии. Хотя многие из этих задач должны соответственно решаться и при реализации разрабатываемого процессора с применением таких стандартных видов микросхем, как ТТЛ или ЭСЛ, они становятся гораздо более ответственными и принципиальными, когда приходится иметь дело непосредственно с кремниевым кристаллом. Это различие определяется тем, что специалист, реализующий СБИС-процессор, имеет большую свободу действий. А. Характеристики конструктивных реализаций. Разработчики
процессоров часто не в состоянии каким-либо образом воз-
действовать на природу технологического процесса, применяемого для изготовления кристалла. Главные факторы, интересующие разработчика: 1) число слоев для прокладки межсоединений, 2) емкостные и резистивные параметры каждого слоя,. 3) нагрузочная способность транзисторов. Именно эти факторы по сути определяют скорость вычислений,, связанную с темпами локальных и глобальных обменов данными. Поскольку количество нестандартных транзисторных элементов в микропроцессоре гораздо больше, чем в кристалле памяти, имеющем высокую степень регулярности, необходимо, чтобы на электрическое и физическое проектирование элемента тратилось как можно меньше времени. В этой связи важным критерием для выбора конструктивной реализации является наличие четко определенного и относительнопростого набора правил проектирования, опять-таки как электрического, так и физического. Чрезмерно сложный процесс проектирования будет увеличивать вероятность ошибок, остающихся невыявленными на этапе верификации схемы [22]. В качестве четкой цели ряда последних проектов создания коммерческих микропроцессоров ставилось получение сразу же полностью работоспособного кремниевого кристалла [3, 17]. Затраты времени и других ресурсов на проведение начального проектирования и всех последующих итераций настолько велики, что любые возможные меры, направленные на их уменьшение без ущерба для качества и временных характеристик конечного изделия, будут безусловно оправданны. Об этом наиболее явно свидетельствует успех методологии проектирования, которую предложили Мид и Конвей [23]. Еще более серьезные проблемы, чем при применении «неудобной» технологии, возникают в случае, когда нужно проектировать ряд немногим отличающихся по технологии реализации вариантов схем. Чаще всего такая ситуация связана с ориентацией на несколько кремниевых мастерских или с использованием вариантов одной и той же технологии, различающихся по топологическим проектным нормам. В этом случае единственным рациональным решением может быть нахождение «наименьшего общего знаменателя» для всех этих целевых технологий и проектирование схемы с расчетом на него. Такой подход оказывается также эффективным, если приходится иметь дело с чрезмерно сложной или предельной технологией либо если микропроцессор предположительно» придется переводить на изготовление по технологии с уменьшенными топологическими нормами.
S. Схемные решения. На этапе электрического проектирования наиболее важную роль играют схемотехнические решения. Так, в процессоре MIPS использование одного оригинального схемного решения в критической части кристалла лозволило сократить длительность такта процессора в целом на 30% [12]. Высокоскоростные архитектуры не могут реализовать своих предельных потенциальных возможностей без применения высокоскоростных схем. Здесь можно назвать такие приемы разработчиков, как применение чувствительных усилителей, шин с уменьшенными аплитудами сигналов, логики типа «домино», цепей положительной обратной связи, матриц ПЗУ с несколькими битами на запоминающий элемент и др. Подробное обсуждение подобных схемотехнических решений выходит за рамки настоящей книги, и мы рекомендуем читателю обратиться к учебнику по проектированию усовершенствованных МОП-схем [24]. Применение таких сложных схем для построения микропроцессора требует всестороннего анализа с учетом взаимосвязей между достигаемым быстродействием, определяющимся длительностью такта процессора, и дополнительными расходами на проектирование с увеличением степени риска. Дополнительные расходы на проектирование выражаются в том, что, во-первых, растет время проектирования и моделирования и, во-вторых, для группы разработчиков требуются специалисты более высокой квалификации. Увеличивающаяся степень риска связана с тем, что указанные выше схемы являются более сложными, и поэтому повышается вероятность различных ошибок и недосмотров. Здесь риск — главным образом результат невозможности точного моделирования таких схем на уровне переключателей или на логическом уровне. Адекватную верификацию этих схем можно осуществить только при моделировании на уровне транзисторов. А на моделирование такого вида затрачивается настолько много машинного времени, что практически нереально рассчитывать на то, что удастся проверить все окружающие схемы более полно, чем лишь с малым количеством комбинаций входных сигналов. Замена сложных реальных структур упрощенными логическими эквивалентами при представлениях схемы на более высоких уровнях неизбежна, однако весьма •опасна. Эти элементы также неизбежно оказываются менее надежными в ситуациях, которые разработчик просто не может предусмотреть: в ситуациях, связанных со случайным распределением зарядов, снижением уровней напряжений, •отклонениями параметров технологического процесса и различными сочетаниями этих факторов. Многие из этих факторов относятся также к процессам с более гибкими характери-
стиками. Так, обычно требуется учитывать те или иные особенности транзисторов, работающих в режимах обогащения и обеднения. Повышение быстродействия кристалла благодаря выбору конкретного схемного решения легче оценить количественно, чем затраты на проектирование. Программы временного анализа [25, 26] и моделирование на уровне транзисторов [27] дают возможность достаточно точно предсказать выигрыш в быстродействии в случае внесения в схему тех или иных изменений. Кроме того, уменьшение мощности потребления и занимаемой площади часто становится сильным аргументом в пользу применения схемы повышенной сложности. Эффективное схемотехническое решение элемента с высокой степенью повторяемости может существенно повлиять на общие характеристики кристалла. В некоторых случаях особенно жесткие ограничения по шагу могут вынудить разработчика пойти на нестандартную реализацию элемента тракта обработки данных. Типичным примером решения подобного рода может быть построение регистрового элемента без транзистора обратной связи, как показано на рис. 7, или использование транзистора, работающего в режиме обеднения, в точке пересечения линий двух независимых сигналов. Сбалансированность между этими положительными и отрицательными эффектами достигается обычно благодаря тому, что наиболее сложные схемотехнические решения применяются только в тех случаях, когда можно четко доказать их несомненные выгоды для выполнения общих требований к процессору. Цель процесса электрического проектирования состоит в том, чтобы создать конкретную детальную реализацию, удовлетворяющую всем техническим требованиям к микросхемам. Кроме упомянутых выше спецификаций временных диаграмм, существуют также функциональные и электрические спецификации. Главное, что необходимо для решения поставленной задачи — получения первого же полностью работоспособного кремниевого кристалла, — тщательный систематизированный подход к верификации схемы при проектировании с учетом всех этих требований. Некоторые из указанных функций, например контроль соблюдения электрических требований и правил, реализуются обязательно в рамках процесса электрического проектирования, однако основной объем работ по аттестации кристалла, заключается в том, чтобы проверить непротиворечивость представления схемы на различных концептуальных уровнях. Архитектурное описание воплощается, как правило, в модели уровня команд, организационная структура — в виде описания уровня регистро-
Вход
1!Запись
Выход
т-
Регенерация
Запись Вход
>
Выход
Т.
1'
Запись
Вход
>
(Слабая
Выход
обратная
связь)
Рис. 7. Варианты схем регистровых элементов.
вых передач, а физико-топологические и электрические характеристики отображаются в представлениях схемы на уровне логики, переключателей и транзисторов. Проверка соответствия, непротиворечивости между этими многочисленными представлениями одной и той же схемы осуществляются путем либо моделирования, либо прямой верификации декомпозиции. При моделировании для двух представлений схемы создаются режимы «выполнения» одной и той же кодовой последовательности с одними и теми же исключительными ситуациями, а эквивалентность проверяется прямым сравнением для интерфейсов, видимых для обоих исследуемых уровней: для уровня регистровых передач, когда речь идет об архитектуре; для передач по шине, когда анализируется организация, и для индивидуальных сигналов в случае окончательного варианта схемы. Если на всех этих уровнях провести достаточно полное и тщательное моделирование с охватом всех предполагаемых рабочих режимов и ситуаций, то 4—708
можно надеяться, что первый же кремниевый кристалл будет работоспособен. Хотя некоторые методологии проектирования, такие, как метод сквозного сдвигового регистра (МССР) [28] и BILBO (встроенный контролер-наблюдатель логических блоков) £29], исходно предусматривают обеспечение тестируемости, практически эта проблема начинает решаться только на этапе электрического проектирования, когда и становится ясно, какие конкретные средства для этого используются и с какими накладными расходами это связано. Сами по себе затраты площади кристалла на реализацию данных методов, как правило, не слишком велики, однако могут возникать сложности из-за того, что дополнительные проводники управляющих линий и трактов обработки данных не укладываются в топологию кристалла. Кроме указанных систематических методов обеспечения тестируемости существует ряд специальных подходов, применяемых в коммерческих микропроцессорах. Довольно широкое распространение получили такие средства, как режимы дампинга микрокода, внутренние точки для подключения пробников и контрольные контакты, не связанные с выводами кристалла. Вообще говоря, все это предназначается преимущественно для того, чтобы можно было .осуществлять проверку кристаллов перед присоединением выводов, и только на втором месте стоит задача верификации схемы. В. Взаимосвязи с физическим проектированием. Этап элек-
трического проектировния наиболее тесно взаимосвязан с этапами физического и логического проектирования и в некоторой степени с этапом выбора организации микропроцессора. Главные задачи, решаемые на этом этапе, — уточнение компоновочного плана кристалла, оценка потребляемой и рассеиваемой мощности и построение временных диаграмм при реа^ лизации каждой части схемы. Когда создается компоновочный план кристалла и распределяется общее время цикла машины, каждому блоку и подблоку выделяются соответствующие ресурсы. В процессе реализации каждого конкретного блока может выясниться, что тех или иных ресурсов выделено недостаточно или слишком много. Если расхождение велико, то целесообразно частично переработать физическую структуру, чтобы привести ее в соответствие с фактической схемой. Количества этих трех видов ресурсов, выделяемые для каждого блока логики, в существенной степени определяют способ и характер его реализации. Рассмотрим, например, блок управляющей логики, который должен обрабатывать
исключительные ситуации. Если этот блок не находится на к а к о м - л и б о критическом пути и для него выделена достаточная площадь кристалла, то вполне рациональным для его реализации может быть выбор программируемой логической матрицы (ПЛМ). Такой способ реализации удобен тем, чтоПЛМ легко проектировать и менять, в случае если первоначальная спецификация блока окажется некорректной и потребует внесения каких-либо небольших изменений. Если в исходной матрице предусмотреть резервные минтермы, базовые логические элементы, то изменение логических функций можно будет провести при минимальной доработке кристалла и даже без доработки. С другой стороны, если высокие требования по скорости не позволят использовать ПЛМ, то придется идти на реализацию при помощи произвольной логики. В этом случае выбор того или иного сочетания размера площади, скорости и мощности потребления менее очевиден главным образом из-за громадного количества возможных компромиссных решений. Эти компромиссные решения должны приниматься с учетом двух различных факторов. Во-первых, нужно учитывать, что для транзисторов с увеличением отношения ширины к длине аналогичным образом увеличивается занимаемая площадь и мощность потребления, а задержка уменьшается. Второй важный фактор — это тип схемы. Если временная диаграмма допускает реализацию с использованием схем типа «домино» или схем с предварительным зарядом, то можно добиться высокой скорости и малой мощности потребления. Если требования по скорости исключительно жесткие (т. е., например, отсутствует неактивная фаза цикла), то может оказаться необходимым изменить логическую структуру и физическую топологию, чтобы сократить количество длинных проводников и уровней логики на наиболее критических путях прохождения сигналов. Г. Взаимосвязи с организацией процессора. Главное, что с в я -
зывает задачи электрического проектирования и организациюпроцессора, — это необходимость принимать решения, относящиеся к фундаментальной природе каждого из функциональных блоков и начальным грубым оценкам ожидаемых скоростных характеристик. Организация процессора, как правило, строится исходя из предположений об относительном быстродействии памяти и регистров, с одной стороны, и арифметико-логических устройств и устройств управления — с другой. Эти относительные скорости выбираются на основе опыта разработчиков и некоторых предварительных проработок электрических схем критических и ответственных элементов. Если после завершения реализации выясняется, что
исходные относительные скорости были выбраны очень неудачно, то это указывает на недоиспользование того или иного ресурса или на то, что какой-либо один критический путь «съедает» значительную долю длительности такта машины. Этот фактор является наиболее серьезным для машин с высокой степенью конвейеризации, где одновременные события должны завершаться синхронно. Взаимосвязь электрического проектирования и организации процессора обусловливает также выбор соответствующей стратегии построения конкретных функциональных блоков. Если, например, регистровую память предполагается построить как блок ЗУПВ, а не как блок статических регистровых элементов, подключенных к шине, то длительность цикла регистрового блока будет, вероятнее всего, меньше, однако при этом блок будет, по-видимому, однопортовым. Такое ограничение необходимо учитывать на уровне организации. Аналогичные компромиссные решения приходится принимать при выборе способа реализации дешифраторов команд и устройств управления при помощи микропрограммного ПЗУ или ПЛМ или произвольной логики. Несмотря на очень низкоуровневый характер большинства задач процесса электрического проектирования, гибкость реализации заказных кремниевых кристаллов достаточно велика, так что решения, принимаемые на концептуальном уровне, в существенной степени влияют на организацию и компоновочный план кристалла процессора. VI. Заключение
Появление СБИС привело к значительным изменениям методологии проектирования и реализации компьютеров. В настоящее время эти изменения практически ощущаются только в области микропроцессоров, однако с повышением уровней интеграции аналогичные принципы будут распространяться и на более крупные и более мощные процессоры. Общая тенденция заключается в том, что должны устанавливаться более тесные взаимосвязи между различными аспектами или концептуальными уровнями разрабатываемого изделия. Такие тесные взаимосвязи в сочетании с большим числом степеней свободы, предоставляемыми новой технологией реализации, в принципе значительно усложняют процесс проектирования по сравнению с прежними временами. А сложности процесса проектирования необходимо ограничивать и контролировать путем внедрения методологии, которая даст возможность игнорировать проблемы, не оказывающие существенного влияния на общие конечные характеристики
•^разрабатываемого изделия. Автоматизированные средства •проектирования начинают играть важную роль как инструмент для определения степени сложности, допустимой для данного изделия, а также при установлении и внедрении соответствующей методологии проектирования. Рациональное применение последних технологических достижений и новых .архитектурных решений позволяет создавать однокристальные процессоры с существенно более высокими характеристиками. Выражение
признательности
Приведенный в настоящей статье материал по процессору MIPS — результат коллективной работы группы разработчиков MIPS, в которую входят Томас Гросс, Норман Джуппи, Кристофер Роуэн и авторы статьи.
Литература 3. Clark J. Comput. Graphics 16, 127—132, 1982. 2 . Kung H. Т., Leiserson С. E. Introduction to V L S I S y s t e m s , eds. C. A. Mead, L. Conway, Addison-Wesley, Reading, Massachusetts, pp. 271—292, 1978. 3. Louie G„ Но Т., Cheng F. V L S I D e s i g n 4, 14—21, 1983. 4. Radin G. Proc. S I G A R C H / S I G P L A N Symp. Architect. Support Progr. Lang. Oper. Syst., ACM, Palo Alto, California, 39—47, 1982. 5. Patterson D. A., Ditzel D. R. Comput. Archit. N e w s 8, 25—33, 1980. 6. Hennessy J. L., Jouppi N., Gill J., Baskett F., Strong A., Gross T. R., Rowen C„ Leonard J. Proc. Compcon, IEEE S a n Francisco, California, 2—7, 1982. 7 . Patterson D. A., Sequin С. H. Proc. Ann. Symp. Comput. Archit., 8th, Minneapolis, Minnesota, 443—457, 1981. -8. Sherburne R. W., Jr., Katevenis M. G. H., Patterson D. A., Sequin С. H. Int. Solid-State Circuits Conf. IEEE, 168—169, 1984. 9. Peek J. B. Tech. Rep. U C B / C S D 83/135, Computer Science Division, University of California at Berkeley, August 1983. 30. Patterson D. A., Sequin С. H. Computer 15, 8—22, 1982. 31. Katevenis M. PhD, dissertation, Univ. of California at Berkeley, 1983. 32. Przybylski S., Gross Т., Hennessy J., Jouppi N.. Rowen C. J. V L S I Comput. S y s t e m s 1, 170—208, 1984. 13. Hennessy J., Jouppi N.. Przybylski S., Rowen C., Gross T. Proc. Caltech Conf. VLSI, 3rd Calif. Institute of Technology, Pasadena, California, 33—54, 1983. 34. Clark D., Levy H. Proc. Ann. Symp. Comput. Archit. A C M / I E E E , 9th Austin, Texas, 1982. 35. Wakefield S. PhD. dissertation, Stanford University, 1983. 16. Beyers J. W., Dohse L. J., Futetola J. P., Kochis R. L„ Lob C. G„ Taylor G. L., Zeller E. R. Int. Solid-State Circuits Conf., IEEE, 104—105, 1981. 37. Beck J., Dobberpuhl D„ Doherty M., Dornekamp E., Grondalski R., Grondalski D„ Henry K., Miller M„ Supnik R„ Thierauf S., Witek R. D i g . 1984 Int. Solid-State Circuits Conf., IEEE, S a n Francisco, 178—179, 1984.
18. Murphy В. Т., Molinelli J. J. A 32-Bit Single Chip CMOS Microprocessor,, seminar at the Integrated Circuits Laboratory, Stanford University, 1981. 19. Intel, Inc., Intel iAPAX 286 Users Manual, (preliminary ed.) 1983.' 20. Lattin W. W„ Bayliss J. A., Budde D. L„ Rattner J. R., Richardson W. S. V L S I Design, 2, 34—45, 1981. 21. National Semiconductor, Inc., National IMP 16000 Users Manual, 1983. 22. Przybylski S. A. Proceedings, Third MIT Conference on Advanced Topics in VLSI, ed. Paul Penfield, Jr., MIT, Cambridge, Massachuesetts, pp. 100—109, 1984. 23. Mead C„ Conway L. Introduction to VLSI Systems, Addison-Wesley, Menlo Park, California, 1980. 24. Hodges D. A., Jackson H. G. A n a l y s i s and D e s i g n of Digital Integrated Circuits, McGraw-Hill, N e w York, 1983. 25. Jouppi N. Proceedings Third CalTech Conference on VLSI, ed. R. Bryant, California Inst, of Tech., Pasadena, California Inst, of Tech., Pasadena, California, 1983. 26. Ousterhout J. Third CalTech Conference on Very Large Scale Integration, ed. R. Bryant, Computer Science Press, Rockville, Maryland, pp. 57—70, 1983. 27. Nagel L. Tech. Rep. UCB ERL-M250, University of California, Berkeley, 1975. 28. Eichelberger E. В., Williams T. W. J. D e s i g n Automation Fault Tolerant Comput. 2, 165—178, 1978. 29. Williams T. W„ Parker K. P. Trans. Computers, C-31, 2—15, 1982.
Глава 2 RISC: Эффективные архитектуры для СБИС-компьютеров М. Г. X. Катевенис* К. X. Секуин Д. А. Паттерсон Р. У. Шербурн-мл.**
(М. G. Н. Katevenis), (С. Н. Sequin), (D. A. Patterson), (R. W. Sherburne, Jr.)
Отдел вычислительной техники факультета электротехники и вычислительной техники Калифорнийского университета, Беркли, шт. Калифорния
I. Введение
Достижения в области СБИС-технологии создали условия для реализации функциональных возможностей суперминикомпьютера с использованием лишь нескольких кремниевых кристаллов. Однако этой новой технологии присущи ограничения, кардинально отличающиеся от ограничений, свойственных традиционной технологии крупных ЭВМ. Еще в течение длительного времени кристалл кремния придется рассматривать как довольно ограниченный ресурс с точки зрения количества транзисторов, которые можно на нем разместить, и мощности, которую он способен рассеять [1]. Еще одним серьезным ограничением являются задержки распространения сигналов между элементами кристалла, между подблоками, а также между кристаллами. По мере уменьшения размеров элементов МОП-схемы быстродействие транзисторов кристалла будет все возрастать, так что главной проблемой станут паразитные параметры связей между ними. Поэтому необходимо тщательно продумывать декомпозицию системы, а также интерфейсы между кристаллами. Необходимо избегать разводки критических внутренних цепей с разделением по нескольким кристаллам, а количество соединений большой длины должно быть минимальным. Ответственной задачей следует считать создание компоновочного плана кристалла, содержащего регулярные матрицы с высокой плотностью размещения элементов. Использование матриц весьма желательно также потому, что это упрощает топологическое проектирование. * Computer S y s t e m s Laboratory, Computer Science Department, Stanford Univ., Stanford, California, 94305. ** Electrical Computer and S y s t e m s Engineering Department, Rensselaer Polytechnic Inst., Troy, N e w York, 12181.
56
М. Г. X.
КАТЕВЕНИС,
К. X.
СЕКУИН,
Д. Э.
ПАТТЕРСОН
И
Р. У.
ШЕРБУРН
MJT-
Таким образом, нельзя рассчитывать на то, что простое отображение архитектуры удачного крупного компьютера на кристалл кремния автоматически приведет к эффективной реализации этой архитектуры. Предварительно необходимо переработать архитектуру с учетом конкретных ограничений СБИС-технологии. При этом предпочтение должно отдаваться: архитектурам, допускающим разбиение на функциональные блоки размером с кристалл или размещаемые на одном кристалле. Ограниченные ресурсы кристалла — площадь, мощность рассеяния и число транзисторов — следует четко и аккуратно распределять между процессором, внутренней памятью, связными или интерфейсными схемами и другими необходимыми функциональными блоками. В течение 1980—1984 гг. в Беркли разрабатывался проект RISC (Компьютер с сокращенным набором команд), целью которого был выбор архитектур и технологий реализации однокристальных СБИС-компьютеров для эффективной работы с такими языками высокого уровня, как Си и Паскаль. В процессе разработки проекта было установлено, что рациональное ограничение числа команд небольшим набором наиболее употребительных операций в сочетании с архитектурой, ориентированной на быстрое выполнение всех команд этого набора, может обеспечить весьма эффективное использование дефицитных ресурсов и построение вычислительных машин с высокой пропускной способностью. Подобный RISCмикропроцессор [2, 3] выглядит совершенно иначе, чем типичные кристаллы современных микропроцессоров (рис. 1)Преобладающую часть площади кристалла микропроцессора RISC II занимает тракт обработки данных, содержащий большой регистровый блок, и лишь очень небольшая доля площади отводится для дешифратора команд и секции управления. Чтобы добиться максимального быстродействия при данном размере кристалла и данной мощности рассеяния, необходимо провести объективный, беспристрастный анализ большинства важных требований основных приложений, для которых предназначается компьютер. Большинство наиболее часто встречающихся операций следует поддерживать по преимуществу аппаратно, однако только до такой степени,, чтобы общая производительность компьютера в целом реально возрастала. Расширение аппаратной поддержки, а следовательно, и выделение увеличенной площади кристалла и мощности для какой-то одной функции неизбежно ведет к уменьшению ресурсов, предоставляемых другим функциям. Поэтому задача разработчика системы заключается в том, чтобы анализировать возможные компромиссные решения
Рис. 1. Микрофотография кристалла микропроцессора RISC II.
с нескольких различных точек зрения, включая схемотехнику, микроархитектуру и построение набора команд, и находить оптимальное решение. В настоящей главе описывается подобный анализ и решение, которое выбрано для реализации однокристального микропроцессора, ориентированного на языки Си и Паскаль, путем выполнения некоторой смеси заданий, как было сделано на факультете информатики и вычислительной техники академического института. Студенты, которые слушали многосеместровый курс на этом факультете, в течение 1980 г. исследовали концепцию RISC, а впоследствии разработали функционально законченный 32-бит микропроцессор под названием RISC I с использованием я-канальной МОП-технологии [4]. Этот первый вариант микропроцессора был реализован, испытан и аттестован к весне 1982 г. [5]. Параллельно, взяв за основу ту же базовую архитектуру, разработчики создавали второй, более сложный кристалл с гораздо более тщательной оптимизацией схемы. Этот второй микропроцессор под названием
RISC II был доведен до работоспособного состояния всего двумя специалистами и был продемонстрирован в двух вариантах одной и той же конструкции, с длинами затвора 4и 3 мкм соответственно, в течение 1983 г. [6]. Микрофотография кристалла RISC II показана на рис. 1. В настоящей главе речь идет в основном об этом последнем микропроцессоре. Аналогичные эксперименты проводятся и в других местах. Особого упоминания заслуживает проект 801 корпорации IBM, по которому по инициативе Джона Кока в середине 1970-х годов начал разрабатываться мини-компьютер и руководителем которого сейчас является Радин [7], а также проект MIPS Станфордского университета [8—10]. II. Вычисления общего характера на машинах с фон-неймановской архитектурой
При архитектурном проектировании вычислительной машины главная проблема заключается в том, чтобы рационально выбрать операции, поддерживаемые аппаратно. Реализация операций аппаратным способом повышает скорость их выполнения; однако необходимо сопоставлять возможный выигрыш в скорости выполнения отдельных операций со стоимостью' дополнительной аппаратуры и с общим снижением быстродействия процессора из-за увеличения сложности и физических, размеров. Поэтому разработчик архитектуры компьютера обязательно должен иметь четкое представление о частотеупотребления различных операций в практических вычислениях и о дополнительных затратах на поддержку каждой из; этих операций в аппаратуре. В данном разделе рассматривается первый вопрос — мы попытаемся дать общую картину, позволяющую судить о том,, какие операции встречаются в вычислениях с максимальной частотой. Мы придаем особое значение этому фактору, поскольку считаем, что архитектура многих коммерческих, компьютеров является далеко не оптимальной с точки зрения1 общих характеристик. В качестве примеров можно привести сложные компьютеры, идущие на смену более простым машинам, такие, как компьютер VAX-11 корпорации DEC, преемник модели PDP-11 [11]; System/38 корпорации IBM, сменяющую System/3 [12], и микрокомпьютер iAPX-432 компании Intel, созданный вслед за микропроцессором 8086 [13„ 14]. Характер вычислений и частота употребления различных операций определяются путем построения так называемого профиля выполнения для контрольных программ либо путем
статических или динамических измерений параметров самих программ. Построение профиля программы, или профилирование, состоит в том, что измеряется доля общего машинного времени центрального процессора (ЦП), затрачиваемая на выполнение каждого оператора программы. Построение профиля программы дает возможность выявить те ее части, на выполнение которых уходит максимум общего времени. Это, как правило, небольшое количество малых циклов — так называемых «критических циклов». Их анализ может дать полезную информацию относительно характера вычислений, выполняемых контрольной программой. При статических или динамических измерениях программ производится подсчет числа появлений тех или иных операторов или случаев, когда те или иные признаки оказываются истинными в тексте программы (статика) либо в процессе ее выполнения (динамика). Подобные измерения дают количественную информацию относительно конкретных свойств вычислений, дополняя тем самым общую картину, получаемую при построении профиля программы и говорящую о том, где тратится максимум времени. В настоящем разделе рассказывается об исследованиях природы вычислений общего характера на машинах с фоннеймановской архитектурой; исследования проведены при помощи всех трех указанных выше методов. Здесь слова «общего характера» используются для обозначения смеси прикладных программ, которые не относятся к какой-либо одной конкретной области, — это совокупность программ обработки текстов, управления базами данных, электронной почты и связи, компиляции — трансляции, автоматизации проектирования, управления и обработки числовых данных. Рассматриваемые исследования ограничиваются фон-неймановской архитектурой, поскольку в настоящей главе речь идет именно об этом классе компьютеров. В процессе исследований проводились измерения только для программ, написанных на языках фон-неймановских машин. При этом не использовались никакие Кобол-программы. А. Обработка числовых данных. П р и к л а д н ы е программы об-
работки числовых данных обычно отличаются тем, что в них доминирующую роль играют арифметические операции с плавающей точкой, выполняемые над элементами массивов. Некоторые критические циклы написанных на Фортране программ обработки числовых данных исследовались в [15, Sect. 2.3]. Большинство из них выявил Кнут [16] с применением метода профилирования. Ниже приводится гипотетический цикл, иллюстрирующий типичные характеристики чис-
ленных расчетов. Он написан в формате модифицированного Фортрана: do j = l , N {
^
B[j|=2»A[jl—С if ( B [ j l < 0 ) then call sub(B,N,j) TT=(A[jl+A[N-j]/(B[j]+B[N-j]+C)-C do k = j , N { XX[j , k ] = T T • XX[k, j ]» F [ M — k , k + 1 ] + С if ( j > L )
then
B[jl=SQRT(B[j]»B[N—j])
Циклы программ численных расчетов осуществляют обычно обработку элементов векторов или матриц регулярными последовательностями. При этом подразумевается, что в массивах данных имеется небольшое количество рабочих ячеек, адреса которых меняются в арифметической прогрессии с каждым проходом через цикл. Локальность ссылок возрастает, когда длина цикла составляет лишь несколько' слов. Подсчет числа проходов через цикл и индексация массивов осуществляются при помощи небольшого количества! целочисленных скалярных переменных. Обращение к этим1 переменным производится очень часто, но над ними выполняются только простые операции, такие, как приращения, формирование адресов и сравнения для ветвления. Малое число скалярных переменных с плавающей точкой обычно используется многократно. Часто выполняются операции сложения, вычитания, умножения и деления с плавающей точкой, достаточно широко используются также вызовы математических функций или других процедур. Б. Обработка нечисловых данных. Если
с р а в н и в а т ь с чис-
ленными расчетами, то критические секции программ обработки нечисловых данных характеризуются 1) отсутствием операций с плавающей точкой, 2) использованием связанных структур данных, а не только массивов, 3) более частым использованием указателей и менее частым использованием индексации массивов, 4) более частым использованием сравнений и ветвлений и 5) более частым использованием циклов «while» и менее частым использованием циклов «do», т. е. более нерегулярными циклическими структурами. Некоторые критические циклы программ на языке Си для обработки нечисловых данных были выявлены путем профилирования и исследованы в работе [15, Sect. 2.4]. Ниже приведены две гипотетические критические секции (напи-
санные на языке типа Си), которые иллюстрируют типичные характеристики обработки нечисловых данных. Первый пример является типичным для прикладных программ обработки текстов, а второй может служить иллюстрацией программ, использующих динамические структуры данных. / * с, char есть локальные символьные переменные (или аргументы); * pi, р2, plim есть локальные символьно-указательные переменные (или аргументы); * nflag, lcount есть глобальные переменные (булевы, целые). * / if (nflag) then {редко выполняется}; ehar=find(pl,plim); i f ( * p l i m + + = = c h a r ) then {редко выполняется} /*"*plim+-1-" есть чтение символа по указателю plim, * а затем приращение plim * / else if (checkbad(plim)) then {никогда не выполняется} else l c o u n t = l c o u n t + l ; while ( p K p l i m and * р 1 т ^ ' \ п ' ) / * контроль границы и символ новая-строка */;
{ *p2++ = *pl++; }
/ * копирование символов и приращение указателей */; cur, prev есть локальные указательные переменные (или аргументы); * NIL,LIMIT есть константы; * p-»-f означает поле f структуры, на которую указывает р. * / while (flag and c u r ^ N I L and cur-^-num-nxt; if (cur-»-num>prev->-num) then {редко выполняется}; else if (check(cur-»-num,bound)) then {редко выполняется}; else { prev->-link=cur->-nxt; c u r - > n u m = c u r - > - n u m + l ; }; flag=find(prev->-link,cur->link,cur->-num); /*
При обработке нечисловых данных используются простые арифметические операции — почти исключительно целочисленные сложения и вычитания. Наиболее часто с помощью этих операций выполняются сравнения, приращения и формирование адресов. Доступ к элементам структур данных обычно осуществляется с применением указателей. В программах, написанных на языке Си, указатели часто используются также для доступа к элементам массивов (как в первом из двух приведенных выше примеров), поскольку эта обеспечивает более высокую скорость. Указатели, индексы и счетчики, используемые в критических секциях программ,— это обычно скалярные переменные, локальные для своей процедуры, причем их количество невелико. Простые вызовы процедур и копирование данных встречаются часто, а сравнение и ветвление — очень часто.
В. Измерения параметров
программ.
Анализ
критических
циклов позволяет охарактеризовать природу вычислений. Количественные показатели эффективности программ можно получать путем измерения нужных параметров при помощи соответствующих инструментальных средств, например эмуляторов наборов команд. Опубликовано несколько отчетов по подобным измерениям программ. Мы отметим [3, 16— 24], которые кратко рассмотрены в [15, Sect. 2.2]. Часто используется способ измерения параметров программ, при котором выполняемые операторы разбиваются Таблица
I
Статические, динамические и весовые количественные показатели программ Присваивания, %
Условные операторы, %
Циклы, %
Вызоввозврат, %
Прочие %
Литература
48
15
16
18
3
[17]
47
17
6
29
1
[21]
42
36
5
15
2
[21]
42±12
36±15
4±За
14±4
4
[3]
Веса команд
13±4
16±7
37±5б
32±12
2
[3]
Веса памяти
14±5
10±4
30±4б
44±16
2
[3]
Статика
Динамика
а
Входы в циклы. ® Повторения циклов.
на такие широкие категории, как присваивания, условные конструкции, циклы и пары «вызов — возврат». Александер и Уэртман приводят результаты статических измерений при такой классификации для 19 программ — главным образом •компиляторов, — написанных на языке XPL [17, р. 42]. Эти результаты представлены в табл. I (после исключения описаний и пустых операторов). При подобных статических измерениях подсчитываются просто операторы, присутствующие в программе, без учета числа выполнений каждого оператора или общего времени, затрачиваемого на выполнение каждого из них. Динамические измерения, с другой стороны, учитывают количество выполнений каждого оператора. Таненбаум приводит результаты статических и динамических измерений для более чем 300 процедур, используемых в программах операционных систем и написанных на
языке структурного программирования SAL [23, р. 239]. Паттерсон и Секуин провели динамические измерения для восьми крупных программ, написанных на языках Си и Паскаль и предназначенных для обработки нечисловых данных [3, р. 10]. Они приводят также результаты тех же измерений после распределения операторов по весам с учетом среднего числа машинных команд (веса команд) или обращений к памяти (веса памяти), выполняемых для каждого типичного оператора (типичный вариант каждого оператора предложил Вулф в рамках своей исследовательской работы по оценке качества компиляторов [25]). Эти последние строк» табл. I дают гораздо более реалистическое представление о том, на что затрачивается наибольшее время ЦП и, следовательно, для каких операций может быть оправдана аппаратная поддержка. Приведенные цифры говорят о том, что основная доля времени вычислений расходуется на подсчет циклов, сравнение, ветвление, а также накладные расходы на вызовы — возвраты из процедур, по крайней мере для программ обработки нечисловых данных. Накладные расходы на вызовы — возвраты из процедур обычно столь велики потому, что приходится выполнять много стековых операций на запоминание содержимого регистров, передачу аргументов и значения программного счетчика, прием возвращаемых значений и восстановление регистров. Еще одно интересное измерение, которое можно провести для программы, — это определение сложности выражений, используемых в ней. Выражения встречаются преимущественно в правой части операторов присваивания, а также в условиях операторов ЕСЛИ, в заголовках циклов, используются в качестве индексов массивов и аргументов процедур. Большинство выражений в реальных программах имеют очень малую длину. Статические измерения, проведенные, как упоминалось выше, Александером и Уэртманом [17, р. 43], показывают, что в среднем приходится только 0,76 операции на выражение (не считая индексации массивов), причем для программ обработки нечисловых данных операции распределяются следующим образом: Г) 55%—булевы операции или операции сравнения, 2) 42% — операции сложения или вычитания, 3) 3% —операции умножения или деления. Аналогично динамические измерения Таненбаума [23, р. 239] показывают, что из всех выражений, встречающихся в правой части операторов присваивания, 1) 66% имеют один операнд (без знака операции), 2) 20% имеют один операнд и один знак операции,
3) только остающиеся 14% имеют 2 и более знаков операции. Лунде в своих динамических измерениях для архитектуры DEC system 10 использует понятие регистрового блока [21]. Регистровый блок содержит информацию о всех событиях, относящихся к каждому регистру и происходящих за период времени с момента загрузки в этот регистр до момента последнего использования регистра перед загрузкой в него другого независимого операнда. Измерения Лунде были проведены для семи программ обработки числовых данных и пяти компиляторов, написанных на языках Алгол, Блисс, Фортран, Бейсик и на ассемблере. Они показывают [21, tables VII—XII], что из всех регистровых блоков. 1) 50% (от 20 до 90] не имеют выполняемых над ними арифметических операций; 2) 25% (от 1 до 70) имеют только целочисленные сложения или вычитания, выполняемые над ними; 3) 5% (от 2 до 20) имеют выполняемые над ними целочисленные умножения и деления (возможно, также и целочисленные сложения или вычитания, но не имеют операций с плавающей точкой); 4) 15% (от 0 до 40) имеют минимум одну операцию с плавающей точкой. Кроме того, из всех регистровых блоков 1) 40% (от 20 до 70) использовались для адресации памяти или индексации массивов. Приведенные статические данные измерений документально свидетельствуют о простоте большинства выражений и операций в программах обработки нечисловых данных. Аналогичные результаты получаются и для программ обработки числовых данных, если учесть простые операции индексации и подсчета циклов. Третий интересный класс измерений связан с типами операндов, используемых в программах. Измерения Таненбаума [23, table III (динамика)] и Паттерсона и Секуина [3, table 1 (динамика)] дают цифры, приведенные в табл. II. Кроме того, согласно [3, р. 9], 1) свыше 80% обращений к скалярам осуществлялось локально (переменные описывались как локальные для своей процедуры, включая скалярные аргументы процедур), 2) свыше 90% обращений к элементам массивов и структур данных относились к элементам, описанным как глобальные или сформированным путем динамического назначения. Эти измерения показывают, что константы и локальные «скаляры составляют основную часть операндов, к которым «производится обращение в процессе выполнения программы.
Таблица
II
Частота употребления операндов различных типов Константы,
%
33 20±7
Скаляры, %
Массивы (структуры), %
42
20
55±11
25±14
Прочие, %
5
Литература
[21] [31
В этой связи интересны еще два наблюдения. Во-первых, константы, используемые в программах, обычно малы. Согласно статическим измерениям [16, table 3], 1) 56% всех констант имеют значения в диапазоне от —15 до +15, или 2) 98% всех констант имеют значения в диапазоне от —511 до +511 (в этих программах обработки нечисловых данных все константы— целые). Во-вторых, большинство процедур имеют малое количество аргументов и локальных переменных. 1) Таненбаум провел измерения и нашел, что 98% динамически вызываемых процедур имеют менее шести аргументов, а 92% из них — менее шести локальных скалярных переменных [23, tables VI, VII]. 2) Халберт и Кесслер [20] провели измерения для написанных на языке Си трех крупных и шести малых программ обработки нечисловых данных. Они нашли, что 97— 100% динамически вызываемых процедур имеют менее шести аргументов, а 94—100%—аргументы и локальные переменные, которые могут уложиться в 12 и менее целых. Эти измерения означают, что подавляющее большинство операндов, к которым осуществляется обращение в рамках процедуры, — константы, по длине обычно не превышающие нескольких битов, и локальные скаляры, практически всегда укладывающиеся в несколько слов. Эти качественные и количественные измерения образуют основу для рационального выбора и оценки эффективности процессорных архитектур и их конкретных реализаций. III. Быстрый доступ к операндам Анализ особенностей вычислений общего характера на машинах фон-неймановской архитектуры говорит о том, что наиболее важный вид действий, которые целесообразно поддерживать аппаратно, — это доступ к операндам вычислений, если временно игнорировать проблему выборки и 5—708
декодирования команд (эта проблема обсуждается в пп. IV.B.2, V-Б.Г, VII.Б и [15, Sect 6.3]). Выполнение всех важных категорий программных операторов сильно зависит от возможной скорости поступления операндов в исполнительные аппаратные средства. В частности: 1) Оператор присваивания должен прочитать операнд, выполнить над ним ту или иную операцию и записать результат в другой операнд. Поскольку многие операторы присваивания выполняют очень малое количество или даже вообще не выполняют операций, очевидно, что доминирующую роль здесь играет доступ к операндам. Это особенно справедливо для программ обработки нечисловых данных, в которых наиболее широко употребительные операции очень просты для вычислений. 2) Условные операторы (if) и операторы циклов (for, while) требуют выполнения простых сравнений и вычисления выражений, служащих для подсчета числа повторений цикла. Здесь также важную роль играет доступ к операндам. 3) При вызовах процедур и возвратах производятся манипуляции множеством операндов в форме аргументов или значений, которые передаются между регистрами и основной памятью. Типы операндов,, используемых в программах, очень разнообразны, поэтому для хранения этих операндов применяются также различные категории запоминающих устройств, образующих так называемые иерархии памяти. Для этого созданы разные виды средств аппаратной поддержки. А. Типы операндов и иерархия памяти. Основные типы опе-
рандов, которые следует учитывать при анализе, делятся на три категории: 1) Константы — не меняются во время выполнения программ и имеют обычно небольшие значения. 2) Скаляры — как правило, обращение к ним производится явно, по их собственному имени; их обычно немного и они описываются в процедурах как локальные. 3) Элементы массивов и структур данных — обращение к ним производится путем косвенной адресации, при помощи индексов и указателей; их может быть довольно много. Запоминающие устройства, которые интересуют нас в данном случае, — это: 1) регистровый блок, 2) кэш-память и 3) основная память. Процесс доступа к операндам программы состоит из двух частей, причем обе они должны учитываться при оптимизации скорости доступа. Прежде всего необходимо осуществить адресацию, т. е. определить адрес физической ячейки,
где в настоящий момент хранится искомый операнд. Только после этого может быть произведен сам доступ к операнду. Для различных типов операндов и различных устройств памяти в иерархии характерны различные уровни сложности и задержки при выполнении адресации и доступа. В табл. III приведены основные характеристики различных запоминающих устройств, входящих в иерархию памяти (кроме накопителей на магнитных дисках), и сведения о возможностях использования этих ЗУ для хранения различных типов операндов. Операнды можно помещать в формат команды только тогда, когда это — константы. В подобном случае никакой дополнительной адресации или задержки доступа не требуется — после того как команда будет выбрана, а ее поля выделены для обработки. Выборка команд и выделение полей являются необходимым условием для адресации и доступа к операнду любого типа. Таблица
III
Иерархия памяти и типы операндов Отдельная команда
Регистровый блок
кэш-память
Основная память
Накладные расходы на а д р е с а ц и ю
О
Малые
Средние
Средние
Задержка доступа
О
Очень малая »
Малая
Средняя
Высокая
Очень высокая
Возможно »
Возможно
Возможно
»
»
Емкость Стоимость на слово
в расчете
Константы
Возможно
Промежуточные значения, невидимые д л я языка высокого уровня
—
Скаляры
—
Массивы и структуры д а н н ы х
При определенных условиях —
Регистровые блоки и кэш-память относительно мало различаются с точки зрения емкости, времени доступа и стоимости, однако существенно различаются по накладным расходам на адресацию. Регистровые блоки традиционно имеют меньший размер, чем кэш-память, и, следовательно,
меньшую задержку доступа. Кэш-память имеет более высокую стоимость в расчете на слово, чем регистровые блоки, поскольку требуют дополнительных схем для организации хранения тегов, параллельного чтения многих групп слов и для реализации логики сравнения и замещения. Если по времени доступа кэш-памяти в принципе могут почти не уступать регистровым блокам, то накладные расходы на адресацию — и соответственно задержка — для кэш-памяти значительно выше. Это прямое следствие фундаментальных различий между кэш-памятью и регистровыми блоками. Обращение к кэш-памяти осуществляется при помощи адресов памяти полной длины, и благодаря этому кэш-память прозрачна для программиста на машинном уровне. А регистровые блоки адресуются короткими номерами регистров, так что они должны быть видимы на машинном уровне. Короткие номера регистров обычно указываются в команде, поэтому их декодирование производится очень просто и быстро. С другой стороны, длинный адрес памяти, необходимый для выборки операнда из кэш-памяти, требует более высокой полосы пропускания каналов обмена, что приводит к увеличению стоимости. Длинный адрес нелегко поместить в команду, он даже обычно неизвестен во время компиляции, если не считать таких операндов, как глобальные скаляры. Как правило, этот адрес приходится формировать во время выполнения программы, что требует как минимум обращения к регистру или полноразрядного сложения либо и того и другого. Что касается локальных скаляров, то здесь накладные расходы на адресацию состоят в прибавлении короткого смещения к содержимому регистра-указателя стека. В качестве примера в табл. IV приводятся сравнительные данные о временах доступа к локальным целым, хранящимся в регистровых блоках и в кэш-памяти, для некоторых команд мини-компьютеров PDP-11/70 и VAX-11/780 корпорации DEC. Отметим, что аппаратура компьютера VAX-11/780 предусматривает возможность одновременного чтения двух регистров и записи в третий за 200 не и что доступ к кэшпамяти при наличии в ней нужного слова также занимает 200 не. Остальное время выполнения операций, перечисленных в табл. IV, затрачивается на декодирование команды, на вычисление исполнительного адреса (адресов) и на доступ (доступы) к кэш-памяти. Если даже процессор построен с применением конвейеризации, многопортовой кэш-памяти или и того и другого, чтобы ускорить операции над локальными скалярами, находящимися в кэш-памяти, то все же довольно трудно и дорого сделать выполнение этих операций столь же быстрым, как
Таблица
IV
Время д о с т у п а (в н а н о с е к у н д а х ) к локальным скалярам, хранящимся в регистровых блоках и в кэш-памяти 3
PDP-11/70
i,j : регистр i: регистр, j: стек ( о п е р а н д в кэш-памяти) i: стек (операнд в з а п и с ь ) , j: регистр
VAX-11/780
300
400
1050
800
1500
1200
2250
1400
кэш-памяти/сквозная
i, j: стек (операнд в кэш-памяти/сквозная пись) а
,
за-
1
Время выполнения команды пересылки i«-J (получаемой при компиляции оператора i:=J).
операций типа «регистр — регистр». С другой стороны, кэшпамять, подобно основной памяти, можно использовать для хранения операндов любого типа, в то время как регистровые блоки позволяют хранить только определенные типы операндов (табл. III). Регистровые блоки могут использоваться для хранения констант, а также промежуточных результатов, которые формируются в процессе вычисления выражений и невидимы на уровне исходной программы (написанной на языке высокого уровня, или ЯВУ). Регистры, поскольку они адресуются прямо, при помощи полей самой команды, нельзя использовать для размещения массивов и структур данных. С точки зрения скалярных переменных ситуация не столь однозначна. Б. Распределение скалярных переменных по регистрам. Ре-
зультаты измерения программ, приведенные в п. IIB, показывают, что из каждых ста операндов ЯВУ, к которым осуществляется обращение во время выполнения, примерно 25— константы, 50 — скаляры и 25 — данные структурного типа. Если исключить из рассмотрения константы, поскольку их можно помещать в команды, остается соотношение ссылок 50 скалярных на 25 структурных. Однако для каждой структурной ссылки ЯВУ необходим доступ минимум к одной скалярной переменной — индексу массива либо указателю «структуры» или «записи». Таким образом, на уровне машинного языка это соотношение становится минимум 50 + 25=75 скалярных ссылок на 25 структурных. Из-за большого различия между регистровыми блоками и кэш-памятью по общей скорости доступа и большой часто-
ты использования скаляров в программах распределение скалярных переменных по регистрам имеет важное значение для увеличения быстродействия и поэтому заслуживает гораздо большего внимания, чем ему уделялось разработчиками большинства архитектур коммерческих процессоров. Чтобы добиться достаточно высокой эффективности распределения переменных по регистрам, необходимо решить ряд проблем. Первая проблема возникает в случае, если количество подобных переменных в программе больше, чем число регистров в целевом компьютере. Для достижения более высокого быстродействия целесообразно прежде всего распределять по регистрам наиболее часто используемые переменные. Однако во время компиляции частота использования неизвестна. Некоторые языки предоставляют программисту возможность выдавать компилятору указания, подобные описаниям, предусмотренным в языке Си: register integer i; register struct node *p; /*указатель на узел структуры*/.
При этом отвественность за эффективность распределения регистров несет сам программист. Другой подход состоит в том, чтобы включить в схему компьютера столько регистров, сколько потребуется для хранения большинства скалярных переменных. Это осуществимо для локальных скаляров процедур; для размещения всех аргументов и локальных переменных приблизительно 95% процедур достаточно 12 слов (см. конец п. II В). Распределение только локальных скаляров по регистрам позволяет вполне удовлетворительно решить проблему, поскольку основной процент всех скалярных ссылок относится именно к локальным скалярам. Вторая, более сложная проблема — это проблема скалярных переменных с псевдонимами, т. е. скаляров, обращение к которым производится при помощи указателя. В языке Си программист может затребовать адрес некоторой переменной, а впоследствии использовать этот адрес любым удобным способом. Например, вот каким образом процедурам передаются аргументы возврата: scant ("%d
я", &£&/);
Так что же такое адрес переменной, находящейся в регистре, и как организовать доступ по этому адресу (переназначение адреса), чтобы попасть в нужный регистр? Близкая по характеру проблема — восходящая адресация в языках с блочной структурой. Восходящая адресация — это обраще-
ние к локальным скалярам родительской процедуры со стороны одной из ее дочерних процедур. Каким образом процессор узнает, находятся ли локальные скаляры этой родительской процедуры в тех или иных регистрах? Одно возможное решение подобных проблем — использование двухпроходного компилятора, который выявлял бы все псевдоименные переменные при первом проходе и распределял бы их по памяти при втором проходе. Другое возможное решение — предусмотреть в процессоре специальную аппаратуру, которая в моменты доступа обнаруживала бы все адреса, относящиеся к регистрам, и осуществляла бы соответственные переназначения этих адресов (см. обсуждение этой проблемы в [15, Sect. 3.2.3]). Третья проблема касается запоминания и восстановления локальных скалярных переменных с соответствующими обменами между регистрами и памятью при вызовах и возвратах из процедур. Здесь цель в том, чтобы свести к минимуму накладные расходы на вызовы процедур. Эту важную проблему мы обсудим ниже. В. Многочисленные перекрывающиеся окна регистров. Рас-
пределение аргументов процедур и локальных скалярных переменных по регистрам приводит к существенному выигрышу во времени выполнения благодаря высокой скорости доступа к регистрам. С другой стороны, необходимость запоминания содержимого регистров в памяти при вызовах процедур и восстановлении при соответствующих возвратах снижает производительность. Как минимум содержимое тех регистров, которые используются родительской процедурой и к тому же должны использоваться дочерней процедурой для хранения собственных переменных, необходимо направить в память до того, как дочерняя процедура произведет их перезапись. Вызовы процедур в типичных современных (структурированных) программах осуществляются весьма часто, так что расходы на подобное запоминание-восстановление никак нельзя игнорировать. Суммарные накладные расходы на выполнение команд вызова и возврата из процедур для стандартных процессоров сейчас настолько велики, что могут доходить до 50% общего количества обращений к памяти во время выполнения программы [3, table 3]. Хотя индивидуальные вызовы-возвраты производятся весьма часто, большие колебания динамической глубины вложенности процедур для типичных программ нехарактерны. Это свойство мы называем локальностью глубины вложенности процедур. Это свойство локальности иллюстриру-
1; , iii
11 II III III ""I"""" II '
'"I x-
t=33
АA t w -5
Параметр /
•I1"""1
к
/vVsAA^
Глубина вложенности Рис. 2. Локальность глубины вложенности процедур. Параметр t указывается в единицах вызовов-возвратов из процедур.
ется на примере графика глубины вложенности (рис. 2). Прямоугольником выделен участок, в котором глубина вложенности остается в пределах 5 (w = 5) в течение периода, соответствующего 33 вызовам-возвратам из процедур (£=33). Это свойство локальности можно с успехом использовать, если в процессоре предусмотреть ряд наборов, или банков, регистров, как предложили Баскетт [26] и Сайте [27]. При вызовах процедур производится выделение нового банка регистров, благодаря чему исключаются накладные расходы на запоминание/восстановление содержимого регистров. По завершении процедуры соответствующий банк регистров может быть предоставлен новой процедуре. Кроме того, желательно также ускорить передачу параметров и значений возврата между родительскими и дочерними процедурами, используя для этой цели регистры. Для этого необходимо, чтобы к определенным регистрам имели возможность доступа и родительская и дочерняя процедуры, другими словами, чтобы банки регистров обеих процедур перекрывались. Удобным способом реализации подобной возможности является механизм с многими перекрывающимися «окнами», накладываемыми на непрерывный блок регистров. Такой механизм, предложенный Халбертом и Кесслером [20], используется в процессорах RISC I и II, разработанных в Беркли. Измерения, результаты которых приведены в [20, Sect. II. С; 23], показывают, что 97% или более процедур имеют менее шести аргументов; это значит, что вполне достаточно обеспечить перекрытие соседних окон приблизительно на полдесятка регистров. В процессоре имеется указатель текущего окна, который выбирает одно из окон и делает его регистры доступными
на период выбора. При вызовах и возвратах из процедур значение указателя текущего окна модифицируется таким образом, чтобы указывать на следующее или предыдущее окно соответственно. Когда глубина вложенности процедур превышает количество окон w, происходит (положительное) переполнение и содержимое некоторых старых окон приходится направить в основную память чтобы освободить место для новых процедур. Желательно организовывать управление окнами как циклическим буфером, в котором хранились бы w записей об активации (инициировании) самых последних процедур. Пока глубина вложенности колеблется в пределах w, ни одно окно не приходится записывать в основную память или восстанавливать из памяти. Прямоугольниками на рис. 2 показаны уровни глубины вложенности, соответствующие w окнам регистрового блока в различные периоды времени. Начало каждого нового прямоугольника — это момент, когда происходит положительное переполнение или отрицательное переполнение (выход за нижнюю границу блока регистров). Стратегия управления окнами, отображенная на данном рисунке, предполагает запоминание точно одного окна при каждом положительном переполнении и восстановление точно одного окна при каждом отрицательном переполнении. Тамир и Секуин [24] исследовали различные стратегии и пришли к выводу, что такая простая стратегия запоминаниявосстановления по одному окну для большинства практических ситуаций является наилучшей. Халберт и Кесслер [20] и Тамир и Секуин [24] проводили измерения локальности глубины вложенности, подсчитывая среднее количество вызовов-возвратов t, выполняемых в периоды между соседними положительными или отрицательными переполнениями (это количество соответствует средней длине t прямоугольников на рис. 2). Некоторые полученные результаты приведены в табл. V, причем для указанной выше стратегии запоминания-восстановления по одному окну. (Все исследуемые программы были написаны на языке Си.) Интересно отметить, что программы довольно четко разделились на две группы — большие, перечисленные слева, и малые, перечисленные справа. Максимальная абсолютная глубина вложенности для некоторых малых программ даже не превышает 6 процедур. Когда процессор имеет однорегистровое окно, как в случае традиционных архитектур, это окно приходится запоминать-восстанавливать при каждом вызове-возврате. Когда в процессоре предусмотрено ю окон, одно окно приходится запоминать-восстанавливать только на каждые t вызовов-возв-
Таблица
V
Среднее количество вызовов-возвратов, t, м е ж д у положительными и отрицательными переполнениями
W
Компилятор языка Си компьютера VAX [20] Компилятор языка Си компьютера RISC [24] Паскаль — интерпретатор [20] troff — наборщик [20] Ханойские башни [24]
Шесть малых нечисловых программ [20] Программа-головоломка [24]
4
7—12
6
15—50
от 150 д о оо
8
30—100
от 5 0 0 д о оо
40—300
ратов. Приведенные в таблице измерения свидетельствуют о том, что 6—8 окон достаточно для того, чтобы уменьшить количество запоминаний-восстановлений окон на пару порядков величины по отношению к традиционным архитектурам. Реализация механизма перекрывающихся окон регистров показана на рис. 3. Рис. 3, б — р-канальная МОП-схема, реализующая дешифратор адресов регистров для случая, когда в любой момент должны быть 32 доступных регистра; нумерация регистров организована таким образом, что перекрывающиеся регистры находятся в двух окнах с номерами, различающимися на 16. Более полное описание механизма перекрывающихся окон можно найти в [3, pp. 11—13, 15, Sect. 3.2]. Г. Достоинства и недостатки больших регистровых блоков.
Как и реализации всех аппаратных возможностей процессора, реализация механизма с многими окнами регистров не обходится бесплатно. 1) Большой регистровый блок стоит дорого — по количеству используемых транзисторов и по занимаемой площади кристалла. Таким образом, увеличение размера блока приводит к тому, что дефицитных кремниевых ресурсов не хватит каким-либо другим функциональным блокам. 2) Чем больше размер регистрового блока, тем длиннее его шины и линии адресов, тем выше их паразитные емкости и тем ниже скорость дешифрации и считывания. 3) Дешифраторы на логических вентилях И-ИЛИ, необходимые для реализации механизма перекрывающихся окон (рис. 3), работают медленнее или потребляют большую мощность, чем простые И-дешифраторы обычных регистровых блоков.
Текущее окно А В
\ Окно В
_ N1 N1 N0 NО Номер регистра
Дешифратор
Регистры
+5В Выход deuiucppamop Окно A —j[,V4 или
^ H f МО1
Окно В
или МЗ
или N0
или1[ W77;
Рис. 3. Перекрывающиеся окна регистров.
4) На запоминание и восстановление регистрового блока с многими окнами при переключениях с процесса на процесс (переключениях контекста) затрачивается гораздо больше времени. Как и во всех прочих случаях, аппаратный механизм перекрывающихся окон регистров следует вводить в схему процессора таким образом, чтобы достигаемый выигрыш превышал затраты. Учитывая существенное различие в скоростях доступа к регистровым блокам и к кэш-памяти, высокую частоту вызовов процедур и высокую стоимость запоминания содержимого регистров в основной памяти, можно считать, что многооконный регистровый механизм будет привлекательным и целесообразным для самых различных архитектур и приложений. Во многих случаях гораздо выгоднее использовать.
транзисторы на реализацию регистров для обеспечения высокоскоростного доступа к операндам, чем на поддержку редко употребляемых сложных команд. Увеличение общей длительности машинного такта из-за снижения скорости дешифрации адресов и чтения регистров необходимо тщательно оценивать применительно к каждой конкретной технологии, схеме конвейеризации и организации тракта обработки данных, а затем сопоставлять с количеством тактов, экономящихся благодаря тому, что операции по запоминанию-восстановлению регистров придется выполнять реже. Табл. V говорит о том, что достижение выигрыша в скорости благодаря дополнительным окнам регистров «насыщение» происходит при числе окон w = 5—7. Таким образом, вполне можно считать, что «оптимальное» число окон составляет от 3 до 8. Более подробное обсуждение этого вопроса можно найти в [28]. Представляет интерес вопрос о том, влияет ли увеличение регистрового блока на задержки переключения с процесса на процесс, и связанный с ним вопрос о том, следует ли использовать многорегистровые окна (или «наборы») по одному на процедуру или по одному на процесс. Ключом к ответу на оба этих вопроса является отношение частоты вызовов процедур к частоте переключений с процесса на процесс. Это отношение обычно настолько велико, что точные цифры даже не нужны: на одну команду вызова процедуры приходится приблизительно от 25 до 250 выполняемых команд (см., например, [2, fig. 15]), в то время как перед переключением с процесса на процесс выполняются, как правило, десятки тысяч команд (см., например, [29, р. 34]). Поскольку вызовы процедур происходят примерно на два порядка величины чаще, чем переключения процессов, окна регистров следует использовать для поддержки процедур, а потери, связанные с запоминанием содержимого большего количества регистров при переключениях процессов вполне компенсируются тем, что при вызовах процедур запоминается меньше регистров. Описанный выше механизм перекрывающихся окон для повышения общего быстродействия процессора можно модифицировать несколькими способами. Ниже приводятся возможные усовершенствования и кратко рассматриваются их достоинства и недостатки; более подробное описание см. [15, Sect. 6.2, 18, 28, 30]. Кроме того, следует отметить, что для уменьшения числа вызовов процедур и возвратов можно использовать линейное расширение соответствующих процедур, при этом практически отпадает необходимость в регистровом блоке большого размера.
1. Специальные средства поддержки механизма окон. Если для уменьшения задержки на запоминание-восстановление окон иметь дополнительную аппаратуру, то можно допустить более высокую частоту положительных и отрицательных переполнений. Благодаря этому появляется возможность использовать регистровый блок с меньшим количеством окон и с меньшими емкостными задержками. Затраты времени на запоминание-восстановление окон могут быть сокращены несколькими указанными ниже способами. Один возможный вариант — ввести аппаратную поддержку для обработки положительных и отрицательных переполнений. Получаемые при этом задержки меняются в зависимости от конкретного подхода: 1) Положительное и отрицательное переполнения могут восприниматься как исключительные ситуации для процессора, приводящие к вызову обычной программы обработки прерываний. При выполнении этой программы некоторое время тратится на служебные, вспомогательные операции и некоторое время — на несколько операций пересылки типа «регистр-память». Это самый низкоскоростной, преимущественно программный способ. 2) Делается то же, что в первом случае, однако используется команда групповой пересылки, которая копирует целое окно быстрее, чем ряд индивидуальных команд пересылки регистров. Этот способ обеспечивает более высокую скорость, однако требует реализации более сложной команды. Он был применен в микропроцессоре SOAR [31]. 3) Положительное и отрицательное переполнения могут обрабатываться целиком аппаратным способом, вместо того чтобы прибегать к механизму прерываний. Накладные расходы времени значительно сокращаются, если применяется аппаратура, способная определять, какое окно необходимо скопировать и куда. Копирование осуществляется по команде групповой пересылки, упомянутой выше. Этот способ обеспечивает еще более высокую скорость, но требует сложной управляющей аппаратуры. Дополнительного повышения скорости позволяет достичь команда блочного обмена «ЦП-память» по каналу большой пропускной способности. Такой канал, реализованный в дополнение к обычному интерфейсу между ЦП и основной памятью (кэш-памятью), рассчитанному на пересылку по слову за цикл, обеспечивает быстрый доступ к последовательным ячейкам памяти с применением таких методов, как чередование (интерливинг) банков памяти или предусмотренный в однокристальных динамических ЗУПВ страничный обмен. При этом можно использовать небольшой регистро-
вый блок с эквивалентно высокой полосой пропускания. Такой метод требует дорогостоящих шин связи ЦП и памяти, но позволяет ограничиться лишь небольшим высокоскоростным регистровым блоком. Эффективную задержку на запоминание-восстановление окон можно уменьшить также, если копировать содержимое регистров в «фоновом» режиме, т. е. параллельно с обычным выполнением команд. Для этого требуется более сложная аппаратура управления и, быть может, вторая шина обмена между ЦП и основной памятью. Здесь могут использоваться две схемы: а. Со сквозной записью. В типичных архитектурах операции записи в регистры производятся с максимальной частотой одна запись на такт. Выполнение этих операций можно организовать таким образом, что каждое значение, записываемое в регистр, будет также запоминаться (упрятываться) в соответствующей ячейке памяти (кэш-памяти) в течение ближайшего следующего такта. При подобной схеме явное запоминание окон никогда не приходится делать, но по-прежнему необходимо только восстановление окон. б. С непрерывным обратным копированием. Этот алгоритм предложил Сайте [27]. Окна переписываются из ЦП в основную память и обратно практически непрерывно в фоновом режиме. После выполнения вызова процедуры соответствующее окно записывается в основную память в порядке подготовки к новому вызову. Аналогично после возврата из процедуры окно восстанавливается в порядке подготовки к новому возврату. Этот алгоритм может способствовать достижению главной цели, чтобы процессору почти никогда не приходилось ждать запоминания-восстановления окон. К сожалению, случаи, когда два вызова или два возврата выполняются очень быстро друг за другом, встречаются редко. Необходима поэтому специальная аппаратура для высокоскоростного копирования блоков в фоновом режиме, чтобы фоновый процесс не занимал слишком много времени. 2. Переменные размеры окон. Если регистровые окна будут иметь размер около десятка регистров каждое, то их будет достаточно для размещения записей, связанных с активацией большинства процедур (разд. II.В). Однако среднее число аргументов и локальных переменных в расчете на процедуру составляет всего лишь от четырех до шести [15, Sect. 6.2.1, 18, 20]. Таким образом, в регистровых блоках с окнами фиксированного размера многие регистры остаются неис-
пользованными. Подобную неэффективность можно частично исключить двумя способами: а. Запоминание-восстановление только использованных регистров [32]. Окна по-прежнему имеют фиксированный размер (около 12 регистров), но при положительных и отридательных переполнениях производится запоминание-восстановление только тех регистров, которые реально использовались, благодаря этому сокращаются накладные расходы на копирование. Однако этот алгоритм довольно нерационален из-за высокой стоимости аппаратуры для слежения за использованием регистров. б. Окна переменных размеров. Это важная альтернатива механизму с окнами фиксированного размера [18]. Здесь размер каждого окна определяется во время выполнения и выбирается точно таким, какой требуется для соответствующей процедуры. Регистровый блок в целом рассматривается как небольшая кэш-память, размещаемая на вершине исполнительного стека. Этот алгоритм позволяет иметь то же самое количество окон в среднем при использовании меньшего числа физических регистров. Однако ему свойственны следующие недостатки: требуется выполнять короткое сложение, чтобы получить возможность адресовать нужный регистр, и одну или две дополнительные команды на пару вызов-возврат из процедуры для обновления и контроля значения указателя окна [15, Sect. 6.2.1; 18]. IV. Наборы команд, ориентированные на регистровую архитектуру
Измерения параметров программ, приведенные в разд. II, свидетельствуют о простоте большинства операций, встречающихся в вычислениях общего характера на машине с фоннеймановской архитектурой, и о высокой доле числа обращений к скалярным операндам. В разд. III показано, почему соответствующая архитектура должна быть четко ориентирована на эффективное распределение скалярных переменных по регистрам. Чтобы обеспечить распределение наиболее часто используемых операндов по регистрам с учетом простоты наиболее часто встречающихся операций, была предложена регистрово-ориентированная архитектура компьютера с сокращенным набором команд RISC. Подобная архитектура имеет простые команды типа «регистр-регистр», команды для пересылки данных между регистром и памятью и простые команды передачи управления. Все эти команды можно реализовать при помощи эффективного конвейерного
л
тракта обработки данных и несложной схемы синхронизации и управления. А. Операции типа «регистр-регистр». К простейшим
опера-
циям в машине фон-неймановской архитектуры относятся те, которые выполняются над данными, находящимися внутри центрального процессора. Существуют два принципиально различных вида архитектур: стековая и регистровая. Стековые команды обрабатывают данные, которые размещаются в ячейках, выбираемых по умолчанию, т. е. на вершине стека для вычисления выражения, который часто реализуется в регистрах, известных только на аппаратном уровне. Отметим, что стек вычисления выражения концептуально и функционально отличается от стека для хранения записей активации процедур. Стековые команды (иногда называемые также безадресными командами) позволяют получать очень компактный машинный код для вычисления выражения, поскольку они не должны содержать битов для указания адреса ячейки, где будут храниться промежуточные результаты. Однако, как упоминалось в разд. II, среднее выражение очень короткое: оно содержит лишь три четверти операции; выражение с двумя и более операциями — а только такие выражения вычисляются с получением промежуточных результатов— встречаются весьма редко. Таким образом, архитектуры, оптимизированные для вычисления выражений, не столь эффективны для более обычного стиля программирования, примеры которого приведены в разд. II. В наиболее общем виде команды типа «регистр — регистр» можно записать следующим образом: Rd^-Rsiop Rs2 И Rd-^op константа. Второй формат играет важную роль, поскольку позволяет задавать константы непосредственно в командах. Эти форматы охватывают вариант с двумя операндами Ra-^RaOpB (где В может обозначать Rb ИЛИ константу) как особый случай d = sl. Они охватывают также регистровые команды пересылки и сравнения как особые случаи: когда RS2 = 0 и оператор « + », образуется команда «переслать». Если оператор «—» и Rd вначале проверяется, а затем отбрасывается, то образуется команда «сравнить». Эти особые случаи, которые, как показано в разд. II, встречаются довольно часто, можно закодировать как самостоятельные, более компактные команды. В архитектуре компьютеров RISC I и II Калифорнийского университета Беркли разработчики не пошли на подобное кодирование, поскольку использовали простой и унифицированный однословный формат команды, чтобы еде-
Rd 5 Условие
1 Непосредственная константа
А 31
24
Код операции 7
18
13
Результат
t 5 УКУ- бит
0 Короткий операнд
5
14 а
Код операции 7
Результат
Т ~ 5 VKV- бит
Непосредственная
константа
~19
Рис. 4. Форматы команд микропроцессора RISC Калифорнийского университета в Беркли: а — типа «регистр — регистр» и б — п е р е д а ч и управления.
лать декодирование быстрым и экономичным. Эта проблема будет обсуждена ниже, в разд. VII.Б. Пересылку как особый случай общего формата команды также можно было бы закодировать в виде отдельной высокоскоростной команды, поскольку она не требует выполнения какой-либо арифметической или логической операции. Мы опять-таки не пошли на подобное кодирование, поскольку такая команда с меньшим временем выполнения не уложилась бы непосредственно в стандартную конвейерную временную диаграмму [15, Sect. 3.3.3]. На рис. 4 показаны форматы команд архитектуры компьютеров RISC Университета Беркли. Поля номеров регистров должны быть длиной 5 бит, поскольку имеются 32 регистра, видимых для программистов. Команды типа «регистррегистр» в описанном выше общем виде соответствуют формату рис. 4,а. 7-бит поле кода операции (КОП) содержит «ор». Поле «результат» указывает Rd, за ним следует поле операнда R s i. Правые 14 бит команды могут указывать RS2 ИЛИ содержать 13-бит константу (большинство констант имеют малую длину, см. разд. II.В). Один из 32 видимых регистров, Rd, всегда содержит (аппаратно-реализованную) константу «О»; запись в этот регистр эквивалентна аннулированию записываемого значения. Бит 24 всех команд —это признак «установить коды условия» (УКУ-бит): если этот бит имеет значение 1, то производится установка триггеров 6-708
признаков нуля, отрицательного результата, арифметического переполнения и переноса соответственно результату выполнения данной операции. Эти признаки используются при синтезе команд проверки и сравнения. В микропроцессоре MIPS, представляющем разновидность RISC-архитектуры, применяются команды сравнения и ветвления в явном виде и не предусматривается признаков кодов условий [9] (см. также [8, 10]). В архитектуре RISC Университета Беркли в числе операций ор реализованы целочисленные сложение и вычитание, булевы операции над битами и сдвиги на произвольное количество разрядов. Команды пошагового умножения и пошагового деления не были реализованы из-за отсутствия специалистов соответствующей квалификации. Операции с плавающей точкой не были включены в набор команд, так как для их реализации требуется слишком большой объем схем, которые не уместились бы на кристалле ЦП при существующей технологии изготовления. А если даже их удалось бы разместить на кристалле, это привело бы к значительному снижению скорости тракта обработки данных из-за увеличения паразитных емкостей и длин межсоединений. Мы считаем, что для выполнения операций с плавающей точкой лучше всего использовать специализированный сопроцессор. Сдвиги на произвольное количество разрядов, включенные в набор команд компьютеров RISC I и II, в реальных программах встречаются довольно редко. Их реализация при помощи матричного сдвигателя оказалась в результате весьма дорогостоящей [15, Sect. 4.2.4]. Строго придерживаясь концепции RISC следовало бы исключить этот функциональный блок из тракта обработки данных. Вместо этого желательно иметь сдвиги на один бит — они встречаются в программах гораздо чаще, и их можно экономично реализовать в арифметико-логическом устройстве. RISC-процессор Университета Беркли имеет 32-бит архитектуру с побайтовой адресацией виртуальной памяти объемом 232 байт. Все команды типа «регистр-регистр» обрабатывают свои операнды как 32-бит целые в дополнительном двоичном коде. Символы и полусловные целые при загрузке в регистры преобразуются в полные слова, а поддержка чисел с плавающей точкой не предусматривается по причинам, упомянутым выше. Б. Команды обращения к памяти и
передачи управления.
Архитектуры процессоров RISC Университета Беркли, MIPS Станфордского университета и IBM-801 не имеют команд,
которые непосредственно работают с операндами, находящимися в основной памяти. Они предусматривают только простые команды обмена данными: загрузить и запомнить. Таким образом, сложные манипуляции с данными разбиваются на ортогональные компоненты, относящиеся к обмену и обработке. Это упрощает формат команд, временную диаграмму, конвейеризацию и обработку прерываний. Здесь мы вначале опишем команды обращения к памяти для компьютеров RISC I и II, а также тесно связанные с ними команды передачи управления (условный переход, вызов и возврат). Затем мы обсудим соответствующие вопросы быстродействия. 1. Описание команд. Команды загрузки имеют вид /?(Г«-Л4[испадр]; команды запоминания (записи в память) — Л1 [испадр а команды передачи управления — ПС^-испадр, где испадр — это «исполнительный адрес», М [испадр]—соответствующая ячейка памяти, а ПС —программный счетчик. Возможные способы определения исполнительного адреса являются важной характеристикой архитектуры — они называются режимами адресации. 1) Для глобальных скаляров испадр = константа; эта константа может иметь малую величину, если компилятор распределяет все глобальные скаляры вблизи адреса 0. 2) Для элемента а [/] линейного глобального массива испадр = а база +размер i, где а база — базовый адрес а [] (константа, которая может быть большой), а размер — размер элемента массива (константа, равная, как правило, 2, 4 или 8). 3) Для элементов массива или других данных, доступ к которым осуществляется по указателю, испадр = указатель. Этот способ адресации обычно более быстрый, чем предыдущий. Он часто используется для последовательного просмотра массивов — особённо символьных буферов. 4) Для поля (члена) некой структуры (записи) испадр= = р + смещение, где р — указатель данной структуры, а смещение— смещение поля (константа, обычно короткая). Этот же режим адресации применим для локальных скаляров, для хранения которых используется исполнительный стек. 5) Для большинства передач управления испадр = ПС + +расстояние передачи, обычно короткая константа. В программах встречаются, хотя и гораздо реже, и другие, более сложные варианты адресации (например, при работе с многомерными массивами или в режиме многоуровневой косвенной адресации).
RISC-архитектура Университета Беркли предусматривает следующие режимы адресации: испадр = ^81 + У?82, испадр = /?„! + 13-бит константа, испадр = ПС+19-бит константа. Эти режимы адресации в совокупности с использованием регистра R0 ( = 0), охватывают все основные способы формирования адресов, перечисленные выше (в предположении, что значение а база хранится в регистре), за исключением так называемой шаговой адресации (со сдвигом на размер элемента массива). Приведенное выше вычисление исполнительного адреса очень похоже на команду сложения, что в значительной мере способствовало унификации порядка выполнения команд, а благодаря этому — достижению простоты тракта обработки данных, конвейеризации, временной диаграммы и управления. Хотя такое сложение не всегда обязательно, в компьютерах RISC I и II оно всегда выполняется по той же самой причине, по которой, как указывалось выше, здесь реализуются команды пересылки типа «регистр-регистр» со сложением. Процессор IBM-801 имеет аналогичные режимы адресации [7]. Архитектура MIPS Станфордского университета имеет некоторые режимы адресации, не требующие сложения, однако в их аппаратной реализации опять-таки используется фиктивное сложение с нулем. Команды, использующие первые два режима адресации, соответствуют формату, показанному на рис. 4, а, а команды с режимом относительной адресации с значением программного счетчика как базы имеют формат с длинным кодом непосредственного адреса, показанный на рис. 4, б. Команды условного перехода содержат условие перехода в поле «результат» (рис. 4). Команды вызова запоминают значения программного счетчика в Ra, меняют значение указателя текущего окна после проверки на положительное переполнение, а затем осуществляют безусловную передачу управления по целевому адресу. Команды возврата меняют значение указателя текущего окна после проверки на отрицательное переполнение, а затем передают управление по значению программного счетчика, которое соответствующая команда вызова запомнила в регистровом блоке. 2. Конвейеризация, взаимозависимости по данным и порты памяти. Конвейеризация — весьма распространенный и эффективный способ повышения быстродействия машины. Главная проблема конвейерной архитектуры — необходимость учитывать взаимозависимости данных, обрабатывав-
Время
Рис. 5. Совмещение выборки и выполнения команд и задержанный переход управления.
мых различными командами на различных уровнях, ступенях конвейера. Традиционный подход к решению этой проблемы заключается в том, что подобные взаимозависимости обнаруживаются аппаратно, после чего выполнение последующих команд приостанавливается в ожидании момента, когда появятся необходимые результаты предыдущих операций. Такой подход, главная цель которого состоит в том, чтобы сделать реализацию конвейера невидимой с архитектурного уровня, не всегда является оптимальным, поскольку может вносить необязательные задержки. В качестве примера можно привести «задержанный переход» («ветвление и выполнение» [7]). На рис. 5 показан простой двухуровневый конвейер, образуемый в результате совмещения выполнения текущей команды с выборкой следующей команды. Когда выполняется команда условной передачи управления К1 при удовлетворении указанного условия, ее целевую команду КЗ невозможно выполнить в течение ближайшего следующего такта конвейера. В традиционных архитектурах центральный процессор находится в режиме холостого хода во время выборки КЗ. А в процессорах RISC I и II, MIPS и IBM-801 во время выполнения команды К1 производится выборка команды, следующей непосредственно за К1, а затем эта команда выполняется при одновременной выборке команды по целевому адресу К1 (в процессоре IBM-801 так делается только в случае, если К1 указывает на это). Компилятор, оптимизатор или «реорганизатор» конвейера стремится вставить после команды передачи управления К1 какую-либо полезную команду К2,
6 Рис. 6. Выполнение команд обращения к памяти для случаев а — одной общей памяти и б — раздельных устройств памяти команд и данных.
не зависящую от К1. Благодаря этому после передач управления приблизительно две трети квантов времени, которые в противном случае просто терялись бы, используются для выполнения полезной работы [3, 7, 9, 15, Sect. 3.1.3]. Этот способ задержанного ветвления служит одним из примеров того, каким образом удается обеспечить занятость ЦП в течение максимально возможного числа тактов при использовании набора команд, содержащего лишь простые команды с описанием примитивных операций. Разработчики компьютеров со сложными наборами команд CISC стремятся добиться такого же эффекта, комбинируя несколько примитивных операций в одной сложной команде, а затем микропрограммируя параллельное выполнение этих примитивов (в качестве примера можно привести команды ветвления с декрементом указателя). Аналогичная ситуация возникает в случае, когда нужно обеспечить занятость ЦП во время выборки данных из памяти. Рис. 6 иллюстрирует эту ситуацию на примере некоторых команд компьютера типа RISC. Все подобные команды описывают простые, примитивные операции ЦП, для выполнения которых требуется один такт ЦП, совмещаемый с одним обращением к основной памяти (кэш-памяти). На рис. 6,а показан случай, когда имеется одна шина обмена
ЦП с общей памятью для команд и для данных, и поэтому ЦП не может производить выборку новой команды во время обращения к памяти за данными и ему приходится простаивать. Во многих архитектурах эту проблему пытаются решить путем комбинирования нескольких примитивных операций в одной команде, с тем чтобы некоторые из этих операций можно было выполнять во время обращения к памяти за данными (примером могут служить команды загрузки с инкрементом значения указателя). Разработчики процессоров IBM-801 и MIPS пошли по другому пути: они предусмотрели в ЦП два раздельных порта для доступа к командам и данным, как показано на рис. 6,6. Благодаря этому ни один такт ЦП не теряется (пока есть работа, которую ЦП может делать и которая не зависит от загружаемых данных), набор команд остается простым и достигается полная гибкость с точки зрения совмещения обращений к основной памяти данных и любых других примитивных операций. В машине RISC Университета Беркли команды загрузки и запоминания употребляются гораздо реже, чем обычно, благодаря многооконному регистровому механизму. В этой связи разработчики посчитали необязательным иметь два порта-канала для обмена ЦП с памятью. От упаковки более чем одной примитивной операции в одну команду отказались, поскольку это нежелательным образом отразилось бы на микроархитектуре — формат команды пришлось бы сделать более сложным, что в свою очередь привело бы к усложнению дешифрации команд и увеличению соответствующих задержек, а также к дополнительным трудностям при обработке прерываний. Анализ показал, что лишь немногие комбинации примитивов можно было бы упаковать в 32-бит формат команды, причем частота их появления в обычных программах весьма невелика; команды длиной более 32 бит в данном случае нецелесообразны, поскольку они требовали двух тактов выборки. Влияние того или иного выбора набора команд и формата команд на размеры программ обсуждаются в разд. VI. В общем распределение часто используемых скаляров по регистрам упрощает выполнение наиболее употребительных операций, делая эти операции примитивами типа «регистррегистр». Малая частота употребления сложных операций делает нецелесообразной их поддержку при помощи специальной аппаратуры, поскольку это привело бы к неоправданному увеличению объема схем и длительности такта машины. Конвейеризация является более эффективным решением, обеспечивающим занятость центрального процессора максимальную долю общего времени. Простой формат команды,
разрядность которого совпадает с числом линий шины выборки команды, позволяет добиться высокой скорости и эффективности выборки и декодирования команд. Таким образом, в целом применение RISC-архитектуры обеспечивает резкое уменьшение объема схем управления и, как мы увидим в следующем разделе, соответствующее сокращение времени, затрачиваемого на проектирование и отладку процессора. V. Микроархитектура процессора RISC II
Микроархитектура процессора, т. е. организация его аппаратуры в конкретной реализации, в существенной степени определяет быстродействие компьютера в целом. Это следует учитывать с самого начала процесса проектирования, в том числе при выборе набора команд. Некоторые примеры возможных компромиссных решений, охватывающих многие этапы иерархии проектирования, были приведены в последних двух разделах и, в частности, в разд. IV.B, где описывались команды обращения к памяти и передачи управления. В настоящем разделе вначале будут рассмотрены схемы конвейеризации с различными степенями совмещения операций. Затем будет более подробно описан трехуровневый конвейер компьютера RISC II, его базовые временные зависимости и тракт обработки данных. Наконец, будет представлена организация секции управления компьютера RISC II, которая благодаря сокращенному набору команд является очень простой и компактной. А. Двух-, трех- и четырехуровневые конвейеры. На рис. 7 показаны три различные конвейерные схемы, которые можно использовать как основу для реализации архитектур типа RISC. Здесь представлены последовательности команд «регистр— регистр» или передач управления (выполнение команд обращения к памяти может осуществляться, как описано в п. IV.B.2). Каждая команда типа «регистр — регистр» выполняется как ряд следующих действий: 1) Выборка команды из основной памяти или из кэшпамяти команд («выборка»); 2) Дешифрация двух входящих в формат команды полей номеров регистров — операндов (чт. per) и одновременное декодирование остальных полей команды и направление непосредственной константы в тракт обработки данных; 3) Выполнение арифметической или логической операции или сдвига согласно указанному в команде коду операции (оп);
Рис. 7. Конвейеры с увеличенным количеством уровней: а — двухуровневый, б — трехуровневый и а — четырехуровневый.
4) Запись результата операции в регистр — потребитель, регистр результата (зп. per). Команды передачи управления выполняются аналогичным образом с тем отличием, что на последнем этапе значение результата используется как исполнительный адрес для выборки команды. В качестве регистра операнда эти команды часто используют программный счетчик. На рис. 7, а показан двухуровневый конвейер, реализованный в компьютере RISC I. На первом уровне производится выборка команды, а на втором — ее выполнение. Фазы выполнения последующих команд не перекрываются, и поэтому между ними нет взаимозависимости по данным. Однако взаимозависимость по данным существует между уровнями выполнения и выборки, когда встречаются команды передачи управления. Как упоминалось в п. IV.B.2, эти взаимозависимости учитываются на архитектурном уровне введением задержанного ветвления.
На рис. 7, б показан трехуровневый конвейер, реализованный в компьютере RISC II. Здесь второй уровень разделен на две части, каждая из которых может поэтому иметь меньшую длительность. На первом уровне также производится выборка команды. Это нужно делать быстрее, если желательно добиться сокращения общего такта машины. На втором уровне производится чтение регистров операндов и выполнение операции. Результат записывается в регистр результата на третьем уровне параллельно с выполнением операции, указанной следующей командой, в то время, когда регистровый блок в противном случае просто находился бы в режиме холостого хода. При таком подходе взаимозависимость по данным возникает, если регистр операнда в команде К2 совпадает с регистром результата команды Ю. Эту ситуацию необходимо обнаруживать при помощи специальной аппаратуры, а результат команды KJ должен предоставляться команде К2 путем внутренней передачи с уровня на уровень конвейера или организации конвейерной цепочки, т. е. без выполнения обычной пары операций записи в регистр и чтения из регистра. На рис. 7, в показан четырехуровневый конвейер, подобный применяемому в процессоре IBM-801. Этот четырехуровневый конвейер обеспечивает использование тракта обработки данных в максимально возможной степени, насколько это позволяют взаимозависимости по данным. Результат арифметической, логической операции или сдвига, как только он образуется, может использоваться в качестве исходного операнда для следующей команды. Чтобы избежать передач управления с двойными задержками (см. рис. 7, в), исполнительный адрес ПС-(-константа для передач управления относительно значения программного счетчика (которые представляют подавляющее большинство всех передач управления) может вычисляться параллельно с операциями чтения регистров операндов. Четырехуровневый конвейер предъявляет более серьезные требования к регистровому блоку и к механизму выборки команд. Операции чтения и записи для регистрового блока выполняются одновременно, а время выборки команды должно быть таким же коротким, как время выполнения сложения. Б. Основные временные зависимости для трехуровневых кон-
вейеров. Существуют некоторые основные временные зависимости, которые определяют организацию конвейера и ограничивают его предельное быстродействие. Они зависят от выбранного набора команд и принятого способа конвейеризации, но сравнительно мало зависят от конкретных
Передача результата по внутренней кончцепочке вейера
Декодирование команды] и направление константы Операция
\х \
ЦП Память
— ^ С иг
^
J
/
Декодирование / iWMepa регистра,' 7 F(результат готоВ Выравнивание ) Выдача (адреса)
Чтение (команды данных)
Рис. 8. Основные временные зависимости для процессора RISC II.
деталей построения тракта обработки данных. Здесь мы обсудим эти зависимости на примере процессора RISC\II, набор команд и трехуровневый конвейер которого были представлены выше. Что касается тракта обработки данных, предположим, что имеется регистровый блок с двумя портами чтения и одним портом записи, связанный с двумя разделяемыми шинами чтения-записи, рассчитанными на цикл чтения-записи с предварительным зарядом [33]. Применение такого двухшинного регистрового блока стало главным отличием процессора RISC II от RISC I. Благодаря этому процессор RISC II имеет на 75% больше регистров, чем RISC I с его трехшинным регистровым элементом, несмотря на то что площадь кристалла RISC II на 25% меньше [4, 34]. На рис. 8 показан абстрактный граф временных зависимостей для подобного процессора. Здесь стрелки представляют операции тракта обработки данных, а вершины — причинно-следственные зависимости. Если операция Y зависит от операции X и обязательно должна следовать за ней во времени, то стрелка, представляющая операцию У, начина-
ется в конце стрелки X. Один проход против часовой стрелки по верхней части диаграммы представляет основные операции, происходящие в ЦП в течение одного машинного такта. Аналогично один проход по часовой стрелке вокруг нижней половины диаграммы представляет цикл обращения к памяти, происходящего параллельно. Стрелка Л-УВ представляет операцию АЛУ, а стрелка A-+F — сдвиговую операцию. Обе такие операции могут начинаться только после того, как прочитаны регистры операндов (стрелка G-wl). Результат операции АЛУ (точка В) может быть записан в регистр результата или использоваться для внутренней передачи с уровня на уровень конвейера в течение следующего цикла (путь B-+F-+A). Возможен и вариант, что этот результат будет исполнительным адресом памяти для доступа к данным или для выборки команды. Путь иллюстрирует операцию чтения памяти. Если эта операция чтения памяти есть выборка команды, то стрелка E-*-G представляет декодирование полей номеров регистров операнда этой команды, которое должно произойти до того, как сможет начаться обращение к соответствующим регистрам для чтения. Прежде чем начнется операция АЛУ или сдвига, необходимо декодировать остальные поля команды и выдать константу в тракт обработки данных (стрелка Е->А). Стрелка E-+F обозначает операцию выравнивания и размножение знака-заполнения нулями, необходимые, когда из произвольной ячейки памяти в младшие разряды регистра загружаются байты и короткие слова. Таким образом, точка F представляет результат, который образуется на предпоследнем уровне конвейера и который должен быть записан в регистр результата на последнем уровне (точка А). Цикл чтения-записи регистра с предварительным зарядом показан как цикл H-*-G-*-A-*-H. При построении диаграмм рис. 8 мы старались хотя бы грубо придерживаться реальных значений временных параметров. Длины стрелок приблизительно пропорциональны времени, требуемому для выполнения соответствующих операций тракта обработки данных. Точки £ и Б на диаграмме показаны разделенными произвольным отрезком времени t\. Точка Е представляет конец цикла чтения памяти, а точка В — начало следующего цикла обращения к памяти. Вследствие использования мультиплексированных линий адресов/ /данных и неперекрывающихся обращений к памяти событие В должно происходить после события Е, т. е. t\ должно быть больше нуля. С учетом этого ограничения t\ является произвольным проектным параметром, который определяет, насколько время обращения к памяти (B->C-+D^>-E) дол-
ПАМЯТИ \Вход данных/ констант\
Шина А Регистровый блок Шина В СдВигатель
Выходная шина bus OUT
Рис. 9. Тракт обработки данных микропроцессора RISC II.
жно быть меньше длительности общего машинного такта. Рис. 8 показывает, что путь внутренней передачи промежуточного результата F-+-A не является критическим. Критическими путями являются циклы обращения к регистровому блоку (предварительный заряд) (чтение) G A->(запись) АН И путь в форме цифры 8: (декодирование регистра) (чтение регистра) СА-> ->(вычисление адреса) А в->-(выдача адреса) В с~+ (выборка команды)cd->~(прием команды)г>£. Если обозначить время такта Т, можно написать следующие базовые уравнения критического пути: Т > (предзаряд р е г и с т р а ) я й + (чтение регистра) оа+ + (запись р е г и с т р а ) ^ , Т » (декодирование р е г и с т р а ) в о + (чтение регистра) ga+ + (сложение А Л У ) / ) В — t u Г > (выдача адресов) вс+ (чтение памяти) с о + (прием) DE+ti-
Таким образом, параметр t\ отражает взаимозависимость между скоростными характеристиками памяти и ЦП. Чем меньше время доступа к памяти, тем больше t\ и тем медленнее осуществляются операции декодирования и чтения регистров и операции АЛУ. В. Тракт обработки данных микропроцессора RISC II. На рис. 9 показана схема тракта обработки данных микропроцессора RISC II. Регистровый блок предусматривает возможность доступа для чтения по двум портам — через шины bus Л и bus В. Один операнд поступает на вход АЛУ по шине bus D, это может быть значение либо шины bus Л, либо программного счетчика (в случае адресации относительно программного счетчика). Второй операнд АЛУ поступает
либо по цепи шина busfi-^блок 5#С-»-шина bus Я, либо константа-миина busL-миина bus R. Результат АЛУ может быть выдан либо на выходную шину bus OUT и использован в качестве исполнительного адреса, либо на шину busD и принят в блок DST. Из блока DST этот результат записывается в регистровый блок во время последнего шага конвейера. На шины busOLT и bus/) может также выдаваться содержимое регистров программного счетчика (имеются три варианта значений программного счетчика — по одному на уровень конвейера). Значение ПС выдается на шину busOLT при нормальных выборках команд, а на шину bus/) (вместо значения АЛУ) при выполнении команды вызова процедуры, когда значение программного счетчика необходимо запомнить в регистре. При выполнении операций сдвига значение шины bus Л принимается в ПС, а затем поступает на шину bus R либо bus L. Результат образуется на второй из этих шин сдвига и принимается в блок DST [32]. По командам загрузки производится выравнивание данных, поступающих ,из памяти, с использованием сдвигателя: входные данные-^ -инина L-ипина R-+DST. Таким образом, сдвигатель служит как для передачи непосредственных констант в АЛУ, так и для сдвига или выравнивания данных. Такие двойные функции позволили отказаться от дополнительной вертикальной шины для направления констант в тракт обработки данных. Благодаря компактной топологии удалось разместить полный восьмиоконный регистровый блок на кристалле ограниченной длины. Однако это потребовало, чтобы в течение некоторых циклов сдвигатель использовался дважды. Вначале мы думали, что это удастся сделать без потерь быстродействия. Однако после завершения схемного и топологического проектирования и проведения более тщательного моделирования выяснилось, что быстродействие процессора существенно снижается из-за отсутствия отдельной шины для констант [34]. Это подтверждает ту мысль, что для реализации часто употребляющихся операций ЦП следует выделять достаточно специальных аппаратных ресурсов. Матричный сдвигатель и связанный с ним входной хранящий регистр-блок формирователей SRC занимают значительную площадь кристалла; его шины R и L занимают также значительную часть участка в промежутке между •блоками DST и SRC. Таким образом, сдвигатель вносит дополнительные задержки на очень интенсивно используемом пути между АЛУ и регистровым блоком, что приводит к увеличению общей длительности такта машины. Поэтому мы
считаем, что сдвигатель на произвольное число битов не должен входить в критический путь тракта обработки данных — его можно разместить в каком-то другом месте, с возможностью доступа только по командам, допускающим меньшую скорость выполнения. При этом сдвиги на один или два бита, составляющие подавляющее большинство всех сдвигов, можно производить в АЛУ. Приведенные рассуждения позволяют понять, в чем заключается особенность архитектуры RISC: те или иные средства и возможности, включаемые в схему с целью ускорения выполнения определенной операции (операций), будут вызывать замедление других операций. В частности, слишком большая или слишком сложная схема ядра процессора будет обусловливать снижение его собственного быстродействия. Таким образом, в схему следует вводить только такие средства и возможности, которые будут ускорять выполнение наиболее часто используемых операций. Г. Секция управления микропроцессора RISC II. Главное преимущество сокращенного набора команд — кардинальное уменьшение объемов кремниевых ресурсов, требуемых для реализации функций управления. В микропроцессоре RISC II дешифратор кода операции занимает лишь 0,5% площади кристалла, содержит лишь 0,7% общего числа транзисторов, а трудоемкость его проектирования с учетом разработки топологии составила менее 2% общих трудозатрат. Дешифратор кода операции выполняет функции, для реализации которых в микропрограммируемых центральных процессорах используется память микрокода. Указанные цифры позволяют судить, насколько резко микропроцессор RISC II отличается от некоторых других современных микропроцессоров распределением аппаратных ресурсов: ПЗУ микрокода часто занимает от одной трети до двух третей площади кристалла. В настоящем параграфе описана секция управления микропроцессора RISC II и объяснено, каким образом достигнуты ее малые размеры. На рис. 10 показаны основные компоненты полной схемы секции управления микропроцессора RISC II, которые занимают всего лишь 10% общей площади кристалла и содержат 6% общего числа транзисторов. Фиксированный формат команд микропроцессора RISC II с небольшим количеством ортогональных полей дает возможность разбить биты команды на три группы — код операции, номера регистров и непосредственная константа — и при их поступлении на кристалл ЦП принимать раздельно на регистры-защелки, расположенные вблизи тех мест, где эти поля должны использоваться
Команда
Рис. 10. Секция управления микропроцессора RISC II.
Номера регистров и непосредственная константа проходят по конвейеру регистров-защелок («станций») и используются в соответствующем месте в соответствующее время. Декодирование семибитового кода операции вместе с однобитовым признаком состояния дает 30 бит информации расширенного кода операции. Коды операций декодируются по одному за такт. Имеется только один бит состояния, он служит для того, чтобы различать нормальный цикл и цикл обращения к данным памяти (см. рис. 6). Кроме 30 бит расширенного кода операции в управлении ЦП участвуют еще 9 бит. Они содержат информацию, ортогональную по отношению к коду операции, в частности определяют выбор регистра или константы как операнда-2, признак установки кодов условий (рис. 4), результат анализа условия перехода или служат для обнаружения взаимозависимости по данным с целью организации внутренней передачи промежуточных результатов с уровня на уровень конвейера. Сто сигналов управления, необходимых для работы процессора в целом, вырабатываются путем пропускания через логический вентиль И одного или более из упомянутых выше 3 0 + 9 бит с одним или более из четырех фазовых синхросигналов (как в многофазных микропрограммируемых процессорах). Большинство из ста логических вентилей, используемых
для формирования этих сигналов управления во времени, очень просты: 70 из них не имеют ни одного или имеют по одному входу управляющего бита синхронизации. Мы видим, что для управления выполнением команды достаточно нескольких десятков битов информации. Это существенно меньше, чем число битов микрокода, требуемых для выполнения команд в типичных микропрограммируемых машинах. Такое малое число достигнуто благодаря стандартному базовому порядку выполнения всех команд RISC-машины: все команды читают те или иные операнды, выполняют указанную операцию и затем направляют результат в соответствующее место. Все это происходит по одной и той же фиксированной временной диаграмме, что дает возможность аппаратно завести необходимую временную информацию в логические вентили, обеспечивающие выработку сигналов управления. VI. СБИС-реализация микропроцессоров RISC I и II
Микропроцессоры RISC I и II, о которых говорилось выше, были реализованы в рамках проекта RISC в течение 1980— 1983 гг. в Калифорнийском университете (Беркли). В настоящем разделе будут рассмотрены вопросы проектирования, отладки и тестирования микропроцессора RISC II. А. Условия и средства проектирования. П р а к т и ч е с к а я реали-
зация новой архитектуры играет важнейшую роль в исследовании возможностей этой архитектуры. Она позволяет создать конструкцию процессора с учетом реалистических ограничений, приковывает внимание к конкретным деталям и обеспечивает обратную связь для оценки эффективности предлагаемого подхода. Процессоры RISC I и RISC II, о которых шла речь в предыдущих разделах, были реализованы в виде «-канальных МОП СБИС. Их топологическое проектирование было проведено при помощи интерактивного редактора топологии в цвете под названием Caesar [35], который предусматривает использование лишь прямоугольных элементов с горизонтальными и вертикальными сторонами. Это приводит к весьма незначительному увеличению площади кристалла, но существенно упрощает задачу топологического проектирования и повышает эффективность использования всех инструментальных средств САПР. Полученное геометрическое описание кристалла служит исходным для нескольких других инструментальных подсистем, решающих следующие задачи: 7—708
1) вычерчивание рисунков фотошаблонов в крупном масштабе, 2) контроль норм проектирования, 3) восстановление электрической схемы по топологии, 4) временное моделирование. Все эти инструментальные программы встроены в наш комплекс САПР с операционной системой Unix. Они работают в сети, содержащей компьютеры VAX-11/750 и 11/780 корпорации DEC, и поэтому являются тесно связанными и доступными для всех разработчиков ИС. Кроме того, возможности оперативного взаимодействия и координации работ всех участников проекта RISC были существенно расширены благодаря наличию электронной почты и специальной службы электронной передачи сообщений для этой группы. Б. Проектирование и
топология микропроцессора RISC II.
Благодаря простой архитектуре микропроцессора RISC II на его проектирование затрачено гораздо меньше времени, чем на другие микропроцессоры с более сложными наборами команд. Кристалл микропроцессора RISC II, содержащий 40 760 транзисторов, спроектировали два аспиранта университета (Катевенис и Шербурн) в течение 1981—1983 гг. Конструкция и топология этого n-канального МОП-кристалла выполнены в соответствии с нормами проектирования Мида и Конвей [36] — с одним слоем поликремния и однослойной металлизацией и со стыковыми, а не скрытыми контактами. Во время проектирования микропроцессора параметры технологического процесса изготовления кристалла были известны очень приближенно, что ограничило возможности оптимизации быстродействия. Некоторые количественные показатели микропроцессора RISC II представлены в табл. VI (более полные данные см. в [34]) в сравнении с аналогичными показателями (где их удалось найти) для трех коммерческих микропроцессоров, выпускаемых фирмами Motorola, Zilog и Intel. Видно, что микропроцессор RISC II имеет наименьшую общую площадь кристалла и сравнительно небольшое количество транзисторов. Но более важно то, что распределение этих кремниевых ресурсов между трактом обработки данных и секцией управления очень четко отражает различия в архитектурах RISC и традиционных машин. В RISC-машине максимальная доля ресурсов выделяется тракту обработки данных, в частности регистровому блоку, а секции управления отводится лишь малая их часть. Последняя строка табл. VI иллюстрирует еще одно преимущество RISC-архитектуры. Трудоемкость проектирования
Таблица Сравнительные
количественные
показатели
RISC II
'Количество транзисторов ® том числе в с у б б л о к а х (в % от о б щ е г о количества) : тракт о б р а б о т к и данных (регистровый блок) П З У (дешифратор КОП) П л о щ а д ь , мм 2 •в том числе для с у б б л о к о в (% от о б щ е г о значения): тракт о б р а б о т к и данных (регистровый блок) управление Трудоемкость проектирования (в человеко-месяцах ориентировочно)
VI
микропроцессоров г
(3-мкм линии)
М68000 3
Z8000®
41000
68000
18000
iAPX-432-01e
110000
93(73) -(0,7)
45
34
45
50(33)
60
39
66
20(6)
10
50
50
65
30
170
130
260
а
Данные получены по микрофотографии и из [31; процентные значения для субблоков указаны ориентировочно. ® Один из трех кристаллов микросистемы.
RISC-машины по сравнению с обычными машинами резко уменьшается. Это особенно важно с коммерческой точки зрения, поскольку обеспечивает снижение себестоимости и •сокращение сроков подготовки производства и выпуска в продажу новых изделий. В. Моделирование и отладка. Схема и конструкция микропроцессора RISCII были описаны в формате, пригодном для машинного чтения, на уровне микроархитектуры (регистровых передач) и на уровне топологии. На уровне архитектуры (уровне набора команд ISP) и на схемном уровне использовался только текст на естественном английском языке и чертеж схемы на бумаге, поскольку у нас не было соответствующих инструментальных средств, которые могли бы нормально работать в рамках нашей САПР с операционной системой Unix. Этот недостаток безусловно придется устранить как можно быстрее. К счастью, архитектура микропроцессора RISC II настолько проста, что разработку удалось успешно завершить даже без этих дополнительных инструментальных средств.
Контроль отсутствия нарушений проектных норм был проведен при помощи системы Lyra [37]. Для автоматического восстановления описания электрической схемы по геометрическим данным топологии использовалась система Mextra [38]. Предусмотренные в системе Mextra средства! назначения меток узлам в описании топологии и возможности контроля имен представляют эффективный механизм для проверки на короткие замыкания, разрывы и ошибки п трассировке соединений. Восстановленное по топологии описание электрической схемы было промоделировано на уровне переключателей при помощи системы Esim [39]. Для моделирования на уровне регистровых передач использовалась система моделирования и язык описания аппаратуры, подобный языку Лисп (Slang [40]). Последний этап функциональной отладки был выполнен следующим образом: системы моделирования Slang и Esim работали параллельно, и после каждого шага моделирования производилось автоматическое сравнение получаемых значений для соответствующих узлов в обоих описаниях схемы. Анализ временных диаграмм для критического пути тракта обработки данных и для схем управления был проведен на этапе проектирования и разработки топологии при помощи программы Spice [41]. Чтобы проверить, что в остальных частях схемы не нарушаются временные ограничения, установленные для критического пути, восстановленная по топологии схема была обработана при помощи верификатора временных диаграмм Crystal [42]. Г. Изготовление и тестирование. Микропроцессор RISC II изготавливался на двух различных технологических линиях с двумя различными длинами затворов. Одно и то же параметризованное лямбда-описание топологии кристалла было передано в кремниевую мастерскую MOSIS, финансируемую Управлением перспективных исследований и разработок министерства обороны США (DARPA) (А = 2 мкм, длина затвора 4 мкм) и на производственное предприятие PARC компании Xerox (Л,= 1,5 мкм, длина затвора 3 мкм). Изготовленные кристаллы размерами 10,3x5,8 и 7,7X4,4 мм соответственно были получены через два месяца. Тщательная отладка моделей и отработка геометрии фотошаблонов микропроцессора RISC II в процессе подготовки производства дали отличные результаты: оба кристалла оказались без функциональных ошибок и работали со скоростью в пределах 10% от расчетной. Если говорить более конкретно, то 4-мкм кристаллы, для которых моделирование было проведено в
полном объеме, согласно расчету, должны были иметь время цикла 480 не, а реально это время при комнатной температуре оказалось равным 500 не. Кристаллы с уменьшенными 3-мкм размерами элементов, для которых моделирование дополнительно не проводилось, работали, как оказалось, с временем цикла 330 не [6]. Для двух критических хранящих регистров тракта обработки данных (блоков DST и SRC) и одного регистра управляющей секции микропроцессора RISC II с целью улучшения тестируемости организованы последовательные цепи сканирования (вход сканирования — выход сканирования) [43—45]. Однако мы решили тестировать кристаллы без использования этих контрольных цепей. Благодаря простоте архитектуры, малому количеству признаков состояния ЦП (не считая содержимого многих регистров) и однотактному выполнению команд кристалл центрального процессора RISC II отличается очень хорошими возможностями управления и наблюдения. Независимо от предыдущего состояния этот кристалл можно всего за 3—4 такта инициировать таким образом, что любую команду можно выполнять в известных условиях. Результат большинства операций выдается на основные выводы кристалла или записывается в какойлибо регистр. Содержимое любого регистра можно прочитать через основные выводы за один такт при помощи команды передачи управления с регистровой индексацией, причем имеются команды, которые позволяют записать значение любого регистра в остальные регистровые элементы ЦП и обратно. По нашему мнению, метод последовательного сканирования вовсе не обязателен для кристаллов, опрос внутреннего состояния которых легко можно осуществлять с использованием нормальных, штатных средств и режимов работы. VII. Оценка характеристик RISC-архитектуры
В процессе выполнения работ по проекту RISC в Беркли несколько специалистов занимались написанием программ и их применением для оценки различных аспектов RISCархитектуры. Тамир написал архитектурную модель для микропроцессоров RISC I и RISC II [46], а Кэмпбелл и Мирос адаптировали мобильный компилятор языка Си для машин RISC [47, 48]. Все трое, а также Паттерсон и Пьефо собирали результаты измерений для оценки эффективности архитектуры [2, 3, 49]. Другие интересные результаты можно найти в [50] (они приводятся также в [51]), [52] (скоростные характеристики RISC-машины при программно-реали-
зованном выполнении арифметических операций с плавающей точкой) и [53]. Здесь мы приведем основные результаты этих оценок машины RISC II по быстродействию, размеру кода и пригодности для выполнения программ, написанных на языках высокого уровня. Поскольку у нас были только кристаллы центрального процессора RISC, а не работоспособная вычислительная машина RISC, эти оценки сделаны на основе прогона компиляторов и моделей на других компьютерах. Общее число тактов RISC-машины для получения показателей быстродействия затем умножалось на экспериментально измеренную длительность такта кристалла RISC II. При этом предполагалось, что используется достаточно высокоскоростная основная память или кэш-память со 100%-ным коэффициентом попадания. Кроме того, ни одна из контрольных программ и задач здесь не содержала вычислений с плавающей точкой. А.
Оценка
скоростных
характеристик
микропроцессора
RISC II. В табл. VII приводятся сравнительные данные по микропроцессору RISC II и трем другим коммерческим процессорам с более сложными архитектурами, выпускаемым фирмами DEC, Motorola и Zilog. Отметим, что базовый показатель быстродействия тракта обработки данных и время доступа к памяти для микропроцессора RISC II аналогичны или хуже, чем соответствующие показатели для VAX-11/780 и М68000. В то же время по общей скорости работы на компилированных программах языка Си при обработке нечисловых данных микропроцессор RISC II значительно превосходит эти процессоры. Сравнительные данные становятся еще более наглядными, если сопоставить недавно разработанный набор кристаллов СБИС с функциональными возможностями и характеристиками мини-компьютера VAX-11/780 [54]. Несмотря на то что этот набор кристаллов реализуется по гораздо более современной технологии, чем RISC II, и содержит гораздо большее количество транзисторов, чем кристалл RISC II, он выполняет программы языка Си медленнее, если не считать программ интенсивных вычислений с плавающей точкой. Другой однокристальный СБИС-процессор реализует подмножество набора команд машины VAX-11/780 и содержит приблизительно в 10 раз меньше транзисторов, чем указанный выше набор кристаллов [55]. В это подмножество набора команд входят наиболее часто употребляемые операции машины VAX, на долю которых обычно приходится примерно 98% общего времени выполнения программ (эта цифра прозвучала устно в докладе [55]).
а < u шЖ Я в3 хv о см -ч< со со га t j о, вО оо sc- Р—>-(R + R) Р—>-(/?)*
Закрыть левый порт схемы для Р подключением линии Р А З Р Е Ш Е Н И Е ^ * к линии РЕЗУЛЬТАТА Подключить левый порт Р к правому порту R Использовать новую ячейку 0 в качестве схемы для Р Использовать новый компаратор для Р Присоединить правые порты схем R к верхнему и нижнему портам нового узла И Л И Соединить правый порт R с верхним портом нового узла для оператора*
На рис. 12 показано синтаксически ориентированное конструирование распознавателя для выражения (ab+(c)*). Синтаксический анализ выражения проводится сверху вниз, при этом выполняются описанные выше семантические действия и используются соответствующие им ячейки. Чтобы закончить рассмотрение систолических распознавателей, осталось рассмотреть только один вопрос: их инициализацию. Перед началом работы необходимо на все компараторы послать сигнал СБРОС. Сигнал СБРОС просто устанавливает все каскады сдвиговых регистров в нуль. Это гарантирует, что ни одна строка, не входящая в R, не будет распознаваться /^-распознавателем. Например, если линия РЕЗУЛЬТАТ каскада сдвигового регистра ячейки А распознавателя выражения ABC содержит 1 в начале работы, то схема может распознать строку ВС. Распознаватели, конструируемые с помощью описанной синтаксически ориентированной процедуры, удовлетворяют поведенческому описанию, введенному выше в этой главе. Если во входном потоке линии РАЗРЕШЕНИЕ инициализированного распознавателя подать 1, а затем подать распознаваемую строку, то в потоке выходной линии РЕЗУЛЬТАТ появится 1 сразу же за последним символом распознаваемой строки. В других случаях выходные значения линии РЕЗУЛЬТАТ будут равны 0. На рис. 13 показана работа систолического распознавателя в течение нескольких тактов. Заключенная в квадрат 1 означает успешное сравнение в процессе конвейерной обработки. Очевидна схожесть систолического распознавателя со схемой сравнения с эталоном, изображенной на рис. 3.
(ab + (c)*)
R :: = P
P :: = (R + R)
R:: = RP
R ::= P
>-CH Рис. 12. Формирование распознавателя для выражения ( а 6 + ( с ) * ) .
с • Линия РЕЗУЛЬТАТ (Результат)
• Линия СИМВОЛ (Текст) • Линия РАЗРЕШЕНИЕ (Разрешени
и
Тенет. А -В-С-
А
•
0
0
А
А
•
0
и
А 1 •
0 в
.У
И ш
Е-
Линия РЕЗУЛЬТАТ • Линия СИМВОЛ Линия РАЗРЕШЕНИЕ (=1) 0 в
Такт 2
1
0
0
в
в
ТаптЗ 1 0
в
с
1
0
и
0 С
с
Такт 4
0 0 с
0
Такт 5 1
0
•
•
0
[Т] Е
1
-
0
Рис.
13. Систолический
Результат =1
Такт 6
0 распознаватель
для выражения
A(BC+D)E.
Б. Расширения схем. Описанная выше процедура синтаксически ориентированного конструирования допускает прямое расширение набора выражений, которые можно распознавать. Ячейки для новых операторов можно использовать, просто добавив несколько правил вывода к грамматике, описывающей выражения. Хотя класс распознаваемых эта-
» Линия РЕЗУЛЬТАТ < Линия СИМВОЛ < Линия РАЗРЕШЕНИЕ Рис. 14. Ячейка X.
лонов эти новые операторы и не расширяют, они могут упростить необходимые для описания эталонов выражения путем сокращения часто используемых подвыражений. Так как систолический распознаватель регулярного выражения использует одну ячейку для каждого символа выражения (отличного от скобок), эти сокращения уменьшают размер схемы. Расширения набора выражений удобны при практической реализации [51] и используются во многих программных средствах сравнения регулярных выражений с эталоном [30]. На рис. 14 показана одна такая ячейка, которая распознает символ Я, представляющий сокращенную запись 0 * . Распознаватель можно использовать в компиляторе при добавлении к грамматике следующего правила вывода и его семантики: R —у X
Использовать новую ячейку X для R.
Ячейка просто связывает линию РЕЗУЛЬТАТ с линией РАЗРЕШЕНИЕ, при этом распознаются пустые строки, для которых есть разрешение распознавания. Такой же эффект можно получить, если разрешить заканчивать любой порт у произвольной ячейки. Оператор итерации «плюс» и условный оператор «штрих» также используются в качестве расширений. Выражение Е+ является сокращением выражения Е(Е*) и предназначено для сравнения с эталоном одного или нескольких повторов выражения Е. Выражение Е' обозначает выражение Х+Е и предназначено для сравнения с эталоном пустого выражения или выражения Е. Ячейки для этих операторов показаны на рис. 15 и 16. Их можно включить в схемы добавлением к грамматике следующих правил вывода: Р —> (/?)+ Р —v (/?)'
Соединить правый порт с верхним портом нового узла для оператора итерации + Соединить правый порт с верхним портом нового узла для условного оператора «штрих»
Линия РЕЗУЛЬТАТ ъ Линия СИМВОЛ Линия
Ячейка „ синхронное
ИЛИ '
разрешением
Линия РЕЗУЛЬТАТ >
ъ-Линия РЕЗУЛЬТАТ'
Линия
< Линия СИМВОЛ
СИМВОЛ
—
Линия СИМВОЛ
< —
Линия РАЗРЕШЕНИЕ
< —
Линия РЕЗУЛЬТАТ
Линия РЕЗУЛЬТАТ
Линия СИМВОЛ
-С Линия СИМВОЛ
Линия РАЗРЕШЕНИЕ • Линия СИМВОЛ
DHJ)-
ЕН£)
Т2ЬЬ
Г
I
ЕНгИ
а
*
с
d
ь
+
Рис. 20. Коллинеарная топология распознавателя выражения a*
е
(b-\-cd)e.
ются при пересечении ими границы блоков узлов, поэтому несколько узлов могут использовать один и тот же канал. При использовании этого алгоритма для размещения n-узлового распознавателя требуется площадь 0(n\gn). Хотя для коллинеарных топологий некоторых распознавателей
может требоваться площадь, пропорциональная числу узлов, существуют деревья, коллинеарная топология которых требует площадь n\gn [63]. Если топологии должны быть коллинеарны, то при произвольном размещении ячеек в линейке и произвольном разбиении каналов этот иерархический алгоритм является асимптотически оптимальным. Может оказаться полезной топологическая схема даже о еще большими ограничениями. Узлы, используемые при конструировании распознавателей, можно отнести к двум типам: 1) компараторы, имеющие мало портов, но много вентилей; 2) объединители, имеющие много портов, но только один или два вентиля. Может оказаться, что выгодно зарезервировать узловые ячейки для того или другого типов узлов. Тогда можно разработать коллинеарную топологию, содержащую только 0 ( n \ g 2 n ) каналов даже при резервировании узловых ячеек. Топология определяется леммой Бхатта и Лейсерсона [60]. Лемма 5.4. Пусть Т — дерево с п узлами степени г, узлы — двух цветов, белого и черного. Тогда существует множество из 2 - [ I g n / l g (г/(г—1))] ребер, удаление которых делит все множество узлов, а также множества белых и черных узлов пополам. Ни в одном множестве количество узлов одного типа не будет превышать больше чем на единицу количество узлов этого же типа в другом множестве. Лемма 5.4 позволяет построить иерархический алгоритм генерации топологии TCL, аналогичный алгоритму CL. Этот двухцветный алгоритм генерации топологии размещает пузловой распознаватель степени г по зарезервированным узловым ячейкам, используя максимум 2-[lgn] • \\gn/\g(r/(r— — 1))] каналов. TCL. Этот алгоритм раскладывает распознаватель Т с W(T) компараторами в линейке из | Г | узловых ячеек с W(T) ячейками для компараторов, равномерно распределенных вдоль линейки. Равномерное распределение означает, что любая непрерывная линейка из [ J 7" | / IW(T)\ узловых ячеек содержит максимум один узел для компаратора и что любая непрерывная линейка из \\Т\/ IW(T)] узлов содержит как минимум один узел для компаратора. 1) Используя лемму 5.4, исключить множество S из 2-[lg«/lg (г/(г— 1) ) ] ребер для разделения дерева Т на
Алгоритм
распознаватели и w(T\)
— [(w(T)/2ji.
и Т2 с количеством узлов | Т\ \ = [ | Г|/2] •
2) Разделить линейку узлов на блоки из | r i | и \Т2\ узловых ячеек соответственно с w(T\) и w(T2) компараторными узлами. 3) Разместить деревья Т\ и Т2 в предназначенных для них линейках узлов. 4) Развести множество S ребер, используя 2-[lgn/lg(r/ /(г—1))] сегментов, которые проходят по всей длине Т. В данном разделе представлена методика генерации топологии с асимптотически оптимальной площадью и для реструктуризируемых, и для нереструктуризируемых топологий, в которых имеются различные типы ограничений. Выбирая одну из этих методик, можно разработать эффективные по занимаемой площади топологии для любого класса схем распознавателей. Имея в качестве входных данных регулярное выражение, компилятор затем может сконструировать и разместить в кристалле эффективный систолический распознаватель языка. Б. Программируемые топологии для распознавателей. При использовании специализированных кремниевых компиляторов с программируемыми топологиями ценность компиляторов возрастает. Программируемая топология — это частично определенная топология схемы, принадлежащей области приложения компилятора. Полную спецификацию схемы, которую нужно сконструировать, можно преобразовать в программу, или полную спецификацию топологии. Таким образом, программируемая топология выступает как целевая архитектура для специализированного кремниевого компилятора. Программируемые топологии обладают рядом преимуществ перед непрограммируемыми: 1) Экономичность. Можно изготовить большую партию кристаллов до того, как они потребуются. Отдельные кристаллы можно затем программировать по мере необходимости. 2) Предсказуемость. Требования к скоростным, размерным и тепловым характеристикам кристаллов можно точно определить до того, как кристаллы будут программироваться. Минимизируется разброс из-за разработки и изготовления. 3) Быстрая оборачиваемость. Разработка конфигурации программируемого кристалла проходит быстрее, чем проектирование и изготовление заказного кристалла. Исключаются этапы изготовления масок и травления, а кристаллы часто можно конфигурировать после размещения в корпусе.
Разработчики и изготовители ИС давно осознали эти преимущества и уже сконструировали программируемые топологии постоянной памяти, программируемых логических матриц, однокристальных микропроцессоров [64]. Здесь описывается программируемая топология, которую называют программируемой матрицей распознавателей (PRA), используемой для построения распознавателей языков. Рассмотрено несколько реализаций таких матриц, представлены проектирование и тестирование макетного программируемого распознавателя. Реструктуризируемые топологии распознавателей, рассмотренные в п. III.А, можно использовать в качестве программируемых топологий. Размещение ячеек и трактов передачи данных можно определять до того, как станет известна конкретная структура дерева. Заранее определенные позиции ячеек и каналов можно рассматривать как области программирования этих топологий. Топология программируется размещением в областях программирования подходящих структур. Здесь программируемые распознаватели рассматриваются подробно. Топологии данного раздела ориентируются на стандартную архитектуру кристалла, в которой используются коллинеарные топологии, изученные в п. III.А. Ячейки располагаются в ряд, трассировочные каналы проходят вдоль ряда ячеек. С точки зрения современных технологий такие топологии наиболее практичны, так как необходимые в топологиях с площадью кристалла, пропорциональной числу узлов, межканальные переключатели могут занимать слишком много места и в некоторых случаях вносить большие задержки. Для всех программируемых топологий, описываемых в данном разделе, можно использовать базовую архитектуру, показанную на рис. 21. Контактные площадки размещаются на периферии кристалла. Внутри кольца контактных площадок размещаются один или два ряда ячеек с трассировочными каналами вдоль рядов. (Хотя на рисунке показаны два ряда ячеек, можно использовать только один ряд, если ячейки имеют большой размер.) Программируются и ячейки, и каналы. По мере роста числа изделий, для конструирования которых пригоден кристалл, эту архитектуру можно расширять дополнительными рядами ячеек с трассировочными каналами между рядами. В данном подразделе рассматриваются три типа программируемых топологий: 1) топологии, программируемые с помощью масок, которые можно программировать изменением одной или двух масок во время изготовления;
• • и ' •' и I
I Контактные площадки
а
•
а
Ячейки —
Контактные площадки
•
а
а hканалы •
а
а в
Ячейки Контактные площадки
. . .
Г"
"1
п
L J
Рис. 21. Общая архитектура программируемых топологий распознавателей.
2) топологии с плавкими соединениями, которые программируются после изготовления установкой или разрывом соединений (например, с помощью лазера); 3) мягкопрограммируемые топологии, которые программируются и перепрограммируются установкой переключателей (например, проходных транзисторов), которые создают или разрывают соединения. Эти типы топологий отличаются областью применения; выбор конкретного типа зависит от предполагаемой области использования. Аналогичная проблема возникает при выборе между постоянной памятью ПЗУ, программируемой постоянной памятью ППЗУ и памятью с произвольным доступом ЗУПВ в приложениях оперативной памяти. Топологии, программируемые с помощью масок, лучше использовать в приложениях, в которых большое число кристаллов имеют одинаковую конфигурацию. Стоимость изготовления маски высока, но в кристаллах эффективно используется площадь, и они обладают хорошими скоростными характеристиками. Топологии с плавкими соединениями предпочтительны, когда конфигурация кристаллов постоянно изменяется,
но количество реализуемых в каждом кристалле программ невелико. Плавкие соединения занимают в кристалле дополнительную площадь и могут ухудшить его скоростные характеристики. Мягкопрограммируемые кристаллы идеальны в распознавателях, которые можно использовать повторно с различными выражениями. Хотя мягкопрограммируемая топология весьма гибкая, требуемая площадь оказывается больше, чем в двух других топологиях. Рассмотренные в разд. II распознаватели формировались из компонентов двух типов: ячеек, которые выполняли обработку информации, и трактов передачи данных, которые передавали данные между ячейками. Программируемая топология для некоторого класса распознавателей должна давать возможность конфигурировать и ячейки, и тракты передачи данных. В следующих двух подразделах рассматриваются методы, которые можно использовать в архитектуре, показанной на рис. 21. 1. Программируемые ячейки. Отдельные ячейки топологии необходимо запрограммировать на выполнение различных функций. Например, компараторы необходимо запрограммировать на распознавание произвольного символа. Фактически они должны быть даже еще гибче, так как встречающиеся на практике регулярные выражения часто содержат подвыражения, в которых проводится сравнение не с одиночным символом, а с целым множеством символов. Такие программы, как LEX [30], позволяющие пользователю определять эталоны с помощью регулярных выражений, почти всегда включают операторы для множеств одиночных символов. С помощью программируемых топологий можно реализовать аналогичные операторы, так как ячейки компараторов могут выполнять сравнение не только с одиночными символами, но и с множеством символов. Например, компаратор можно запрограммировать на фиктивный символ, который совпадает с любым символом. Если нужна еще большая гибкость, то можно фиктивными битами запрограммировать отдельные биты эталонного символа; эти биты сравниваются и с нулем, и с единицей. Если, например, символы представлены в коде ASCII (Американский стандартный код для обмена информацией), то фиктивные биты позволяют одному компаратору проводить сравнение с любым управляющим символом. Сходство комбинационных ячеек позволяет и их делать программируемыми. Каждая из ячеек, рассмотренных в разд. II, использует один вентиль для формирования сигнала РАЗРЕШЕНИЕ или РЕЗУЛЬТАТ и передает сигнал 15—708
СИМВОЛ со входа на выход без изменения. Используемый в ячейках замыкания вентиль «синхронный ИЛИ» можно без изменений включать и в другие комбинационные ячейки,, поэтому при программировании ячейки на конкретную комбинационную функцию требуется изменять только несколько соединений. Если использовать архитектуру, представленную на рис. 21, то комбинационные ячейки необходимо немного изменить. Другая разводка сигнала СИМВОЛ позволяет сэкономить площадь кристалла. В новой разводке линия СИМВОЛ проводится полностью в трассировочных каналах над ячейками, поэтому сигнал СИМВОЛ на комбинационные ячейки не поступает. Вместо этого линии СИМВОЛ канала, связанного с правым портом ячейки, непосредственно соединяются с каналами, связанными с другими портам» этой ячейки. Это позволяет исключить сигнал СИМВОЛ из. числа портов комбинационных ячеек и сэкономить значительную площадь кристалла, так как ячейка имеет как минимум такую же ширину, как ширина входящих в нее портов. Сигнал СИМВОЛ обычно кодируется несколькими битами, поэтому удаление этих битов из состава трех или четырех портов уменьшает ширину комбинационной ячейки. Программируемым должны быть и комбинационные, и компараторные ячейки. Надо ли делать так, чтобы каждая ячейка топологии могла программироваться в любой тип? ячеек, или ячейки нужно разбить на типы до программирования? Необходимо выбирать тот вариант, который позволяет разместить в кристалле наибольшее число ячеек. Количество ячеек, которые формируются в кристалле с архитектурой, изображенной на рис. 21, зависит от числа ячеек, которое можно включить в каждый ряд. Все ячейки архитектуры имеют одинаковую высоту, но могут отличаться по ширине, которая зависит от числа портов ячейки. Таким образом, число реализуемых в каждом ряду ячеек зависит от полноты использования портов ячеек. Удобно рассматривать программирование ячеек как программирование портов, которые затем группируются в ячейки. Можно представить себе несколько методов программирования портов с целью формирования ячеек. 1) Каждый отдельный порт можно запрограммировать как универсальный порт и для ячейки сравнения, и для комбинационной ячейки. Затем два смежных порта нужно запрограммировать для формирования компаратора или три порта — для формирования ячейки оператора Клини ». 2) Группу из четырех портов можно приписать ячейке, которая программируется как универсальная ячейка и для
компаратора, и для выполнения комбинационной функции. 3) Порты можно разбить на группы по два и четыре, причем группы по два порта можно запрограммировать как компараторы, а группы по четыре порта — как комбинационные ячейки. 4) В каждую ячейку может входить набор соединений, который можно запрограммировать или как два полных порта (с линией СИМВОЛ), или как четыре модифицированных порта (без линии СИМВОЛ). В этом случае каждую ячейку можно программировать и как произвольный компаратор, и как произвольную комбинационную ячейку. Использование методов 1 и 2 рассматриваться не будет. В методе 1 для каждого порта нужна большая сложная топология, которая позволяет эмулировать восемь различных типов портов в ячейках. В методе 2 не используется половина портов каждого компаратора. Так как компараторы составляют существенную часть всех ячеек распознавателя, суммарная неиспользуемая площадь кристалла оказывается неприемлемо большой. Напротив, методы 3 и 4 есть смысл рассмотреть. В методе 3 все ячейки делятся на два типа. Можно разместить распознаватель в линейке, составленной из ячеек разного типа, с помощью алгоритма TCL. Если соотношение компараторов и комбинационных ячеек можно предсказать, то, по-видимому, этот метод позволяет сформировать ячейки минимального размера. Если соотношение типов ячеек определить заранее нельзя, то, по всей вероятности, лучше подходит метод 4. Относительно малое число логических функций, реализуемых в комбинационной ячейке, можно добавить в компаратор без заметных потерь в площади. Если символы кодируются пятью-десятью битами, то число соединений, связывающих отдельный порт с линией СИМВОЛ, будет примерно таким же, как для двух или трех модифицированных портов без линии СИМВОЛ. Следовательно, этот метод не увеличивает ни ширину ячеек, ни их площадь и применять двухцветные алгоритмы размещения не нужно. В каждом из этих методов для более эффективного использования площади кремниевой подложки необходимо расширить функции комбинационных ячеек. Логика комбинационных ячеек, реализующих функцию ИЛИ и оператор Клини *, занимает значительно меньше места, чем логика компаратора, хотя площадь в архитектуре кристалла, выделяемая под комбинационные ячейки, сравнима с площадью компараторов. Следовательно, большая часть площади в рограммируемых комбинационных ячейках не используется. 15*
Эту площадь можно использовать более эффективно, если увеличить набор операторов, которые можно запрограммировать в каждой комбинационной ячейке. Легко добавить такие широко применяемые операторы, как операция Клини + , фиксирующая повторение подвыражения один или несколько раз, или знак апостроф, определяющий необязательное подвыражение. Комбинационные ячейки можно также легко запрограммировать на выполнение таких операторов над множествами строк постоянной длины, как пересечение и дополнение (см. п. II.Б). Эти ячейки можно сочетать с программируемыми компараторами с фиктивными битами, что позволяет распознавать любые множества символов, используя очень небольшое число ячеек. Хорошо определенное множество операторов может уменьшить размер практически реализуемой программируемой топологии. 2. Программируемые каналы. Программируемый набор каналов для соединений должен давать возможность соединять порты, как было описано в разд. II. Необходимо обеспечить возможность соединения любого порта с любым каналом, а также возможность проведения в одном канале неперекрывающихся соединений между парами портов так, чтобы соединения не влияли друг на друга. В приведенной на рис. 21 архитектуре порты подключаются к проводникам, проходящим перпендикулярно каналам. Если программируемые соединения размещаются там, где порты пересекают каналы, то любой порт можно соединить с любым каналом. Чтобы обеспечить возможность проведения в канале неперекрывающихся соединений, каналы нужно разбить на части так, чтобы соединения были электрически изолированы друг от друга. Программируемые точки разрыва можно разместить вдоль канала в таких местах, где его можно разорвать. Обычно достаточно помещать точку разрыва между каждой парой портов в канале, хотя для некоторых каналов может оказаться достаточным и меньшее количество точек разрыва. Один из подходов к проектированию программируемых каналов заключается в том, что в области пересечения портов и каналов планируется использование точки пересечения. Точка пересечения позволяет связать порт с каналом и разорвать канал с одной стороны порта. На рис. 22 показана концептуальная схема точки пересечения, в которой необязательные соединения показаны тонкими линиями. Обычно порт или канал содержат больше одного проводника, поэтому каждая линия на рис. 22 соответствует нескольким проводникам. При программировании топологии можно
Точка разрыва
Канал
канала
Точка разрыва порта
Порт Рис. 22. Концептуальная схема точки пересечения в программируемой топологии.
устанавливать необязательные соединения для связи порта с каналом или для разрыва канала слева от порта. Такую точку соединения легко реализовать во всех трех типах программируемых топологий. При любой реализации канал можно размещать в одном соединительном слое, например в слое металлических соединений, а порт — в другом слое, например в слое поликремния. Возможны следующие подходы к разработке необязательных соединений: 1) В топологии, программируемой масками, нужные соединения можно занести на маску, а ненужные соединения опустить. Для такой реализации нужны только одна или две маски. 2) В топологии, программируемой плавкими соединениями, в качестве необязательных можно использовать плавкие соединения. Ненужные соединения можно разрушить. 3) В мягкопрограммируемых топологиях необязательные соединения могут образовываться канальными МОП-транзисторами, которые используются как проходные транзисторы. На затворе проходного транзистора устанавливается высокий уровень для установки соединения и низкий для разрыва соединения. Состояние каждого необязательного соединения хранит имеющийся в кристалле специальный регистр. Топологии, программируемые с помощью масок или плавких соединений, просты в реализации. Реализация же мягкопрограммируемой топологии связана с некоторыми трудное-
Рис. 23. Длинное ребро пересекает я + 2 транзистора
(черные квадраты).
тями. Проходные транзисторы и регистр состояния не только занимают место в кристалле. Прохождение сигналов через большое число проходных транзисторов может существенно снизить быстродействие схемы. Например, при изготовлении кристаллов по типичной пМОП-технологии каждый проходной транзистор добавляет в проходящую через него линию сопротивление, эквивалентное 10" Ом [49]. В пМОП-технологии вентильные входы носят в основном емкостной характер, поэтому вносимое сопротивление снижает скорость распространения сигнала по каналу. Моделирование с помощью программы SPICE [65], например, показывает, что время распространения сигнала в поликремнии от большого стекового драйвера до входа инвертора на расстоянии 2 мм увеличивается с 5 до 70 не при добавлении 20 проходных транзисторов. Если в каждой точке пересечения есть точка разрыва, реализованная на проходном транзисторе, то ребро дерева, пересекающее п портов, должно пройти через п+2 транзистора, как показано на рис. 23. Так как коллинеарные топологии n-узлового дерева могут включать ребра длиной Q(n) [63], скоростные характеристики распознавателей на основе дерева будут ограничиваться паразитными задержками в программируемом канале. Эти задержки ведут к определенным трудностям при реализации распознавателей в одном кристалле и становятся значительно более существенными при конструировании ИС на целой пластине. Если размер распознавателя соответствует размеру пластины, то некоторые сигналы могут проходить через сотни точек пересечения. Необходимо уменьшать паразитные задержки и в современных технологиях, и в технологиях, которые будут разрабатываться в будущем. Для устранения трудностей, связанных со скоростными характеристиками мягкопрограммируемых топологий, используют меньшее, чем в других топологиях, число точек разрыва. Некоторое количество каналов резервируется для
Рис. 24. Длинный сегмент без точек разрыва.
Группа О
Группа 1
•
Группа 2
Группа 3
Рис. 25. Пример структуры шины с разрывами,
длинных связей, а остальные используются для коротких. Размещение в каналах для длинных связей меньшего числа точек разрыва гарантирует, что во все связи входит небольшое число проходных транзисторов. В идеале точки разрыва надо размещать так, чтобы через произвольную точку разрыва в канале не проходила ни одна связь. В этом случае каналы можно разрывать с помощью соединительных линий, а не с помощью транзисторов. Как видно из рис. 24, каждое ребро дерева проходило бы в этом случае только через два транзистора. На рис. 25 показана шина с разрывами, которая резервирует длинные сегменты для длинных связей и короткие сегменты для коротких связей. В шине с разрывами каналы
разделены на группы по количеству разрывов в канале. Каналы группы 0 не имеют разрывов и используются для очень длинных связей. Каждый канал группы 0 может реализовать одно соединение произвольной длины. Каналы группы 1 имеют только один разрыв и могут реализовывать два независимых соединения (по одному в каждом сегменте). Число разрывов в группе увеличивается до тех пор, пока каждый сегмент группы не будет иметь длину, позволяющую провести соединение между соседними ячейками. На основе такой шины с разрывами можно разместить дерево так, чтобы каждая связь проходила через небольшое постоянное число точек разрыва. Очевидным недостатком шины с разрывами является рост числа трассировочных каналов, так как число соединений, которые можно проводить в каждом канале, ограниченно. Однако, вопреки очевидности, потери составляют лишь небольшой постоянный процент. Любое дерево степени г с п узлами можно разместить, используя только 3 - [ l g n ] X X [T/lgr/(r—1))] каналов, даже если запретить прохождение любого соединения через точку разрыва. Идея заключается в том, чтобы начать разводку с помощью алгоритма CL для коллинеарной топологии, описанного в п. III. А, и показать, что необходим постоянный процент избыточности в каналах, чтобы вести трассировку в шине с разрывами. В алгоритме CL дерево Т делится на два примерно равных поддерева 7\ и Т2 удалением одного ребра. Затем дерево Т1 размещается в левой половине линейки, дерево Т2 — в правой, а соединяющее их ребро проводится в одном из каналов. Назовем последовательные группы узлов, используемых для размещения поддеревьев, назначенными блоками или просто блоками. Таким образом, в начале работы алгоритма имеется один назначенный блок для всего дерева. В каждом цикле алгоритма каждый назначенный блок делится на два блока. В результате формируемые во время размещения назначенные блоки образуют дерево с корнем. В этом дереве сыновья некоторого блока — это два блока, сформированные из него. Назначенные блоки разъединены, если только один блок не является потомком другого блока (в этом случае потомок содержится в своем предке). Каждое размещаемое ребро дерева соответствует одному назначенному блоку, связывая две его половины в один блок. Ребра размещаются в каналах-, каждый канал может включать несколько точек разрыва, которые делят его на разъединенные сегменты. Заметим, что ни одно ребро не длиннее соответствующего ему назначенного блока. Следовательно, если сегмент включает обе конечные точки назна-
Сегмент
Канал Сегмент
Сегмент
Назначенный
блон
Канал
Назначенный блон
Ребро Рис. 26. Определение терминов.
ченного блока, то он может использоваться для трассировки этого блока. Эти определения проиллюстрированы на рис. 26. Показанное на рисунке ребро можно провести в одном сегменте верхнего канала и объединить этим соединением два назначенных блока в один. Чтобы получить формулу ограничения на число каналов, необходимых для размещения дерева размером п узлов и степени г, мы сначала доказываем, что множество разъединенных блоков, размер которых примерно одинаков, можно оттрассировать в трех каналах. Затем мы показываем, что все назначенные блоки, формируемые при размещении любого дерева, можно разбить на [lgn] • [l/lg(r/(r—1))] множеств. Так как каждое такое множество можно развести в трех каналах, всего требуется только 3-[lgn] • [l/lg(r/(r— —1))] каналов. Лемма 5.5. Для любых натуральных чисел п и k существует множество из трех каналов с сегментами длиной 3k, которые пригодны для проведения ребер между п коллинеарными узлами, если только ребра имеют следующие два свойства: 1) для любого k ребро пересекает более k узлов, но не более 2k узлов; 2) никакие два ребра не пересекают один и тот же узел. Доказательство. Сегменты в трех каналах имеют различные смещения по отношению к левому краю линейки узлов, как видно на рис. 27. Одно множество ребер выровнено по левому краю, другое сдвинуто вправо на k узлов, а третье сдвинуто вправо на 2k узлов. Трассировка с помощью множества сегментов — это включающая функция от ребер к сегментам, в которой каждому ребру назначается сегмент, в который входят конеч-
Каналы
к
2к> < —
Узлы Минимальный блок
Максимальный блоп Рис. 27. Смещение сегментов в трех каналах.
ные точки ребра. В силу того что функция является включающей, ни одному ребру не назначается больше одного сегмента. Каждое включение отображает одно ребро Е в единственный сегмент S, такой, что левый конец ребра Е содержится в S и не выходит за границу k узлов, считая от левого конца сегмента S. Другими словами, Е отображается в 5 тогда и только тогда, когда левый конец Е находится в границах самых левых k узлов S. Это отображение является функцией, так как каждая точка линейки узлов находится в границах самых левых k узлов точно в одном сегменте. Ребро Е будет входить целиком в сегмент 5, так как правый конец Е удален от его левого конца не более чем на 2k. Можно сказать, что или правый конец сегмента S удален как минимум на 2k от левого конца ребра Е, или правый конец сегмента 5 является также правым концом линейки узлов. Так как длина каждого такого ребра больше k и ребра разъединены, то левые концы любых двух ребер удалены друг от друга более чем на k. Таким образом, никакие два ребра не отображаются в один сегмент, поэтому функция является включающей. Так как функция находит сегмент для произвольного ребра дерева и проводит в любом сегменте только одно ребро, она разводит все множество ребер без конфликтов. Конец леммы. Эту лемму можно использовать при доказательстве того, что для разводки ребер произвольного дерева нужно не более 3-flg«l • [l/lg(r/(r—1))] каналов, даже если точки разрыва размещены заранее. Этим доказывается, что шину с
разрывами можно использовать для размещения дерева кристаллах с мягкопрограммируемой топологией.
в
Теорема 5.6. Для любых целых чисел п и г можно сформировать такое множество из 3-[lg'tHl/lg( / '/(''—1))1 разбитых на сегменты каналов, в которых можно развести коллинеарную топологию любого дерева степени г с п узлами так, чтобы у сегментов не было дополнительных разрывов. Доказательство. Каналы необходимо разбить на [lgn] множеств так, чтобы сегменты каждого множества имели одинаковую длину. Для i > l сегменты множества i имеют длину 3-2~'п узлов, в первом множестве они имеют длину п узлов. Каждое из множеств содержит [l/lgWC''—1))1 групп по три канала, причем сегменты каналов в группе смещены относительно друг друга, как в лемме 5.5. Это множество из 3 - f l g n | • f l/lg(r/(r—1))] каналов удовлетворяет условиям трассировки узлов дерева. Для размещения узлов и формирования назначенных блоков используется алгоритм CL. Ни одно ребро не превышает длину назначенного блока, в котором оно содержится, поэтому достаточно показать, что можно развести множество ребер, каждое из которых имеет длину одного из назначенных блоков. Таким образом, вместо того, чтобы размещать ребро, изображенное на рис. 26, мы можем размещать ребро, которое имеет такую же длину, как и включающий его сегмент. Как отмечено выше, назначенные блоки образуют дерево с корнем, в котором сыновья некоторого блока — это те два блока, на которые блок разбивается алгоритмом CL. Мы разобьем исходное дерево на [lgn] подлесов, каждый из которых можно оттрассировать с помощью 3 - f l / l g ( r / /(г—1))] каналов. Этим теорема будет доказана. Подлее i — это множество блоков, размер которых лежит в интервале (2~'п, 2 1-< п]. Имеется flg«l таких подлесов. Каждый подлее можно разбить на большое число «уровней» так, что каждый уровень состоит из неперекрывающихся блоков. Первый уровень в подлесе i — это множество корней поддеревьев в подлесе, т. е. блоков, отцы которых имеют длину более 21~'п и, следовательно, не входят в лес. Уровень / — это множество сыновей блоков / — 1 уровня, которые еще недостаточно малы по размеру. Существует максимальное число [l/(lg(r/(r—1)))1 уровней, так как в лемме 3.1 показано, что размер блоков каждого уровня уменьшается как минимум в г/ (г—1) раз. Чтобы показать, что никакие два блока в любом уровне не перекрываются, напомним, что два назначенных блока
перекрываются только в том случае, когда один из них является потомком другого. Следовательно, на уровне 1 никакие блоки не перекрываются, так как ни один из них не имеет в лесу предков. Аналогично блоки на уровне / не могут перекрываться, так как все их отцы расположены в уровне /—1. Поэтому каждый уровень состоит из неперекрывающихся блоков, размеры которых лежат в интервале ( 2 2 1 _ ' п ] . Согласно лемме 5.5, каждый уровень можно развести с помощью трех каналов, сегменты которых имеют длину 3-2~ 1 п. Каждый подлее можно, таким образом, отрассировать с помощью 3-[lgnl-[l/lg(r/(r—1))1 каналов. Так как существует lgn подлесов, для разводки всего леса требуется 3-[lgn] • [l/lg(r— 1)) ] каналов. Конец теоремы. В теореме 5.6 показано, что с точностью до малого постоянного коэффициента для шины с разрывами требуется в худшем случае каналов не больше, чем это необходимо, если алгоритм CL используется с точками разрыва во всех точках разводимого массива. Более того, относительное увеличение длины соединений не превышает некоторого постоянного значения. Это показывает, что мягкопрограммируемые распознаватели можно строить без ухудшения скоростных характеристик, вызванного длинными цепочками проходных транзисторов. Однако ход доказательства теоремы 5.6 требует, чтобы любой узел можно было разместить в любой ячейке, предназначенной для узлов дерева, так как для размещения используется алгоритм CL. Следующая теорема показывает, что возможно также двухцветное размещение в шине с разрывами с помощью алгоритма TCL, так что одни ячейки узлов можно зарезервировать для компараторов, а остальные — для комбинационных схем. Число каналов, необходимых для размещения в такой шине с разрывами, то же самое, что требуется для алгоритма TCL и равно 2- [lgn] • [lgn/lg(r/(г—1)) ]. Теорема 5.7. Для любых целых п иг множество 2 х X [lgn] • [lgn/lg(r/(r—1))] каналов, разделенных на сегменты, можно сконструировать так, что любое дерево степени г е п узлами двух цветов, белого и черного, имеет коллинеарную двухцветную топологию, в которой ребра размещаются с помощью сегментов, не имеющих дополнительных разрывов, а белые узлы распределены равномерно вдоль линейки. Доказательство. Множество каналов разделено на [lgn] групп, каждая группа содержит 2-[lgn/lg(r/(r—1))] каналов. Каналы в каждой группе разделены одинаково на сегменты. Каналы из группы 0 включают каждый по одному
сегменту. Каналы из группы 1 содержат два сегмента, каждый из них лежит в границах п/2 узлов. Каналы из группы i содержат 2' сегментов, каждый сегмент лежит в границах л/21' узлов. Алгоритм TCL можно использовать для размещения узлов, которые необходимо трассировать с помощью шины с разрывами, имеющей такую конструкцию. Алгоритм TCL — рекурсивный, с глубиной На каждом вызове алгоритма дерево Т делится точно пополам по отношению к множеству белых узлов путем удаления 2-[lgn/lg(r/(r—1))] ребер, затем производится трассировка этих ребер в множестве сегментов, которые простираются на длину дерева. Сегменты, требуемые на глубине i, не превышают по длине половину длины сегментов, необходимых на глубине i—1. Следовательно, на глубине 1 требуется одно множество сегментов длины п. На глубине 2 необходимо иметь два множества сегментов длины п/2. На глубине i необходимо иметь 2' сегментов длиной п/21'. Это точно соответствует тому, что обеспечивает описанная выше шина с разрывами, поэтому она позволяет выполнить трассировку для алгоритма TCL. Конец доказательства. Теоремы 5.6 и 5.7 показывают, что мягкопрограммируемые топологии могут конструироваться так, чтобы избежать задержек, вносимых длинными цепочками проходных транзисторов. Используя эти теоремы, можно строить шины с небольшим числом точек разрыва, размер которых лишь на небольшой постоянный коэффициент больше, чем в программируемых топологиях с точками разрыва между каждой парой ячеек. Таким образом, для использования в программируемых топологиях распознавателей пригодны все три типа конфигурируемых топологий. 3. Размещение и трассировка. Конструирование матрицы программируемого распознавателя — это только половина всей работы. Необходимо еще иметь метод программирования матрицы для любого регулярного выражения. Учитывая, что схемы распознавателей, которые мы рассматриваем, имеют структуру дерева, задача программирования сводится к размещению дерева в матрице. Хотя в теоремах 5.6 и 5.7 показано существование программируемых топологий, позволяющих реализовать в них произвольное дерево с п узлами, может оказаться более выгодным использовать меньше каналов, чем это требуется в самом общем случае. Многие соответствующие регулярным выражениям деревья имеют большую глубину, но не являются «раскидистыми». Подсчитано [33], что более 90% пе-
реходов состояний в приложениях регулярных языков приходится на простые сцепления. В распознавателях, имеющих структуру дерева, такие сцепления образуют длинные цепи коротких ребер, которые можно разместить, используя только один или два канала. Если распознаватели используют лишь небольшое число каналов, то и программируемые топологии должны включать небольшое число каналов. Нет смысла включать в матрицу каналы, которые никогда не будут нужны. Однако использование меньшего числа каналов, чем максимально возможно, приводит к трудностям. Простой иерархический алгоритм для коллинеарных топологий типа дерева может оказаться больше непригодным для выполнения размещения. Необходима более качественная методика получения топологии типа дерева, реализующая размещение узлов и проведение соединений между ними. Методика размещения и трассировки для мягкопрограммируемых топологий отличается от соответствующих методик для топологий с плавкими соединениями и топологий, программируемых с помощью масок, так как для этих топологий различна трассировка каналов. Как и при разработке каналов, задачи размещения и трассировки более трудны в мягкопрограммируемой топологии, чем в двух других типах топологий. В топологиях с плавкими соединениями и масочных программируемых топологиях задача реализации дерева аналогична обычной задаче планарного размещения. Дерево можно реализовать в программируемой топологии тогда и только тогда, когда ширина сечений дерева меньше, чем число доступных каналов. Поскольку топологию минимального сечения можно определить в полиномиальное время [66], ее реализацию в матрице в случае существования топологии можно найти быстро. Однако получение топологии шины с разрывами, требующейся для мягкопрограммируемой топологии, является новой задачей. В шине с разрывами трассировка более проста, чем размещение. Размещение заключается в приписывании узлов ячейкам линейки, а трассировка — в приписывании ребер дерева сегментам шины. Если первым выполняется размещение, то трассировка превращается в задачу простого сопоставления множеств узлов в двудольном графе, которая имеет полиномиальное по времени решение [67]. Здесь одно множество узлов состоит из ребер дерева, а второе — из сегментов шины. Сопоставление узла графа для ребра дерева узлу для сегмента шины означает, что ребро можно
провести в сегменте. Трудной задачей для мягкопрограммируемой топологии является размещение. Задача размещения для раскладки произвольного дерева в произвольной шине с разрывами является МР-полной, так как к ней сводится задача получения заданного размаха графа [68]. Задача получения заданного размаха графа состоит в нахождении для заданного графа G и заданного целого числа k такой функции f , отображающей узлы графа О в натуральный ряд чисел, что для произвольного ребра (u, v) из G разность \f(u)—f(v) | меньше k. Другими словами, узлы необходимо разместить в линейке так, чтобы расстояние между любыми двумя связанными узлами было меньше k. Эта задача является А/Р-полной, даже если граф G имеет вид дерева. Как частный случай общей задачи получения заданного размаха графа можно сконструировать шину с разрывами, в которой k сегментов длины k располагаются справа от каждой узловой ячейки. Граф G можно реализовать в шине с разрывами, когда размах графа меньше k и топология шины с разрывами будет реализовывать •функцию f . Если, однако, заранее фиксировать k, то задача заключается в определении, имеет ли граф G размах, не превышающий некоторое постоянное число, а эта задача имеет полиномиальное время решения [69]. Аналогично задача размещения графа в шине с разрывами фиксированной глубины является полиномиалвной; здесь глубина шины с разрывами — это число сегментов, которое можно подключить к произвольному узлу. Хорошо известным алгоритмом размещения в шине с разрывами является алгоритм динамического программирования, который для решения задачи требует время, экспоненциально зависящее от глубины шины. Узловые ячейки шины с разрывами сканируются слева направо, при этом реализуется множество частичных топологий. Частичные топологии в узловых ячейках с первой по i-ю эквивалентны, если первый сегмент, пересекающий границу между 1-й и t + 1-й ячейками, оставляет одно и то же ребро дерева с одним и тем и же узлом слева от границы. Если глубина шины с разрывами равна k, a G — это дерево с п узлами, то существует максимум (2п) к классов эквивалентности частичных топологий на границе i-й ячейки. Классы эквивалентности на границе i+1-й ячейки можно определить просмотром каждого класса на границе i-й ячейки один раз для каждого оставшегося узла, так что для каждой узловой ячейки требуется только О (пк+1) операций. Таким образом, этот алгоритм для размещения всего дерева требует времени 0(nk+2). Заметим, что его можно использо-
вать также и в случае двух цветов: необходимо добавить только проверку, являются ли частичные топологии приемлемыми. Таким образом, топология шины с разрывами фиксированной глубины, по-видимому, приемлема и при резервировании узловых ячеек, и без их резервирования. В. Макетный распознаватель, программируемый с помощью лазера. Чтобы продемонстрировать пригодность процедуры конструирования и конфигурирования программируемой топологии для распознавания регулярных языков, летом и осенью 1982 г. был разработан макетный кристалл ЕТ (кристалл проверки выражения), программируемый с помощью лазера. Кристаллы разрабатывались на основе масштабируемых логических ячеек со статическими коэффициентами [49] и изготавливались фирмой MOSIS [70] с использованием «МОП-технологии и канальными областями 4 мкм. В течение января 1983 г. были конфигурированы и оттестированы пять кристаллов. Один из этих кристаллов был полностью работоспособен после конфигурирования, у остальных четырех работоспособность была частичной. Усовершенствованная версия кристалла ЕТ была разработана и запрограммирована в конце 1983 г.; ошибок из-за некорректности процесса программирования не было. Этот эксперимент показывает, что можно разрабатывать компактные программируемые топологии распознавателей. Кристалл ЕТ настраивается на выражение разрывом металлических сигнальных линий. Кристаллы изготавливаются так, что все возможные соединения в нем уже выполнены: все элементы топологии соединены друг с другом. Используемый для конфигурирования кристалла компилятор регулярных выражений выбирает, какие линии разорвать, а какие оставить нетронутыми. Корректируемые линии затем разрываются импульсами лазера. Если использовать такой способ лазерного конфигурирования, то распознаваемое кристаллом выражение можно выбрать гораздо позднее изготовления и распайки кристалла. Металлические линии разрываются в особых позициях,, которые называются точками программирования. Каждая точка программирования в кристалле ЕТ состоит из одной или нескольких металлических линий, которые можно разорвать. Над этими линиями в стеклянном защитном покрытии кристалла сделано окно. Металлические линии имеют ширину 8 мкм, линии можно разрывать независимо друг от друга, зазор между линиями 16 мкм. Окно в защитном покрытии имеет размер вдоль линий 16 мкм, выходит за края
линий на 10 мкм о каждой стороны и отстоит на 10 мкм от других топологических элементов. Поскольку кристалл ЕТ является макетом, был разработан только один тип ячейки. Кристалл ЕТ включает только ячейки компараторов, каждая имеет высоту около 1 мм и ширину около 200 мкм. (Промышленный кристалл должен, конечно, включать дополнительные ячейки для объединения и замыкания.) Каждая ячейка сравнивает символы, кодируемые четырьмя битами, причем каждый бит может программироваться значениями 1, 0 или «безразличное», которое сравнивается с любым входным значением. Точки программирования в ячейке позволяют запрограммировать символ и сделать ячейку оконечной. Кристалл ЕТ содержит две структуры, которые формируются из компараторных ячеек: одиночная заранее сконфигурированная компараторная ячейка и конфигурируемый массив из четырех ячеек. Заранее сконфигурированная ячейка включена в кристалл по двум причинам: она позволяет проверить схему компаратора без программирования с помощью лазера, а также позволяет любой кристалл проверить до программирования, чтобы убедиться, что схемы данного кристалла работоспособны. Все входы и выходы этой ячейки подключены к контактным площадкам. Конфигурируемый массив содержит четыре компараторных ячейки, связанные с переключательным массивом, который включает в себя по ширине восемь портов и по высоте— два канала. Канал в массиве состоит из семи проводников, соответствующих семи проводникам в порте. В каждом пересечении порта и канала находится точка программирования, в которую входит 14 проводников, как показано на рис. 28. Каналы на рис. 28 проходят в горизонтальном слое металлических проводников, а порты проходят вертикально в слое поликремния и изображены в левой части рисунка. Длинный узкий прямоугольник в правой части рис. 28 — это окно в защитном покрытии. Канал можно отключить от соединения, разорвав семь проводников в точке программирования (проводники) 2, 3, 6, 7, 10, 11 и 14, считая сверху). Разорвав другие семь проводников (1, 4, 5, 8, 9, 12 и 13), канал можно разорвать слева от порта. В п. III.Б.2 показано, как использовать плавкие соединения этого типа для конфигурации распознавателя. На рис. 29 приведена фотография второй версии кристалла, размер стороны которого равен примерно 2,8 мм. Конфигурируемый массив — это большая структура слева or центра кристалла, а тестовая ячейка — это структура меньшего размера справа от центра. Контактные площадки раз16—708
мещены по краям кристалла и соединены проводниками с двумя внутренними структурами. Две полоски ло л лNNN .\\N \\ \>•> ЛnNч\ лч\ N NX AN• КN*. 4N л около верхнего правого уг• К*.*.**.ла кристалла — это метки, ^ NЧл\ Nч •>• . М АМ,.' e l отличающие данную верV Л о I 's \ ч sS N сию кристалла от более ранних. iN p V" Кроме линии земли, пил \Л\ S.ч4 Sл ч\ N члСч лN тания Vdd и двух синхрофаз в обеих структурах .к*.*,»*.-, имеется несколько сигvi4 -tл лл- Ч >. N N нальных линий, выведен> ; ЛS Л $ ных на контактные плоV V -С:ч j. < < щадки. К контактным плоЛ \ , . Л л • N л> S\ щадкам также подключены ft > все входы и выходы тесто'NN К**. •Л.-. вой ячейки. Кроме того, 4 верхний канал матрицы S х \V\ V V >.••< \V \ч \V V \ чЧvV V* : Канал \N чЧ чЧ \ подключен к двум группам V VV\ V V Ч >«•»