Схема в Quartus II
Для проектирования цифровой схемы на ПЛИС Intel PSG (Altera) используется фирменная IDE — Quartus II. Напоминаю что процесс скачивания, установки данной IDE, создания проекта описан в статье ПЛИС Altera. Часть 1: установка и настройка среды разработки.
Визуальное проектирование схемы в Quartus II описывается в статье ПЛИС Altera. Часть 2: проектирование цифровой схемы, в разделе «Визуальное проектирование схемы».
В текущей статье, в процессе знакомства с понятием совершенной дизъюнктивной/конъюнктивной нормальной формы были получены логические функции выходов схемы построенные по таблице истинности. Используя эти функции можно спроектировать в Quartus II схему, общий вид которой представлен на рисунке ниже.
Нумерация входов схемы идет по порядку сверху вниз от нуля до трех. Выходы схемы идут в алфавитном порядке сверху вниз, от Sa до Sg. Самый нижний выход — DP.
При проектировании цифровой схемы по описанию в форме логических функций логические операции в функциях заменяются соответствующими логическими вентилями. А именно, для получения инвертированного значения одного из входов схемы используется вентиль «not». Для получения результата по группе значений четырех входов в скобках используется четырехвходовой элемент «and4» или «or4». Далее, к значениям полученным в скобках применяется логическая операция «ИЛИ» или «И». На схеме им будут соответствовать логические вентили с числом входом равным числу групп значений входов: «or8» для Sa и Sb выходов, «or7» для Sd и Sg выходов, «and7» для выхода Sc, «or6» для Sf выхода, «or4» и «or2» для выходов Se и DP соответственно.
В библиотеке Quartus II есть четырех, шести и восьмивходовые «ИЛИ» и «И» элементы. Но нет элемента на семь входов. Решить эту проблему можно двумя способами:
- заменить требуемый семивходовой элемент каскадом из одного четырех, одного трех и одного двухвходового элементов: например для «ИЛИ» выражения «A1 ИЛИ A2 ИЛИ A3 ИЛИ А4 ИЛИ А5 ИЛИ А6 ИЛИ А7» и «(A1 ИЛИ A2 ИЛИ A3 ИЛИ А4) ИЛИ (А5 ИЛИ А6 ИЛИ А7)» тождественны;
- использовать восьмивходовой элемент, «лишний» вход которого будет соединен с логическим нулем или логической единицей чтобы исключить его влияние на результат.
Предлагаю остановиться на втором варианте, чтобы визуально не перегружать схему.
Для фиксации входа логического элемента на уровне логического ноля или единицы в Quartus II предусмотрены специальные символы: «GND» и «VCC» соответственно.
Добавить их на схему можно с помощью инструмента «Symbol Tool» найдя поиском по имени или непосредственно в библиотеке «стандартные библиотеки Quartus»/primitives/other/. Пример, путь до элемента «GND»: «стандартные библиотеки Quartus»/primitives/other/gnd.
Рассмотрим пример подключения «ИЛИ» вентиля выхода Sd. Соединив один вход «or8» с логическим нулем можно спокойно соединять оставшиеся семь входов с выходами соответствующих «and4» вентилей. Так как «ИЛИ» принимает значение ИСТИНА когда хотя бы один из входов принимает значение ИСТИНА, а ЛОЖЬ только когда одновременно на всех входах ЛОЖЬ, то восьмой вход соединенный с «GND» на результат Sd влиять не будет.
Схема включения «ИЛИ» вентиля выхода Sd представлена на рисунке ниже.
Для схемы выхода Sc также требуется семивходовой элемент, но не «ИЛИ», а «И» так как логическая функция Sc записана в конъюнктивной нормальной форме. Лишний вход «and8» здесь нужно будет соединить с логической единицей, так как «И» принимает истинное значение только когда на всех ее входах ИСТИНА. Если же один из входов будет соединен с «GND», то на выходе «and8» всегда будет ЛОЖЬ. Поэтому соединяем неиспользуемый вход с «VCC».
Схема включения «И» вентиля выхода Sc представлена на рисунке ниже.
Обратите внимание что записи логических функций большинства выходов отличаются друг от друга небольшим числом групп входных значений объединенных операцией логического умножения — «И», коньюнкцией. Например записи функций выходов Sa и Sb отличаются только двумя коньюнкциями из восьми. Логические функции Sa и Sb приведены ниже. Отличающиеся коньюнкции выделены полужирным шрифтом.
Sa = ((НЕ I3) И (НЕ I2) И (НЕ I1) И (НЕ I0)) ИЛИ ((НЕ I3) И (НЕ I2) И I1 И (НЕ I0)) ИЛИ ((НЕ I3) И (НЕ I2) И I1 И I0) ИЛИ ((НЕ I3)И I2 И(НЕ I1) И I0) ИЛИ ((НЕ I3)И I2 И I1 И(НЕ I0)) ИЛИ ((НЕ I3) И I2 И I1 И I0) ИЛИ (I3 И (НЕ I2) И (НЕ I1) И (НЕ I0))ИЛИ (I3 И (НЕ I2) И (НЕ I1) И I0)
Sb = ((НЕ I3) И (НЕ I2) И (НЕ I1) И (НЕ I0)) ИЛИ ((НЕ I3)И (НЕ I2) И(НЕ I1) И I0) ИЛИ ((НЕ I3) И (НЕ I2) И I1 И (НЕ I0)) ИЛИ ((НЕ I3) И (НЕ I2) И I1 И I0) ИЛИ ((НЕ I3)И I2 И(НЕ I1) И(НЕ I0)) ИЛИ ((НЕ I3) И I2 И I1 И I0) ИЛИ (I3 И (НЕ I2) И (НЕ I1) И (НЕ I0)) ИЛИ (I3 И (НЕ I2) И (НЕ I1) И I0)
Эта особенность позволяет значительно упростить схему за счет переиспользования общих элементов разных выходов. Поэтому для Sb потребовалось только два дополнительных И вентиля вместо восьми.
Для уменьшения числа проводников и улучшения читаемости схемы был использован новый инструмент — шина («Orthogonal Bus Tool»). На панели «Block Editor» он десятый слева.
Шина позволяет передавать несколько сигналов одновременно соединяя между собой многоразрядные выводы устройств. Но используемые в схеме элементы не имеют многоразрядных выводов. Возникает вопрос: как подавать на шину и забирать с нее отдельные сигналы?
Для этого необходимо выполнить ряд действий:
- присвоить шине имя, в котором будет явно указана ее разрядность;
- соединить одноразрядный выход с шиной посредством «Orthogonal Node Tool» (располагается на панели слева от «Orthogonal Bus Tool»);
- присвоить одноразрядному сигналу имя совпадающее с именем шины, указав номер используемого разряда шины.
Для указания разрядности шины в ее имени используются квадратные скобки, внутри которых указывается диапазон номеров разрядов. Например «Input[3..0]». Нумерация разрядов идет по порядку, по убыванию или по возрастанию. Она может начинаться/завершаться нулем, единицей или другим числом. Следующие варианты нумерации для четырехразрядной шины также являются корректными:
Input[0..3]
Input[4..1]
Input[10..13]
Input[13..10]
После определения разрядности шины, для каждого одноразрядного сигнала подключаемого к ней необходимо в квадратных скобках указывать номер разряда из заданного диапазона. Например, если шине присвоено имя «Input[3..0]», то одноразрядный сигнал может иметь имя «Input[3]», «Input[2]», «Input[1]» или «Input[0]» но не «Input[5]».
На рисунке ниже показана часть схемы с подключенными к шине входами I0-I3 и логическими вентилями «НЕ», «И».
Можно не выделять всю шину для присвоения ей имени. Достаточно поименовать один сегмент шины и Quartus II распространит это имя на остальные сегменты. Данное правило действует и для одноразрядных сигналов.
Обратите внимание что одноразрядные сигналы Sb_and_out_0 и Sb_and_out_1 не являются частью шины. Число в их имени не указывает на номер разряда, а просто является частью имени. Такие имена использованы для поддержания единообразия наименования сигналов на схеме.
Имя шине или одноразрядному сигналу присваивается на вкладке «General» окна «Bus Properties» или «Node Properties» соответственно. Внешний вид этих окон аналогичен. Ниже представлен вид окна «Bus Properties».
Данное окно вызывается с помощью пункта «Properties» в контекстном меню шины, одноразрядного сигнала. Это меню, в свою очередь, доступно по щелчку правой кнопки мыши на соответствующем элементе схемы.
При редактировании схемы обратите внимание что в Quartus II имеется недочет в работе копирования элементов: вставка скопированного элемента выполняется рядом с курсором мыши. Если курсор мыши не перемещать, то повторная вставка будет выполнена точно поверх уже вставленного элемента. Такая пара будет выглядеть как один единственный элемент. Защищать от наложения должно было автоматически устанавливаемое выделение на только что вставленный элемент. Так как при наличии на схеме хотя бы одного выделенного элемента вставка не работает. Но снять выделение можно кликом левой кнопки мыши не перемещая курсора. Поэтому, если при выполнении анализа и синтеза Quartus II сообщает о задублированных элементах, проверьте не является ли проблемный элемент стопкой однотипных элементов. Сделать это можно посредством выделения и перемещения такого элемента. Выделить один проблемный элемент из стопки можно кликом левой клавиши мыши или двойным кликом по строке сообщения с ошибкой в отчете о результатах анализа и синтеза.
Запуск Анализа и синтеза («Analysis & Synthesis»), проверка его результатов описывается в статье ПЛИС Altera. Часть 3: первая компиляция проекта.
После успешного выполнения анализа и синтеза схемы можно переходить к настройке выводов ПЛИС в «Pin Planner». Этот инструмент Quartus II используется для привязки спроектированной схемы к физическим выводам ПЛИС. Здесь же настраиваются электрические параметры выводов: напряжение ввода‑вывода и максимальный рабочий ток. Настройка выводов в «Pin Planner» описана в статье: ПЛИС Altera. Часть 5: Quartus Pin Planner.
Привязка входов и выходов схемы выполняется в соответствии с принципиальной схемой устройства на базе платы CTRL-CPLD-EPM570. Внешний вид окна «All Pins» после выполнения настройки всех выводов схемы представлен на рисунке ниже.
Не забудьте включить режим «As input tri-stated with weak pull-up» в параметрах устройства для всех незадействованных выводов. Данная настройка описана в разделе «Параметры проекта «Device and Pin Options» статьи про «Pin Planner», ссылка на которою дана выше.
После настройки выводов ПЛИС, проверки сделанных назначений можно переходить к заключительному этапу: полной компиляции проекта, сборке устройства и загрузке конфигурации в ПЛИС.