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

ВВЕДЕНИЕ

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

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

Из доступных бюджетных ПЛИС можно выделить 2-х основных производителей 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

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

  • Флэш память – при подаче питания ПЛИС будет сконфигурирована в реализацию во флеш памяти. Вы можете синтезировать свой проект и записать в эту флэш
  • Кварц 25 Мгц – генератор опорной тактовой частоты, именно на этой частоте будут работать все наши проекты, наша ПЛИС может поддерживать до 10 таких каналов.
  • Светодиоды – 10, кнопки – 2.
  • Пины ввода-вывода 61 + 2 земля, 1 не соединен. Можно подключить разнообразные устройства. ЦАП-АЦП, акселерометры и гироскопы, символьный и графические дисплеи, как и у Ардуино.
  • Питание через 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 должен гаснуть (потому что кнопка замыкает ножку с землей), далее мы с этим что-нибудь сделаем)

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

    Ваш адрес email не будет опубликован.