|
Пер Холмберг
В поисках идеального ядра для FPGA
Экспоненциальный рост производительности иплотности современных программируемых логических устройств заставляет далее совершенствовать их ядро с целью сокращения цикла производства и пути изделия на рынок. В связи с этим, производители FPGA стремятся реализовать так называемое “идеальное” решение для однокристальных систем с использованием высокоплотных программируемых матриц. Быть идеальному ядру программным или аппаратным — вот главный предмет споров производителей FPGA.
Главной чертой идеального ядра является его предсказуемость. То есть, основные характеристики должны быть получены всякий раз после компиляции проекта независимо от используемых инструментов разработки, объёмов устройств и применяемой смежной логики.
Кроме того, чтобы соответствовать требованиям современных развивающихся приложений, таких как, например, быстродействующие цифровые сигнальные процессоры или интерфейсы PCI, работающие с тактовой частотой 66 МГц, идеальное ядро должно обеспечивать максимальную производительность и занимать минимальную площадь на кристалле микросхемы. Наконец, идеальное ядро должно обеспечивать высокую гибкость и защиту от ошибок при проектировании. Гибкость является фундаментальной характеристикой программируемых логических устройств, максимально стимулирующей рост их доли на рынке электронной промышленности в течение последних 10 лет.
Альтернативы
В настоящее время существует несколько методов достижения высоких показателей некоторых характеристик идеального ядра, однако, зачастую это происходит за счёт ухудшения других. Один из методов состоит в реализации программного ядра на стандартной FPGA. Программное ядро может быть синтезировано средствами HDL кодирования без оптимизации или предварительного размещения и маршрутизации элементов. Этот метод обеспечивает высокую гибкость ядра, но, увы, за счёт производительности и предсказуемости. Однако, и производительность и предсказуемость могут быть значительно улучшены после оптимизации проекта для конкретной архитектуры FPGA, предварительного размещения и маршрутизации его составляющих. Другой метод заключается в том, чтобы реализовать на кристалле аппаратное ядро, которое позволяет избавиться от ограничений на производительность и предсказуемость, свойственных программному ядру, хотя и не обеспечивает требуемой гибкости.
Также следует отметить, что генерация идеального ядра для устройств на FPGA идёт параллельно основному процессу проектирования. Совместимая с ядром архитектура вентильной матрицы, современные средства проектирования, а также соответствующие решения задач системного уровня, например, создания макетных плат и испытательных стендов, одинаково важны для проекта, как и само ядро.
Гибкость, как наиболее важная функция программируемых логических устройств, особенно ценна при реализации сложных высокопроизводительных систем, таких как, например, контроллер PCI, отвечающих жёстким, но постоянно усложняющимся техническим требованиям. Общеизвестно, что контроллер PCI трудно сделать правильно с первого раза. Причины этого кроются в том, что необходимые технические требования высокопроизводительного контроллера PCI соответствуют верхнему уровню технологии, имеющейся в распоряжении разработчика. Каждое приложение требует своей собственной уникальной конфигурации, а конечные изделия должны успешно взаимодействовать с чипсетами и компьютерными платформами различных производителей. В силу всех перечисленных проблем нередки случаи, когда та или иная микросхема PCI выпускается с солидным списком замеченных ошибок и ограничений.
Эту проблему решает использование программного ядра. Например, компания Xilinx выпустила свой первый интерфейс PCI LogiCORE в феврале 1996 года. Это устройство имеет программное ядро с предварительным размещением и маршрутизацией, которое разработчик без особого труда может оптимизировать и настроить для определённого приложения через соответствующий графический пользовательский интерфейс. Со времени выхода первого изделия PCI LogiCORE, было выпущено в свет пять его основных пересмотренных и исправленных версий, постоянно включающих новые функции, улучшающие производительность и поддерживающие новые устройства FPGA. В результате, пользователи всегда имели в своём распоряжении полнофункциональный интерфейс PCI, допускающий индивидуальную подстройку для соответствующего приложения и реализованный с использованием технологий FPGA самого последнего поколения. Дополнительную выгоду разработчики могут получить, используя перспективные расширения ядра PCI, поддерживающие новые платформы PC и спецификации PCI. Даже готовые платы интерфейсов PCI, уже поставленные конечным пользователям, могут быть модернизированы без особых затрат только с участием соответствующего программного обеспечения. Очевидно, что при использовании встроенного аппаратного ядра достичь подобной степени гибкости было бы невозможно.
Поскольку программное ядро может использоваться совместно со всеми стандартными устройствами FPGA, то для реализации своего ядра разработчик имеет возможность выбрать нужное устройство из широкого набора программируемых вентильных матриц различных объёмов, конструктивных исполнений и быстродействия. В результате этого, может быть выбрано устройство FPGA, дающее наиболее рентабельное решение для данного приложения. С другой стороны, в случае использования аппаратного ядра, специфический функциональный блок встраивается непосредственно в кристалл, в строго определённое устройство FPGA, круг приложений которого существенно ограничен. Чтобы не терять прибыль, связанную с производством крупных партий изделий, производители вынуждены поддерживать только ограниченное количество габаритных и конструктивных исполнений устройств FPGA. Другая причина, заставляющая производителей искусственно ограничивать номенклатуру выпускаемых изделий, кроется в том, что, если неполадки или ошибки обнаруживаются в аппаратном ядре, данное устройство FPGA должно быть переработано целиком. В результате этого многие пользователи будут вынуждены выбирать для своего приложения устройство более быстрое, объёмное и, главное — более дорогое, чем им необходимо.
Некоторый набор встроенных функций можно реализовать с использованием аппаратных ядер без значительной потери гибкости устройства. В качестве примера здесь можно привести ОЗУ, которое используется почти в каждой системе, но с различной конфигурацией и объёмом. Поскольку ОЗУ само по себе является программируемым устройством, оно может быть встроено как аппаратное ядро, сохраняя при этом возможность изменения конфигурации для соответствия определённому приложению. Особенно выгодным может быть исполнение ОЗУ как аппаратного ядра в системах, требующих больших блоков памяти. Однако, в приложениях, где необходимо несколько небольших блоков ОЗУ, как, например, при реализации цифровых сигнальных процессоров, наиболее эффективным является применение программного ядра. Для поддерживания достаточной гибкости встроенного ОЗУ важно, чтобы оно было конфигурируемым. Например, ОЗУ должно поддерживать различные по характеристикам слова, синхронный и асинхронный режим чтения/записи, одно- и двухпортовые интерфейсы.
Другой функцией, подходящей для реализации в качестве аппаратного ядра, является функция JTag. Это стандартная функция, занимающая минимальную площадь на кристалле кремния и допускающая встраивание в законченное семейство матриц FPGA без увеличения их стоимости.
Встроенные ядра занимают меньший объём, но это преимущество становится менее заметным с ростом объёма вентильной матрицы. В настоящее время нет никаких сомнений, что такое свойство, как программируемость устройств FPGA требует существенно больших площадей кристалла, чем использование встроенных аппаратных ядер. Однако, благодаря оптимизации проекта с учётом определённой архитектуры FPGA, требуемую площадь можно значительно сократить. В результате этого, преимущества от применения аппаратных ядер становятся менее заметными. Заметим, что такая оптимизация возможна без ручного вмешательства разработчика за счёт предварительного размещения и маршрутизации схемы, а также наложения необходимых ограничений.
Несмотря на это, реализация сложных функциональных ядер значительно уменьшает площадь кристалла, необходимую для реализации системы в целом. Таким образом, суммарная экономия площади FPGA изменяется в зависимости от типа и сложности применяемого ядра, а также от количества вентилей конкретного устройства FPGA.
Рис. 1. Разница между относительными площадями кристалла, занимаемыми программным и аппаратным ядрами, уменьшается с ростом объема FPGA
Например, программируемый интерфейс PCI Master производства компании Xilinx эквивалентен 12000 вентилям. Хотя это устройство тщательно оптимизировано для определённой архитектуры FPGA, встроенная версия того же самого ядра позволила бы сэкономить приблизительно 80% площади кристалла. PCI Master предполагает использование технологии вентильных матриц и учитывает дополнительные потери ресурсов, необходимые для соединения ядра PCI с устройствами ввода/вывода и объединения в конечное изделие.
Как показано на рис. 1, разница между относительными площадями кристалла, занимаемыми программным и аппаратным ядром, уменьшается с ростом размеров FPGA. 80%-е сокращение площади относится только к области, занимаемой ядром PCI. Экономия площади конечной матрицы уменьшается с ростом её объёма. Когда появился интерфейс PCI LogiCORE, он был оптимизирован для микросхемы XC4013E — самой большой FPGA из доступных в тот период времени. Эта микросхема имела 30000 вентилей, и реализация интерфейса PCI с программным ядром занимала приблизительно 40% микросхемы. Если бы яд-ро было встроенным, оно имело бы на 80% меньший размер, но конечный выигрыш составил бы всего 32%.
Годом позже, то же самое ядро было оптимизировано для микросхемы XC4062XLT, содержащей приблизительно 124000 вентилей. Реализация интерфейса PCI с программным ядром здесь занимает менее 10% ресурсов FPGA. Переход к встроенному аппаратному ядру дал бы выигрыш всего 8%.
Рис. 1 наглядно иллюстрирует разницу площадей, занимаемых программным и аппаратным ядрами в FPGA с 30000 и 124000 вентилей. Производители программируемых вентильных матриц сейчас поставляют устройства с числом вентилей, постепенно приближающимся к 1 миллиону, а следовательно, выигрыш от использования встроенного ядра станет ещё меньшим.
Легко видеть, что экономия 10000 – 15000 вентилей при использовании встроенного ядра PCI в FPGA большого объёма становится незначительной. С ростом объёмов матриц выигрыш можно получить при встраивании в качестве аппаратных ядер только очень сложных функций. Однако, более сложные функции, как правило, требуют большей гибкости и используются в меньшем количестве приложений, что отрицательно сказывается на фундаментальных преимуществах применения FPGA. И снова ядром, оптимально подходящим для аппаратной реализации, является ОЗУ большой ёмкости.
Как уменьшение требуемой площади кристалла отражается на конечной стоимости изделий?
Для конечного пользователя размеры кристалла важны только в том случае, когда значительно снижается стоимость изделия. Чтобы понять, как снижение размеров кристалла отразится на общей стоимости изделия, необходимо рассмотреть все её составляющие. Общая стоимость производства FPGA включает не только стоимость изготовления кристалла кремния, но и затраты на сборку и тестирование всего устройства (рис. 2). На практике, стоимость кристалла кремния уменьшается относительно общей стоимости изделия по мере совершенствования технологического процесса и создания микросхем с более плотным расположением элементов. Например, при использовании 0,5-микронной технологии стоимость кристалла составляет менее 40% от общей. Следовательно, возвращаясь к описанному выше примеру интерфейса PCI, сокращение размера кристалла на 8–32% снизит общую стоимость изделия на 4–12%.
Рис. 2. Составляющая, соответствующая стоимости кристалла кремния, снижается по мере появления технологических процессов с более высокой плотностью размещения элементов
Вместе с тем, из-за усложнения встроенного ядра стоимость тестирования в процессе производства вырастет до 10%, а для некоторых микросхем — даже больше. Как правило, в полупроводниковой промышленности объёмы производства отражаются на общей стоимости конечных изделий. При выпуске крупных партий одинаковых изделий фиксированный уровень расходов на разработку равномерно распределяется по большому количеству устройств, и стоимость каждого отдельного устройства заметно снижается. Рынок программируемой логики старается получить из этого принципа максимальную выгоду. В противоположность рынку специализированных интегральных схем (ASIC), потребители устройств на FPGA, как правило, приобретают малые или средние партии изделий. Однако, в силу того, что число пользователей программируемой логики значительно превышает число пользователей специализированных микросхем, а одни и те же матрицы используются в различных приложениях, производители FPGA могут получить хорошую прибыль с производства крупных партий изделий.
Компромисс: аппаратное ядро — программное обеспечение
Когда FPGA становится слишком специализированной, авансированная стоимость разработки, включающая стоимость проектирования кристалла, создания комплекта масок, подложки и программных инструментов, весьма отрицательно сказывается на стоимости отдельного изделия. Фактически, возвращаясь к примеру интерфейса PCI, экономия 4–12% за счёт снижения размеров кристаллов компенсируется повышенными затратами на разработку, и версия изделия со встроенным ядром по-лучается более дорогой, чем версия с программным.
Реализация в качестве аппаратного ядра имеет смысл только для самых распространенных функций, занимающих большую долю рынка. В конечном итоге, при выпуске очень крупных партий, если обеспечивается автоматизированный переход от специализированной микросхемы к программируемому устройству, после проведения этапов тестирования и верификации конечное изделие на FPGA может стать дешевле своего ASIC собрата.
Встроенное аппаратное ядро отстаёт в технологическом плане. Возможно, самым серьёзным аргументом в пользу аппаратного ядра является высокая производительность. Полученная за счёт вложения в FPGA оптимизированного аппаратного ядра, использующего технологию вентильных матриц или стандартных ячеек, высокая производительность может перевесить все преимущества программируемой архитектуры. В этом случае FPGA со встроенными аппаратными ядрами могут найти применение в сверхбыстродействующих приложениях, реализация которых раньше возможна была только на специализированных микросхемах (ASIC).
Примерами таких приложений являются шины ОЗУ и гигабитные карты Ethernet. Однако, учитывая более продолжительное время разработки встроенного аппаратного ядра и интенсивное развитие стандартных устройств FPGA, разница в производительности между аппаратными и программными ядрами постоянно сни-жается. За последнее время производство FPGA перешло от 1,2-микронной технологии в 1992 году до 0,25-микронной в 1997 году (рис. 3). В результате, производители получили возможность снизить стоимость FPGA и, что более важно, значительно повысить степень их интеграции и производительность.
Рис. 3. Ускоренный переход на новые технологии объясняется регулярностью архитектур устройств FPGA
Быстрое принятие новой технологии определяется здесь тем, что структурированная регулярная архитектура FPGA относительно легко может быть переведена с одной технологии на другую. В высшей степени специализированная функция, реализованная как встроенное ядро, с другой стороны, слишком сложна для перехода на другую технологию без дополнительных этапов повторного проектирования и верификации. В результате, специализированные вентильные матрицы со встроенным ядром всегда имели бы отставание 6–18 месяцев относительно стандартных устройств FPGA, что означает отставание в технологическом плане на одно поколение.
При сравнении характеристик этих двух типов ядер, такое технологическое отставание обязательно должно приниматься во внимание. Возвращаясь к примеру интерфейса PCI, семейство микросхем Xilinx XC4000XLT, выполненное с применением 0,35-микронного процесса, является достаточно быстродействующим, чтобы обеспечить работу программного ядра на скорости 33 МГц. Следующее поколение FPGA ориентировано на 0,25-микронный технологический процесс, который одновременно с применением усовершенствованной архитектуры обеспечит удвоенную производительность конечных устройств. Новая серия интерфейсов PCI с программным ядром уже может работать на частоте 66 МГц.
По времени это совпало с появлением 66 МГц интерфейса PCI со встроенным аппаратным ядром. Разница в производительности между двумя типами ядер может быть снижена дополнительно за счёт более тщательной оптимизации программного ядра для определённой архитектуры FPGA. Задержки распространения сигнала в FPGA в значительной степени определяются внутренними соединениями, а следовательно, тщательная проработка общей топологии кристалла и оптимальная маршрутизация позволят значительно улучшить производительность.
Как пример, тесты оценки производительности показывают, что проектирование и оптимизация 8-бит 16-портового фильтра с конечной импульсной характеристикой (FIR), выполненные с использованием доступных архитектурных функций, таких как поисковые таблицы и регистры, могут повлечь за собой 10-кратное увеличение производительности устройств и 5-кратное сокращение требуемой для этого площади кристалла по сравнению с тем же проектом, реализованным на базе начального VHDL кода.
Чтобы удовлетворить потребности разработчиков, обеспечить короткие сроки проектирования и высокие характеристики, идеальное ядро должно быть гибким и поддерживать широкий диапазон типов FPGA с различными объёмами, скоростями и конструктивными исполнениями. Для получения максимальной производительности на минимальной площади оно должно быть оптимизировано для определённой архитектуры FPGA. Кроме того, для лучшей предсказуемости параметров, идеальное ядро должно иметь предварительное размещение и маршрутизацию, а также позволять легко производить параметризацию.
Заключение
Как следует из сравнительного анализа использования программных и встроенных аппаратных ядер, понятие идеального ядра различно для различных приложений. Аппаратные ядра подходят для реализации больших, часто используемых, функций, таких как ОЗУ, а также для сверхбыстродействующих функций, которые не могут быть выполнены на стандартных устройствах FPGA. Подавляющее большинство базовых функциональных блоков, тем не менее, может быть выполнено в виде программного ядра, поскольку оно обеспечивает достаточную гибкость, сокращённое время разработки и возможность выпуска крупных партий программируемых логических устройств.
Благодаря высокой адаптации к новым технологическим процессам и быстрым методам исполнения, программные ядра обеспечивают высокую гибкость и будут продолжать конкурировать по стоимости и производительности со встроенными аппаратными ядрами.
Electronic Engineering, май 1999 г.
Перевод Ю. Потапова
|