Начинаем работать с fpga или плис это просто. часть 1

Начинаем работать с FPGA или ПЛИС это просто. Часть 1

ВВЕДЕНИЕ

Обычно, когда кто-то видит функционирующую плату, всегда задают одни и те же вопросы: — Это Ардуино? — А как это работает без Ардуино?

Это не микроконтроллер, это даже не процессор, это ПЛИС. ПЛИС — это программируемая логическая интегральная схема, такая микросхема состоит из множества одинаковых блоков или макроячеек, каждый производитель по своему их называет, так у Xilinx это Slices (ломтики) у Altera — LogicElements (логические элементы). Эти блоки относительно простые, они могут выполнять роль нескольких логических элементов, быть маленькой таблицей поиска (LUT), содержать готовый сумматор, умножитель, блок цифровой обработки сигналов (DSP), в общем все что задумает производитель. Пользователь может по своему желанию расположить и настроить эти блоки как ему захочется, реализовав таким образом достаточно сложные цифровые схемы. На ПЛИС можно реализовать хоть микроконтроллер, реализовав например ту же Ардуино или процессор вашей собственной архитектуры, например не регистровый а стековый процессор, даже свою собственную ПЛИС можно реализовать на ПЛИС!

Из доступных бюджетных ПЛИС можно выделить двух основных производителей Altera и Xilinx, с их продукции можно начать свой путь освоения данных технологий. На мой взгляд лучше выбрать чипы компании Altera, так как их среда проектирования стабильно обновляется, а выбрав один популярный чип Xilinx XC3S500E вам придется довольствоваться устаревшей средой ISE 14.7 (хотя и там есть свои плюсы).

В иностранной литературе можно встретить сокращения для ПЛИС: FPGA и CPLD. CPLD (Complex Programmable Logic Device ) — чипы с небольшим числом макроячеек, специализированных блоков и малым энергопотреблением. Большой проект не получится синтезировать для такого типа чипов, но и для них находят применение на практике, так у редкого микроконтроллера найдется, скажем 300 ножек. Такие чипы часто применяют в качестве интерфейсных систем, предобработчиков, расширителей ввода-вывода. FPGA (Field-Programmable Gate Array) — программируемая пользователем вентильная матрица (ППВМ), значительно более мощные чипы по сравнению с CPLD, но потребляющие больше энергии и стоящие значительно дороже. Для уменьшения затрат площади кристалла FPGA чипы могут содержать уже готовые функции, такие как блоки цифровой обработки сигналов (DSP блоки), встроенные процессоры, встроенная память. FPGA широко применяются для проверки и верификации проектов, в так называемой докремниевой проверке пригодности, тем самым уменьшая затраты и время перед выходом продукта. FPGA чипы могут быть переконфигурированы практически в любой момент времени, сейчас ведутся разработки, например в Intel, по совмещению архитектур обычного процессора и чипа FPGA. У Xilinx уже есть такие решения — Zynq, но о них мы пока не будет вести речь.

Разговор пойдет о более простых вещах, тем более ко мне в руки попал набор разработчика: Cyclone IV 4 FPGA Core Board и Altera USB Blaster Downloader PLD Development kit за 35$, приобретенный на AliExpress.

1 Демоплата Cyclone IV 4 FPGA Core Board, краткая характеристика


Рис. 1 — Демоплата Cyclone IV 4 FPGA Core Board

На плате (Рис. 1) установлен чип EP4CE6E22C8N, его характеристики:

Вид ресурса Краткое описание Количество
Logic elements (Les) Число логических блоков — ячеек, основная характеристика, по которым мы можем сравнивать «мощность» чипов, любая синтезированная логика будет затрачивать данные блоки 6,272
Embedded memory (Kbits) Встроенной памяти, пока для нас не важная характеристика 270
Embedded 18×18 multipliers Встроенных аппаратных умножителей, очень важный параметр в цифровой обработке сигналов, вся мощь ПЛИС раскрывается, когда несколько умножителей работают параллельно 15
General-purpose PLLs Узлов фазовой автоподстройки частоты, пока не важная характеристика, упрощает синхронизацию устройств, работающих на разных частотах 2
Global Clock Networks Количество частотных доменов, пока не важная характеристика 10
User I/O Banks Число раздельных пользовательских банков ввода-вывода, пока не важная характеристика 8
Maximum user I/O Число пользовательских пинов ввода-вывода, мы можем подключить любые устройства, как например к Ардуино 91

На плате установлено:

  1. Флэш память – при подаче питания ПЛИС будет сконфигурирована в реализацию во флеш памяти. Вы можете синтезировать свой проект и записать в эту флэш
  2. Кварц 25 Мгц – генератор опорной тактовой частоты, именно на этой частоте будут работать все наши проекты, наша ПЛИС может поддерживать до 10 таких каналов.
  3. Светодиоды – 10, кнопки – 2.
  4. Пины ввода-вывода 61 + 2 земля, 1 не соединен. Можно подключить разнообразные устройства. ЦАП-АЦП, акселерометры и гироскопы, символьный и графические дисплеи, как и у Ардуино.
  5. Питание через USB, или внешнее 5В.

В комплекте также идет программатор JTAG, Altera USB Blaster.

2. Среда Quartus II и наш первый проект

Для работы с данной ПЛИС нам нужно скачать официальную среду разработки — Quartus II Web Edition, она бесплатная. Заходим на официальный сайт http://dl.altera.com/15.0/?edition=web, на момент написания версия 15.0 самая новая, если вышла новее, скачиваем ее.


Рис. 2 — выбираем необходимые продукты Altera

И жмем кнопку скачать (Download Selected Files). После чего нам предложат зарегистрироваться, регистрируемся, скачиваем и устанавливаем.

Создадим свой первый проект.

Запускаем Quartus, выбираем главное меню File -> New Project Wizard, появляется окно введения, жмем next. Далее нужно указать каталог для проекта и его имя, третье поля – имя верхнего модуля, попозже увидите, что это. Выбираем папку, куда хотим сохранить проект и придумываем имя, у меня test1.


Рис. 3 — окно мастра нового проекта

Жмем next, у нас спрашивают, пустой проект (empty project) или шаблон (Project template). Оставляем пустой, next. Дальше нас просят добавить существующие файлы, у нас ничего нет, поскольку мы только начинаем свой путь, жмем next.

Далее нам необходимо выбрать наш чип, это можно сделать в любое время. Выбираем как на рисунке, Family – Cyclone IV E, specific device selected in “Available devices” и выбираем наш чип EP4CE6E22C8N, он в самом начале. Если у вас другой, найдите свой, это важно. Жмем next.


Рис. 4 — Окно мастера нового проекта, выбор нужного чипа

Появится окно — выбора средств проектирования, отладки, пока это пропускаем, нажимаем next и затем finish.

Далее главное меню Assignments -> Device, здесь можно выбрать чип (нашу ПЛИС), выбираем если не выбрали, нажимаем кнопку «Device and Pin Options».


Рис. 5 — Окно « Assinments-Deice »

В окне выбираем пункт «Unused pins». Эта настройка определяет, что будет с неподключенными пинами. Это может быть важно, в своем проекте вы вряд ли используете все пины, а не подключенные могут быть на деле соединены с землей или питанием (ну мало ли, кто разводил плату). Если вы подадите единичку на заземленный пин, то он сгорит, поэтому нужно внимательно следить за этим.

По умолчанию неиспользуемые пины «As input tri-stated with weak pull-up» (пины для ввода, находятся в третьем состоянии с высоким импедансом, со слабой подтяжкой по питанию), можно оставить или выбрать «As input tri-stated». Про подтягивающий резистор можете прочитать на википедии https://ru.wikipedia.org/wiki/Подтягивающий_резистор. В цифровой технике может быть три состояния, логическая единица – это напряжение питания или высокий уровень, логический ноль – это когда вывод подключен к земле или низкий уровень и высокоимпедансное состояние. Высокоимпедансное состояние — это когда пин имеет очень высокое сопротивление и практически не влияет на провод, к которому подключен, такое состояние нужно, например, при организации шин, когда множество устройств подключены к одному проводу и не активные устройства не мешают работе.


Рис. 6 — Окно « Device and Pin Options » , Unused Pins

Далее нам нужно настроить пины, это нужно чтобы сигнал шел на нужные нам ножки чипа, ведь изначально Quartus не знает, что куда подключено и как именно осуществлена разводка платы.

Подключаем это все в «Assignment Editor»


Рис. 7 — Вызов « Assignment Editor » из меню или панели

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


Рис. 8 — Assinement Editor

В колонке «To» вписываем имя входа или выхода. В колонке «Assignment Name» выбираем «Location». В колонке «Value» номер контакта микросхемы, согласно схемы платы (у меня номера пинов написаны прямо на плате).

Также нужно указать, что делать с кнопками, которые одной ногой подключены к земле, а другой ко входу чипа. При нажатии на ноге будет низкий уровень, а вот без нажатия, непонятно, нога чипа будет просто висеть в воздухе, что очень плохо. Нужно подтянуть к питанию вход чипа либо резистором на плате, либо боле элегантным способом в «Assignments Editor». В колонке «Assignment Name» выбираем «Weak Pull Up resistor» для группы key* (группа обозначается через звездочку).


Рис. 9 — Assignment Editor

Далее нужно создать описание модуля верхнего уровня, который будет работать непосредственно с ножками чипа, все остальные модули будут работать только с ним. В главном меню жмем New, и выбираем «Design Files-> Block Diagram/Schematic File».


Рис. 10 — Диалог новых файлов

В открывшемся окне выбираем инструмент «Pin Tool» и располагаем вход и выход (пины ввода и вывода) на диаграмме. Переименовываем вход как key[0], выход как led[0] и соединяем их проводником. Сохраняем и нажимаем «Start Compilation».


Рис. 11 — Окно графического описания, выделены Pin Tool и Start Compilation

После компиляции у нас возникли предупреждения, пока игнорируем их, они касаются неподключенных пинов, отсутствия тактового сигнала и описания для «Timing Analyzer».

Подключаем демоплату и программатор, выбираем инструмент «Programmer». В окне должно значиться «USB-Blaster [USB-..]», если нет то нажимаем «Hardware Setup» и пытаемся разобраться почему нет, скорее всего не установлены драйвера, смотрим в устройства Windows, ищем неопределенные устройства, может с кабелем проблема. Если все хорошо нажимаем «Auto Detect» и выбираем наш чип.


Рис. 12 — Окно Programmer

Нажимаем двойным щелчком мыши в поле «File» и выбираем файл для записи на ПЛИС (находиться в папке output_files нашего проекта), ставим галочку в поле «Program / Configure», и нажимаем кнопку «Start».


Рис. 13 — Окно Programmer, наш чип уже сконфигурирован

Поздравляю с первой конфигурацией ПЛИС! Диод D1 должен светиться, при нажатии key1 должен гаснуть (так как кнопка замыкает ножку с землей), далее мы с этим что-нибудь сделаем)

Как начать работать с программируемыми логическими интегральными схемами (ПЛИС)

Автор статьи: Predator

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

Итак, начнем с небольшого количества теории. ПЛИС делятся на две основных группы: CPLD (Complex Programmed Logic Device) и FPGA (Field Programmed Gate Array). CPLD — это обычно ПЛИС класса «эконом», т.е. имеют невысокую цену и довольно скудное количество ресурсов, особенно это заметно на триггерах. FPGA обычно подороже, содержат побольше ресурсов (простой логики — триггеров. ) и, самое важное, в последнее время дополнительные «непростые» блоки, как, например, умножители, блоковую память, интерфейсные причиндалы (Ethernet, PCI-express. ) и даже процессорные ядра PowerPC. Отдельно можно упомянуть серию Zinq от Xilinx — туда вообще ядра ARM запихали. Главным же отличием FPGA от CPLD является потребность в загрузке конфигурации при включении питания и, соответственно, внешней ПЗУ с конфигурацией. Даже семейство SPARTAN-3AN имеет на борту встроенную ПЗУ-шку, из которой и грузится.

Теперь самое главное: чем ПЛИС отличается от контроллера и когда их применять. Тут всё довольно просто: ПЛИС (берем те, что без наворотов) — это, по сути, мешок логики на одном кристалле, которую можно произвольно соединять: те самые триггеры, AND, OR и тому подобные примитивы, как, например, в серии К155 или 74НС. Контроллер же — это готовый процессор (пусть со скудным количеством команд), встроенная память, шины данных и команд, периферия и т.д. В общем-то говоря, из большой ПЛИС можно сделать маленький контроллер, но эта затея, по крайней мере, глупая. Итак, контроллер заточен под выполнение длинных цепочек команд, их циклического повторения, переключения с одной цепочки на другую и т.д., а ПЛИС заточена под выполнение простых логических операций и, что немаловажно, большого количества сразу (и даже на разных тактовых частотах).

ПЛИС Xilinx XC95288XL в корпусе TQ144

Перейдем от теории к практике. Для начала нам хватит какой-нибудь микросхемы CPLD. Ресурсов мало, но для освоения самое оно. Я возьму XC95288XL в корпусе TQ144 (опять же просто оказалась в наличии), вообще рекомендую взять что-нибудь посвежее, например, из серии CoolRunner 2. Чтобы получить готовое изделие (пусть даже минимально мигающее светодиодом), нам необходимо: спаять аппаратную часть (тут, я надеюсь, проблем не возникнет, а нюансы я упомяну), «написать» прошивку (в нашем случае, скорее, нарисовать) и зашить прошивку в микросхему. В общем, нам понадобятся софт, генерящий прошивку, и программатор. Софт (Xilinx ISE Webpack) качаем с официального сайта (правда, попросят зарегистрироваться), лицензия Webpack — свободная. Программатор можно сделать по схеме на рис.1 (под LPT-порт) или приобрести заводской USB-шный (в китайских интернет-магазинах встречал по цене порядка 50$, но сам не покупал). Более подробно.

Рис. 1
(рисунок кликабелен для увеличения, откроется в новом окне)

После того, как мы припаяли ПЛИС на макетную плату, спаяли или купили программатор, скачали и установили пакет ISE Webpack (у меня версия 13.2), запускаем Project Navigator и создаем новый проект. Чтобы создать проект, выбираем File -> New Project, указываем имя проекта и куда его сохранить, также указываем тип исходника TOP-LEVEL (рис.2). Дело в том, что для ПЛИС не обязательно рисовать схему из триггеров и их соединений, можно, например, писать на языках высокого уровня (VHDL, Verilog) и совсем не обязательно в пределах одного проекта использовать что-то одно. Мы же пока используем только Schematic на всех уровнях.

Рис. 2
(рисунок кликабелен для увеличения, откроется в новом окне)

В следующем окошке (рис. 3) выбираем нашу микросхему (остальное поначалу не трогаем); в окне, появившемся после нажатия на кнопку «Next», любуемся на параметры созданного проекта, жмем «Финиш» — и готово: проект создан.

Теперь надо, собственно, нарисовать схему: правым кликом на окошко с проектом и new sourсe (рис 4.), нарекаем этот исходник именем (это имя нашей схемы, их в проекте может быть много), выбираем опять-таки Schematic, жмем «Next», любуемся на параметры вновь создаваемого файла, жмем «Финиш» и получаем чистую схему.

Рис. 4
(рисунок кликабелен для увеличения, откроется в новом окне)

Начинается самое интересное: на панельке слева (не с самого краю) жмем кнопочку «add symbol» (рис. 5).

Рис. 5
(рисунок кликабелен для увеличения, откроется в новом окне)

И получаем еще левее список символов текущей библиотеки. Как добавлять, создавать, править библиотеки, разберемся потом (по мере необходимости). Сейчас нам важно выбрать необходимый символ. Так в верхнем окошке мы видим некий классификатор — фильтр, которым пользоваться не обязательно (ну зачем же пролистывать всякие триггеры и логические элементы, когда нам нужен счетчик).

Для примера рассмотрим следующую задачу: нужно максимально точно определить время задержки между передними фронтами 2-х импульсов, появляющихся на разных проводах, и слить это значение в контроллер по интерфейсу SPI. Всякое сходство задачи с темой «Повышение рабочей частоты МК» на одном из робототехнических форумов умышленное. Итак, на входе устройства 2 провода для импульсов и 3 провода для SPI контроллера. Добавляем еще вход тактирования (пока мы не знаем на какой частоте, можем только предположить, что не менее 70 МГц). Начинаем рисовать прошивку: нам нужны триггеры-защелки, которые будут «ловить» импульсы, счетчик времени, регистр сдвига (создавать их не надо, они есть библиотечные). Что такое триггеры и счетчики, описывать не буду, надеюсь, читатели «в теме» и проблем не возникнет, в противном случае придется писать еще несколько статей. Получили вот такую схему (рис. 6), как вы видите, необязательно тянуть провод от выхода символа до входа, достаточно просто обозвать цепь. Для обозначения внешних входов и выходов используем кнопку «Add I/O Marker».

Рис. 6
(рисунок кликабелен для увеличения, откроется в новом окне)

Когда схема готова, переходим на вкладку Design, и даблкликаем на Implement Design — начинаются всякие процессы (для начала не важно какие именно — главное, что всё вместе — это процесс перегонки исходника в прошивку). Когда всё отработает, смотрим на эрроры с варнингами: всё, что важно, исправляем, остальное оставляем. Например, не нужны нам выходы СЕО и ТС счетчика и остальные 15 бит параллельного выхода регистра сдвига тоже не нужны, а варнингами ругается. Если ругается эррорами на то, что мы так и хотим, значит, мы хотим чего-то не того. Если нас (и синтезатор) всё устраивает — любуемся дальше на репорты: сколько каких ресурсов израсходовано, какие тактовые частоты доступны. Если опять всё хорошо, то самое время просимулировать схему и убедиться, что она, собственно, работает согласно поставленной задаче. Симуляцию после проверки таймингов я предлагаю проводить по причине того, что иногда для получения нужной тактовой частоты приходится всю схему перетрясти, что, естественно, может сказаться на результате.

Итак, симуляция: на вкладке Design (в левой панельке) выбираем simulation (рис. 7).

Рис. 7
(рисунок кликабелен для увеличения, откроется в новом окне)

Внизу, в процессах, вместо процессов синтеза и разводки появился процесс Simulate Behavioral Model, даблкликаем на него — запускается симулятор, в котором мы видим наши сигналы (не только входные-выходные, но и промежуточные) (рис 8).

Рис. 8
(рисунок кликабелен для увеличения, откроется в новом окне)

Наводим на кнопочки курсор мышки, читаем комментарии к кнопочкам. Устанавливаем время шага симуляции (рис. 9) и начальные значения входных сигналов, сразу же настраиваем тактовые сигналы (не будем же мы каждые 5 нс симулировать и клок переключать).

Рис. 9
(рисунок кликабелен для увеличения, откроется в новом окне)

Шагая по времени путем манипуляций с входами и (при необходимости) с шагом симуляции, получаем временную диаграмму (рис. 10).

Рис. 10
(рисунок кликабелен для увеличения, откроется в новом окне)

Убеждаемся, что всё работает так, как задумано (или отлаживаем схему дальше), и переходим к следующему шагу — распределению выходов и входов по ножкам микросхемы. Для этого добавляем еще один файл-исходник (рис. 11), а именно Implementation Constraints File.

Рис. 11
(рисунок кликабелен для увеличения, откроется в новом окне)

Прописываем «распиновку микросхемы» (рис. 12), здесь же прописываем требования к тактовым частотам. И вот мы дошли до нюанса, связанного с тактовыми сигналами. Дело в том, что сигналы тактирования должны приходить на так называемые глобальные линии — линии, которые проходят через всю микросхему, остальные линии имеют локальный характер и от блока к блоку проходят через коммутационную логику. У микросхемы XC95288XL в корпусе TQ144 таких линий 3, и подключаются они к ногам 30, 32, 38. Остальные сигналы можно подключить к любым ножкам ввода-вывода (I/O).

Рис. 12
(рисунок кликабелен для увеличения, откроется в новом окне)

Снова даблкликаем Implement Design, ждем, читаем замечания на тему варнингов с эррорами и переходим на отчеты по распиновке (рис. 13) и таймингам (рис. 14); убеждаемся в том, что всё нас устраивает, и имеем счастье в виде файла %project_name%.jed.

Рис. 13
(рисунок кликабелен для увеличения, откроется в новом окне)

Рис. 14
(рисунок кликабелен для увеличения, откроется в новом окне)

Что такое ПЛИС простым языком для начинающих

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

Выходом из сложившейся ситуации стало развитие программируемых интегральных логических схем (сокращенно — ПЛИС, зарубежная аббревиатура — programmable logic device, PLD). Что это такое и где используется мы расскажем в этой статье.

Отличия от микроконтроллеров

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

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

Кроме этого вы можете производить вычисления, сохранять данные в регистрах или ПЗУ, а также оперировать данными прошитыми в память микроконтроллера. На этом в сущности и заключается назначение и особенности работы с микроконтроллерами.

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

Обобщённо внутреннее устройство ПЛИС можно разделить на три основных группы:

1. Массив из логических элементов (макроячеек, логических блоков).

2. Блоки входа-выхода (IO).

3. Линии связи между ними и устройство, которое управляет этими связями.

Однако такое структурирование очень обобщено, немного подробнее мы рассмотрим этот вопрос ниже.

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

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

Выбор микроконтроллеров происходит на основе множества критериев, таких как:

Быстродействие и тактовая частота;

Объем ПЗУ и ОЗУ;

Количество входов и выходов.

Другие функциональные особенности и периферии, типа поддержки линий связи и протоколов (I2C, one-wire, PWM-сигнал и прочее).

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

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

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

Виды

Актуальными на сегодняшний день являются два основных вида ПЛИС:

1. CPLD (Complex Programmable Logic Device — Программируемая Логическая Интегральная Микросхема, собственно это и есть ПЛИС в её классическом понимании). В ней обычно есть встроенная энергонезависимая памятью, в которую загружается прошивка.

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

2. FPGA (Field-Programmable Gate Array — Программируемая Пользователем Вентильная Матрица, однако её часто относят к ПЛИС) — более развитые и сложные устройства по сравнению с CPLD, строятся на логических блоках с гибкой коммутаций и содержат большее число элементов (десятки или сотни тысяч штук).

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

Интересно:

Хотя фактически наличие энергонезависимой памяти не делает программируемую логику CPLD. Это частично заблуждение. Главным отличием CPLD от FPGA является внутренняя структура.

Подробнее внутреннее устройство CPLD изображено на рисунке ниже.

А примерная схема её макроячейки выглядит таким образом:

Макроячейка состоит из программируемых мультиплексоров, триггеров (одного или нескольких) и формирует группу выходных сигналов ФБ в нескольких их вариантах.

Ниже приведен еще один пример – блок-схема CPLD микросхемы семейства MAX II фирмы Altera.

И структурный план микросхем этого же семейства.

Промежуточные шины макроячейкам назначаются с помощью такого узла, как распределитель, на англ. он звучит как Logic Allocator, что изображено на схеме ниже, на ней же изображена матрица переключений (Global Routing Pool), а у выходных макроячейки (macrocells) имеют по две обратных связи.

Внешние выводы микросхемы соединяются с выходами макроячеек через еще один блок (матрицу) – ORP (Output Routing Pool), обратите внимание, что через неё же происходит соединение ВХОДНОЙ логики с GRP, что изображено на иллюстрации ниже.

В некоторых CPLD есть т.н. прямые входы (Direct Input) – они соединены со входами ячеек напрямую, что уменьшает задержки.

У FPGA структура имеет вид:

L – логический конфигурируемый блок;

S (substitution block) – блок подстановок, он получает на ход определенное число бит, преобразует, по определенному алгоритму, а на выходе выдаёт другое число бит. Другими словами – дешифратор, шифратор и коммутатор.

C (connection block) – блок соединений.

Программирование

HDL (Hardware Description Language, рус. Язык описания аппаратуры) — так называется язык с помощью которого программируются ПЛИС. Популярными и универсальными являются Verilog HDL и VHDL. Существуют и другие языки, например, присущие конкретным производителям, как AHDL для изделий компании ALTERA.

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

Примеры популярных производителей и серий

На момент написания статьи наиболее известными являются изделия двух производителей.

Altera (основана в 1983 году);

Xilinx (Основана в 1984 году).

У Altera есть несколько основных серий программируемой логики:

Записки программиста

Учимся программировать под FPGA на SystemVerilog

ПЛИС (Программируемая Логическая Интегральная Схема) — это интегральная схема, предназначенная для построения цифровых цепей из описания на специальном языке программирования. Другими словами, ПЛИС представляет собой чип, как бы содержащий в себе кучу элементов наподобие 74HCxx. Какие именно это будут логические элементы, какие между ними будут связи, и какие связи будет иметь получившаяся схема с внешним миром, определяется на этапе программирования ПЛИС.

Примечание: Насколько я смог выяснить, в русском языке на сегодняшний день термины ПЛИС и FPGA (Field-Programmable Gate Array, Программируемая Пользователем Вентильная Матрица), принято считать взаимозаменяемыми, что будет использовано далее по тексту. Однако стоит знать о существовании и альтернативной точки зрения, согласно которой FPGA (ППВМ) является одной из разновидностей ПЛИС (PLD, Programmable Logic Device).

Основные сведения об FPGA

Для программирования FPGA используются языки описания аппаратуры (HDL, Hardware Description Language). Среди них наибольшей популярностью пользуются Verilog (и его диалекты, в частности SystemVerilog), а также VHDL. Языки во многом похожи, но имеют разный синтаксис и различаются в некоторых деталях. Если Verilog — это такой C мира описания аппаратуры, то VHDL — соответственно, Pascal. Насколько мне известно, VHDL несколько менее популярен, в частности, из-за его многословности по сравнению с Verilog. Из преимуществ VHDL (или недостатков, кому как) можно назвать строгую статическую типизацию. Verilog же иногда допускает неявное приведение типов. Если продолжать аналогию с C и Pascal, языки различаются не настолько сильно, чтобы не выучить их оба.

На данный момент лидирующими производителями FPGA являются компании Altera (сейчас принадлежит Intel) и Xilinx. По информации из разных источников, вместе они контролируют не менее 80% рынка. Из других игроков стоит отметить Actel (куплена Microsemi), Lattice Semiconductor, Quicklogic и SiliconBlue. С железом от Xilinx можно работать только из среды разработки от Xilinx (называется Vivado), а среда разработки от Altra (называетя Quartus) понимает только железо от Altera. То есть, полный вендор лок, и выбирая конкретную FPGA для своего проекта, вы автоматически выбираете и инструменты разработки соответствующего производителя, их техническую поддержку, документацию, условия лицензирования софта, политику касаемо прекращения поддержки железа, и так далее.

FPGA часто используются в задачах, где некие вычисления хочется существенно ускорить, реализовав их прямо в железе. Например, FPGA нашли широкое применение в области обработки сигналов, скажем, в осциллографах, анализаторах спектра, логических анализаторах, генераторах сигналов, Software Defined Radio и даже некоторых мониторах. В частности, в LimeSDR используется Altera Cyclone IV, а в осциллографе Rigol DS1054Z стоит Xilinx Spartan-6, а также ProASIC 3 от компании Actel. Еще из применений, о которых я слышал, могу назвать компьютерное зрение, распознавание речи и биоинформатику. Есть и другие проекты, в частности по разработке веб-серверов и СУБД, работающих на FPGA [PDF]. Но, насколько мне известно, это направление все еще остается сильно экспериментальным.

Xilinx или Altera?

Как говорится, лучший Linux тот, который использует ваш знакомый гуру по Linux.

Мой знакомый гуру по FPGA в лице Дмитрия Олексюка посоветовал начать с девборды Arty Artix-7 от компании Digilent. Используемой в ней FPGA является Artix-7 от Xilinx. Сам Digilent не производит доставку в Россию, но устройство доступно и на AliExpress, хотя и с заметной наценкой (официальная цена составляет 99$). Также его продают на eBay. Это довольно мощная плата, которая, тем не менее, стоит вполне адекватных денег.

Fun fact! Если вам просто хочется попрограммировать на Verilog или VHDL, строго говоря, покупать какую-либо плату с FPGA не требуется. Первое время можно ограничиться симулятором, работа с которым будет рассмотрена далее.

Из интересных особенностей платы можно назвать расположение гнезд совместимым с Arduino-шилдами способом. Также в комплекте с платой идет вкладыш, по которому можно получить лицензию на Vivado, открывающую все его возможности. Лицензия действует один год с момента активации, а также привязана к одному компьютеру по типу ОС и MAC-адресу.

По доставке. Я слышал, что устройства с FPGA на борту имеют большие шансы не пройти таможню. Магазин на AliExpress, ссылку на который я привел выше, доставляет платы в Россию через курьерскую службу СПСР. Для прохождения таможни потребовалось заполнить онлайн-форму с паспортными данными (только данные, без фото) и контактным телефоном, как этого требует текущее российское законодательство. После этого плата была доставлена курьером прямо до двери без каких-либо вопросов.

Установка Vivado

Среда разработки Vivado доступна для скачивания на сайте Xilinx. Будьте морально готовы к тому, что перед скачиванием вам придется пройти регистрацию и заполнить довольно подробную форму о себе. Скачиваем архив под названием «Vivado HLx 2017.2: All OS installer Single-File Download». Не перепутайте случайно с каким-нибудь «Vivado Lab Solutions», это совершенно не то, что нужно. Архив весит более 20 Гб, поэтому запасаемся терпением.

Распаковываем архив, запускаем инсталлятор. Ставим Vivado HL System Edition. Полная его версия займет на диске 47 Гб. Лично я снял галочку напротив Software Development Kit и оставил поддержку только 7 Series устройств, что уменьшило размер до 12 Гб. Забегая немного вперед отмечу, что такой конфигурации оказалось вполне достаточно.

Перед запуском Vivado нужно добавить в него поддержку Arty Artix-7, так как из коробки он ничего об этой плате не знает. Делается это как-то так:

/ opt / xilinx / Vivado / 2017.2 / data / boards / board_files
wget https: // github.com / Digilent / vivado-boards / archive / master.zip
unzip master.zip
mv vivado-boards-master / new / board_files /* . /
rm -r vivado-boards-master
rm master.zip

Также скачиваем отсюда и сохраняем куда-нибудь файл Arty_Master.xdc. Он понадобится нам далее. Файл содержит описание находящихся на плате светодиодов, переключателей и так далее. Без него поморгать светодиодами на Verilog будет непросто.

Первый проект на SystemVerilog

В Vivado говорим File → New Project… В качестве типа проекта выбираем RTL Project, ставим галочку Do not specify sources at this time. В диалоге выбора типа платы находим в списке Arty.

Первым делом добавляем к проекту скачанный ранее XDC файл. Копируем его в каталог с проектом. Затем говорим File → Add Sources… → Add or create constraints → Add Files, находим копию файла, жмем Finish. В дереве файлов проекта (Sources) в группе Constraints появится файл Arty_Master.xdc, или как вы там назвали копию. Открываем его и раскомментируем все строчки в группах Clock signal, Switches и LEDs.

Далее говорим File → Add Sources… → Add or create design sources → Create File. В типе файла выбираем SystemVerilog, в имени файла вводим что-нибудь вроде hello. Говорим Finish. Далее появится диалог Define Module, который предложит накликать интерфейс модуля. Диалог довольно бесполезный, потому что то же самое удобнее сделать прямо в коде, так что жмем Cancel.

В дереве исходников находим новый файл hello.sv, он будет в группе Design Sources. Открываем и пишем следующий код:

`timescale 1ns / 1ps

module hello (
input logic CLK100MHZ ,
input logic [ 3 : 0 ] sw ,
output logic [ 3 : 0 ] led
) ;

always @ ( posedge CLK100MHZ )
begin
if ( sw [ 0 ] == 0 )
begin
led 4’b0001 ;
end
else
begin
led 4’b0000 ;
end
end

Если все было сделано правильно, на этом этапе Vivado у вас будет выглядеть как-то так (кликабельно, PNG, 71 Кб):

Компиляция программы осуществляется в два этапа — синтез (synthesis) и имплементация (implementation). На этапе синтеза программа транслируется в абстрактную цепь из логических вентилей и прочих элементов. На этапе имплементации принимается решение о том, как прошить эту цепь в конкретную железку.

Запустим синтез, сказав Flow → Run Synthesis, или просто нажав F11. В правом верхнем углу вы увидите индикацию того, что процесс идет. Он может занимать довольно много времени, в зависимости от вашего компьютера и сложности программы. На моем ноутбуке синтез приведенной выше программы выполнился где-то секунд за 10. Если теперь сказать Flow → Open Synthesized Design, то можно увидеть красивую картинку вроде такой:

Настало время прошить нашу плату. Говорим Flow → Run Imlementation, затем Flow → Generate Bitstream. Подключаем плату к компьютеру по USB, в Vivado говорим Flow → Open Hardware Manager → Open target → Auto Connect → Program device. Потребуется указать путь к bit-файлу. У меня он был следующим:

Говорим Program. Теперь на плате горит светодиод LD4, если переключатель SW0 опущен (см приведенную выше фотографию платы). Если же переключатель поднят, светодиод не горит. Простенько, конечно, но это же «hello, world», чего вы ожидали? 🙂

Симуляция

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

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

Google по этой ошибке находил только всякую ерунду в стиле «попробуйте отключить антивирус». В итоге решить проблему помогло добавление флага -v 2 в скрипт

/opt/xilinx/Vivado/2017.2/bin/xelab. С его помощью я выяснил, что Clang, бинарник которого Vivado таскает за собой, падает со следующей ошибкой:

А эта ошибка и ее решение уже описаны на Arch Wiki. Лично я просто скопировал уже существующий файл из каталога Vivado_HLS:

… после чего все заработало. Итак, а теперь, собственно, пример симуляции.

По аналогии с тем, как ранее мы создавали hello.sv, создаем новый файл hello_sim.sv в группе Simulation Sources. В файле пишем следующий код:

`timescale 1ns / 1ps

module hello_sim ( ) ;
logic clck_t ;
logic [ 3 : 0 ] sw_t ;
logic [ 3 : 0 ] led_t ;

hello hello_t ( clck_t , sw_t , led_t ) ;

initial begin
clck_t 0 ;
sw_t 4’b0000 ; # 1 ; clck_t 1 ; # 1 ; clck_t 0 ; # 1 ;
assert ( led_t === 4’b0001 ) ;

sw_t 4’b0001 ; # 1 ; clck_t 1 ; # 1 ; clck_t 0 ; # 1 ;
assert ( led_t === 4’b0000 ) ;
end

В дереве исходников делаем правый клик по файлу, выбираем Source Node Properties. В секции Used In снимаем галочки Synthesis и Implementation. Мы же не хотим, чтобы какие-то там тесты засоряли нашу далеко не резиновую FPGA?

Теперь говорим Flow → Run Simulation → Run Behavioral Simulation. В итоге вы увидите что-то примерно такого плана:

Можно видеть, что когда sw[0] равен нулю, led[0] равен единице, и наоборот. При этом все изменения происходят по фронту тактового сигнала. Похоже, что программа работает корректно. Ну и на ассертах ничего не свалилось, что как бы намекает.

Заключение

Архив с описанным выше проектом можно скачать здесь. В качестве дополнительных источников информации я бы рекомендовал следующие:

  • Если вас интересуют подробности по железу, обратите внимание на даташит Artix-7 [PDF], reference manual к Arty Artix-7 [PDF], а также схему платы [PDF];
  • Книга Цифровая схемотехника и архитектура компьютера (Digital Design and Computer Architecture) — прекрасная книга, в которой, помимо прочего, подробно объясняются языки SystemVerilog и VHDL, а также внутреннее устройство FPGA;
  • OpenCores.org — каталог всевозможных открытых проектов под FPGA. Для скачивания исходного кода требуется регистрация. Активация аккаунта производится модераторами вручную, поэтому может занимать несколько дней;

А пишите ли вы под FPGA? Если да, то на каком языке и какого производителя предпочитаете?

ПЛИС первые шаги

Наконец то пришла долгожданная посылка. Дрожащими руками разворачиваю кучу оберточного целлофана и достаю небольшую платку с надписью Altera. Вот про это зеленое создание из коробчонки и пойдет дальнейший разговор.

Наверно сразу возникает мысль, да сколько можно, не пора ли остановиться на одном каком то семействе и пилить статьи? Ведь еще столько всего можно рассказать про AVR. Кроме того, еще не раскрыта тема STM32. А тут еще какой то новый микроконтроллер.

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

Вернемся к сабжу. Пока нет вообще никаких планов касаемо ПЛИС, статья лишь для некого общего развития, выльется во что то большее — хорошо, нет — значит нет. Зачем вообще эта затея? Недавно упоминал, что тенденция использования AVR и PIC микроконтроллеров сильно изменилась, ни в одном приборе/устройстве разобранном мною за 3 года я не видел ни тех ни других. Как ни странно, но и STM32 я видел всего в одном устройстве — в своем портативном осциллографе. Часто речь идет о мифических ARM процессорах(микроконтроллерах?) внутри, но на практике я их еще не видел. Зато в 90% реальных случаев, когда вскрываешь крышку и видишь чип… с надписью ALTERA.

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

Первое что удивило — это не микроконтроллер вовсе. Дословно ПЛИС — программируемая логическая схема. Так что это набор логических элементов, да да тех самых «или», «не», «и» и т.п, которые можно соединять между собой. На текущем этапе, вообще сложно представить какая от этого польза. Есть мнение, что это позволяет достичь более высоких скоростей работы. Кроме того, рекомендую в интернете ознакомиться с проектами реализованными на ПЛИС, чтобы понять что это круто. Все это подогревает интерес еще больше.

Первое с чего стоит начать — ознакомиться с ценником

кто то говорил что EasyAVR это не сбыточная мечта, что тогда говорить про наборы стоимостью в 56-246 килорублей. Хотя цены на конкретные камни достаточно демократичные, но даже так, моя любовь ко всему фирменному угасла, ибо фирменный программатор стоит 20-28к. И да, камешки в достаточно суровых для рядового радиолюбителя корпусах вроде TQFP100, поэтому в домашних условиях сложно представить их приготовление.

Даже те решения, что предлагают самые дешевые радиолюбительские магазины, нельзя назвать дешевыми. Альтернативой является сайт с чудным названием «марсоход» — www.marsohod.org. Не смотря на то, что я не оставляю ссылки, на сайты подразумевающие всякого рода заработки и рекламу, то этот сайт отличается. Основная их деятельность изготовление плат: марсоход, марсоход2 и программатор MBFTDI. Попутно они пилят проекты для этих плат. Но! Проект с открытыми исходниками, схемами, драйверами и сделан с душой. Не хочешь покупать — не покупай, можешь сделать сам, вот тебе вся информация, даже разводка пп. Для каждой платы имеется несколько десятков готовых проектов. Вкупе с демократичными ценами на продукцию, проект достоин похвалы. Собственно всю инфу можно найти у них на сайте, здесь же я попытаюсь прояснять некоторые основные моменты и грабли.

На втором марсоходе программер встроенный и поболее ништяков, но для себя я решил взять первый марсоход и программатор, в случае успеха, платы можно делать самостоятельно и нужен будет программатор отдельно. Итак заказ сделан, чтобы оплатить его побыстрее решил сделать это наличкой. Побежал с бумажкой в ближайший банк и был послан, не смотря на то что оплату можно сделать через любой банк, сделать удалось это лишь в сбере, отстояв длинную очередь. Так что лучше уж веб платежки. Надо отдать должное, заказ обработали оперативно и пришел он достаточно быстро — грубо говоря за неделю, даже почта России не облажалась. За это отдельный респект.

В комплекте пришел программатор, плата марсоход и проводок питания, но почему было не положить шнурок от программатора до платы. Пришлось повозиться и паять свой шнурок. Сам камень именуется EPM240T100C5. Хорошо это или плохо пока не понятно. Вот она платка с кварцем на 100мгц и питанием 3.3В.

Теперь дойдем до самого интересного, проекты пишутся в Quartus II web edition. Скачать ее было довольно напряжно, а папка после полной установки занимает более 10Гб. Создать первый проект оказалось достаточно проблематично, ибо среда не очень дружелюбна, без мануалов тут не обойтись.

Сам процесс создания проекта и нет смысла описывать, на сайте марсохода все в картинках. Основные моменты: 1. создается проект; 2. выбираем камень 3. выбираем язык, на котором будет писаться проект, например авторы юзают Verilog. 4. собственно пишем программу 5.настраиваем не подключенные пины 6.настраиваем подключенные пины 7.компилируем 8.шьем.

Компилится жесть как долго, на мой взгляд 2 минуты, это гемор. При компиляции постоянно вылезает нытье с просьбой купить программу. Шьется все через JTAG. На удивление, с установкой драйверов и определением программатора проблем не было — все как часы.

Предлагаю посмотреть пример «программы» hello world. Например, светодиод(led0) постоянно горит, но при нажатии кнопки(key0) — гаснет. Как бы инверсия. Реализуем это так: в основной программе — состояние светодиода равно состоянию кнопки, а в настройках подтягиваем пин с кнопкой к + питания.

module test_wires ( input wire key0, output wire led0, ); assign led0 = key0; endmodule

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

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

18 комментариев: ПЛИС первые шаги

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

FPGA или микроконтроллер: что же выбрать?

Дата: 19.01.2021 08:22

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

Микроконтроллер же имея фиксированную архитектуру и фиксированный набор команд (Instruction Set Architecture (ISA)) — не может обрабатывать данные за пределами архитектуры или набора команд. Однако, ПЛИС благодаря своей гибкой архитектуре могут обрабатывать данные и выполнять вычисления за пределами своих возможностей из-за наличия гибкой программируемости, которая может управлять аппаратными ресурсами, что делает ПЛИС уникальной платформой для выполнения встроенных системных задач.

Мы обсудим сходства и различия между ПЛИС и микроконтроллером.

Архитектура

Первое существенное различие между ПЛИС и микроконтроллером связано с его аппаратной архитектурой. Микроконтроллер имеет традиционную архитектуру, основанную на архитектуре набора команд (ISA), как показано на Рис.1. ISA фиксирована для каждого микроконтроллера, программист не может инициировать какую-либо команду не из ISA. Центральный процессор микроконтроллера-это типичный процессор, задача которого состоит в последовательном выполнении инструкций. Микроконтроллеры поддерживают GPIO вместе с таймерами и элементами памяти, например RAM/ROM. Современные микроконтроллеры также оснащены интерфейсами USB, PCI-интерфейсами для внешней передачи данных.

Рис. 1: структурная схема микроконтроллера (источник: Renesas)

Архитектура ПЛИС отличается от микроконтроллеров.Даже архитектура ПЛИС сама по себе является большой областью. Она включает в себя Look-up-Tables (LUT) -таблицы истинности или поиска , конфигурируемые логические блоки (CLBs), элементы маршрутизации, матрицу переключения между CLB и блоки ввода-вывода, как показано на Рис. 2. Исследователи работают над архитектурой FPGA, чтобы сделать ее более энергоэффективной и увеличить ее вычислительные возможности.

Рисунок 2: архитектура ПЛИС

Центральным вычислительным элементом ПЛИС является LUT, который сконструирован таким образом, что реализует любые фундаментальные (базовые) комбинационные логические элементы, например NAND, NOR, OR, AND. Все эти основные логические элементы могут быть реализованы с помощью LUT. Будучи связанным с проектированием цифровых устройств, вы должны знать, что если вы можете реализовать любой базовый логический элемент (nand, nor и т. д.), то можете реализовать любую комбинационную схему. Затем с помощью триггера LUT можно использовать и для реализации любой последовательной логики.

Здесь следует отметить, что все, что вы реализуете на ПЛИС, будет преобразовано в базовые логические элементы (nor, and, xor и тд), любая функция, любой дизайн преобразуются в базовые логические элементы с помощью инструментов разработки на ПЛИС, например Vivado или Quartus II. В ПЛИС также хорошо поддерживаются внешние интерфейсы, GPIO, память, а современные ПЛИС оснащены секциями DSP, PCIe и многим другим.

Стоимость

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

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

Технологический процесс

Микроконтроллер содержит одно или несколько процессорных ядер (CPU) вместе с ОЗУ, а также флэш-память, содержащую программную память, которая также называется машинным кодом (. hex-файл), каждый машинный код представляет собой инструкцию, выполняемую на процессоре.

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

Энергопотребление

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

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

На рынке очень мало ПЛИС с такими низким энергопотреблением, сравнимыми по этому параметру с микроконтроллерами.

Приложения

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

  • Дата-Центр
  • Аэрокосмическая И Оборонная Промышленность
  • Прототипирование ASIC
  • Автомобильный сегмент
  • Broadcast & Pro AV
  • Обработка Видео и изображений
  • Проводная и беспроводная связь

Микроконтроллер может быть использован в небольших приложениях:

  • Бытовая Электроника
  • Медиа-Приложения
  • Промышленное Применение
  • Автомобильной Промышленности