
Сегодня речь пойдёт о простейшем проекте для программируемой логической интегральной схемы (ПЛИС), а именно — связки USB Byte Blaster и отладочной платы с чипом Altera Max II на борту. Поменьше слов — побольше картинок. А если этот проект чем-то не подойдёт — я подготовил ещё один посложнее и поинтереснее, с мигающим светодиодом.
Маленькая прелюдия
Желание начать что-то новое, пожалуй, одно из ценнейших. Любой, кто вдоволь наигрался с Ардуино, и даже освоивший STM 32 рано или поздно сталкивается с мыслью: а не попробовать ли что-нибудь ещё круче? Такое, чтоб цифровую обработку сигналов в реальном времени (DSP)… И это что-нибудь — конечно ПЛИС (термины CPLD и FPGA гуглятся в первый же день изучения).
И пусть на рынке есть не одно имя, но чипы Intel со средствами разработки Altera пока что доступнее других по цене (а вообще CPLD, а тем более FPGA — штука, прямо скажем, не из дешёвых). Конечно, Cyclone V — головокружительная железяка, но для первых простеньких проектов можно обойтись и Max II.
Демо-плата с чипом EPM240T100C5N и программатор USB Byte Blaster на Aliexpress обошлись чуть меньше, чем в 10 долларов с учётом доставки.
Бесплатная версия среды разработки Quartus II Lite версии 17.0 для Linux скачана с официального сайта. Пройден этап запуска Квартуса через sudo, нагуглены способы победить доступ к программатору, который ни в какую не хотел толком опознаваться, не говоря о прошивать (например здесь и здесь).
Осталось залить что-то простое, но что? Есть хороший проект «Марсоход», но у меня другая плата, светодиод всего один… Если читатель остановился на этом же вопросе — то мой дальнейший рассказ попадёт прямо в точку.
Простейший проект для Max II
Что может быть проще одного элемента «и-не»? Ну ладно, элемент «не», но это уже слишком просто. Открываем Квартус.
Создаём новый проект: File — New Project Wizard… Даём осознанное название, указываем каталог, где будут храниться файлы.
На следующих двух шагах создаём пустой проект, и никаких файлов пока не добавляем.
Далее выбираем семейство Max II и тип корпуса Any QFP — список вариантов внизу сократится, и останется выбрать строку со своим чипом — EPM240T100C5.
Следующие два шага проходим как есть, без изменений.
Проект создан. Настало время что-то в него добавить. Кнопка New… или File — New…, выбираем Block Diagram/Schematic File (не потому, что так надо, просто рассказ о языке VHDL занял бы слишком много времени).
Используя инструменты из панели, рисуем на появившемся поле. Выбираем Symbol Tool и в дереве находим элемент and2; снимаем галочку Repeat-insert mode.
ОК, ставим этот элемент. Далее, используя выпадающий список входов-выходов, рисуем два входа и один выход. Затем берём простую линию и соединяем их с ногами элемента. Если вам это впервой — подскажу: выбрав рисование линий, нужно нажать на одном конце и тянуть к другому, затем отпустить. Необычно, но можно привыкнуть. Затем двойным щелчком по названиям входов-выходов открываем текстовое поле и меняем названия. Должно выйти так:
Самое время сохраниться. Теперь берёмся за Assignment Editor (на панели инструментов кнопка из синего ромбика и карандаша, см. всплывающие подсказки). Нужно заполнить таблицу соответствия входов-выходов на схеме реальным ножкам микросхемы. Щёлкаем на поле To, пишем название как на схеме; переходим к Assignment name, раскрываем двойным щелчком, выбираем Location (подсказка: список очень большой, чтобы не листать долго, можно нажать L — и указатель попадёт в нужное место).
Тут нужно маленькое отступление. На моей плате светодиод через перемычку и резистор подключен к выводу 77 микросхемы. Входы мне показалось удобным взять №99 и 100. Исходя из этого Value указываем так:
Пора скомпилироваться! Start Compilation на панели инструментов. Квартус сначала предложит сохранить проект.
Сохраняем и ждём. Компиляция идёт достаточно долго, минута — это нормально, нужно много чего проверить, собрать… По окончании видим отчёт.
Предупреждения сейчас не страшны, главное, что Total logic elements у нас 1 из 240 (ещё бы, мы же один-то и использовали), Total pins заняты 3 из 80 (что тоже правильно). Теперь можно открыть Pin Planner (см. кнопки на панели инструментов), чисто чтобы ознакомиться с возможностями Квартуса.
Что здесь? Направления ног In и Out опознались правильно, видно, что они по умолчанию настроены на нагрузку до 16 мА, понятно, где они на чипе. Можно открыть и Chip Planner (у меня он при открытии поругивается, предлагает купить версию пожирнее, но я вежливо отказываюсь), ткнуть в тёмно-синий блок, в котором планируется разместить нашу логику и нажимая кнопки с ножками-стрелочками в панели слева засветить связи с ножками чипа. Заодно справа видно часть схемы, к которой этот блочок относится (особенно полезно, когда схема большая). Потом можно будет смотреть даже время, которое требуется сигналу на прохождение определённого участка цепи. Приятно.
Пора уже залить это дело в сам камень. Открываем Programmer.
Сначала нужно выполнить Hardware Setup.
В выпадающем списке просто выбрать установленный в системе программатор и закрыть это окошко. В программаторе должны стоять все галочки — и можно жать Start. Если всё настроено правильно — по окончании прошивки Progress будет зелёным и с надписью 100% (Successful).
Можно тихонько сказать «ура» и посмотреть на отладочную плату. Светодиод может не гореть. А может гореть — в зависимости от того, насколько сильны наводки (о подтягивающих резисторах я не рассказал для краткости). Ну что, раз это «и-не», значит только единицы на обоих входах зажгут светодиод на выходе. Проверяем: берём на плате GND и +3.3 и подаём их на выводы 99 и 100.
Молчит? Молчит. Поменяли местами плюс и минус. Молчит? Молчит. Теперь плюс ему на обе ноги.
Горит? Горит. Поздравляю! Вы только что запрограммировали CPLD Altera MAX II.