ЛР1 > Знакомство со средой проектирования Quartus II. Создание проекта

Цель: Научиться создавать проект в Quartus II на примере конвейерного умножителя и блока памяти RAM

1. Теоретические сведения.

Программный пакет Quartus® II фирмы Altera® представляет собой полную, многоплатформенную среду проектирования, легко адаптируемую к требованиям конкретного проекта. Это комплексная среда для разработки систем на программируемом кристалле (SOPC). Пакет Quartus II включает в себя все утилиты, необходимые для работы с микросхемами FPGA и CPLD. На Рисунке 1 показаны основные этапы проектирования в среде Quartus II.

 

 Лабораторные работы: Основы Quartus II

 1. Знакомство со средой проектирования Quartus II. Создание проекта
 2. Моделирование проекта в среде Quartus II
 3. Компиляция проекта в среде Quartus II. Анализ результатов компиляции 
 4. Версии проекта в Quartus II. Создание назначений
 5. Назначение контактов ввода/вывода в Quartus II
 6. Временной анализ проекта в Quartus II
 7. Специализированные модули. Реализация КИХ-фильтра в Quartus II

Следующая последовательность действий описывает типичный порядок проектирования в среде Quartus II с помощью графического интерфейса пользователя:

  1. Создание нового проекта, указание типа используемой микросхемы или семейства с помощью команды New Project Wizard (меню File).
  2. Создание исходного файла проекта на языках Verilog HDL, VHDL, или Altera Hardware Description Language (AHDL) с помощью текстового редактора (Text Editor). Кроме того, можно создать блок-схему проекта в графическом редакторе (Block Editor) используя символы, представляющие другие исходные файлы проекта или логические элементы. С помощью команды MegaWizard® Plug-In Manager (менюTools) можно создавать различные варианты мегафункций и IP-ядер для включения их в файл проекта.
  3. Указание начальных настроек проекта с помощью редактора назначений (Assignment Editor), диалогового окна Settings (меню Assignments), редактора топологии (Floorplan Editor), и/или применяя фиксированные логические блоки(LogicLock™) .
  4. Создание проекта на системном уровне с помощью генератора систем на кристалле (SOPC Builder) или генератора систем ЦОС(DSP Builder).
  5. Создание программных файлов для процессорного ядра Nios® с помощью редактора программного обеспечения (Software Builder).
  6. Синтез проекта с помощью модуля анализа и синтеза (Analysis & Synthesis).
  7. Выполнение функционального моделирования проекта с помощью симулятора (Simulator) и команды Generate Functional Simulation Netlist.
  8. Выполнение размещения и трассировки проекта с помощью модуля трассировки (Fitter).
  9. Проведение предварительного анализа потребляемой мощности с помощью программы PowerPlay Power Analyzer.
  10. Проведение анализа временных задержек проекта с помощью программы анализатора временных задержек (Timing Analyzer).
  11. Выполнение моделирования проекта с учетом временных задержек с помощью симулятора.
  12. Улучшение временных характеристик проекта с помощью повторного физического синтеза, использования фиксированных логических блоков, настроек в диалоговом окне Settings и в редакторе назначений.
  13. Создание файла для программирования микросхемы с помощью модуля ассемблера (Assembler).
  14. Программирование микросхемы с помощью утилиты программатора (Programmer) и оборудования Altera; или преобразование формата файла для программирования.
  15. Отладка проекта с помощью встраиваемого логического анализатора (SignalTap® II Logic Analyzer), генератора контрольных точек (SignalProbe™ ).

Основной рабочей единицей в среде Quartus II является проект. Он создается с помощью специальной утилиты (New Project Wizard меню File). При создании нового проекта задается рабочая директория, назначается имя проекта и имя файла верхнего уровня иерархии. Дополнительно можно указать исходные файлы проекта, пользовательские библиотеки, используемые САПР сторонних фирм, выбранное семейство микросхем (или использовать автоматический выбор семейства компилятором Quartus II).

2. Порядок выполнения работы.

 Шаг 1: Создание нового проекта для использования в цикле лабораторных работ.

 

  1. Запустите САПР Quartus II. В меню Пуск выберите Все программы->Altera ->Quartus II 7.2.->Quartus II 7.2 (32-Bit),  для запуска.
  2. Вызовите утилиту New Project Wizard. В меню File выберите New Project Wizard…. Откроется новое окно. Если на экране появилось страница Introduction, нажмите Next.
  3. Приступите к созданию проекта с помощью утилиты New Project Wizard. На странице 1 задайте информацию, представленную в таблице 1.

 

Таблица 1. Настройки страницы 1 New Project Wizard

Рабочая директория проекта <lab_install_directory> \Pipemult\
Имя проекта pipemult
Файл верхнего уровня иерархии pipemult

Страница 1 утилиты New Project Wizard должна выглядеть подобным образом.

4.  Нажмите Next, чтобы перейти на следующую страницу.

5. На странице 2 нажмите кнопку и выберите файл верхнего уровня иерархии pipemult.bdf. Он располагается в рабочей директории проекта. Нажмите Open, затем Add, чтобы добавить файл в проект. Нажмите Next.

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

6. На странице 3, выберите семейство (Family) Cyclone II. В правой части окна, в разделе Show in ‘Available device’ list, установите следующие значения: в строке Package выберите FBGA, Pin count выберите 256, Speed grade выберите Fastest. Эти настройки ограничивают список доступных микросхем. В окне Available devices выберите микросхему EP2C5F256C6. Нажмите Next.

 

7. На странице 4 (см. выше), вы можете указать дополнительно используемые САПР сторонних производителей. В данном цикле упражнений мы работаем только в среде Quartuis II. Нажмите Next для продолжения.

 

8. Перед собой вы видите итоговую страницу. Нажмите Finish. Проект создан.

Выходить из среды Quartus II нет необходимости, если вы собираетесь продолжить выполнение упражнения. Закрытый проект всегда модно открыть с помощью команды File ->Open Project. Команда File -> Open позволяет открыть отдельный файл (вместо проекта), предотвращая выполнение различных действий, связанных с обработкой проекта, например компиляцию.

 

Разработка конвейерного умножителя.

 

На рисунке 1 изображено схематическое представление файла верхнего уровня иерархии, который вы должны реализовать. Он состоит из умножителя и блока оперативной памяти RAM. Данные подаются на умножитель от внешнего источника, а результат сохраняется в блоке памяти, который тоже управляется от внешнего источника. Затем данные читаются из блока оперативной памяти, используя независимую шину адреса для чтения.

 

Рисунок 1.

 

Шаг 1: Создайте умножитель 8х8 с помощью утилиты MegaWizard® Plug-in Manager.

  1. Выберите Tools -> MegaWizard Plug-In Manager. В открывшемся окне выберите опцию Create a new custom megafunction variation. Нажмите Next.

 

 

2. Выберите нужную мегафункцию. На странице 2 (как показано выше), раскройте папку Arithmetic и выберите LPM_MULT.
3. В выпадающем меню справа укажите используемое семейство микросхем Cyclone II.

Выбор семейства микросхем позволяет утилите MegaWizard Plug-In Manager определить ее доступные ресурсы и доступные мегафункции для него. Можно создать мегафункцию для другого семейства микросхем, при этом необходимо выбрать соответствующее семейство и создать для него новый проект.

 

4. Выберите язык описания интерфейса мегафункции (VHDL или Verilog HDL) и укажите рабочую директорию, где будет сохранена мегафункция. Если вы разрабатываете схемотехнический проект, выберите VHDL или Verilog по желанию.
5. Задайте имя выходного файла – mult. Вы можете добавить его в конце выбранного пути к нужной директории или не указывать полный путь для автоматического сохранения файла в рабочей директории проекта.
6. Нажмите Next.

 

7. На странице 3 (General) укажите разрядность входных шин данных dataa и datab (они могут быть установлены автоматически). В нашем примере разрядность 8 бит. Нажмите Next.

 

8. На странице 4 (General 2) оставьте все настройки по умолчанию (datab не является константой, используется беззнаковое умножение и способ реализации умножителя выбирается по умолчанию). Нажмите Next.

 

9. На странице 5 (Pipelining) выберите Yes, I want an output latency of 2 clock cycles (задержка выдачи результата на 2 цикла тактовой частоты). Нажмите Next.

10. Сейчас вы должны перейти на страницу 6 (вторая закладка – EDA). Здесь указывается файл Lpm, который используется сторонними САПР для моделирования мегафункции LPM_MULT (например, в САПР ModelSim-Altera). В нашем упражнении мы не будем применять сторонние САПР для моделирования. Нажмите Next.

11. На странице 7 необходимо отметить создаваемые файлы согласно таблице 2, приведенной ниже:

 

Тип исходного файла проекта

Файлы, которые необходимо создать в MegaWizard Plug-In

Schematic

mult(.vhd or .v) & mult.bsf

12. Нажмите Finish для завершения создания мегафункции.

Умножитель создан.

Если, по некоторым причинам, мегафункция создана некорректно или вы что-то пропустили, откройте снова MegaWizard Plug-In Manager в меню Tools. Выберите опцию редактирования мегафункции и исправьте ошибки. Нажмите Finish.

Шаг 2:
Создайте 32×16 RAM с помощью утилиты MegaWizard Plug-In Manager

1. Еще раз откройте MegaWizard Plug-In Manager (Tools -> MegaWizard Plug-In Manager). Выберите Create a new custom megafunction variation и нажмите Next.

2. Выберите соответствующую мегафункцию. На странице 2 (см. выше) раскройте папку Memory Compiler и выберите RAM: 2-PORT.
3. Как и для реализации умножителя, выберите семейство микросхем Cyclone II и язык файла описания мегафункции – VHDL или Verilog HDL.
4. В строке имени выходного файла укажите ram.
5. Нажмите Next.

6. На странице 3, выберите With one read port and one write port, в разделе указания способа использования двухпортовой памяти. Остальные настройки оставьте по умолчанию (размер памяти определяется количеством слов). Нажмите Next.

 

7. На странице 4 (Widths/Blk Type), установите разрядность входного порта data_a равную 16 бит (в разделе Read/Write Ports). Затем выберите 32 – количество 16-разрядных слов памяти (16-bit words of memory). Примечание: вы будете видеть надпись “8-bit words of memory” до тех пор, пока не измените значение разрядности входного порта. Остальные настройки оставьте по умолчанию. Нажмите Next 2 раза.

 

 

8. На странице 6 (Regs/Clkens/Aclrs), отключите опцию Read output port(s) ‘q’, чтобы исключить установку выходных регистров для порта q. Остальные настройки оставьте по умолчанию и нажмите Next 2 раза.

 

 

9. На странице 8 (Mem Init) выберите Yes, чтобы указать файл инициализации блока памяти. После того, как поле стало доступным, впишите имя файла: ram.hex. Мы создадим этот файл позже, но нам ничего не мешает указать сейчас его имя. Нажмите Next.

10. На странице 11 отображается файл altera_mf, необходимый для моделирования этой мегафункции с помощью сторонних САПР. Нажмите Next.
11. Выберите те же файлы для создания мегафункции ram, которые вы выбирали для мегафункции mult ранее (Шаг 1, пункт 11)

 

Теперь у вас есть два созданных компонента, необходимых для данного проекта. Далее необходимо создать НЕХ файл, описывающий содержимое для инициализации оперативной памяти RAM.

Шаг 3: Создайте НЕХ файл с помощью редактора Memory Editor

1. В меню File выберите команду New или нажмите знак в рабочей панели инструментов.

 

2. В открывшемся диалоговом окне перейдите к закладке Other Files и выберите Hexadecimal (Intel-Format) File. Нажмите OK.

3. В диалоговом окне настроек размера области памяти установите следующие значения: количество слов – number of words – 32, размер слова – word size16. Нажмите Ok.

 

Открывшееся окно редактора памяти Memory Editor отображает заданное вами пространство памяти. Если пространство памяти отображается не так, как показано выше, можно изменить количество ячеек в ряду (меню View) на 16 и формат отображаемых значений на Hexadecimal.

 

  • Выделите всю область памяти, нажмите правую кнопку мыши и выберите Custom Fill Cells в открывшемся контекстном меню.
  • С помощью диалогового окна Custom Fill Cells, введите нужные значения для инициализации области памяти. Можно выбрать одно из следующих действий:
    • Повторяющаяся последовательность: Введите последовательность значений, которые будут повторяться в памяти, отделяя их пробелом или запятой.
    • Нарастающая/убывающая последовательность: Введите начальное значение и значение величины, на которую будет изменяться каждое последующее значение (увеличиваться или уменьшаться).
  • Сохраните файл как ram.hex. Закройте его.

Добавьте блоки в проект и создайте нужные связи.

1. Откройте файл pipemult.bdf. Можно использовать команду Open в меню File, или нажать значок на рабочей панели инструментов, или дважды нажать на имени файла в окне навигатора проекта Project Navigator.

Это файл верхнего уровня иерархии для данного проекта. На самом деле, вам было бы необходимо выбрать блоки ram и mult и выполнить вручную их соединение. В интересах экономии времени, для вас создан почти завершенный файл, который не имеет блоков ram и mult, а также выходной шины q[15..0].

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

Примечание: Три входных порта в левой части умножителя должны совпадать со входами, присутствующими на схеме. Если это не так, вы возможно, неправильно создали мегафункцию. В этом случае нажмите Esc, чтобы отменить вставку символа, откройте снова утилиту MegaWizard Plug-In Manager и выберите опцию Edit an existing megafunction variation. Укажите элемент mult и исправьте ошибки. Повторите установку символа в нужном месте.

3. Правой клавишей мыши нажмите на блок mult и выберите команду Properties в контекстном меню. В диалоговом окне Symbol Properties, в строке Instance name, измените имя inst на mult_inst.

4. Нажмите OK.
5. Снова откройте окно Symbol. Выберите элемент ram и установите его в указанное место.

Примечание: 4 нижних входа блока ram должны совпасть с входными портами. Вход data должен остаться не подключенным.

6. Также, как и для блока mult, для элемента ram откройте диалоговое окно Symbol Properties и измените имя inst на ram_inst.
7. Откройте окно Symbol и в строке Name введите имя элемента output. Элемент должен определиться автоматически.
8. Нажмите OK и установите элемент возле выходного контакта регистра inst2. Дважды щелкните в области указания имени компонента и измените pin_name на q[15..0].
9. Нажмите кнопку (вызов инструмента для создания шин), затем соедините между собой выход элемента mult (result) и свободный вход элемента ram (data).

В результате вы должны получить схему, представленную на рисунке выше.

10. Сохраните файл pipemult.bdf.

 

Шаг 5: Сохраните и проверьте проект

1. В меню Processing выберите команду  Start -> Start Analysis & Elaboration.

Данная команда выполняет проверку наличия всех файлов в проекте и правильность их подключений.

2. Нажмите OK, когда анализ завершится. Если были обнаружены какие либо ошибки, проверьте все связи или повторно вызовите MegaWizard Plug-In Manager для исправления ошибок в мегафункциях.