В предыдущей части статьи: «ПЛИС Altera. Часть 1: установка и настройка среды разработки», — рассказывалось о получении дистрибутива Quartus. Его установке. Создании заготовки для нового проекта с помощью встроенного мастера.
Во второй части продолжается работа над проектом. Начинается создание конфигурации для ПЛИС.
Весь процесс создания конфигурации ПЛИС в Quartus II можно разбить на несколько этапов:
-
проектирование цифровой схемы;
-
анализ созданной схемы на наличие ошибок;
-
привязка входов и выходов схемы к конкретным выводам ПЛИС;
-
компиляция проекта и создание двоичных файлов для конфигурирования ПЛИС;
-
конфигурирование ПЛИС посредством USB Blaster.
Шаг 1. Выбор способа проектирования цифровой схемы
Quartus II предусматривает два различных подхода к созданию схемы:
-
описание логики работы схемы на одном из языков проектирования аппаратуры (Verilog HDL, System Verilog, VHDL);
-
схемотехническое (визуальное) проектирование схемы.
При визуальном проектировании схема строится из набора стандартных или пользовательских блоков, которые соединяются между собой «проводами». Очевидными преимуществами такого подхода являются: наглядность и более низкий порог вхождения (нет необходимости изучать новый искусственный язык). Это хороший вариант для проектирования небольших схем на начальных этапах. Но с ростом сложности схемы растет количество проводов и блоков ее составляющих. Поэтому ориентироваться в ней становится все сложнее. Это очевидный недостаток визуального проектирования.
Из этого не следует что графическое проектирование совсем не используется при описании сложных схем. Один из подходов предполагает сочетание визуального проектирования и языка проектирования аппаратуры (HDL) в одном проекте. В этом случае отдельные блоки схемы описываются на языке HDL, а главный модуль проекта («top‑level design entity») объединяет эти блоки в графическом представлении. Таким образом, первые шаги в проектировании цифровых микросхем имеет смысл начинать именно с графики.
Шаг 2. Определение общего вида схемы
Проектирование схемы начинается с определения ее общего вида. А именно:
-
с определения входов и выходов схемы;
-
с определения ее внутреннего устройства (функции).
Первая схема будет достаточно простой и состоять всего из трех базовых логических элементов: «И», «ИЛИ», «НЕ». Рассмотрим каждый из них в отдельности.
«НЕ» элемент имеет один вход и один выход. Он выдает на свой выход логическую единицу (высокое напряжение) всегда, когда на его вход подается логический ноль – низкое напряжение. Если же на входе «НЕ» элемента установлено высокое напряжение – логическая единица, то на его выходе будет установлен логический ноль. Таким образом этот элемент изменяет входное значение на противоположное.
«ИЛИ» элемент имеет как минимум два входа и один выход. На выходе «ИЛИ» элемента высокое напряжение будет устанавливаться всегда, когда на его первый или второй, третий — то есть хотя бы на один из его входов будет подано высокое напряжение. Если на всех входах установлено низкое напряжение, то и на выходе «ИЛИ» элемента будет низкое напряжение.
«И» элемент, так же как и «ИЛИ», имеет два и более входов и один выход. Но, в отличие от «ИЛИ», этот элемент выдает на свой выход низкое напряжение всегда, когда хотя бы на один из его входов подано низкое напряжение. Логическая единица на выходе будет установлена только тогда, когда и на первый, и на второй, третий — на все входы «И» элемента будет подано высокое напряжение.
Так как «И» и «ИЛИ» элементы могут обладать большим числом входов, необходимо определиться с их количеством. Для демонстрации принципа работы цифровой схемы будет вполне достаточно двухвходовых элементов.
Все логические элементы в схеме будут работать независимо друг от друга, поэтому можно просто сложить количество их входов и выходов. Получается что схема будет иметь три выхода. По одному для каждого логического элемента. Входов у схемы будет пять: два для «И», еще два для «ИЛИ» и один для «НЕ».
Для управления напряжением на входах будут использоваться тактовые кнопки. Для отслеживания состояния схемы будут очень удобны светодиоды, подключенные к ее выходам. В первом приближении получается схема, представленная на рисунке ниже.
Шаг 3. Визуальное проектирование схемы
Подготовительная работа закончена, можно возвращаться в Quartus II и приступать к наполнению проекта.
Запустите Quartus II. После запуска Вас встретит уже знакомое стартовое окно.В центральной его части, под надписью «Recent Projects» располагаются ссылки на последние проекты. Кликните по «firstproject.qpf» и проект откроется. Того же результата можно добиться и с помощью меню File → Open Project. Меню вызывает окно, в котором необходимо перейти в папку с проектом и выбрать файл «firstproject.qpf». Файл с расширением «.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:». Будет выполнен автоматический переход на указанный примитив в библиотеке. Это довольно удобно, но имейте ввиду что поиск примитивный. Он выполняется по полному совпадению введенного имени с наименованием в библиотеке. Поэтому если Вам нужен элемент «И», то переход будет возможен по имени «and2» или «and3», но не «and».
Ниже поля ввода имени элемента располагается группа параметров определяющих режим вставки выбранного элемента. Не все параметры могут быть доступны для выбора. Их доступность определяется типом выбранного элемента. При выборе логического примитива доступен и по умолчанию активирован параметр «Repeat‑insert mode». Этот параметр позволяет вставить несколько однотипных элементов за раз, без повторного обращения к инструменту «Symbol Tool». Выход из режима повторной вставки производится кнопкой «Esc», либо выбором другого инструмента с панели инструментов. Сейчас можно отключить «Repeat-insert mode», так как для выбранной схемы достаточно всего одного логического элемента каждого типа.
После выбора логического элемента нажмите на кнопку «OK» и разместите свой первый символ в области построения схемы.
Окно выбора цифровых элементов можно вызвать и двойным кликом левой кнопки мыши по области построения схемы.
Если вы захотите изменить расположение установленного элемента или отредактировать его свойства, Вам необходимо будет использовать инструмент «Selection Tool». Он идет вторым на панели «Block Editor» и выглядит как курсор мыши.
Данный инструмент активирован когда не выбран ни один из других инструментов. Переход на него выполняется автоматически и при нажатии кнопки «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 градусов. Эти инструменты обозначены на иллюстрации ниже, первый и второй соответственно.
Выберите инструмент «Orthogonal Node Tool» и переместите курсор мыши в область построения схемы. Форма курсора изменится на перекрестье, рядом с которым будет изображена иконка выбранного инструмента. Наведите центр перекрестья на кончик линии идущей от одного из входов и зажмите левую кнопку мыши. Начните перемещать курсор мыши с зажатой левой кнопкой, за курсором потянется тонкая линия соединительного проводника. Доведите курсор до линии входа логического элемента и отпустите левую кнопку мыши. Связь между выводом схемы и входом логического элемента установлена.
Обратите внимание на инструмент «Zoom Tool» панели «Block Editor». Он выделен на рисунке ниже.
Этот инструмент позволяет менять масштаб отображения схемы. После его выбора можно увеличивать масштаб щелчком левой кнопки мыши по области построения, и уменьшать — правой кнопкой мыши. Его очень удобно использовать при редактировании связей.
Также масштаб схемы можно менять колесом прокрутки мыши предварительно зажав клавишу «Ctrl» на клавиатуре.
Соедините оставшиеся выводы логических элементов с выводами схемы. В результате должна получится схема аналогичная той что изображена на следующем рисунке.
При создании связей возможны ошибки. Наиболее частые из них представлены на рисунке ниже.
В первом случае, при соединении вывода «input1_or» с логическим элементом «OR2» образовалось пересечение проводников — жирная точка на рисунке. Здесь было неудачно выбрано место для начала отрисовки соединения. Начало проводника обозначено косым крестом. Хорошо видно что проводник начинается слишком рано, внутри границ вывода. Поэтому на границе вывода среда автоматически создала пересечение двух проводников, а начало проводника фактически осталось висеть в воздухе. Исправить ошибку можно просто отредактировав получившуюся связь.
Для редактирования связи необходимо дважды щелкнуть по ней левой клавишей мыши. Первый щелчок выделит для редактирования участок проводника между двумя ближайшими точками присоединения, в данном случае — между точкой присоединения к логическому элементу и точкой пересечения проводников. Двойной щелчок выбирает всю цепь проводников между элементами. После выделения проводника на нем будут обозначены доступные для редактирования узловые точки — синие квадраты. Смотрите рисунок ниже.
Теперь нужно выбрать узловую точку расположенную левее пересечения проводников и переместить ее вправо, к границе вывода «input1_or». Начало проводника соединится с выводом, а лишнее пересечение будет автоматически удалено.
Во втором случае, при соединении «input2_or» с логическим элементом была рано отпущена клавиша мыши и связь оборвалась на пол-пути. Не подключенный конец проводника также обозначен косым крестом. Тут возможны два решения: отредактировать получившуюся связь или достроить ее. Достройка связи происходит точно также как и простая отрисовка новой: инструмент «Orthogonal Node Tool», навести на точку обрыва текущей связи, провести линию до логического элемента. Это же решение можно использовать для построения сложных ломанных линий.
На этом вторая часть статьи по обучению работе с ПЛИС Altera (Intel) завершается.
В следующей части будет рассказано о том как преобразовать созданную схему в конфигурацию для ПЛИС. И как загрузить полученную конфигурацию в микросхему.