![]() |
Главы из книги «Параллельная обработка данных».Глава 11. Как создаются цифровые электронные устройства.При создании цифрового электронного устройства, как и при разработке программного приложения, используется вполне определенная, устоявшаяся за многие годы, система уровней иерархии представления схемы. На самом нижнем уровне иерархии находится транзистор. Это аналоговый электронный прибор, функционирование которого описывается рядом плавных, совсем «не цифровых», зависимостей. Количество транзисторов в цифровых схемах таково, что понимание этих схем человеком непосредственно в терминах вольт–амперных характеристик транзисторов невозможно. Никому еще не удавалось понять, как работает процессор, прослеживая непосредственно взаимные зависимости токов и напряжений составляющих его транзисторов, подобно тому, как радиолюбитель «разбирает схему» транзисторного приемника с двухкаскадным усилителем сигнала. Тем более, в этих терминах процессор или аналогичное по сложности цифровое устройство невозможно спроектировать. По этой причине, вводится следующий уровень иерархии – уровень логических элементов, или вентилей. Это тот уровень представления, на котором происходит переход от аналоговой модели к цифровой. Вводится понятие логического уровня сигнала, «логического нуля» и «логической единицы», и говорится, что в правильно спроектированной схеме сигнал в определенные моменты времени не будет принимать промежуточных значений. А что такое «правильно спроектированная схема»? Это схема, построенная из вентилей, то есть совсем небольших электронных приборов, каждый из которых реализует некоторую функцию алгебры логики. Например, вентиль «И», вентиль «ИЛИ», вентиль «НЕ». Каждый вид вентиля строится из небольшого числа транзисторов (или диодов) совершенно определенным, фиксированным способом, и при дальнейшем рассмотрении схемы о «транзисторном происхождении» вентилей забывают. Схема рисуется как состоящая из вентилей, то есть выполняется рисуется как состоящая из вентилей, то есть выполняется логическое проектирование схемы. Из основных положений алгебры логики известно, что для построения любой функции алгебры логики путем суперпозиции логических элементов надо обладать полным базисом то есть некоторым набором видов таких элементов. В частности, набор из трех видов элементов: «И», «ИЛИ» и «НЕ», образует полный базис. Способы построения произвольной функции алгебры логики из таких элементов по ее таблице истинности просты и хорошо известны: например, канонический способ построения дизъюнктивной нормальной формы. Таким образом, располагая базисным набором вентилей, мы легко можем построить любую комбинационную схему, то есть схему, выходы которой реализуют некоторую функцию алгебры логики от своих входов. Некоторые примеры построения таких комбинационных схем, реально применяемых в сложных цифровых устройствах, приводятся в приложении 2. Однако, применяемые на практике сложные цифровые схемы редко бывают комбинационными. Значения выходов комбинационной схемы зависят от значений ее входов в данный момент времени, то есть комбинационная схема «ничего не помнит», по определению не содержит в себе элементов памяти. Любая память, даже объемом в один – единственный бит, комбинационной схемой не является. Для завершения построения «картины мира» логической схемотехники нам требуется ввести еще два связанных между собой понятия – понятие элемента памяти и понятие дискретного времени. Простейшим элементом памяти, то есть цифровой схемой, значения выходов которой зависят от значений ее входов в прошлом, является RS-триггер Такой триггер получается, если соединить два вентиля «И» и два вентиля «НЕ» таким образом: ![]() рис. 11.1. RS-триггер Вертикальная черта над названием сигнала обозначает его инверсию: надчеркнутое «S» читается как «не S». Входы вентилей слева, выходы – справа. Входы этого триггера – это инверсные сигналы установки (S) и сброса (R). Если оба они равны 1, то есть не активны, то триггер сохраняет значение, которое имел ранее, что представлено в прямом виде на первом выходе и в инверсном – на втором. Если вход R равен 0, то есть активен, а вход S – не активен, то триггер запоминает нуль. Если активен вход S, а вход R – нет, то триггер запоминает единицу. Наконец, если активны оба входа, то после их деактивации триггер будет вести себя, как аналоговая схема, то есть в терминах логики (а не физики транзисторов, проводов и диодов, из которых сделаны вентили) о его последующем состоянии ничего сказать нельзя. Правильная схема, использующая такой триггер, должна быть построена так, чтобы эта ситуация никогда не возникала. Этот простейший пример показывает, что схемы с последействием, то есть со свойствами элементов памяти, в принципе тоже строятся из вентилей, как и комбинационные схемы. Однако, возникает вопрос о том, что такое «прошлое» и «настоящее», как учесть время переходных процессов в сложных схемах. Ведь во время перехода вентилей из одного состояния в другое они уж точно не подчиняются законам логики. В это время совершенно неизбежны и промежуточные (не логические) уровни сигналов, и затухающие колебательные процессы, и много других неприятностей. Для решения этих вопросов вводится понятие дискретного времени. В состав схемы включается специальное устройство – генератор синхроимпульсов определенной частоты. Система элементов памяти разного типа, построенных обычно на основе RS-триггера но с добавлением дополнительных вентилей, строится таким образом, чтобы все передачи сигналов с выходов одних элементов памяти на входы других происходили, например, только в момент появления очередного синхроимпульса, как говорят, «по переднему фронту». рабочая частота выбирается таким образом, чтобы за время от одного переднего фронта синхроимпульса до другого все переходные процессы в транзисторах и диодах, из которых сделаны вентили, успели завершиться. Таким образом, время измеряется в синхроимпульсах. Прошлое – это время, после которого прошел хотя бы один синхроимпульс. Состояние схемы в промежутках между синхроимпульсами при логическом проектировании не рассматривается. Все это вместе позволяет говорить действительно о логическом проектировании, без привлечения каких-либо понятий физической реализации, вроде той же вольт – амперной характеристики транзистора. В соответствии с вполне очевидными принципами структурного проектирования, вводится следующий, еще более высокий, уровень иерархии, а именно уровень типовых логических узлов. Самым очевидным примером такого узла является регистр – набор триггеров, управляемых и тактируемых совместно. Функционально регистр представляет собой отдельную ячейку памяти определенной разрядности. В проектировании в терминах типовых логических узлов иногда говорят как о проектировании «в регистрах». Пока мы не видим ничего такого, что делало бы процесс проектирования цифровых электронных схем заметно более сложным, чем, скажем, системное программирование. Почему же, в таком случае, программирование издавна считается в чем-то более простой, а главное – осуществимой гораздо более быстро, работой? Попробуем представить себе, как разработка цифровой схемы происходит на практике. Для начала забудем об изделиях современной микроэлектроники, сам физический процесс изготовления которых подразумевает «монтаж» чуть ли не отдельных молекул. Поставим себя мысленно на место проектировщика конца 70-х, когда типовые логические узлы были отдельными микросхемами, то есть регистр можно было взять в руки, установить на плату и припаять обычным низковольтным паяльником. Приступая к разработке, например, процессора, схемотехник сначала рисовал его схему «в регистрах». В этот момент схема, скорее всего, содержала в себе примерно столько же чисто логических ошибок, сколько имеется в тексте только что написанной, но еще не отлаженной, программы. Схему, как и программу, требуется отладить. Для этого схему собирали на макетной плате, то есть на плате, в которой имеется очень много монтажных позиций для ножек микросхем, никак не связанных друг с другом. Установив на макетную плату все необходимые микросхемы, разработчик выполнял необходимые соединения обычным проводом при помощи паяльника. Схема готова и, конечно же, не работает. Если сравнивать этот процесс с процессом разработки программы, в первую очередь бросается в глаза физическая трудоемкость изготовления опытного образца. Программу, в отличие от схемы, не надо паять. Если она существует в виде файла на диске, ее уже можно считать «физически реализованной». В действительности, главное отличие (и главная проблема) вовсе не в этом. В конце концов, в современных условиях «монтаж» внутренней структуры микросхемы все равно делает некоторый автомат, и, скорее всего, он делает это довольно быстро, и без вмешательства человека. Но вернемся к нашему опытному образцу. Главное его отличие от еще не отлаженной программы состоит в том, что он, вообще говоря, вовсе не ведет себя как цифровая, то есть описываемая законами логики, схема. В самом деле, из того, что два транзистора вместе ведут себя как вентиль, а четыре вентиля вместе – как триггер, вовсе не следует то, что аналогичные рассуждения верны для соединенных проводами тысяч и тысяч транзисторов. В такой большой системе присутствуют «просадки» сигналов и возрастание времени переходных процессов на длинных комбинационных цепочках, тепловые шумы, помехи, «наводки» и прочие эффекты, имеющие совершенно не логическое происхождение. Соединенные вместе в большом количестве, вентили постоянно рискуют перестать быть вентилями, то есть начать вести себя не логически, а электрически некорректно. Конечно, наш воображаемый разработчик стремился все это учесть, «разбавив» схему должным числом резисторов и емкостей. Но ведь и в расстановке этих совсем не логических элементов он, скорее всего, где-то ошибся – схема – то еще не отлажена! Итак, разработчик установил, что схема ведет себя неправильно, и даже понял, как именно. Где ошибка – «в логике» или «в электричестве»? Понять это по внешним проявлениям ошибки зачастую практически невозможно. Искать любую ошибку приходится сразу по двум направлениям. В этом и заключается отличие нашего воображаемого схемотехника от программиста. Он и хотел бы мыслить исключительно на уровне логики, как того требует сложность задачи – да не может. Ему постоянно приходится быть «немножко радиомастером», то есть держать в голове и логические, и электрические свойства своего изделия. Именно эта принципиальная невозможность гарантированно разделить уровни иерархии, абстрагироваться от нижележащих и сосредоточиться исключительно на своем, и делала работу схемотехников прошлого такой трудоемкой, так отличной от работы программиста. В самом деле, вряд ли можно даже представить себе, сколько времени у программиста заняла бы, например, реализация надежно работающего Интернет – приложения на заведомо неисправном процессоре. Теперь попробуем мысленно вернуться в наши дни. Место макетной (или не макетной, а печатной, готовой к серийному выпуску) платы заняла миниатюрная пластина кремния, припаять к которой дополнительный вентиль довольно затруднительно. Запускать же процесс изготовления новой пластины при всякой необходимости разорвать одно соединение и сделать два новых – баснословно дорого. При этом «электрические» проблемы никуда не исчезли – они просто переместились на микроуровень, то есть их стало гораздо труднее обнаруживать. Как следует поступить, чтобы разработка новых микросхем вообще стала возможной? Выход был найден в 1983 году, с появлением микросхем программируемой логики. Такая микросхема представляет собой, фактически, миниатюрную «макетную плату», на которой установлено громадное – порядка миллионов – количество вентилей. Вентили эти сами по себе никак не связаны друг с другом, но их можно связать практически любым необходимым способом, загрузив карту необходимых связей в специальную конфигурационную память микросхемы. Переворот в логическом проектировании произошел тогда, когда эту память удалось сделать оперативной, то есть не «прожигаемой» однократно, а перезаписываемой неограниченное число раз. Это сделало процесс физической реализации как угодно сложной схемы на кристалле программируемой логики столь же простым, быстрым и дешевым, как запуск исполняемого файла программы на универсальном процессоре. Появление микросхем программируемой логики гигантски облегчило разработку сложных схем, в том числе – предназначенных для последующей реализации в обычных, не программируемых, кристаллах. Однако, при этом частично «повисал в воздухе» вопрос электрической корректности – ведь схема, электрически корректная в конкретном кристалле программируемой логики, запросто могла оказаться «плохой», будучи перенесена на «настоящую» пластину кремния для серийного выпуска. Вопрос был успешно решен развитием систем автоматизированного проектирования. Пыли разработаны и реализованы в рамках соответствующих САПР методы достоверного расчета такой «раскладки» логической схемы на конкретном кристалле, не важно, программируемом или «настоящем», чтобы все вентили всегда оставались вентилями, не превращаясь в причудливые аналоговые структуры из составляющих их транзисторов. Это позволило возложить обеспечение электрически корректной реализации схемы, представленной «в регистрах», на САПР, и дать, наконец, схемотехнику мыслить, то есть и создавать, и отлаживать схемы, в терминах логики, безо всякой примеси «радиолюбительства». Тем самым, последнее принципиальное отличие схемотехника от программиста было ликвидировано. И тот, и другой отныне мыслят логическими понятиями, и практически не ограничены в числе попыток при отладке своих изделий. Длительность и цена каждой из таких попыток при этом также оказывается сходной. Теперь мы видим, что поставленная нами выше задача разработки проблемно – ориентированных вычислительных устройств – «машин одной задачи» – является вполне осуществимой в принципе. Однако, как не уставали повторять схемотехники времен паяльников и макетных плат, «работать должно не в принципе, а в корпусе». Постановка этой задачи в практической плоскости вскрыла такой пласт системных, методических проблем фундаментального характера, что по сравнению с ним состоявшийся 20 лет назад переход от традиционных процессоров к многопроцессорным вычислительным системам кажется мелким, незначительным эпизодом. Прежде чем переходить к рассмотрению этих проблем, поговорим несколько более подробно о том, как конкретно выглядят сегодня технологии применения изделий программируемой логики. Глава 12. Технологии программируемой логики сегодня.В предыдущей главе мы обосновали принципиальную возможность разработки проблемно – ориентированных вычислителей примерно теми же, по порядку величины, силами и средствами, какими сегодня разрабатываются программы для традиционных процессоров. Но из принципиальной осуществимости изготовления микропроцессора, и даже из факта серийного выпуска микропроцессоров промышленностью, еще не следует, что у Вас на столе стоит системный блок с компьютером, оснащенным ОС Windows. Как конкретно все это выглядит, как используется изготовителями суперкомпьютеров, что можно купить в магазине и попытаться использовать самостоятельно? Ответам именно на эти вопросы посвящена данная глава. Надо сказать, что малая осведомленность современного программистского сообщества, особенно молодежи, в рассматриваемых вопросах, несколько удивляет. Масса молодых людей считает себя «разбирающимися в компьютерах», тратя свободное время на изучение того, какой драйвер к какому адаптеру жесткого диска лучше подходит, и как избежать перегрева процессора, «разогнав» его рабочую частоту на целых 10%, но при этом направив на материнскую плату вентилятор от старого пылесоса. Четверти этой интеллектуальной энергии, будь она израсходована «в мирных целях», хватило бы на разработку процессора с собственной системой команд, и – кто знает – может быть, лучшей в мире ОС для этого процессора. Конечно, готовая пиратская версия «стрелялки» на таком процессоре работать не будет – возможно, дело именно в этом, не знаю. Знаю лишь совершенно точно, что, когда довелось впервые рассказывать о технологиях программируемой логики студентам - программистам, их немало позабавила идея "скачать из Интернета пару-тройку свободно распространяемых процессоров для домашнего применения". К моменту чтения той лекции эта, по мнению слушателей, забавная идея давно уже стала реальностью. Чтобы в этом убедиться, достаточно открыть страницу «процессоры» на сайте opencores.org. Впрочем, вернемся к рассматриваемой теме. Со времени появления микросхем программируемой логики, выпускаемых массовыми тиражами, понимание специалистами возможностей их применения прошло три этапа. Сначала казалось, что микросхемы эти являются исключительно «современным вариантом макетной платы», то есть средством сократить и удешевить процесс разработки логики новых микросхем в условиях, когда ручной монтаж опытных образцов создаваемых схем стал невозможен или запредельно дорог. Вскоре применение микросхем программируемой логики в этом качестве дало такой толчок разработке всевозможных специализированных электронных устройств, что все больше стало появляться устройств заказных, не ориентированных на действительно крупносерийный выпуск. При разработке таких схем часто оказывалось, что изготовление их в виде «настоящих» пластин кремния после завершения разработки просто не оправдывает себя экономически. Например, в свое время вычислительные модули отечественного суперкомпьютера МВС-100 удалось сделать очень простыми и компактными, реализовав всю логику сопряжения двух процессоров и двух блоков оперативной памяти на единственной микросхеме программируемой логики. Программируемость полученного в итоге «чипсета» никак не использовалась в работе модуля, и даже представляла собой некоторую проблему, которую разработчики собирались ликвидировать, изготовив заказную микросхему на «обычной» пластине кремния. Однако, выяснилось, что изготовление таких «обычных» микросхем становилось экономически оправданным лишь при тиражности изделия хотя бы в несколько десятков тысяч экземпляров. При этом весь прогнозируемый объем выпуска модулей в рамках суперкомпьютерной программы МВС-100 оценивался в 100 – 200 штук максимум. В итоге необходимое количество модулей пришлось изготовить на базе микросхем программируемой логики. Не потому, что их предполагалось постоянно перепрограммировать в процессе работы, а просто потому, что объем выпуска оказался слишком мал, чтобы ради него запускать конвейер на заводе по производству «настоящих» микросхем. На этом этапе стало ясно, что технологии программируемой логики незаменимы в качестве средства изготовления (а не только проектирования) штучных и мелкосерийных цифровых электронных устройств. Третий этап понимания возможностей этой технологии связан с попытками разработки специализированных вычислителей. Попытки такие делались довольно давно, и часто оказывались удачными. Правда, речь шла обычно не о суперкомпьютерах общего назначения для вычислительных центров коллективного пользования, а о специализированных «машинах одной задачи», например, для обработки данных геофизической разведки полезных ископаемых. Методы такой специализированной обработки постоянно совершенствуются, и возможность периодически перепрограммировать «машину одной задачи», чтобы сделать ее «машиной еще одной задачи», стала рассматриваться как ценная сама по себе. В течение длительного времени специализированные вычислители на базе программируемой логики и универсальные компьютеры на стандартных процессорах существовали «в параллельных мирах». По ряду технических причин, которые мы рассмотрим ниже, только в самое последнее время программируемую логику начали вводить в состав суперкомпьютеров общего назначения, в качестве реконфигурируемых сопроцессоров, «помогающих» обычным процессорам. В настоящее время такие суперкомпьютеры выпускают Cray и Silicon Graphics. (для справок: и Cray, и Silicon Graphics были куплены Hewlett Packad Enterprise). Предполагается, что пользователь должен самостоятельно, возможно, с помощью сторонних фирм, спроектировать схему конкретного сопроцессора для взаимодействия со своей и только своей программой, которая выполняется на обычном процессоре. Теперь уже программируемость схемы сопроцессора – это не «досадная необходимость», как в предыдущем примере, а непременное условие его (сопроцессора) использования. Технологии построения коммуникационных систем архитектуры NUMA тоже, как мы знаем, первоначально применялись почти исключительно в изделиях Cray и Silicon Graphics (см. выше). Тем не менее, как мы уже показали выше, сегодня такие системы могут строиться с использованием недорогих, доступных кластерных технологий. Далее мы постараемся показать, что аналогичная судьба ожидает, и даже не завтра, а уже сегодня, реконфигурируемые сопроцессоры. К сожалению, нам также предстоит убедиться в том, что сложность применения таких систем, будь они изготовлены фирмой Cray (см. выше) на уникальном заводе, или же областным университетом в факультетской лаборатории кластерных технологий, неизмеримо выше, чем сложность их технической реализации «в металле». Впрочем, вернемся к нашим вентильным матрицам. Микросхемы программируемой логики выпускаются массовыми тиражами уже далеко не первый год. Ведущая роль в выпуске этих изделий принадлежит трем фирмам – Xilinx, Altera и Lattice. (Для справок: Xilix купили intel, Alterа – AMD, Lattice – живет и здравствует). Для конечного пользователя доступны инструментальные комплекты на базе таких микросхем, оформленные в виде плат расширения, которые устанавливают в стандартную материнскую плату. Дешевые варианты инструментальных плат могут не устанавливаться в материнскую плату, а подключаться стандартными кабелями через медленные каналы, такие, как USB или com-порт. Инструментальные платы выпускаются как разработчиками микросхем программируемой логики, так и многочисленными сторонними фирмами. цены на эту продукцию разнятся в очень широком диапазоне, от 3 – 4 тысяч рублей до тысяч долларов. Платы эти выпускаются массовыми тиражами и доступны для приобретения. Следует отметить, что рынок изделий программируемой логики во всем мире растет стремительно. Рост продаж микросхем за год на 150 - 200% на этом рынке считается нормальным, скромным результатом. Типичная инструментальная плата представляет собой «заготовку» для изготовления специализированной вычислительной системы. На такой плате, помимо собственно микросхемы программируемой логики, устанавливается некоторый объем оперативной памяти, и набор выходов на периферийные каналы различного физического и конструктивного формата. Например, разъем сетевого кабеля Ethernet с соответствующим приемопередатчиком физического уровня, разъем кабеля com-порта и т. п. Естественно, устанавливается один или несколько генераторов тактирующих импульсов, иногда – программируемой частоты. Из наших общих рассмотрений в предыдущей главе, на первый взгляд, следует, что в оперативной памяти микросхема программируемой логики не нуждается – ведь мы показали, как построить элемент памяти из вентилей. В действительности ситуация здесь та же, что и при использовании «настоящей» логики на серийно выпускаемой пластине кремния. Память в принципе может быть изготовлена из вентилей, но это очень дорого, и на практике так не поступают. При изготовлении компьютера традиционной архитектуры из вентилей делают лишь внутренние запоминающие элементы процессора. Нперативная память изготавливается из других, отличных от вентилей, элементов, в основе которых не транзисторы, а конденсаторы. Так же поступают и при построении специализированного вычислителя на программируемой логике, если в его составе предусмотрена оперативная память достаточно большого объема. Важно понимать, что наличие на плате того или иного периферийного разъема ни в коей мере не означает наличия в ее схеме готового устройства, подключаемого через этот разъем. Скажем, из наличия на плате разъема Ethernet ни в коей мере не следует, что где-то внутри платы имеется встроенный сетевой адаптер. Разъем комплектуется ровно тем объемом электроники, который необходим, чтобы перевести соответствующий сигнал в форму логического сигнала, пригодного для подачи на входы вентилей. Все остальное оборудование, например, внутренняя логика сетевого адаптера, логика шины PCI, к которой этот адаптер подключен, и даже логика процессора с той или иной системой команд, который управляет этой шиной – должно быть «изготовлено» разработчиком из вентилей, входящих в состав кристалла программируемой логики. Разработчик вовсе не обязан использовать разъем строго «по назначению». Например, в экспериментальном коммутаторе каналов PCI Express с логикой непрозрачного моста, в разработке которого принимал участие автор этого текста, разъемы формата SATA использовались для подключения коммутатора к кабельной линии связи с узлами, а разъемы Infiniband - для соединения модулей коммутатора между собой. Естественно, электрический «формат» сигнала должен соответствовать тому виду электроники, которым реально укомплектован разъем. В данном случае это соответствие соблюдалось. Инструментальные комплекты обязательно предусматривают тот или иной способ «холодного пуска», то есть возможность выполнить, по инициативе управляющего универсального компьютера, загрузку разработанной схемы в конфигурационную память кристалла программируемой логики, и ее запуск. Все дальнейшее схема должна делать сама. Если это схема процессора, вся «механика» уже его начального пуска должна быть предусмотрена разработчиком процессора в его схеме. Микросхемы программируемой логики отличаются друг от друга не только числом доступных логических элементов, но и видом самих этих элементов, а также разной степенью поддержки высокоскоростных каналов обмена с внешним миром. Микросхемы в точности того типа, который был описан в предыдущей главе, то есть построенные на базе вентилей «И», «ИЛИ», «НЕ», и оснащенные лишь сигнальными входами и выходами для подключения непосредственно к вентилям, исторически были первыми. Выпускаются они и сейчас. Сегодня это самые дешевые и скромные по своим возможностям микросхемы. Они называются CPLD (Complex Programmable Logic Device – Сложное устройство программируемой логики). Слово «сложное» в названии призвано подчеркнуть отличие от первых, совсем простых, вариантов вентильных матриц. Основным типом микросхем для разработки действительно сложных устройств на сегодня являются микросхемы FPGA (Field Programmable Gate Array – Программируемый «в поле» массив вентилей). Под программированием «в поле» имеется в виду возможность программирования вне завода, то есть не при изготовлении, а упоминание вентилей, в действительности, лишь дань традиции. Ёти микросхемы построены на низкоуровневом базисе, отличном от вентилей, но эквивалентном ему. Точнее – на базе так называемых функциональных генераторов, то есть элементов, реализующих таблично заданные функции алгебры логики от четырех (реже – шести) аргументов. Для проектировщика это различие в базисах большого значения не имеет, в чем мы убедимся ниже, при обзоре состава САПР. Важных отличий FPGA от более простых и дешевых кристаллов всего два. Во-первых, кристаллы FPGA почти всегда содержат в себе, наряду с универсальными логическими элементами, некоторое количество типовых логических узлов, реализованных непосредственно, на которые тратить универсальные логические элементы уже не требуется. Например, FPGA фирмы Xilinx (см. выше) имеют в своем составе готовые модули оперативной памяти с двумя независимыми портами и программируемой разрядностью слова, емкостью 18 Кбит, и в количестве до сотен штук на кристалл. Старшие модели также оснащаются готовыми процессорами с системой команд Power PC - до 4-х штук на кристалл, на изготовление которых также не надо тратить универсальные логические элементы. Другим примером типового логического узла может служит умножитель чисел с фиксированной точкой, которых в старших моделях FPGA также насчитываются сотни. Во-вторых, кристаллы FPGA различаются по степени оснащенности высокоскоростными линиями ввода-вывода, в частности, пригодными для реализации таких каналов, как PCI Express, Infiniband, Myrinet и Ethernet с частотой 1Гбит/с и более. В старших моделях FPGA фирмы Xilinx число таких линий достигает 24. В некоторых из них также имеется готовый адаптер PCI Express в виде типового логического узла. Инструментальные платы на базе кристаллов FPGA различаются, в первую очередь, своей оснащенностью периферийными разъемами. Скажем, на основе одной и той же микросхемы, оснащенной 24 высокоскоростными линиями передачи данных, могут быть изготовлены две различных инструментальных платы. На одной все эти линии будут выведены на внешние разъемы, а на другой – не будут, поскольку эта плата ориентирована на другой круг приложений, для которого используемый кристалл также годится. Конечно, при выборе платы для того или иного круга приложений имеет значение и оснащенность платы оперативной памятью. Вместе с инструментальной платой, конечно, поставляется версия САПР, как правило, разработки той же фирмы, что выпустила микросхему. Все САПР, используемые для проектирования на основе программируемой логики, обеспечивают электрическую корректность создаваемых схем, позволяя разработчику сосредоточиться исключительно на логическом уровне представления создаваемых изделий. Системы эти подразделяются на два больших класса. Системы первого класса позволяют разработчику проектировать схемы из типовых логических узлов, «в регистрах», то есть «рисовать» схему примерно так, как это делали разработчики прошлого. Конечно, вместо рисования карандашом на листе ватмана происходит построение схемы при помощи САПР в интерактивном режиме, но сам вид схемы на экране, да и способ ее восприятия при разработке и отладке, в принципе мало отличается от того, как это все выглядело во времена макетных плат и ручного монтажа. У автора нет опыта использования систем такого рода, но среди многих профессиональных схемотехников они пользуются большой популярностью. Системы второго класса подразумевают написание алгоритма, описывающего функционирование схемы, на специальном языке программирования. При такой работе деятельность разработчика уже внешне совсем не отличается от работы программиста. Трансляция текста на языке схемотехнического проектирования в схему «в регистрах» происходит автоматически, и разработчик вообще не имеет дело с графическим представлением схемы, подобно тому, как программист на С++ не интересуется процессорными командами, в которые его программа превращается при трансляции. В обеих технологиях на практике интенсивно используются готовые фрагменты схем - так называемые схемотехнические ядра, IP cores (Intellectual Property cores – ядра интеллектуальной собственности). Они выполняют при проектировании роль "стандартных функций". Например, в качестве такого ядра может быть оформлен контроллер памяти, системная шина процессора, или сам процессор. Создание схемотехнических ядер, способных работать не только в руках у автора, работа очень трудоемкая. Сложные схемотехнические ядра коммерческого качества тщательно шифруются, и стоят очень дорого. Например, цена однократной поставки качественно спроектированного ядра адаптера PCI Express может превосходить миллион рублей. Следует отметить, что постепенно в мировом сообществе разработчиков формируется инфраструктура обмена свободно распространяемыми исходными текстами схемотехнических ядер [54], подобно тому, как это давно и успешно происходит в мире традиционного программирования. В обеих упомянутых выше технологиях разработки изготовленная разработчиком схема транслируется в некоторое низкоуровневое представление «в регистрах», не предназначенное для непосредственного восприятия человеком – аналог «объектного модуля» в традиционном программировании. Базис такого представления, то есть конкретный набор логических элементов и типовых узлов, скрыт от разработчика, и не совпадает, вообще говоря, с базисом, физически реализованным в микросхеме программируемой логики. Таким же способом оформлены готовые схемотехнические ядра. Готовые логические узлы большой сложности, присутствующие в тех или иных конкретных микросхемах, для разработчика также представлены в виде схемотехнических ядер. Внутри такого «ядра» вместо «начинки» из универсальных логических элементов присутствует просто ссылка на логический узел определенного типа, характерный для конкретной модели FPGA. САПР объединяет «объектные модули», то есть ядра, в единую схему, и транслирует ее в конкретный, аппаратно реализованный, базис используемой микросхемы, гарантируя при этом электрическую корректность реализации. В результате получается загружаемый файл конфигурационной памяти микросхемы – аналог исполняемого файла программы в традиционном программировании. Этот загружаемый файл может быть загружен в микросхему при помощи оборудования, предусмотренного для этой цели на инструментальной плате. Таким образом, реконфигурируемый сопроцессор для использования в составе узла вычислительного кластера – это просто готовая инструментальная плата, которую достаточно приобрести и установить в материнскую плату вычислительного узла в качестве платы расширения. Проблем всего две – выбрать подходящую плату и научиться программировать ее должным образом. Обзору этих проблем посвящена следующая глава. |
|
||||||||||||||||||||||||||||||||
| Тел. +7(499)220-79-72; E-mail: inform@kiam.ru | ||||||||||||||||||||||||||||||||||