Пошаговая инструкция для Quartus II: сделаем сумматор

Сделаем простой проект для платы Марсоход. Проект будет состоять всего из пары модулей, да и делать он будет не очень много - он будет складывать два двухбитных числа. На самом деле, на плате у нас есть 4 кнопочки. Две кнопки - одно двухбитное число, еще две кнопки - второе двухбитное число. Отображать результат сложения будем на светодиодах платы Марсоход. Конечно, не бог весть что. Зато мы научимся рисовать схемы пользуясь средой программирования Quartus II. Этой работой мы проверим все, что было написано в предыдущей статье.

Я знаю, многие профессиональные разработчики критикуют использование схем в проектах. Для этого конечно есть причины. Возможно самые главные причины - это плохая переносимость проектов и трудности симуляции. Тем не менее, мне кажется визуальное представление в виде схем весьма полезно, особенно начинающим разработчикам.

Итак начнем.


Шаг 1.

Давайте возьмем с нашего сайта

. Это будет основа нашего нового проекта. Создаем новую папку max2adder и распаковываем наш архив туда. Теперь запускаем Quartus II.

Пошаговая инструкция Quartus II - шаг 1

Заходим в меню и выбираем пункт Open Project (открыть проект).

 


Шаг 2.

Пошаговая инструкция Quartus II - шаг 2

Появляется диалоговое окно выбора файла. В нем переходим в нашу новую папку max2adder и выбираем файл проекта max2.


Шаг 3.

Пошаговая инструкция Quartus II - шаг 3

Проект открыт, хотя визуально вроде бы ничего и не случилось. Заголовок окна теперь имеет название нашего открытого проекта. Подводим курсор мыши к кнопочке панели инструментов, напоминающей "кристалл". Появляется подсказка "Project navigator". Нажимаем эту кнопку.


Шаг 4.

Пошаговая инструкция Quartus II - шаг 4

Слева появилось окошко навигатора проекта. На трех его закладочках можно видеть иерархию проектов (какой модуль главный и его составляющие), а так же файлы проекта. Двойной клик мышью на имени главного модуля max2 и открывается файл, содержащий описание главного модуля (top-level entity).


Шаг 5.

Пошаговая инструкция Quartus II - шаг 5

В нашем случае мы видим открылся графический файл max2.bdf - это Block Diagram File. Конечно главный файл проекта не обязательно должен быть именно графическим. Это может быть Verilog или VHDL или другой какой нибудь файл.


Шаг 6.

Пошаговая инструкция Quartus II - шаг 6

Сейчас мы из этого "Почти пустого" проекта сделаем совсем пустой Smile.  Нажмем на панели инструментов кнопочку с изображением стрелочки - Selection Tool - инструмент выделения объектов. Кликая на элементы нашей схемы мы можем их выделять - они становятся "синими". Нажимаем на клавиатуре клавишу Del и выделенный объект или группа объектов удаляются. Я хочу оставить в нашем новом проекте только четыре входа key[3..0] (они соответствуют кнопочкам на плате Марсоход) и выходы led[7..0] (они соответствуют восьми светодиодам).


Шаг 7.

Пошаговая инструкция Quartus II - шаг 7

Вот что у меня осталось от былой схемы. Зачем я это все делаю? Наверное легче было бы начать делать новый проект? Не совсем так. Дело в том, что в этом готовом проекте уже сделаны очень важные настройки для платы Марсоход. Эти настройки касаются типа микросхемы и назначения контактов микросхемы. Это можно легко проверить.


Шаг 8.

Пошаговая инструкция Quartus II - шаг 8

Заходим в меню Assignments\Assignment Editor - это действие запустит редактор назначений.


Шаг 9.

Пошаговая инструкция Quartus II - шаг 9

Здесь, например, видно, что входы, соответствующие кнопочкам платы Марсоход, будут подключены к контактам микросхемы PIN_18, PIN_17, PIN_16, PIN_15. Только так и никак иначе. Плата уже готова, спаяна, и эти контакты идут к кнопкам. Конечно, если вы сами будете проектировать свое устройство на FPGA или CPLD вы можете сами назначить ваши входы и выходы как вам захочется. Ну а сейчас, раз мы экспериментируем с платой Марсоход, мы должны принять ее как есть. Закрываем этот редактор назначений.


Шаг 10.

Пошаговая инструкция Quartus II - шаг 10

Теперь создадим новый файл. Выбираем пункт меню File/New.


Шаг 11.

Пошаговая инструкция Quartus II - шаг 11

В этом диалоге у нас есть возможность выбрать тип файла, который мы хотим создать. Сейчас мы выбираем Block Diagram/Schematic File - будем рисовать схему.


Шаг 12.

Пошаговая инструкция Quartus II - шаг 12

Новый графический файл создан и его нужно сохранить - я даю ему имя adder1.bdf.


Шаг 13.

Пошаговая инструкция Quartus II - шаг 13

Теперь в нашей схеме нужно собственно ее "нарисовать". Видите на панели инструментов кнопочку с изображением логического элемента (под ней подсказка "Symbol Tool")? Нажимаем эту кнопку и должен появиться диалог, позволяющий выбрать нужные нам библиотечные логические элементы.


Шаг 14.

Пошаговая инструкция Quartus II - шаг 14

Вот этот диалог Symbol. Наша схема будет содержать входы и выходы, а так же несколько логических элементов. Среди папок библиотек (libraries) находим primitives/pin/input. Нажимаем OK и выбранный нами элемент появляется в схеме.


Шаг 15.

Пошаговая инструкция Quartus II - шаг 15

Нам нужно установить на схему три входа. Этот графический редактор довольно удобный. Вы можете двигать установленные элементы, копировать в буфер обмена, вставлять. Все довольно понятно интуитивно. Задать имена входам (да и другим элементам) можно нажав правую кнопку мыши на выбраном элементе и выбрав пункт меню - Properties (Свойства). На картинке вы как раз видите изменение имени входа (pin) в диалоге Pin Properties.


Шаг 16.

Пошаговая инструкция Quartus II - шаг 16

Аналогичным образом мы вставим на схему выходы и логические элементы И и ИСКЛЮЧАЮЩЕЕ ИЛИ. Ищите их в папке libraries/primitives/logic.


Шаг 17.

Пошаговая инструкция Quartus II - шаг 17

Теперь нужно расставить эти элементы на схеме по красивее и соединить "проводами". Для соединения проводами выберите на панели инструментов кнопочку Orthogonal Node Tool. Потом просто рисуйте провода. Если будет нужно нарисовать шину, то используйте Orthogonal Bus Tool.


Шаг 18.

Пошаговая инструкция Quartus II - шаг 18

У меня получилась вот такая схема - это однобитный сумматор с переносом. Я рассказывал о нем вот здесь. Теперь из этого модуля в виде схемы мы можем сделать компонент, который будем устанавливать в другие модули.


Шаг 19.

Пошаговая инструкция Quartus II - шаг 19

Выберите пункт меню File/Create-Update/Create Symbol File for Current File. Это действие создаст новый компонент, который можно будет устанавливать в другие ваши схемы. Можно создавать компоненты из файлов Verilog, VHDL, AHDL, из схем.


Шаг 20.

Пошаговая инструкция Quartus II - шаг 20

Обратите внимание - нам нужно задать имя будущему компоненту. По умолчанию оно соответствует имени файла схемы. Пусть так и будет. Тип файла - Symbol File (*.bsf).


Шаг 21.

Пошаговая инструкция Quartus II - шаг 21

Теперь мы возвращаемся к редактированию нашего первого файла - max2.bdf. Сейчас уже сюда мы сможем вставить наш новый, только что созданный, компонент adder1. Нажимаем на панели инструментов кнопочку Symbol Tool и видим уже знакомый нам диалог Symbol. Только теперь мы ищем компонент не из библиотеки Альтеры, а в папке нашего проекта, где должен находиться только что созданный нами компонент.


Шаг 22.

Пошаговая инструкция Quartus II - шаг 22

Мы установим в нашу схему два компонента adder1, один инвертор НЕ, пару элементов GND (чтобы подключить неиспользуемые входы к земле). Соедините все элементы как нарисовано здесь.

Соединения сделаны так, чтобы, во-первых, при нажатии кнопочки загорался соответствующий ей светодиодик (четыре левых светодиода если держать платку кнопочками к себе), во-вторых, результат сложения двух двухбитных чисел отображается на трех самых правых светодиодах.

Может возникнуть вопрос: "Для чего сигнал от кнопочек инвертируется?" Дело в том, что сигнал от кнопочек подключен небольшими резисторами к напряжению питания. Это сделано прямо внутри чипа - посмотрите в Assignment Editor настройки для кнопочек key[3..0]. Вы увидите опцию weak pull-up resistor включенной (On). Таким образом, не нажатая кнопка дает на входе логическую единицу, а нажатая (замыкается к земле) - логический ноль.

Ну вот пожалуй проект готов. Компилируем и зашиваем его в плату Марсоход. Об том как зашивать, можно почитать здесь.

Перед тем как пробовать нашу схему в работе, позвольте мне показать примеры сложения в двоичном виде:

00 + 00 = 000 (ноль + ноль = ноль)

01 + 00 = 001 (один + ноль = один)

01 + 01 = 010 (один + один = два)

10 + 01 = 011 (два + один = три)

10 + 10 = 100 (два + два = четыре)

11 + 01 = 100 (три + один = четыре)

11 + 11 = 110 (три + три = шесть)

Это то, что мы должны увидеть, нажимая на кнопочки нашей платы Марсоход.

Чуть позже, я положу сюда демонстрационное видео, как работает мой сумматор.

А вот и весь проект к уроку:

 

 

 

Добавить комментарий