Модуль FPGA для PinBoard II (Своими руками)

Преамбула…
Периодически, в процессе разработки того или иного электронного устройства возникает необходимость проверки каких то идей и мыслей, причем как показывает практика, лучше эти мысли проверять до начала изготовления самого устройства… вот как раз для таких целей я и использую приобретенную плату PinBoard II. Но вот пришлось столкнуться с ПЛИС и, как показала практика, CPLD MAX II оказалось недостаточно, всего 240 ЛЭ, мало!

Покупать что-то серьезное с FPGA мне нет необходимости, вполне достаточно той периферии, которая есть на PB II, поэтому решил сделать модуль для PB II c FPGA.

Модуль FPGA для PinBoard II

Выбор пал на FPGA фирмы Altera Cyclone II, а именно на микросхему EP2C5T144C8N, причина простая – она была в наличии, а 4608 ЛЭ мне достаточно. Особое быстродействие не требуется, поэтому Speed Grade – 8.
Немного напомню, как Альтера маркирует свои плис:

При желании, без каких либо изменений, можно применить: EP2C5T144C6N, EP2C5T144C7N, EP2C5T144I6N, EP2C5T144I7N, EP2C5T144I8N, а также EP2C8T144C6N, EP2C8T144C7N, EP2C8T144C8N, EP2C8T144I6N, EP2C8T144I7N, EP2C8T144I8N но при этом будет уже не 4 608 ЛЭ, а 8 256 ЛЭ!

И так теперь непосредственно о плате. Помимо FPGA на ней размещен тактовый генератор на 100МГц, микросхема конфигурационной памяти EPCS4 в режиме Active Serial (конфигурация хранится в ней и загружается в FPGA при включении), стандартный JTAG разъем, стабилизатор питания ядра и кучка конденсаторов :). В общем ничего особо интересного на схеме нет, все по аналогии с платой для PB II на CPLD MAX II.

Печатная плата, как и схема, разведена в программе DipTrace. Монтаж получился двухсторонний с достаточно мелкими дорожками, так что повторить в домашних условиях вряд ли получится, хотя есть умельцы… Изготовлена ПП была в компании «Резонит» за 2200 руб (сверхсрочное), правда резонитовцы порадовали и прислали мультиплекс с 6-ю платами (5 в подарок). Сразу оговорюсь, что на фотографиях генератор и стабилизатор ядра припаяны навесным монтажом, т.к. пришлось использовать не те, которые предполагалось, при проектировании ПП, в архиве все уже исправлено и припаяется, как положено.


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

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

Простенький пример для FPGA
Оговорюсь, что для создания всех проектов, упомянутых в статье использовался бесплатный Quartus II 13.0sp1 (64-bit) Web Edition c официального сайта Altera.
Итак, запускаем Quartus II и создаем новый проект “File”-> “New Project wizard”. Указываем путь к проекту (желательно без русских букв) и название проекта.

На втором шаге файлы не добавляем, а вот на третьем нам нужно выбрать конкретную микросхему, в нашем случае EP2C5T144C8N. Щелкаем далее, ничего не меняя и финиш.

Теперь добавим к проекту графический файл, в котором и будем рисовать схему для ПЛИС. “File”-> “New”.

Теперь для примера соберем простую схему для исследования таблицы истинности элемента 3И (AND3). Для тех кто не помнит (не знает) 3И работает следующим образом, на выходе будет 1 тогда и только тогда, когда на всех входах единица. (Условные изображения найдете на панели инструментов графического редактора).

На этой схеме входы BTN1-BTN3 – кнопки расположенные на PB II, поскольку на кнопках в не нажатом состоянии лог. 1 (причем подачу этой единицы обеспечат подтягивающие резисторы внутри ПЛИС), мы инвертируем сигнал с помощью 3х инверторов НЕ (NOT), таким образом, на вход элемента AND3 при нажатии кнопок будут подаваться лог. 1. Также на схеме есть четыре выхода, названные LED1-LED4, эти выходы будут подключены к светодиодам на PB II. Нарисовав схему, запускаем компиляцию. Если все сделано верно – получите сообщение об успешной компиляции. Не забываем сохранить проект, включая созданный ранее файл со схемой.

Теперь самое главное – нужно связать нашу схему с реальным железом. Для этого выполняем «Assignment» -> «Assignment Editor». И заполняем таблицу как показано ниже. Здесь для всех наших входов и выходов задаем расположение (Location), т.е. показываем на какую ножку микросхемы подключить вход или выход нашей схемы. Также для кнопок включаем подтягивающие резисторы.

И последний штрих – но весьма важный, выполняем «Assignment» -> «Devices…» -> «Devices and Pin option…» -> «Unused Pins» указываем «All input tri-stated», этим действием мы переводим все неиспользуемые выводы микросхемы в высокоимпедансное состояние, дабы ничего не спалить.

Проект готов можно повторить компиляцию и прошить FPGA.
Прошивка (или загрузка конфигурации)
Опишу два способа прошивки:
1 – с помощью программатора USB-Blaster (Удобный),
2 – с помощью МС FT2232, имеющейся на PB II (не удобный, для тех, у кого нет USB Blastera).
Если вы используете USB-Blaster – запускаем из квартуса утилиту «Programmer» Добавляем файл «test.sof» из папки «output_files» нашего проекта, включаем PB II и нажимаем «Start». После успешной прошивки ничего не происходит, светодиоды не горят, но как только мы нажимаем одну из кнопок, загорается соответствующий светодиод, а если мы нажимаем все 3 кнопки – срабатывает наш элемент 3И и на его выходе появляется лог.1, о чем свидетельствует загорание LED4.

Все бы хорошо, но как только мы отключим питание – наша программа из FPGA исчезнет, а стенд не будет функционировать должным образом. Исправим ситуацию – зальем прошивку в конфигурационную память, откуда она будет загружаться в FPGA при включении. Выполняем «File»-> «Convert Programming Files…»

Указываем выходной формат *.jic, добавляем устройство в Flash Loader и файл с прошивкой *.sof. И нажимаем Generate. Теперь прошиваем FPGA с помощью сгенерированного файла jic, и наша программа не теряется при выключении питания.

Работает это следующим образом. Сначала в FPGA зашивается Flash Loader (Так сказать программатор, реализованный на ПЛИС), а потом с его помощью по интерфейсу Active Serial уже в конфигурационную микросхему EPCS4 зашивается наша конфигурация. Поэтому процесс программирования длится чуть дольше, чем обычно. Стоит отметить, что при использовании USB-Blaster также имеется возможность использовать отладчик SiganTap.
Если вам не повезло, и USB-Blaster у вас нет, можно загрузить программу, используя FT2232, имеющуюся на плате и SVF плеер. Первое что нужно сделать — настроить FT2232 с помощью утилиты FT-Prog, необходимо для порта A указать режим «245 FIFO», поставить галочку «High Current I/O’s» и использование драйвера «D2XX Direct», теперь у вас в системе только один COM порт, а не два .

Теперь заставим квартус генерировать нужный нам файл «Assignment» -> «Devices…» -> «Devices and Pin option…» -> «Programming Files», ставим галочку для SVF.

Файл плеера mbftdi.exe и сгенерированный SVF файл должны лежать в одной директории, туда же для удобства советую положить BAT файл с двумя строками:
mbftdi Test.svf
pause
И последнее – шилд идущий к CPLD MAX II нам не подойдет, нужно соединить JTAG разъем с портом A микросхемы FT2232 следующим образом. Данные соединения достаточно сделать простыми проводками, ничего паять не нужно!

Теперь включаем плату, запускаем BAT файл, и через пару секунд наша FPGA сконфигурирована и работает. Правда при этом микросхема конфигурационной памяти остается не тронутой.
Демонстрационная программа
Ну и на последок, приведу описание демонстрационной программы (EP2C5_DEMO). Проект лежит в архиве. А вот сама схема:

И так что же делает эта схема.
1. При включении Led2 еле светиться, а каждые 10 секунд он сначала увеличивает свою яркость, а затем уменьшает, и так постоянно по кругу…
2. Если нажать кнопку BTN3 то светодиоды Led0 и Led1 начнут радостно перемигиваться, меняя яркость. Если повторно нажать на BTN3 то светодиоды снова погаснут.
3. Кнопка BTN2 включает мигание светодиода Led3, который мигает с частотой 1 герц, подтверждая работоспособность генератора. Повторное нажатие на BTN2 приведет к отключению.
4. При нажатии и удержании кнопки BTN1 плата издает истошный звук частотой 1 кГц.
Обратите внимание, что все 4 процесса работают независимо друг от друга! Вот она истинная параллельность процессов! 
Теперь внимание тем людям, которые хорошо знакомы с ПЛИС – проект совершенно не оптимален, так задумано ;)
На самом деле, не смотря на простоту, проект весьма большой, и в MAX II на 240 логических ячеек не влезет!
Вот я и предлагаю начинающим плисовцам подумать, как сделать его гораздо компактнее (в несколько раз!). Ну и дам маленькую подсказку: при получении нужной частоты с помощью счетчиков, можно сначала получить 1 нужную частоту, а уже из нее получить следующую нужную, частоту и т.д.… Не нужно заставлять считать плис одно и тоже по несколько раз. Есть и другой вариант, для более опытных пользователей плис – используем средства самой FPGA для получения нужной частоты и не мучаем счетчики без надобности.
PS:
Проект совсем свежий, еще до конца не обкатанный, если в схеме или плате кто то найдет ошибки, буду весьма благодарен. На данный момент на этой плате было опробовано несколько несложных проектов, в том числе запустил Nios II, правда больше для спортивного интереса.


Данная статья – проба пера, так что прошу сильно не пинать.
Все материалы статьи одним архивом FPGA.rar
  • +11
  • 26 сентября 2014, 13:24
  • ppram5
  • 1
Файлы в топике: FPGA.zip

Комментарии (14)

RSS свернуть / развернуть
С почином Вас=))
Добавьте тег
0
  • avatar
  • kalik
  • 26 сентября 2014, 13:39
Извиняюсь, какой тег? ПЛИС, FPGA, PinBoard II — этих тегов недостаточно?
0
/CAT иначе эта простыня отображается целиком в списке топиков. приходиться долго листать=)
0
Так вроде поправил уже… Нормально сворачивается…
0
В среднем $10 за штучку. Наверное единственная причина по которой ПЛИС не так широко распостранены у радиолюбителей. А на сколько сложно было вкуривать мануалы по разводке платы ( питание)?
0
Вообще каких то особых сложностей с питанием у ПЛИС нет, все рекомендации на сайте Altera в родной документации. А что касается разводки платы — то просто соблюдение общепринятых рекомендаций для цифровых микросхем. На сайте резонита есть очень хорошая подборка информации по топологии плат.
Я не считаю, что применение ПЛИС останавливает цена, скорее отсутствие необходимости в применении плис в любительских и даже профессиональных конструкциях. Зачем ставить плис, если мк прекрасно справляется!? Вот их и обходят стороной, но радует что ситуация все таки меняется к лучшему.
0
Кстати если кому нужно МОГУ ОТДАТЬ 4 ПЛАТЫ бесплатно. Правда стабилизатор и кварц придется припаять как на фото :) (Тверь, Москва)
0
Хочу одну.
0
Все, платки разошлись.
0
Задам здесь вопрос, а насколько «нормален» такой бластер: www.aliexpress.com/item/Free-shipping-New-Mini-Usb-Blaster-Cable-For-CPLD-FPGA-NIOS-JTAG-Altera-Programmer-in-stock/1943650230.html
Пользоваться можно, или здесь от него только название? Если стоит обратить внимание на вариант лучше, то подкиньте ссылку…
0
  • avatar
  • N1X
  • 26 сентября 2014, 23:49
У меня подобный, правда тогда они чуть дороже стоили. Работает без проблем.
0
  • avatar
  • PRC
  • 27 сентября 2014, 11:42
Ох ты ж какая огромная
0
Огромная мс ПЛИС или плата? :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.