ПЛИС Altera. Часть 2: создание схемы в Quartus II
В первой части цикла рассматривалась подготовка среды: получение дистрибутива Quartus II, его установка и создание заготовки нового проекта с помощью встроенного мастера.
Во второй части мы продолжаем работу с тем же проектом и переходим к формированию конфигурации для микросхемы ПЛИС.
Полный цикл подготовки конфигурации в Quartus II удобно разделить на пять этапов:
проектирование цифровой схемы;
проверка схемы на наличие ошибок;
привязка входов и выходов схемы к конкретным выводам ПЛИС;
компиляция проекта и сборка двоичных файлов конфигурации;
прошивка ПЛИС через программатор USB Blaster.
Эта часть статьи целиком посвящена первому пункту — визуальному проектированию цифровой схемы.
Шаг 1. Выбор способа проектирования цифровой схемы
Quartus II поддерживает два принципиально разных подхода к описанию схемы:
описание поведения схемы на одном из языков описания аппаратуры (Verilog HDL, SystemVerilog, VHDL);
схемотехническое (визуальное) проектирование.
При визуальном подходе схема собирается из стандартных или пользовательских блоков, которые соединяются между собой «проводами». Преимущества этого пути очевидны: он нагляден и не требует изучения нового языка, поэтому хорошо подходит для первых небольших схем. Минус тоже очевиден — с ростом сложности быстро увеличивается количество блоков и проводов, и ориентироваться в схеме становится всё труднее.
Примечание
Визуальное проектирование не исключает применение HDL. Часто эти подходы комбинируют: отдельные модули описывают на Verilog или VHDL, а верхнеуровневая схема (top-level design entity) собирает их в графическом представлении. Поэтому первые шаги в проектировании цифровых микросхем имеет смысл начинать именно с графики.
Шаг 2. Определение общего вида схемы
Проектирование любой схемы начинается с определения её общего вида:
какие у неё входы и выходы;
что она делает внутри (её функция).
Наша первая схема будет очень простой и состоять всего из трёх базовых логических элементов: «И», «ИЛИ», «НЕ». Кратко напомним их работу.
Примечание
Элемент «НЕ» имеет один вход и один выход. На выходе устанавливается логическая единица (высокое напряжение), когда на вход подаётся логический ноль (низкое напряжение), и наоборот. Элемент инвертирует входной сигнал.
Примечание
Элемент «ИЛИ» имеет два или более входов и один выход. На выходе устанавливается логическая единица, если хотя бы на одном из входов присутствует высокое напряжение. Если на всех входах низкое напряжение — на выходе тоже низкое.
Примечание
Элемент «И» также имеет два и более входов и один выход. Логическая единица на выходе появляется только тогда, когда высокое напряжение установлено на всех входах одновременно. Если хотя бы один вход в нуле — на выходе ноль.
Так как «И» и «ИЛИ» допускают любое число входов, нужно зафиксировать их количество. Для демонстрации принципа достаточно двухвходовых вариантов.
Все три элемента в нашей схеме работают независимо друг от друга, поэтому их входы и выходы можно просто сложить. Получается, что схема будет иметь три выхода (по одному на каждый элемент) и пять входов: два на «И», два на «ИЛИ» и один на «НЕ».
Управлять напряжением на входах удобно тактовыми кнопками, а наблюдать состояние выходов — светодиодами. В первом приближении схема выглядит так, как показано ниже.
Шаг 3. Визуальное проектирование схемы
Подготовительная работа закончена — возвращаемся в Quartus II и наполняем проект.
Запустите Quartus II. После запуска появится знакомое стартовое окно.
В центральной части окна, под надписью Recent Projects, находятся ссылки
на недавно открывавшиеся проекты. Кликните по firstproject.qpf — проект
откроется. Альтернативно можно использовать меню File → Open Project,
перейти в папку проекта и выбрать тот же файл. Файл с расширением .qpf
(quartus project file) — основной файл любого проекта Quartus II.
Для графического представления схемы в проект необходимо добавить новый
файл с расширением .bdf (block diagram file). Создание нового файла
выполняется через File → New или соответствующей кнопкой стандартной
панели инструментов (под пунктом File главного меню). После выбора этого
действия откроется небольшое окно со списком доступных типов файлов.
Выберите пункт Block Diagram/Schematic File и нажмите OK. Будет
создан пустой файл Block1.bdf, который автоматически откроется в окне
Quartus II. Окно при этом примет следующий вид.
Под вкладкой с именем файла Block1.bdf располагается панель инструментов
Block Editor — на рисунке она отмечена стрелкой с цифрой 1. На ней собраны
все основные инструменты для построения схемы. Центральная область окна
(окружность с цифрой 2) предназначена для размещения элементов схемы.
Можно приступать к созданию схемы. В первую очередь добавим логические элементы. Для этого служит инструмент Symbol Tool, его пиктограмма напоминает двухвходовой логический элемент. На панели Block Editor он шестой слева.
При вызове Symbol Tool открывается окно следующего вида.
Окно состоит из двух основных частей. В левой выбираются нужные элементы, в правой отображается графическое представление выбранного элемента.
Слева доступно несколько способов выбора:
из иерархического списка библиотек;
по точному имени;
из заранее подготовленного файла.
В первом случае нужный элемент находится в иерархии, где элементы
группируются по типам, типы — в группы более высокого уровня и так далее
вплоть до набора библиотек. Двухвходовой элемент «И» лежит по пути
«стандартные библиотеки Quartus»/primitives/logic/and2. Цифра в имени
примитива обозначает количество входов.
Совет
Если вы знаете точное имя элемента, удобнее воспользоваться полем под
надписью Name: — Quartus автоматически перейдёт к указанному
примитиву. Поиск работает по полному совпадению, поэтому переход
произойдёт по and2 или and3, но не по and.
Под полем имени находится группа параметров, определяющих режим вставки.
Их доступность зависит от типа выбранного элемента. Для логического примитива
доступен и по умолчанию включён параметр Repeat-insert mode —
он позволяет вставить несколько одинаковых элементов подряд, не вызывая
Symbol Tool заново. Выйти из режима повторной вставки можно клавишей
Esc либо переключением на другой инструмент. Сейчас этот режим можно
выключить — в нашей схеме каждого логического элемента всего по одному.
Выбрав элемент, нажмите OK и разместите первый символ в области построения схемы.
Совет
Окно выбора цифровых элементов также вызывается двойным щелчком левой кнопки мыши по пустой области построения схемы.
Если потребуется переместить уже размещённый элемент или отредактировать его свойства, понадобится инструмент Selection Tool — он второй на панели Block Editor и выглядит как курсор мыши.
Selection Tool активен, когда не выбран ни один другой инструмент.
Возврат к нему происходит автоматически при нажатии Esc во время работы
с другими инструментами.
Чтобы переместить элемент, выберите Selection Tool, кликните по элементу левой кнопкой мыши и, не отпуская кнопку, перетащите его на новое место. Для более точного позиционирования удобно использовать клавиши со стрелками на клавиатуре — в этом случае удерживать кнопку мыши не нужно.
После символа «И» добавьте в схему «ИЛИ» (or2) и «НЕ» (not).
Сохраните полученную заготовку в файл firstproject.bdf в папке проекта.
Теперь к схеме нужно добавить входы и выходы, через которые она будет взаимодействовать с внешним миром. Для этого служит инструмент Pin Tool, изображённый как группа из трёх выводов. Он расположен справа от Symbol Tool.
Pin Tool предлагает три типа выводов:
Input— вход;Output— выход;Bidir— двунаправленный вывод (используется при работе с шинами данных, может быть как приёмником, так и источником).
Тип вывода выбирается из выпадающего списка, который раскрывается щелчком по треугольной стрелке справа от иконки инструмента. По самой иконке кликать бесполезно. Все выводы добавляются в режиме повторной вставки.
Для нашей схемы понадобится пять входов — расположите их слева от логических элементов на некотором удалении. Аналогично разместите выходы справа.
После добавления выводов имена pin_name… нужно заменить на осмысленные.
Дважды щёлкните по текущему названию вывода и введите новый текст. Имя также
можно задать через окно Pin Properties — его открывает двойной щелчок
по самому выводу. В окне Pin Properties имя задаётся на вкладке
General в поле Pin name(s):.
Теперь нужно соединить входы и выходы схемы с соответствующими входами и выходами логических элементов. За связывание отвечает инструмент Orthogonal Node Tool. Он стоит через один от Pin Tool и выглядит как пара тонких линий, пересекающихся под прямым углом. Рядом расположен похожий Diagonal Node Tool, отличающийся тем, что позволяет рисовать проводники под произвольным углом, а не только под 90 градусов. На рисунке ниже инструменты обозначены номерами 1 и 2 соответственно.
Выберите Orthogonal Node Tool и переведите курсор в область построения схемы. Курсор примет вид перекрестья с маленькой иконкой выбранного инструмента рядом. Наведите центр перекрестья на конец линии, идущей от одного из входов, и нажмите левую кнопку мыши. Перемещайте курсор с зажатой кнопкой — за ним потянется тонкая линия проводника. Доведите курсор до линии входа логического элемента и отпустите кнопку. Связь между выводом схемы и входом логического элемента установлена.
Обратите внимание на инструмент Zoom Tool на панели Block Editor. Он выделен на рисунке ниже.
Этот инструмент меняет масштаб отображения схемы. После его выбора масштаб увеличивается щелчком левой кнопки мыши и уменьшается — щелчком правой. Особенно удобно использовать его при редактировании связей.
Совет
Масштаб можно менять и колесом мыши при зажатой клавише Ctrl.
Соедините оставшиеся выводы логических элементов с выводами схемы. В итоге должна получиться схема, аналогичная изображённой ниже.
Сохраните построенную схему.
Типичные ошибки при создании связей
При прокладке проводников нередко возникают ошибки. Самые распространённые показаны на следующем рисунке.
В первом случае при соединении вывода input1_or с элементом OR2
образовалось пересечение проводников — жирная точка на рисунке. Здесь
неудачно выбрано место начала отрисовки соединения: косой крест отмечает
начало проводника, и видно, что оно лежит внутри границ вывода. На границе
вывода среда автоматически создала пересечение двух проводников, а начало
фактически осталось «висеть в воздухе». Ошибку можно исправить простым
редактированием полученной связи.
Предупреждение
Чтобы отредактировать связь, дважды щёлкните по ней левой кнопкой мыши. Первый щелчок выделяет участок проводника между двумя ближайшими точками присоединения (в данном случае — между выводом элемента и точкой пересечения). Двойной щелчок выделяет всю цепь проводников между элементами. На выделенном проводнике появятся узловые точки — синие квадраты — доступные для редактирования.
Теперь нужно выбрать узловую точку, расположенную левее пересечения, и
переместить её вправо к границе вывода input1_or. Начало проводника
соединится с выводом, а лишнее пересечение Quartus автоматически удалит.
Во втором случае при соединении input2_or с элементом кнопка мыши была
отпущена слишком рано, и связь оборвалась на полпути. Свободный конец
проводника тоже отмечен косым крестом. Здесь возможны два решения:
отредактировать получившуюся связь или достроить её. Достройка выполняется
точно так же, как и обычная отрисовка новой связи: выберите
Orthogonal Node Tool, наведите курсор на точку обрыва и проведите
линию до логического элемента. Этот же приём подходит для построения
сложных ломаных линий.
Примечание
На этом вторая часть руководства по работе с ПЛИС Altera (Intel) завершается. В следующей части мы рассмотрим, как преобразовать созданную схему в конфигурацию для ПЛИС и как загрузить эту конфигурацию в микросхему.