Fpga это – FPGA. Разбираемся, как устроены программируемые логические схемы и чем они хороши

Содержание

FPGA. Первые шаги / Habr


В силу своей профессиональной деятельности мне приходится очень тесно работать с программированием микроконтроллеров и FPGA. Но если освоение МК более-менее подвластно даже домохозяйке, то с FPGA могут возникнуть некоторые сложности. Именно о подводных камнях и взгляде на них сверху и хотелось бы рассказать.

Шаг 0. Знакомство

Мое первое потрясениезнакомство с FPGA началось с установки ПО, которое шло в комплекте с отладочной платой. Куча ярлыков на рабочем столе, непонятные программы, причем с отличным друг от друга интерфесом — «работа предстоит интересная», — подумал я. Тонны невнятных мануалов на английском, непонятные для меня термины, отсутствие простейших туториалов или юзергайдов… Тем не менее, не прошло и полгода, после проб и ошибок на своем тернистом пути я могу с лихой долей компетентности поделиться своим опытом. Сразу оговорюсь, речь пойдет о продукции Xilinx: отладочной плате с чипом Spartan 3A DSP 1800A и среде разработки Xilinx ISE/EDK.
Шаг 1. Ногодрыгалка

Ну конечно же, для программиста-железячника hello world — это поморгать светодиодами. Ведь для того, что бы отправить заветные два слова в терминал — еще надо дорасти. За основу в данном случае следует взять языки аппаратного описания: сладкую парочку Verilog и VHDL. К ним же можно добавить и возможность построения схем на примитивных логических элементах. Сразу же вспоминается институтский курс по вычислительной технике: триггеры, регистры, логические элементы, счетчики, мультиплексоры. Но не будем забегать далеко вперед, тем более что это описывалось на хабре и до меня. Оговорюсь, языки Verilog/VHDL далеко не тривиальны, даже по сравнению с ассемблером, поэтому для их понимания нужен совсем другой подход.
Шаг 2. А если посложнее?

Несмотря на своеобразие, которым языки аппаратного описания могут отпугнуть неискушенного пользователя, у них есть огромный плюс: на FPGA можно реализовать действительно очень быстродействующее устройство, а модули DSP открывают просто колоссальные возможности для цифровой обработки сигналов. Если к этому добавить еще и готовые библиотеки с уже реализованными модулями (IP Cores), то возможности становятся все более и более значительными. Однако, здесь не обошлось и без ложки дегтя — трудоемкость, или как говорится, без бутылки не разберешься.

Для воплощения в жизнь первых двух шагов подойдет связка ISE (он же Project Navigator) + ISim (симуляция) + Impact ( прошивка FPGA).

Шаг 3. Старый добрый микроконтроллер

Иногда ну просто очень хочется чего-нибудь приятного… Пожалуйста, вспомним о SoC (System-on-Chip) — системе на кристалле. В нашем случае, это процессор, шина, память и куча всякой периферии. Можно попытаться сделать самому подобную систем (см. шаг 2), можно прикрутить найденные IP Cores на просторах интернета. Но зачем же изобретать велосипед? Умными ребятами из конторы Xilinx уже придуманы софт-процессоры PicoBlaze и MicroBlaze. Первый — это восьмиразрядный процессор, который морально устарел, уже давно не внедряется в SoC и имеет открытый исходный код. Второй же, MicroBlaze, имеет неплохие перспективы: 32 разряда, RISC-архитектура и т.д, и т.п.
В качестве памяти может быть использована как внешняя память, подключаемая к FPGA, так и внутренняя, реализованная непосредственно внутри FPGA. Как правило, вторая часто применяется для кеширования инструкций и данных, находящихся в первой. Помимо того, довольно широко используются системы, содержащие более одного процессора и использующие для межпроцессорного взаимодействия специальные модули коммуникации.
Существует гигантская куча всевозможной периферии, которую можно задействовать в огромных количествах — все ограничено лишь ресурсами FPGA. Кроме того, на шину обмена с периферией PLB можно добавить и «самопальные» модули, но только при условии их корректной работы.
На данном этапе важнейшим инструментом является Xilinx Project Stuido (XPS) из состава Emedded Development Kit (EDK), по большому счету именно она на выходе позволяет получить готовый файл аппаратной конфигурации FPGA с размещенной на ней SoC.

Шаг 4. А теперь покодим

Теперь, что же касается написания программы для того же MicroBlaze. В комплекте ПО Xilinx существует Software Development Kit (SDK), позволяющий писать программы на С/С++. Да-да, вы не ослышались, С++ действительно редкость для железок, но не в нашем случае. К слову сказать, SDK у нас Eclipse-based, поэтому тут есть и content assist, и человеческий рефакторинг, и еще вагон вкусных плюшек. Не стоит забывать и про ассемблер: порой иногда вставки на асме бывают очень кстати.
В качестве компилятора используется GCC, заточенный под нужды нашего софт-процессора, возможно использование RTOS под выразительным названием XilKernel, которая, кстати, является POSIX-совместимой. Это значит, что если человек не по наслышке знаком с мьютексами, тредами и семафорами в UNIX-based системах, то разобраться в XilKernel для него не составит и труда.
Шаг 5. Вместо резюме

FPGA — это мощный и гибкий инструмент, который может позволить решить огромное количество задач. Однако, не стоит пытаться забивать гвозди микроскопом — многие задачи прекрасно решаются на тех же микроконтроллерах более дешевыми и доступными способами (Cortex M3, привет!).
Verilog, VHDL, Behavioral, Implementation — эти и многие другие слова могут свести с ума и надолго отпугнуть от разработки с использованием FPGA, однако иногда можно заменить кучу устаревшей рассыпухи с дюжиной древних МК на одну изящную микросхему и при этом получить огромное моральное удолетворение!

habr.com

Архитектура ПЛИС (FPGA)

Архитектура ПЛИС (FPGA)

Подробности
Категория: Разное
Создано 20 Январь 2014
Автор: Николай Ковач
Просмотров: 147318

FPGA image

FPGA – это сокращение от английского словосочетания Field Programmable Gate Array.

ПЛИС – это сокращение от словосочетания «Программируемая Логическая Интегральная Схема». Слово ПЛИС встречается в русскоязычных документациях и описаниях вместо слова FPGA. Далее по тексту в основном будет использоваться этот термин — ПЛИС.

 
ПЛИС и FPGA – это аббревиатуры, обозначающие один и тот же класс электронных компонентов, микросхем. Это микросхемы, применяемые для создания собственной структуры цифровых интегральных схем.

Логика работы ПЛИС определяется не на фабрике изготовителем микросхемы, а путем дополнительного программирования (в полевых условиях, field-programmable) с помощью специальных средств: программаторов и программного обеспечения.

Микросхемы ПЛИС – это не микропроцессоры, в которых пользовательская программа выполняется последовательно, команда за командой. В ПЛИС реализуется именно электронная схема, состоящая из логики и триггеров.

Проект для ПЛИС может быть разработан, например, в виде принципиальной схемы. Еще существуют специальные языки описания аппаратуры типа Verilog или VHDL.

В любом случае, и графическое и текстовое описание проекта реализует цифровую электронную схему, которая в конечном счете будет «встроена» в ПЛИС.

Обычно, сама микросхема ПЛИС состоит из:

  • конфигурируемых логических блоков, реализующих требуемую логическую функцию;
  • программируемых электронных связей между конфигурируемыми логическими блоками;
  • программируемых блоков ввода/вывода, обеспечивающих связь внешнего вывода микросхемы с внутренней логикой.

Строго говоря это не полный список. В современных ПЛИС часто бывают встроены дополнительно блоки памяти, блоки DSP или умножители, PLL и другие компоненты. Здесь, в этой статье я их рассматривать не буду.

Разработчик проекта для ПЛИС обычно абстрагируется от внутреннего устройства конкретной микросхемы. Он просто описывает желаемую логику работы «своей» будещей микросхемы в виде схемы или текста на Verilog/ VHDL. Компилятор, зная внутреннее устройство ПЛИС сам пытается разместить требуемую схему по имеющимся конфигурируемым логическим блокам и пытается соединить эти блоки с помощью имеющихся программируемых электронных связей. В общем случае размещение и трассировка связей между логическими блоками в ПЛИС остается за компилятором.

Классификация ПЛИС по типу хранения конфигурации.

SRAM-Based.
Это одна из самых распространенных разновидностей ПЛИС. Конфигурация ПЛИС хранится ячейках статической памяти, изготовленной по стандартной технологии CMOS.
Достоинство этой технологии – возможность многократного перепрограммирования ПЛИС. Недостатки – не самое высокое быстродействие, после включения питания прошивку нужно вновь загружать. Значит на плате должен еще стоять загрузчик, специальная микросхема FLASH или микроконтроллер – все это удорожает конечное изделие.

Flash-based.
В таких микросхемах хранение конфигурации происходит во внутренней FLASH памяти или памяти типа EEPROM. Такие ПЛИС лучше тем, что при выключении питания прошивка не пропадает. После подачи питания микросхема опять готова к работе. Однако, у этого типа ПЛИС есть и свои недостатки. Реализация FLASH памяти внутри CMOS микросхемы – это не очень просто. Требуется совместить два разных техпроцесса для производства таких микросхем. Значит они получаются дороже. Кроме того, такие микросхемы, как правило, имеют ограниченное количество циклов перезаписи конфигурации.

Antifuse.
Специальная технология по которой выполняются однократно программируемые ПЛИС. Программирование такой ПЛИС заключается в расплавлении в нужных местах чипа специальных перемычек для образования нужной схемы.

Недостаток – собственно программировать / прошивать чип можно только один раз. После этого исправить уже ничего нельзя. Сам процесс прошивки довольно не быстрый. Зато есть масса достоинств у таких ПЛИС: они довольно быстрые (могут работать на больших частотах), меньше подвержены сбоям при радиации – все из-за того, что конфигурация получается в виде перемычек, а не в виде дополнительной логики, как у SRAM-based.

Конфигурируемые логические блоки.

В документации компании Альтера встречается выражение Logic Array Block (LAB) – массив логики. У компании Xilinx в микросхемах ПЛИС есть примерно такие же блоки — Configurable Logic Block (CLB). Конфигурируемый логический блок – это базовый элемент в ПЛИС, в нем может быть выполнена какая-то простая логическая функция или реализовано хранение результата вычисления в регистрах (триггерах).

Сложность и структура конфигурируемого логического блока (CLB) определяется производителем.

Теоретически, конфигурируемый логический блок может быть, например, очень простым, просто как отдельный транзистор. Или он может быть очень сложным, как целый процессор. Это крайние точки реализации.

В первом случае потребуется огромное число программируемых связей, чтобы потом из отдельных транзисторов собрать требуемую схему. Во втором случае связей может нужно и не так много, но теряется гибкость проектирования пользовательской схемы.

Именно поэтому конфигурируемый блок обычно представляет из себя что-то среднее: он обычно достаточно сложен, чтобы можно было бы зашить туда некоторую функцию, но и довольно мал, чтобы разместить множество таких блоков внутри ПЛИС и чтобы была возможность связать их в единую схему.

Таким образом, выбор структуры конфигурируемого логического блока производителем ПЛИС – это всегда поиск компромиса по площади кристалла, по быстродействию, энергопотреблению и так далее.

Конфигурируемый логический блок может состоять из одного или нескольких базовых логических элементов. В англоязычной литературе это Basic Logic Element (BLE) или просто Logic Element  (LE). В ПЛИС обычно используются так называемые LUT-based базовые логические элементы. Что-то вроде этого:

ПЛИС, FPGA базовый логический элемент BLE
Рис. 1. Пример традиционного базового логического элемента.

LUT – это Look-Up Table, таблица преобразования. Например, на Рис.1 показан четырехбитный LUT в составе базового логического блока. Здесь четырехбитному числу на входе логической функции ставится в соответствие однобитный результат. Красные квадратики на Рис. 1 обозначают программируемый элемент, регистр – это та память, где хранится прошивка для ПЛИС. Видно, что для конфигурации 4-х битного LUT требуется 16 конфигурационных регистра. Содержимое этих регистров определяют логическую функцию, реализованную внутри  базового логического элемента.

Еще один конфигурационный регистр (на Рис. 1 это одиночный красный квадратик справа) определяет нужно ли на выход базового логического элемента выдавать прямо значение с LUT или нужно выдать зафиксированное в D-триггере значение с LUT. Фиксация и хранение данных в цифровых схемах нужна практически в любом проекте.

Примерно такой логический элемент использовался в моем экспериментальном проекте «ПЛИС внутри ПЛИС».

Рассматривая Рис. 1 как пример традиционного базового логического элемента понимаешь какая избыточность заложена внутрь современного кристалла ПЛИС (SRAM-based). Ведь в самом деле, конфигурационные регистры (красные квадратики) прямо не доступны для использования в цифровом проекте. Они только служат для формирования пользовательской функции. Для одного D-триггера в пользовательском проекте требуется более 16 (иногда много больше) триггеров для хранения конфигурации ПЛИС.

На самом деле базовый логический элемент в разных ПЛИС оказывается гораздо сложнее, чем показано на Рис. 1. Ниже есть некоторые примеры из документации на разные типы ПЛИС.

Altera MAX II Logic Element

Рис. 2. Базовый логический элемент CPLD MAX II компании Альтера.

Здесь хорошо видны LUT и D-Триггер хранения результата. Ниже, на Рис. 3 представлен базовый элемент Cyclone III.

Altera Cyclone III Logic Element

Рис. 3. Базовый логический элемент FPGA Cyclone III компании Альтера.

В микросхемах Альтеры в одном LAB может содержаться 10-16 LE.

В микросхемах компании Xilinx Virtex-6 базовый логический элемент – это так называемый Slice. В одном CLB всего два Slice. Зато один Slice – это довольно сложное устройство:

xilinx slice

Рис. 4. Базовый элемент Xilinx Virtex-6 Slice.

В одном CLB Virtex-6 имеется 8 LUT и 16 D-Триггеров и еще кое-что плюс к этому. Вот так все сложно.

Другая крайность – микросхемы FPGA компании Microsemi (бывшая Actel).
Например, в микросхемах серии 40MX базовый логический элемент выглядит вот так:

Logic Module Microsemi 40mx

Рис. 5. Logic Module of Microsemi 40MX serie.

Восемь входов и один выход.
Здесь нет ни Look-Up Table, ни даже D-Триггера. Триггера, как и остальная логика, формируются где нужно из вот таких крошечных кирпичиков – Logic Module.

Почему у разных компаний получилась такая большая разница в реализации базового логического элемента? Видимо в микросхемах Microsemi связь между базовыми блоками обходится гораздо дешевле: серия 40MX является однократно программируемой. В ней межблочные связи «проплавляются» между соединяющими дорожками и позже не могут быть изменены. Нет никаких регистров для временного хранения прошивки. Здесь нет программируемых переключателей, мультиплексоров, как в FPGA других типов. Ну микросхемы компании Microsemi — это несколько особый случай. Это технология называется antifuse – для производства таких микросхем используется модифицированный техпроцесс CMOS с дополнительными слоями для организации межблочных связей.

Программируемые связи между логическими блоками.

Чтобы в ПЛИС заработала нужная нам цифровая схема мало того, что нужно сконфигурировать имеющиеся логические блоки особым образом, еще нужно создать, запрограммировать связи между логическими блоками.

Для этого в ПЛИС имеются специальные конфигурируемые коммутаторы.

В англоязычной документации встречаются следующие термины: FPGA Routing Architecture и Programmable Routing Interconnect. Это все об этом, о программируемых связях между логическими блоками.

Известно две основных методики построения ПЛИС по типу архитектуры связей: островная и иерархическая.

island style FPGA

Рис. 6. Островная ПЛИС.

Островная ПЛИС называется так потому, что конфигурируемые блоки все равны между собой и находятся, как острова в океане, между узлами коммутации и линиями связи.

Здесь, на Рис. 6 обозначаются CB – Connection Box и SB – Switch Box. В сущности это программируемые мультиплексоры, подключающие тот или иной CLB к другому CLB через цепочки проводов в ПЛИС.

Это island-style FPGA или mesh-based FPGA. Типичный пример таких микросхем – это серии Altera Cyclone и Stratix.

Второй известный тип ПЛИС – это иерархические ПЛИС. Здесь идет расчет на то, что в схеме всегда есть участки которые взаимодействуют друг с другом более тесно, чем с отдаленными модулями проекта.

hierarhical style FPGA

Рис. 7. Иерархическая ПЛИС.

Здесь близлежащие CLB соединить довольно просто, нужно не много коммутаторов и получающиеся связи работают быстро. Вот если нужен более крупный блок вычислителей, то сигнал должен выйти на более высокий уровень иерархии и потом зайти вглубь в соседнюю «комнату».

Нельзя сказать, что это существенно хуже, чем island-style. Просто каждый метод имеет свои плюсы и минусы.

Типичные представители иерархических ПЛИС – это микросхемы компании Альтера серии Flex10K, APEX.

Программное обеспечение для проектирования ПЛИС.

Программное обеспечение для проектирования ПЛИС, а именно компилятор (синтезатор логики и фиттер и ассемблер) – это, возможно, самая сложная часть всей ПЛИС технологии.

Компилятор должен проанализировать пользовательский проект (схемы и текстовые описания на Verilog HDL или VHDL ) и сгенерировать нетлист (netlist) – список всех элементов схемы и связи между ними. Netlist должен быть оптимизирован – логические функции нужно минимизировать, возможные дублированные регистры нужно удалить.

Затем компилятор должен вместить всю логику из netlist в имеющуюся архитектуру ПЛИС. Это делает фиттер (fitter). Он размещает логические элементы и выполняет трассировку связей между ними (процесс place and route). Сложность состоит в том, что один и тот же проект может быть размещен в ПЛИС разными способами и этих способов миллионы. Некоторое размещение и трассировка оказываются лучше, другие хуже. Главный критерий качества полученной системы – максимальная частота, на которой сможет работать проект при данном размещении элементов и при данной трассировке связей. Здесь оказывает влияние длина связей между логическими блоками и количество программируемых коммутаторов между ними.

Компилятор, зная архитектуру ПЛИС по результатам работы дополнительно выдает отчет о времени прохождении сигналов от регистра до регистра. Эта информация часто бывает полезной для разработчика высокопроизводительных систем. Разработчик для ПЛИС имеет возможность давать некоторые советы компилятору где, в каком месте кристалла лучше разместить тот или иной модуль проекта.

Выбирая для своего проекта, для своей платы конкретную микросхемы ПЛИС разработчик в некоторой мере попадает в зависимость от производителя этой ПЛИС, так как должен в работе пользоваться программным обеспечением от этого же производителя.

Программное обеспечение компании Альтера: Quartus II.
ПО Xilinx для проектирования для ПЛИС: ISE Suite, Vivaldo Design Suite.
ПО компании Microsemi: Libero IDE, Libero SoC.

Возможно, программное обеспечение, компиляторы для ПЛИС – это важнейшая составляющая интеллектуальной собственности компаний производителей ПЛИС.

На страницах нашего сайта https://marsohod.org мы уделяем внимание прежде всего проектированию систем на базе ПЛИС компании Альтера и пользуемся средой разработки Altera Quartus II.

 

marsohod.org

Сумбурные размышления о будущем технологии FPGA / Habr

Работая над очередным игровым (обучающим) проектом ПЛИС для платы Марсоход2 я столкнулся с тем, что мне явно не хватает места в кристалле. Кажется и проект не очень сложный, но моя реализация такова, что требует много логики. В принципе, это ерунда, дело-то житейское. Ну, если очень будет нужно, то можно выбрать ПЛИС с большей емкостью. Собственно мой проект — это игра «Жизнь», но реализованная в ПЛИС на языке Verilog HDL.

Про логику игры, рассказывать не буду, про нее и так написано уже достаточно.

Идея проекта вот такая: каждая клетка в игровом поле представляет собой самостоятельный вычислитель. В каждом вычислителе есть своя логическая функция и свой регистр, который хранит текущее состояние клетки (живая/не живая). Все пространство для жизни клеток — это двумерный массив вычислителей, вычислители образуют целую сеть. Все вычислители работают синхронно, так как на все регистры подается единая тактовая частота. Рисунок вверху должен прояснить схему проекта.

Так вот. На моей плате стоит ПЛИС Cyclone III EP3C10E144C8 компании Альтера. 10тыс логических элементов. Сперва я думал, что смогу сделать двумерный массив клеток 128×64=8192 клетки. Не помещается. 64×64=4096 — то же не помещается в кристалл. Как же так. Я сумел вместить в ПЛИС только 32×16=512 клеток. Пичалька…

Размышления приводят меня к мысли, что возможно, в будущем, технология ПЛИС перерастет в нечто большее, чем программируемая логика. Вот об этом своем видении я хотел бы рассказать. Искушенному читателю сразу скажу, что многое далее написанное есть просто плод воображения и может быть даже бред.
Однако..

В настоящее время технология ПЛИС используется довольно узким кругом специалистов. В основном FPGA используются для прототипирования микросхем и для мелкосерийных изделий, когда изготовление микросхем ASIC экономически нецелесообразно. Специалистов по FPGA, я думаю, не очень много. Технология довольно сложная и требует многих специфических знаний. С другой стороны, для организации высокоскоростных и параллельных вычислений ПЛИС — это пожалуй самая подходящая технология.

Мы знаем, например, что компания Альтера предлагает и продвигает технологию OpenCL
Просто говоря — это такой C-подобный язык для описания параллельных вычислений в FPGA акселераторе. Кстати, Nvidia и ее видеокарты так же поддерживают параллельные вычисления c OpenCL.

Таким образом, видно, что Альтера явно задумываются о том, как донести «обычные» C-подобные параллельные вычисления FPGA в народ. Посмотрим, что там с ценами на платы для параллельных вычислений с FPGA? Плата Terasic DE5-Net.

25 пользователям нравится цена 8 тыс баксов (шучу).

Есть и другие попытки привезти FPGA в народ — Altera выпустила совместно с Intel микросхему серии E6x5C, где в едином корпусе соединен процессор Atom и ПЛИС Arria II. Хорошая попытка, но технология так кажется и не смогла найти массового потребителя.

Видимо существующие кристаллы ПЛИС плохо вписываются в современную парадигму программирования.
А какая у нас сейчас современная парадигма «нормального» программирования?

Мне кажется, что как-то так:

  • на компьютере всегда одновременно исполняется несколько вычислительных процессов и потоков
  • состояние процессов и потоков хранится в памяти, процесс может запросить у ОС столько памяти, сколько нужно; можно даже попросить больше, чем есть физической памяти — и процесс может реально получить эту виртуальную память.
  • вычисления производятся процессором, иногда он имеет много ядер. Обычно процесс или поток не знают (или не хотят знать) в каком ядре процессора сейчас исполняется задача.
  • более приоритетная задача может вытеснить менее приоритетную задачу. Вытеснить — это значит сохранить состояние страниц памяти вялого процесса на диск и переключиться на более приоритетный процесс. Выделить ему больший слайс времени.

Понятно, что чем больше памяти и чем больше ядер процессора, тем быстрее работают все процессы в системе.
Память и ядра процессора — это ресурсы компьютера, вычислителя, которые операционная система распределяет между процессами.

Теперь представим себе, что в будущем мы получим компьютеры, где на ряду с памятью и ядрами процессора будут иметься в наличии еще блоки логики «как-бы-плис». Этот ресурс «как-бы-плис» по своим свойствам находится где-то между процессором и памятью. С одной стороны «как-бы-плис» = это вычислитель, то есть ближе к процессору, но с другой стороны это и память, ибо в регистрах плис хранится довольно много информации. Состояние вычислителя «как-бы-плис» уже довольно трудно будет сохранить в структуре task_struct при переключении контекста задачи. Но, наверное, можно попытаться вытеснить состояние блоков логики в swap файл, как виртуальную память. И временно ОС может подгрузить другие блоки логики для активного потока…

Кстати, и Altera и Xilinx уже довольно давно имеют FPGA с возможностью частичной перезагрузки отдельных участков, блоков логики (Partial Reconfiguration) — то есть в принципе они как-то идут в эту сторону…

Программист может выделить для процесса столько «как-бы-плис», сколько нужно. Буквально функцией lalloc (logic alloc) по аналогии с malloc (memory alloc). Потом из файла считать туда «прошивку ПЛИС» и она будет жить и работать. Мы, программисты, по большому счету не должны думать есть эта память/логика «как-бы-плис» у системы или ее нет. А не наше это дело. Да, иногда может быть очень медленно при ограниченных ресурсах, но разве мы не знаем как «лагают» видеоигры на слабых видеокартах? Пользователи знают, что за сильное железо придется платить, но хорошо бы, чтоб даже минимальная система уже имела в базовом варианте логические блоки «как-бы-плис» для использования в программах.

На самом деле, конечно, я представляю себе, что такая технология вряд ли скоро появится, слишком все это сложно и не реализуемо. По крайней мере существующие микросхемы ПЛИС мало подходят для этих целей хотя бы потому, что для конфигурирования ПЛИС используются медленные последовательные интерфейсы типа JTAG. Но может быть, когда-то кто-то из нас сделает это?

ЗЫ: кстати, а вот и моя игра жизнь в ПЛИС, такая маленькая, 32×16… ну нет у меня виртуальной памяти «как-бы-плис», чтобы сделать поле игры шире и выше…

ЗЫ2: все исходники и подробное описание проекта игры Жизнь можно взять здесь.

habr.com

ПЛИС — это… Что такое ПЛИС?

CPLD ПЛИС Altera MAX 7128, эквивалентная 2500 вентилям

Программи́руемая логи́ческая интегра́льная схе́ма (ПЛИС, англ. programmable logic device, PLD) — электронный компонент, используемый для создания цифровых интегральных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программаторы и отладочные среды, позволяющие задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы на специальных языках описания аппаратуры: Verilog, VHDL, AHDL и др. Альтернативой ПЛИС являются: программируемые логические контроллеры (ПЛК), базовые матричные кристаллы (БМК), требующие заводского производственного процесса для программирования; ASIC — специализированные заказные большие интегральные схемы(БИС), которые при мелкосерийном и единичном производстве существенно дороже; специализированные компьютеры, процессоры (например, цифровой сигнальный процессор) или микроконтроллеры, которые из-за программного способа реализации алгоритмов в работе медленнее ПЛИС.

Некоторые производители ПЛИС предлагают программные процессоры для своих ПЛИС, которые могут быть модифицированы под конкретную задачу, а затем встроены в ПЛИС. Тем самым обеспечивается уменьшение места на печатной плате и упрощение проектирования самой ПЛИС, за счёт быстродействия.

Некоторые сферы применения

ПЛИС широко используется для построения различных по сложности и по возможностям цифровых устройств.

Это приложения, где необходимо большое количество портов ввода-вывода (бывают ПЛИС с более чем 1000 выводов («пинов»)), цифровая обработка сигнала (ЦОС), цифровая видеоаудиоаппаратура, высокоскоростная передача данных, криптография, проектирование и прототипирование ASIC, в качестве мостов (коммутаторов) между системами с различной логикой и напряжением питания, реализация нейрочипов, моделирование квантовых вычислений.

В современных периферийных и основных компьютерных устройствах платы расширения в системе Plug and Play имеют специальную микросхему — ПЛИС, которая позволяет плате сообщать свой идентификатор и список требуемых и поддерживаемых ресурсов.

Типы ПЛИС

Ранние ПЛИС

В 1970 году компания Texas Instruments разработала маскируемые (программируемые с помощью маски, англ. mask-programmable) ИС основанные на ассоциативном ПЗУ (ROAM) фирмы IBM. Эта микросхема, TMS2000, программировалась чередованием металлических слоёв в процессе производства ИС. TMS2000 имела до 17 входов и 18 выходов с 8-ю JK-триггерами в качестве памяти. Для этих устройств компания TI ввела термин Programmable Logic Array(PLA) — программируемая логическая матрица.

PAL

Основная статья: PAL (ПЛИС)

PAL (англ.  Programmable Array Logic) — программируемый массив (матрица) логики. В СССР PLA и PLM не различались и обозначились как ПЛМ. Разница между ними состоит в доступности программирования внутренней структуры (матриц) ПЛМ.

GAL

Основная статья: GAL

CPLD

Основная статья: CPLD

CPLD (англ. complex programmable logic device — сложные программируемые логические устройства) содержат относительно крупные программируемые логические блоки — макроячейки, соединённые с внешними выводами и внутренними шинами. Функциональность CPLD кодируется в энергонезависимой памяти, поэтому нет необходимости их перепрограммировать при включении. Может применяться для расширения числа входов/выходов рядом с большими кристаллами, или для предобработки сигналов (например, контроллер COM-порта, USB, VGA).

FPGA

Основная статья: FPGA

FPGA (англ. field-programmable gate array) содержат блоки умножения-суммирования, которые широко применяются при обработке сигналов (DSP), а также логические элементы (как правило, на базе таблиц перекодировки — таблиц истинности) и их блоки коммутации. FPGA обычно используются для обработки сигналов, имеют больше логических элементов и более гибкую архитектуру, чем CPLD. Программа для FPGA хранится в распределённой памяти, которая может быть выполнена как на основе энергозависимых ячеек статического ОЗУ (подобные микросхемы производят, например, фирмы Xilinx и Altera) — в этом случае программа не сохраняется при исчезновении электропитания микросхемы, так и на основе энергонезависимых ячеек Flash-памяти или перемычек antifuse (такие микросхемы производит фирма Actel и Lattice Semiconductor) — в этих случаях программа сохраняется при исчезновении электропитания. Если программа хранится в энергозависимой памяти, то при каждом включении питания микросхемы необходимо заново конфигурировать её при помощи начального загрузчика, который может быть встроен и в саму FPGA. Альтернативой ПЛИС FPGA являются более медленные цифровые процессоры обработки сигналов. FPGA применяются также, как ускорители универсальных процессоров в суперкомпьютерах (например: Cray — XD1, SGI — Проект RASC).

Прочие

Некоторые ведущие мировые производители ПЛИС

Основной производитель кристаллов для ПЛИС

См. также

Примечания

Ссылки

dic.academic.ru

Ethernet + PCIe + FPGA = LOVE / Habr

Доступ по Ethernet невозможен без сетевых карточек (NIC). На небольших скоростях (до 1G) NIC встраивают в материнки, а на больших (10G/40G) NIC размещается на отдельной PCIe плате. Основным ядром такой платы является интегральный чип (ASIC), который занимается приемом/отправкой пакетов на самом низком уровне. Для большинства задач возможностей этого чипа хватит с лихвой.

Что делать, если возможностей сетевой карточки не хватает? Либо задача требует максимально близкого доступа к низкому уровню? Тогда на сцену выходят платы с перепрограммируемой логикой — ПЛИС (FPGA).

Какие задачи на них решают, что размещают, а так же самых интересных представителей вы увидите под катом!

Осторожно, будут картинки!

План:



Применения FPGA-плат


DPI, фильтрация и фаервол


Сервер с такой платой может встать в «разрыв» и мониторить все пакеты, проходящие через него. Интеллектуальный DPI реализуется на базе процессора, а переброска пакетов и простая фильтрация (например, много правил 5-tuple) реализуется на базе ПЛИС.

Как это можно сделать:

  • Потоки, которым мы доверяем, либо решение по ним уже находится в таблице по FPGA, проходят насквозь чипа с небольшой задержкой, остальные копируются на CPU и там делается обработка.
  • FPGA может снимать часть нагрузки с CPU и искать подозрительные сигнатуры у себя, например, по алгоритму Блума. У этого алгоритма есть вероятность ложно-положительного срабатывания, поэтому если в пакете нашлась строчка, на которую среагировал Блум, то такой пакет копируется на CPU для дополнительного анализа.
  • На процессоре обрабатывается только тот трафик, который интересен — FPGA отбирает по заданным критериям пакеты (например, HTTP-запросы или SIP трафик) и копирует их на CPU, всё остальное (торренты, видео и пр.) проходят через FPGA без значительной задержки.

Все эти три варианта могут быть скомбинированы в различных вариациях. Так же FPGA может делать какую-нибудь еще грязную работу, например, выступать в качестве шейпера/полисера, либо собирать статистику по потокам.

На иллюстрации выше зеленые пакеты обрабатываются на CPU, бордовые и желтые прошли через фильтры в FPGA, а розовые были дропнуты (тоже в FPGA).

Анализ и захват трафика


Иногда такие платы используют для захвата трафика и дальнейшей постобработке на CPU (запись в pcap, анализ задержек и пр.). В таком случае в линки вставляется сплиттер (или трафик забирается с миррор порта). Получается неинтрузивное подключение, аналогичное тому, как мы делали в проекте мониторинга RTP-потоков.

Здесь от ПЛИС требуется:

  • Фильтрация по полям (типа 5-tuple): для отбора только того трафика, который интересен.
  • Синхронизация по PTP, для аппаратного timestamping пакетов: защелкивается время, когда пришел пакет, и эта метка размещается в конец пакета. Затем на CPU можно посчитать, например, время отклика на запрос.
  • Слайсинг — отрезание только необходимого куска данных (чаще всего это первые N байт от пакета — для того, чтобы копировать только заголовки, т.к. очень часто данные не очень интересны,).
  • Буферизация пакетов:
    • если CPU не успевает записывать в случае каких-то берстов, то можно это сгладить, если разместить пакеты во внешней памяти на пару гигабайт
    • если мы хотим гарантировать запись пакетов в течении небольшого времени (например, после срабатывания триггера) — чаще всего применимо для больших скоростей (40G/100G).
  • Раскидывания пакетов по очередям и ядрам CPU.

Имея доступ к самому низкому уровню (ну, почти), можно поддержать любой протокол или туннелирование, а не ждать, пока Intel это сделает в своих карточках.

На приведенной иллюстрации FPGA принимает все пакеты после ответвления трафика, но на CPU копируются только те, которые нас интересуют (розовенькие).

Сетевая карточка


Карточки с ПЛИС можно использовать в качестве обычного NIC, но смысла в этом не много:
  • На сегодняшний момент на всех скоростях Ethernet (до 100G включительно) есть сетевые карточки на базе ASIC’ов. По цене они будут дешевле, чем решения на FPGA.
  • Если писать карточку самому, то для более менее серьезной производительности необходимо в такой карточке накрутить огромное количество плюшек (RSS, LSO, LRO).

Смысл появляется только тогда, когда необходимо обеспечить уникальную фишку, которой никогда не будет в чипе от Intel’a. Например, аппаратного шифрования по ГОСТу или Кузнечику.

Cетевой ускоритель


Снижение нагрузки с CPU

Когда появляются большие скорости, процессор не успевает всё делать: хочется часть задач с него снять. Например, что происходит когда вы копируете какой-то большой объем данных по сети?

Процессор должен:

  • взять какой-то кусок данных
  • засунуть в TCP, разбить на несколько пакетов, согласно MTU
  • подставить заголовок (MAC/IP-адреса)
  • рассчитать чексуммы IP и TCP (хотя большинство NIC это уже берут на себя)
  • передать дескриптор в NIC

Так же надо:
  • следить за ответами
  • перепосылать пакеты, если пакет потерялся
  • снижать/повышать tcp-window и так далее

TCP-стек может быть реализован на FPGA: CPU достаточно предоставить указатель на сырые данные и IP+порт получателя, а всей низкоуровневой работой (установкой соединения, перепосылками, и пр.) займется железка.

Есть готовые IP-ядра, которые всё это делают: например, реализации TCP и UDP стеков от компании PLDA.

Они имеют стандартные интерфейсы (Avalon или AXI), что позволяет их легко соединять с другими IP-ядрами.

Ускорение ответа

Есть класс задач, где деньги приносят не процессоры, а скорость реакции. Конечно, я о High Frequency Trading. О роли FPGA в HFT можно прочитать в этой статье.

На сайте PLDA приведено видео и пример архитектуры, как это делается. Использование аппаратных TCP и UDP ядер позволяет уменьшать лэтенси на покупки/продажи.

Скрытый текст

Прошу прощения за красные подчеркивания — картинка взята с сайта PLDA, и у них так в оригинале…


Есть специальные IP-ядра, которые декодируют данные с рынков и готовы к сопряжению с аппаратными TCP и UDP стеками.

Разумеется, использование стандартных ядер или подходов преимущества перед конкурентами не даст: разрабатываются эксклюзивные решения, т.к. «хотят еще меньшую задержку».

Оборудование для измерений


Эмуляторы сетей

Очень часто происходит, что надо проверить инженерное решение в лаборатории, т.к. в боевых условиях это может быть очень дорого.
Недавно была статья от КРОК, про оптимизацию трафика в условиях Севера и большого RTT. Для проверки того, какое будет качество услуг в реальных условиях, сначала надо создать эти условия у себя в лаборатории. Для этого можно применить и обычную линуксовую машину, но есть специальные железки, которые занимаются эмуляцией сети.

Чаще всего необходимо уметь задавать такие параметры как задержка/джиттер, потери (ошибки) пакетов. Без аппаратной поддержки (читай, ПЛИС) здесь не обойтись, но так же нужен и «умный» процессор, для эмуляции различных протоколов (сессий пользователей). Для того, что бы не разрабатывать железо с нуля можно взять сервер и вставить PCIe карточку с FPGA.

Ускорение вычислений


Такие карточки так же можно использовать для ускорения каких-то вычислений или моделирования, например, для биологии или химии. О примере такого моделирования рассказывала Algeronflowers в этой статье. В таком случае порты Ethernet могут и не понадобиться, а с другой стороны могут быть полезны, если захочется сделать ферму из плат: входные или выходные данные для расчета передавать через Ethernet.
OpenCL

Иногда нет необходимости выжимать из железа все соки: очень часто важен time-to-market. Многие разработчики отказываются от использования FPGA, т.к. их пугает низкоуровневая оптимизация до тактов (плюс необходимо знать новый язык(и) и инструмент). Хотелось бы писать код на «выcоком» уровне, а компилятор уже всё разложит по триггерам/блокам памяти. Один из таких вариантов является OpenCL. Altera и Xilinx поддерживают.

OpenCL на FPGA это тема отдельной статьи (и не одной). Рекомендую для ознакомления презентацию от Альтеры про обзор технологии и маршрут разработки под FPGA.

HighLoad

В интернете можно найти много новостей, о том, что гиганты присматриваются к ПЛИС для обработки больших данных в датацентрах.

Так, была заметка о том, что Microsoft для ускорения поисковой системы Bing использует FPGA. Технические подробности можно найти в публикации A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services.

К сожалению, хорошей технической статьи на русском языке об этом нет, хотя тема очень интересная. Может olgakuznet_ms или её коллеги исправят этот недостаток?

Надеюсь, что выпуск чипов CPU + FPGA подстегнет разработчиков высоконагруженных систем переносить часть вычислений на FPGA. Да, разработка под FPGA «сложнее» чем под CPU, но на конкретных задачах может давать замечательный результат.

Разработка/отладка IP-ядер и софта


Такие платы еще могут использовать ASIC/FPGA разработчики для верификации своих IP-ядер, которые потом могут запускаться на совершенно других железках.

Очень часто бывает, что софт пишется одновременно с тем, как разрабатывается/производится железка, и отлаживать софт где-то уже надо. В данном контексте софт это как прошивка FPGA + различные драйвера и юзерспейсные программы. В проекте 100G анализатора и балансировщика возникли задачи, которые мы никогда не решали:

  • настройка FPGA (CSR: контрольно-статусные регистры) должна происходить через PCIe
  • для linux’a FPGA с кучей интерфейсов должна выглядеть как сетевая карточка: необходимо написать драйвер(ы), и переброску пакетов c/на хост

Конечно, параллельно были и другие задачи (типа генерации/фильтрации 100G трафика), но они спокойно решались в симуляторе, а вот эти две задачи в симуляторе не особо погоняешь. Что мы сделали? Оказалось, что у нас есть девборда от Альтеры. Не смотря на то, что там совершенно другой чип, другой PCIe и пр. мы на ней отладили связку FPGA + драйвера, а когда отдел производства передал нам плату для b100, то после поднятия железа вся эта связка без проблем заработала.

Общая схема



Перед обзором карточек, рассмотрим общую схему таких PCIe карточек.

Ethernet


Платы оснащаются стандартными Ethernet-разъемами:
  • SFP — 1G
  • SFP+ — 10G
  • QSFP — 40G
  • CFP/CFP2/CFP4 — 100G

Чаще всего встречаются такие комбинации:
  • 4 x SFP/SFP+
  • 2 x QSFP
  • 1 x CFP

О том, что происходит на низком уровне и как происходит подключение к 10G к интегральным схемам можно прочитать, например, тут.

PCIe


Стандартный разъем, который можно воткнуть в компьютер с обычной материнкой. На текущий момент, топовые FPGA поддерживают аппаратные IP-ядра Gen3 x8, но этой пропускной способности (~63 Gbps) хватает не для всех задач. На некоторых платах стаят PCIe свитч, который 2 канала Gen3 x8 объединяет в один Gen3 x16.

На будущих чипах Altera и Xilinx заявляют о аппаратной поддержке Gen3 x16, и даже о Gen4.

Коннекторы


Иногда размещают разъем(ы) для подключения плат расширения, однако единого стандарта де-факто нет (типа USB). Чаще всего встречаются VITA ( FMC ) и HSMC.

Avago MiniPod

У вышеобозначенных коннекторов есть небольшой недостаток — они металлические и на высоких частотах/длинных расстояниях затухание может быть значительным.

В ответ на эту проблему Avago разработало Avago Minipod: оптические приемо-передатчики. Они готовы передавать 12 лейнов по 10-12.5GBd. По размерам коннектор сравним с монеткой. С помощью такого разъема можно соединять не только рядом стоящие платы, но и делать связь в суперкомпьютерах или в стойках между серверами.

Когда наши коллеги показывали демку MiniPod’a на вот такой борде, то рассказывали, что никаких дополнительных IP-ядер или Verilog-кода не надо вставлять — эти модули просто подключаются в входам/выходам трансиверам FPGA, и всё работает.

Внешняя память


Памяти в ПЛИС не так много — в топовых чипах их 50-100 Mbit. Для обработки больших данных к чипу подключают внешнюю память.
Выделяют два типа памяти:
При выборе учитывают такие параметры как цена, объем, задержки на последовательное/случайное чтение, пропускная способность, энергопотребление, доступность контроллеров памяти, простота разводки/замены и так далее.

У Альтеры есть External Memory Interface Handbook, который как не сложно догадаться, посвящен внешней памяти. Заинтересовавшийся читатель в главе Selecting Your Memory найдет таблицы сравнения различных типов памяти и советы по выбору. Сам гайд доступен тут (осторожно, файл большой).

Если смотреть на применение памяти в сетях связи, то советы примерно такие:

  • DRAM используют для создания больших буферов (под пакеты)
  • SRAM:
    • таблицы/структуры принятий решения куда отправлять пакет
    • структуры для управления очередями
    • подсчет пакетной статистики (RMON и пр.)
  • возможен гибридный подход — DRAM используют для хранения полезной нагрузки пакета, а в SRAM размещают только заголовок

Если открыть презентацию Anatomy of Internet Routers от Cisco, то можно увидеть, что в качестве DRAM они в некоторых роутерах используют именно RLDRAM.
HMC

HMC (Hybrid Memory Cube) — это новый тип ОЗУ памяти, которая может в некоторых приложениях вытеснить DDR/QDR память: обещают значительное ускорение пропускной способности и меньшее энергопотребление. На хабре можно найти новости: раз и два. В комментариях к ним можно найти опасения, что до этого еще далеко и так далее.

Заверяю вас, что всё не так плохо. Так, полгода(!) назад, наши коллеги из EBV показывали работающую демоборду из четырех Stratix V (по бокам) и HMC (в центре).

Ожидается, что коммерческие образцы (для масспродакта) будут доступны в 2015 году.

Обзор PCIe карточек


Обзор, наверно, это слишком громкое слово — я попытаюсь показать самых интересных представителей от разных компаний. Никаких таблиц сравнения или анпакинга не будет. На самом деле большого разнообразия между платами не будет, они все вписываются в «шаблон», который был описан ранее. Уверен, что можно найти еще около пяти-семи фирм, который выпускают такие платы, а самих плат еще с десяток.

NetFPGA 10G


Скрытый текстFPGA:
  • Xilinx Virtex-5 TX240T
  • 240K logic cells
  • 11,664 Kbit block RAM

10-Gigabit Ethernet networking ports

Quad Data Rate Static Random Access Memory (QDRII SRAM)
  • 300MHz Quad data rate (1.2 Giga transactions every second), synchronous with the logic
  • Three parallel banks of 72 MBit QDRII+ memories
  • Total capacity: 27 MBytes
  • Cypress: CY7C1515KV18

Reduced Latency Random Access Memory (RLDRAM II)
  • Four x36 RLDRAMII on-board device
  • 400MHz clock (800MT/s)
  • 115.2 Gbps peak memory throughput
  • Total Capacity: 288MByte
  • Micron: MT49h26M36HT-25


Это не самая топовая карточка, но про неё я не рассказать не мог:
  • платы NetFPGA позиционируются как «открытые платформы для исследований»: они используются по всему миру (в более чем 150 заведениях). Студенты/научные сотрудники могут делать на них различные лабораторные работы/проекты.
  • проект позиционируется как opensource: на гитхабе есть одноименная организация. На гитхабе в приватном репозитории лежат различные референсные дизайны (сетевая карточка, свитч, роутер и пр.), которые написаны на Verilog’e и распространяется под LGPL. Они станут доступны после простой регистрации.

Advanced IO V5031

Скрытый текст
  • Altera Stratix V
  • Quad 10 Gigabit Ethernet SFP+ optical ports
  • 2 banks of 1GB to 8GB 72-bit 1066MHz DDR3 SDRAM
  • 4 banks of 36Mbit to 144Mbit 18-bit 350MHz QDRII+ SRAM
  • x8 PCI Express Gen 3
  • PPS Interface for time synchronization with microsecond resolution


У этой платы есть брат-близнец: captureXG 1000, но он уже позиционируется как карточка для записи потоков данных:Скрытый текст
  • Time Synchronization: IRIG-A, B and G time synchronization via a front panel SMA connector
  • Filters: 128 programmable 5-tuple filters ( IPv4, TCP, UDP, ICMP, ARP )
  • Packet Capture: PCAP Next Generation format or raw data format


Фактически к карточке, которая была показана выше, написали прошивку для FPGA, а так же драйвера. И это уже фактически получается другой продукт, который готов к работе «из коробки». Интересно какая разница по деньгам между этими двумя продуктами.

Napatech NT40E3-4-PTP

Еще одна карточка для записи и анализа трафика:

Скрытый текст
  • FPGA: Xilinx Virtex-7
  • Quad 10 Gigabit Ethernet SFP+ optical ports
  • 4 GB DDR3
  • PCIe x8 Gen 3

Увы, больше технических подробностей из маркетинговой брошюры выжать не удалось.

В таком корпусе она выглядит очень симпатично. Принципиально по железу эта карточка не особо отличается от других, но Napatech её рассматривает как законченный продукт и навернул туда кучу фич, которые реализуются на FPGA:

Скрытый текст
  • Hardware Time Stamp
  • Full line-rate packet capture
  • Frame buffering
  • Frame and protocol information
  • Time Stamp Injection
  • Buffer size configuration
  • Onboard IEEE 1588-2008 (PTP v2) support
  • Inter-Frame Gap Control
  • Frame Classification
  • HW Time Synchronization
  • Extended RMON1 port statistics
  • Advanced Statistics
  • Synchronized statistics delivery
  • Flow identification based on hash keys
  • Dynamic hash key selection
  • Frame and flow filtering
  • Deduplication
  • Slicing
  • Intelligent multi-CPU distribution
  • Cache pre-fetch optimization
  • Coloring
  • IP fragment handling
  • Checksum verification
  • Checksum generation
  • GTP tunneling support
  • IP-in-IP tunneling support
  • Filtering inside tunnels
  • Slicing inside tunnels


Всё это можно сделать и на других карточках. Просто надо потратить на это время.

COMBO-80G

Скрытый текст
  • Virtex-7 FPGA chip manufactured by Xilinx company
  • 2× QSFP+ cage multi/single mode, CWDM or copper
  • 4× 10G to 40G fanout modules for 10G Ethernet technology
  • PCI Express 3.0 x8, throughput up to 50Gb/s to software
  • 2× 72Mbits QDRII+ SRAM memory
  • 2× 1152Mbits RLDRAM III memory
  • 2× 4GB DDR3 memory
  • External PPS (Pulse per second) synchronization
  • Unique on-the-fly FPGA boot system (no need for host computer reboot)


Nallatech 385A и Nallatech 385C

Скрытый текст385A:
  • Arria 10 1150 GX FPGA with up to 1.5 TFlops
  • Network Enabled with (2) QSFP 10/40 GbE Support

385C:
  • Altera Arria 10 GT FPGA with up to 1.5 TFlops
  • Network Enabled with (2) QSFP28 100 GbE support

Общее:
  • Low Profile PCIe form factor
  • 8 GB DDR3 on-card memory
  • PCIe Gen3 x8 Host Interface
  • OpenCL tool flow


Как видим, это два брата близнеца: в 385A стоит более бюджетная FPGA (GX) с трансиверами на 17.4 Gbps, что достаточно для 10/40G, а в 385С уже используется Arria 10 GT, т.к. нужны 28 Gpbs трансиверы для поддержки 100G, которые идут в исполнении 4x25G.

Отмечу, что Nallatech предоставляет OpenCL BSP для этих карточек.

HiTech Global 100G NIC

Скрытый текст
  • x1 Xilinx Virtex-7 H580T
  • x16 PCI Express Gen3 (16x8Gbps)
  • x1 CFP2 (4x25Gbps)
  • x1 CFP4 (4x25Gbps)
  • x1 Cypress QDR IV SRAM
  • x2 DDR3 SODIMMs (with support up to 16GB)
  • x4 Avago MiniPod (24 Tx and 24 Rx) for board-to-board high-speed communications
  • x1 FMC with 8 GTH transceivers and 34 LVDS pairs (LA0-LA33)


Здесь мы наблюдаем и FMC разъем для подключения других плат, и Avago MiniPod, о котором говорили ранее.

Бонус:


Nallatech 510T

В этой карточке нет Ethernet’a, но это реально бомба.

Скрытый текст
  • GPU Form Factor Card with (2) Arria 10 10A1150GX FPGAs
  • Dual Slot Standard Configuration
  • Single Slot width possible, if user design fits within ~100W power footprint
  • PCIe Gen3 x 16 Host Interface
  • 290 GBytes/s Peak Aggregate Memory Bandwidth:
    • 85GB/s Peak DDR4 Memory Bandwidth per FPGA (4 Banks per FPGA)
    • 30GB/s Write + 30GB/s Read Peak HMC Bandwidth per FPGA


Здесь и два жирных топовых чипа, которые клепаются по 20-нм технологии, и DDR4, и HMC. Производительность обещается до 3 TFlops!

Судя по рендеру, до реальной железки там еще далеко, но чувствуется, что будет она золотой (по цене), но свою нишу займет: её позиционируют как сопроцессор для датацентров. Обещают поддержку OpenCL, а это значит, что никто до такта с этой платой нянчится не будет: загонят готовые алгоритмы и будут прожигать ватты. Кто знает, может на этой плате Youtube, Facebook, ВК будут конвертить видео, заменяя десятки серверов? Или может спецэффекты для нового Аватара будут рендерится на таких фермах?

Заключение


Посмотрев, на всё это разнообразие плат мы с коллегами подумали: почему бы нам тоже не сделать такую карточку?
По сложности печатной платы она не будет сложнее чем B100, софт под FPGA и Linux писать мы вроде бы умеем, да и спрос у определенных компаний и ведомств есть на такие железки.

Мы с коллегами немного спорили какую карточку делать, и нам интересно что вы думаете по этому поводу.

Спасибо за внимание! Готов ответить на вопросы в комментариях или в личке.

habr.com

Архитектура ПЛИС (FPGA)

Подробности
Категория: Разное
Создано 20 Январь 2014
Автор: Николай Ковач
Просмотров: 147317

FPGA image

FPGA – это сокращение от английского словосочетания Field Programmable Gate Array.

ПЛИС – это сокращение от словосочетания «Программируемая Логическая Интегральная Схема». Слово ПЛИС встречается в русскоязычных документациях и описаниях вместо слова FPGA. Далее по тексту в основном будет использоваться этот термин — ПЛИС.
 
ПЛИС и FPGA – это аббревиатуры, обозначающие один и тот же класс электронных компонентов, микросхем. Это микросхемы, применяемые для создания собственной структуры цифровых интегральных схем.

Логика работы ПЛИС определяется не на фабрике изготовителем микросхемы, а путем дополнительного программирования (в полевых условиях, field-programmable) с помощью специальных средств: программаторов и программного обеспечения.

Микросхемы ПЛИС – это не микропроцессоры, в которых пользовательская программа выполняется последовательно, команда за командой. В ПЛИС реализуется именно электронная схема, состоящая из логики и триггеров.

Проект для ПЛИС может быть разработан, например, в виде принципиальной схемы. Еще существуют специальные языки описания аппаратуры типа Verilog или VHDL.

В любом случае, и графическое и текстовое описание проекта реализует цифровую электронную схему, которая в конечном счете будет «встроена» в ПЛИС.

Обычно, сама микросхема ПЛИС состоит из:

  • конфигурируемых логических блоков, реализующих требуемую логическую функцию;
  • программируемых электронных связей между конфигурируемыми логическими блоками;
  • программируемых блоков ввода/вывода, обеспечивающих связь внешнего вывода микросхемы с внутренней логикой.

Строго говоря это не полный список. В современных ПЛИС часто бывают встроены дополнительно блоки памяти, блоки DSP или умножители, PLL и другие компоненты. Здесь, в этой статье я их рассматривать не буду.

Разработчик проекта для ПЛИС обычно абстрагируется от внутреннего устройства конкретной микросхемы. Он просто описывает желаемую логику работы «своей» будещей микросхемы в виде схемы или текста на Verilog/ VHDL. Компилятор, зная внутреннее устройство ПЛИС сам пытается разместить требуемую схему по имеющимся конфигурируемым логическим блокам и пытается соединить эти блоки с помощью имеющихся программируемых электронных связей. В общем случае размещение и трассировка связей между логическими блоками в ПЛИС остается за компилятором.

Классификация ПЛИС по типу хранения конфигурации.

SRAM-Based.
Это одна из самых распространенных разновидностей ПЛИС. Конфигурация ПЛИС хранится ячейках статической памяти, изготовленной по стандартной технологии CMOS.
Достоинство этой технологии – возможность многократного перепрограммирования ПЛИС. Недостатки – не самое высокое быстродействие, после включения питания прошивку нужно вновь загружать. Значит на плате должен еще стоять загрузчик, специальная микросхема FLASH или микроконтроллер – все это удорожает конечное изделие.

Flash-based.
В таких микросхемах хранение конфигурации происходит во внутренней FLASH памяти или памяти типа EEPROM. Такие ПЛИС лучше тем, что при выключении питания прошивка не пропадает. После подачи питания микросхема опять готова к работе. Однако, у этого типа ПЛИС есть и свои недостатки. Реализация FLASH памяти внутри CMOS микросхемы – это не очень просто. Требуется совместить два разных техпроцесса для производства таких микросхем. Значит они получаются дороже. Кроме того, такие микросхемы, как правило, имеют ограниченное количество циклов перезаписи конфигурации.

Antifuse.
Специальная технология по которой выполняются однократно программируемые ПЛИС. Программирование такой ПЛИС заключается в расплавлении в нужных местах чипа специальных перемычек для образования нужной схемы.
Недостаток – собственно программировать / прошивать чип можно только один раз. После этого исправить уже ничего нельзя. Сам процесс прошивки довольно не быстрый. Зато есть масса достоинств у таких ПЛИС: они довольно быстрые (могут работать на больших частотах), меньше подвержены сбоям при радиации – все из-за того, что конфигурация получается в виде перемычек, а не в виде дополнительной логики, как у SRAM-based.

Конфигурируемые логические блоки.

В документации компании Альтера встречается выражение Logic Array Block (LAB) – массив логики. У компании Xilinx в микросхемах ПЛИС есть примерно такие же блоки — Configurable Logic Block (CLB). Конфигурируемый логический блок – это базовый элемент в ПЛИС, в нем может быть выполнена какая-то простая логическая функция или реализовано хранение результата вычисления в регистрах (триггерах).

Сложность и структура конфигурируемого логического блока (CLB) определяется производителем.

Теоретически, конфигурируемый логический блок может быть, например, очень простым, просто как отдельный транзистор. Или он может быть очень сложным, как целый процессор. Это крайние точки реализации.

В первом случае потребуется огромное число программируемых связей, чтобы потом из отдельных транзисторов собрать требуемую схему. Во втором случае связей может нужно и не так много, но теряется гибкость проектирования пользовательской схемы.

Именно поэтому конфигурируемый блок обычно представляет из себя что-то среднее: он обычно достаточно сложен, чтобы можно было бы зашить туда некоторую функцию, но и довольно мал, чтобы разместить множество таких блоков внутри ПЛИС и чтобы была возможность связать их в единую схему.

Таким образом, выбор структуры конфигурируемого логического блока производителем ПЛИС – это всегда поиск компромиса по площади кристалла, по быстродействию, энергопотреблению и так далее.

Конфигурируемый логический блок может состоять из одного или нескольких базовых логических элементов. В англоязычной литературе это Basic Logic Element (BLE) или просто Logic Element  (LE). В ПЛИС обычно используются так называемые LUT-based базовые логические элементы. Что-то вроде этого:

ПЛИС, FPGA базовый логический элемент BLE
Рис. 1. Пример традиционного базового логического элемента.

LUT – это Look-Up Table, таблица преобразования. Например, на Рис.1 показан четырехбитный LUT в составе базового логического блока. Здесь четырехбитному числу на входе логической функции ставится в соответствие однобитный результат. Красные квадратики на Рис. 1 обозначают программируемый элемент, регистр – это та память, где хранится прошивка для ПЛИС. Видно, что для конфигурации 4-х битного LUT требуется 16 конфигурационных регистра. Содержимое этих регистров определяют логическую функцию, реализованную внутри  базового логического элемента.

Еще один конфигурационный регистр (на Рис. 1 это одиночный красный квадратик справа) определяет нужно ли на выход базового логического элемента выдавать прямо значение с LUT или нужно выдать зафиксированное в D-триггере значение с LUT. Фиксация и хранение данных в цифровых схемах нужна практически в любом проекте.

Примерно такой логический элемент использовался в моем экспериментальном проекте «ПЛИС внутри ПЛИС».

Рассматривая Рис. 1 как пример традиционного базового логического элемента понимаешь какая избыточность заложена внутрь современного кристалла ПЛИС (SRAM-based). Ведь в самом деле, конфигурационные регистры (красные квадратики) прямо не доступны для использования в цифровом проекте. Они только служат для формирования пользовательской функции. Для одного D-триггера в пользовательском проекте требуется более 16 (иногда много больше) триггеров для хранения конфигурации ПЛИС.

На самом деле базовый логический элемент в разных ПЛИС оказывается гораздо сложнее, чем показано на Рис. 1. Ниже есть некоторые примеры из документации на разные типы ПЛИС.

Altera MAX II Logic Element

Рис. 2. Базовый логический элемент CPLD MAX II компании Альтера.

Здесь хорошо видны LUT и D-Триггер хранения результата. Ниже, на Рис. 3 представлен базовый элемент Cyclone III.

Altera Cyclone III Logic Element

Рис. 3. Базовый логический элемент FPGA Cyclone III компании Альтера.

В микросхемах Альтеры в одном LAB может содержаться 10-16 LE.

В микросхемах компании Xilinx Virtex-6 базовый логический элемент – это так называемый Slice. В одном CLB всего два Slice. Зато один Slice – это довольно сложное устройство:

xilinx slice

Рис. 4. Базовый элемент Xilinx Virtex-6 Slice.

В одном CLB Virtex-6 имеется 8 LUT и 16 D-Триггеров и еще кое-что плюс к этому. Вот так все сложно.

Другая крайность – микросхемы FPGA компании Microsemi (бывшая Actel).
Например, в микросхемах серии 40MX базовый логический элемент выглядит вот так:

Logic Module Microsemi 40mx

Рис. 5. Logic Module of Microsemi 40MX serie.

Восемь входов и один выход.
Здесь нет ни Look-Up Table, ни даже D-Триггера. Триггера, как и остальная логика, формируются где нужно из вот таких крошечных кирпичиков – Logic Module.

Почему у разных компаний получилась такая большая разница в реализации базового логического элемента? Видимо в микросхемах Microsemi связь между базовыми блоками обходится гораздо дешевле: серия 40MX является однократно программируемой. В ней межблочные связи «проплавляются» между соединяющими дорожками и позже не могут быть изменены. Нет никаких регистров для временного хранения прошивки. Здесь нет программируемых переключателей, мультиплексоров, как в FPGA других типов. Ну микросхемы компании Microsemi — это несколько особый случай. Это технология называется antifuse – для производства таких микросхем используется модифицированный техпроцесс CMOS с дополнительными слоями для организации межблочных связей.

Программируемые связи между логическими блоками.

Чтобы в ПЛИС заработала нужная нам цифровая схема мало того, что нужно сконфигурировать имеющиеся логические блоки особым образом, еще нужно создать, запрограммировать связи между логическими блоками.

Для этого в ПЛИС имеются специальные конфигурируемые коммутаторы.

В англоязычной документации встречаются следующие термины: FPGA Routing Architecture и Programmable Routing Interconnect. Это все об этом, о программируемых связях между логическими блоками.

Известно две основных методики построения ПЛИС по типу архитектуры связей: островная и иерархическая.

island style FPGA

Рис. 6. Островная ПЛИС.

Островная ПЛИС называется так потому, что конфигурируемые блоки все равны между собой и находятся, как острова в океане, между узлами коммутации и линиями связи.

Здесь, на Рис. 6 обозначаются CB – Connection Box и SB – Switch Box. В сущности это программируемые мультиплексоры, подключающие тот или иной CLB к другому CLB через цепочки проводов в ПЛИС.

Это island-style FPGA или mesh-based FPGA. Типичный пример таких микросхем – это серии Altera Cyclone и Stratix.

Второй известный тип ПЛИС – это иерархические ПЛИС. Здесь идет расчет на то, что в схеме всегда есть участки которые взаимодействуют друг с другом более тесно, чем с отдаленными модулями проекта.

hierarhical style FPGA

Рис. 7. Иерархическая ПЛИС.

Здесь близлежащие CLB соединить довольно просто, нужно не много коммутаторов и получающиеся связи работают быстро. Вот если нужен более крупный блок вычислителей, то сигнал должен выйти на более высокий уровень иерархии и потом зайти вглубь в соседнюю «комнату».

Нельзя сказать, что это существенно хуже, чем island-style. Просто каждый метод имеет свои плюсы и минусы.

Типичные представители иерархических ПЛИС – это микросхемы компании Альтера серии Flex10K, APEX.

Программное обеспечение для проектирования ПЛИС.

Программное обеспечение для проектирования ПЛИС, а именно компилятор (синтезатор логики и фиттер и ассемблер) – это, возможно, самая сложная часть всей ПЛИС технологии.

Компилятор должен проанализировать пользовательский проект (схемы и текстовые описания на Verilog HDL или VHDL ) и сгенерировать нетлист (netlist) – список всех элементов схемы и связи между ними. Netlist должен быть оптимизирован – логические функции нужно минимизировать, возможные дублированные регистры нужно удалить.

Затем компилятор должен вместить всю логику из netlist в имеющуюся архитектуру ПЛИС. Это делает фиттер (fitter). Он размещает логические элементы и выполняет трассировку связей между ними (процесс place and route). Сложность состоит в том, что один и тот же проект может быть размещен в ПЛИС разными способами и этих способов миллионы. Некоторое размещение и трассировка оказываются лучше, другие хуже. Главный критерий качества полученной системы – максимальная частота, на которой сможет работать проект при данном размещении элементов и при данной трассировке связей. Здесь оказывает влияние длина связей между логическими блоками и количество программируемых коммутаторов между ними.

Компилятор, зная архитектуру ПЛИС по результатам работы дополнительно выдает отчет о времени прохождении сигналов от регистра до регистра. Эта информация часто бывает полезной для разработчика высокопроизводительных систем. Разработчик для ПЛИС имеет возможность давать некоторые советы компилятору где, в каком месте кристалла лучше разместить тот или иной модуль проекта.

Выбирая для своего проекта, для своей платы конкретную микросхемы ПЛИС разработчик в некоторой мере попадает в зависимость от производителя этой ПЛИС, так как должен в работе пользоваться программным обеспечением от этого же производителя.

Программное обеспечение компании Альтера: Quartus II.
ПО Xilinx для проектирования для ПЛИС: ISE Suite, Vivaldo Design Suite.
ПО компании Microsemi: Libero IDE, Libero SoC.

Возможно, программное обеспечение, компиляторы для ПЛИС – это важнейшая составляющая интеллектуальной собственности компаний производителей ПЛИС.

На страницах нашего сайта https://marsohod.org мы уделяем внимание прежде всего проектированию систем на базе ПЛИС компании Альтера и пользуемся средой разработки Altera Quartus II.

 

marsohod.org

FPGA — теория программируемой логики (шлюзовой матрицы)

Главная страница » FPGA — теория программируемой логики (шлюзовой матрицы)

FPGA (Field Programmable Gate Array) — программируемая шлюзовая матрица. По своей сути FPGA является массивом взаимосвязанных цифровых подсхем, которыми реализуются общие функции. Также система видится инструментом, наделённым очень высоким уровнем гибкости. Однако чтобы реализовать полностью гибкость матрицы, потребуются исключить массу нюансов. Поэтому рассмотрим концепцию FPGA, попутно узнаем, что такое логические шлюзы, определим, как программировать FPGA. Наконец, найдём и определим отличия конструкции матрицы от конструкции микропроцессора.

СОДЕРЖИМОЕ ПУБЛИКАЦИИ :

FPGA или микроконтроллер?

Микроконтроллеры выступают доминирующим компонентом современного электронного конструирования. Микроконтроллеры относительно недорогие и универсальные электронные модули.

Это мощные инструменты, благодаря которым успешно решаются различные задачи проектирования. Тем не менее, микроконтроллеры построены на основе процессоров, а процессоры характерны некоторыми фундаментальными ограничениями.

Как же достичь превосходства FPGA над традиционным микроконтроллером? Конечно же, посредством программного обеспечения и аппаратных средств.

Процессор решает задачи, выполняя инструкции последовательно. Таким образом, операции процессора по существу ограничены. Требуемая функциональность должна быть адаптирована к доступным инструкциям, и в большинстве случаев невозможно одновременно выполнить несколько задач обработки.

FPGA НА ВЫБОР

Логическая структура микроконтроллераСтруктура микроконтроллера: 1 – процессор; 2 – контроль прерываний; 3 – генератор импульсов; 4 – ROM; 5 – управление шиной; 6 – RAM; 7 – порты ввода/вывода; 8 – счётчики; 9 – последовательный порт

Набор инструкций рассчитан на высокую универсальность, и в настоящее время инструкции могут выполняться на чрезвычайно высоких частотах; однако эти характеристики не устраняют недостатки программного подхода к цифровому конструированию.

Альтернативой является аппаратный подход. Было бы чрезвычайно удобно, если бы каждая новая конструкция выстраивалась вокруг цифровой ИС, которая реализует точную функциональность, востребованную системой.

Тогда нет необходимости писать программное обеспечение:

  • никаких ограничений набора команд,
  • никаких задержек обработки,
  • используется только одна ИС,
  • выходы и цифровые схемы соответствуют операциям.

Эта методология нецелесообразна вне описания, поскольку она предполагает разработку ASIC (специализированной интегральной схемы) для каждой платы. Однако есть возможность аппроксимировать эту методологию через FPGA.

Программируемая шлюзовая матрица

FPGA – это, по сути, массив логических вентилей. Этот массив может быть запрограммирован пользователем для конкретного устройства. Рассмотрим подробнее такую возможность.

FPGA МАКЕТ

Пример FPGA - макетная плата из серии устройств Altera CycloneТак называемая «стартовая» (макетная) плата электронного устройства типа FPGA — доступного по цене и лёгкого в использовании для конечного пользователя

Логические шлюзы (AND, OR, XOR и т. д.) являются основными строительными блоками цифровой схемы. Поэтому неудивительно, когда цифровое устройство, которое необходимо конфигурировать (запрограммировать пользователем), состоит из множества шлюзов, связанных методом настройки.

Однако FPGA не является обширной коллекцией отдельных булевских шлюзов. Это был бы субоптимальный способ обеспечения функциональности настраиваемой логикой. Тот же принцип проявляется, к примеру, в области дискретных цифровых интегральных схем (ИС).

В принципе, можно приобрести интегральные схемы, которые состоят из И-шлюзов, ИЛИ-шлюзов и т. д. Между тем вряд ли рационально создавать сдвиговый регистр из отдельных шлюзов. Куда рациональнее и практичнее использовать ИС регистра сдвига.

Таким образом, FPGA видится намного более выразительным инструментом, чем просто массив шлюзов. Это массив тщательно разработанных и взаимосвязанных цифровых подсхем, которые эффективно реализуют общие функции.

Конфигурируемые логические блоки

Отмечено, что FPGA обеспечивает очень высокий уровень гибкости. Эту гибкость обеспечивают цифровые подсхемы, именуемые конфигурируемыми логическими блоками (CLB). Такими блоками образуется ядро программируемых логических возможностей FPGA.

FPGA КОМПЛЕКТ

Логическая-структура-FPGAСтруктура программируемой шлюзовой матрицы: CLB – настраиваемый логический блок; SB – переключающий бокс; CB – соединительный бокс; I/O – блок ввода/вывода; H – горизонтальный канал маршрутизации; V – вертикальный канал маршрутизации; C – «W» трек

Технически CLB взаимодействуют друг с другом и с внешней схемой. Для этих целей FPGA использует матрицу программируемых соединений и блоков ввода/вывода (I/O).

Программа FPGA хранится внутри ячеек SRAM, которые влияют на функциональность CLB и управляют коммутаторами, устанавливающими пути подключения.

Подробное объяснение внутренней структуры и работы CLB потребует отдельной публикации (или даже нескольких публикаций). Общая идея заключается в том, что CLB включают в себя:

  • таблицы поиска,
  • элементы хранения (триггеры или регистры),
  • мультиплексоры.

Все эти включения позволяют CLB выполнять логические операции, операции хранения данных и арифметические операции.

Блок ввода-вывода состоит из различных компонентов, которые облегчают на электронной плате связь между CLB и другими компонентами. К ним относятся:

  • подтягивающие резисторы,
  • буферы,
  • инверторы.

Пользовательская программируемая логика (как программировать FPGA?)

Каким же образом превратить массив CLB в цифровую схему, которая делает именно то, чего желает пользователь? На первый взгляд это действие кажется довольно сложной задачей.

Действительно, реализация  FPGA обычно считается сложнее, чем программирование микроконтроллера. Однако разработка FPGA не требует глубоких знаний функциональности CLB или кропотливой компоновки внутренних взаимосвязей.

Это аналогично тому, когда разработка микроконтроллеров не требует глубокого знания инструкций на языке ассемблера процессора или внутренних сигналов управления.

На самом деле несколько неверно представлять FPGA как отдельный компонент. Система FPGA всегда поддерживается программным обеспечением разработки.

Такое ПО выполняет сложный процесс преобразования аппаратного конструирования в биты программирования. Этими битами определяется поведение взаимосвязей и CLB.

Языки программного «описания» оборудования

Существуют средства, которые позволяют пользователю «описывать» аппаратное обеспечение. Эти средства называются языками описания аппаратных средств (HDL). Среди наиболее распространенных языков следует отметить «сладкую парочку»: —

Несмотря на очевидное сходство между кодеком HDL и кодом, написанным на языке программирования высокого уровня, эти два средства принципиально отличаются друг от друга.

FPGA SDRAM

Программирование шлюзовой матрицы FPGAПример программирования шлюзовой матрицы с помощью VHDL кода, благодаря чему достигаются все необходимые операции, на которые рассчитывает конечный пользователь

Программный код определяет последовательность операций, тогда как HDL-код больше похож на схему, которой используется текст с целью представления компонентов и создания взаимосвязей.

Заключительный момент обзора

Современные FPGA — это сложные, высокопроизводительные устройства. На первый взгляд это пугающе сложные системы для тех пользователей, кто привык работать с микроконтроллерами.

Микроконтроллеры видятся проще для сбора данных, управления ASIC и выполнения математических операций. Однако на практике легко обнаруживается, что для некоторых конкретных применений улучшенная производительность и универсальность достигаются именно разработкой на FPGA.


При помощи информации: Allaboutcircuits

zetsila.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *