ЛР6 > Временной анализ проекта

Цель: Используя утилиту TimeQuest научиться выполнять временной анализ проекта

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

Шаг 1: Выполните синтез проекта

1. Убедитесь, что вы работаете с версией проекта pipemult, и нажмите кнопку для синтеза проекта.

Даже если вы раньше выполняли полную компиляцию проекта, повторный синтез позволяет вам быстрее создать список связей проекта для установки назначений. И для скомпилированной версии проекта pipemult мы рекомендуем выполнить данную последовательность действий.

 

 Структура курса лабораторных работ: Основы Quartus II

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

Шаг 2: Вызовите утилиту TimeQuest и создайте список связей проекта для временного анализа.

1. В основной панели инструментов САПР Quartus II нажмите кнопку  или, в меню Tools выберите команду TimeQuest Timing Analyzer. Нажмите No для отказа от генерации файла .SDC из файла .QSF. Если вы случайно нажали Yes, закройте TimeQuest, откройте окно Explorer и удалите файл pipemult.sdc из рабочей директории проекта. Вернитесь в Quartus II и повторно вызовите утилиту TimeQuest.

Открывшееся окно. Сейчас вы выполните последовательность действий в TimeQuest.

2. Создайте список связей проекта для временного анализа. В меню Netlist выберите команду Create Timing Netlist и измените тип исходного списка Input netlist на  Post-map, или в диалоговом окне Console введите команду create_timing_netlist –post_map. Нажмите OK.

Зеленая метка, появившаяся рядом с командой Create Timing Netlist в окне Tasks, указывает на успешное её выполнение. Обратите внимание, в окне Console появилось сообщение (выделенное синим цветом) о том, что утилита TimeQuest не является инструментом для выполнения временного анализа проекта по умолчанию. Мы это исправим позже. Вы могли бы создать список связей проекта двойным нажатием мышки на команде Create Timing Netlist в окне Tasks, но это не позволило бы вам изменить исходный список связей на post-map, т. к. он не задается по умолчанию.

3. Откройте .SDC файл (команда Read SDC File). Или просто введите команду read_sdc в строке после приглашения tcl> диалогового окна.

Появится сообщение о том, что файл .SDC не был найден. Это правильно.  Т. к. вы не указывали имя файла, утилита TimeQuest автоматически искала любые .SDC файлы, добавленные к проекту, а из них – файлы с таким же именем, как и текущая версия проекта pipemult. Но таких файлов нет.

Рядом с командой Read SDC File должна появиться зеленая метка, указывающая на попытку прочитать .SDC файл. Сейчас вы создадите этот файл с помощью редактора SDC файлов (подобный текстовому редактору САПР QuartusII) утилиты TimeQuest GUI.

Ваше окноTasks должно выглядеть следующим образом.

Шаг 3: Создайте файл sdc и установите назначение для входной тактовой частоты clock.

1. В меню File утилиты TimeQuest выберите команду New SDC File. Откроется окно редактора SDC файла для создания нового файла.

2. В меню File редактора выберите команду Save As и задайте имя файла pipemult.sdc.

3. С помощью команды Create Clock задайте период тактовой частоты, равный 6 ns для входного сигнала clk1.

4. В меню Edit редактора SDC файлов в разделе Insert Constraint выберите команду Create Clock…

5. В диалоговом окне Create Clock задайте имя сигналу тактовой частоты clk1.

6. В строке period установите значение 6.

Обратите внимание, вы можете изменить расположение фронтов тактового сигнала, т.е. создать сигнал со скважностью, не равной 50%. Мы оставим значение по умолчанию.

7. В строке targets нажмите кнопку .

8. В открывшемся окне Name Finder, выберите get_ports из выпадающего меню Collection. В разделе Matches нажмите кнопку List.

9. Дважды нажмите кнопку мышки на сигнале clk1 в сформированном списке.

Обратите внимание, в нижней части диалогового окна отображается соответствующая SDC команда для выбранного вами сигнала.

10. Нажмите OK.

Дилоговое окно Create Clock должно соответствовать показанному выше рисунку.

11. Нажмите кнопку Insert. Сохраните файл.

Ваше назначение тактовой частоты добавлено в . SDC файл в месте расположения курсора. Сейчас мы обновим список связей проекта для временного анализа для того, чтобы убедиться, что созданное нами назначение допустимо.

12. Вернитесь в главное окно TimeQuest и дважды нажмите левой кнопкой мышки на команде Update Timing Netlist в окне Tasks. Вернитесь или повторно откройте ваш SDC файл.

Шаг 4: Добавьте временные назначения для контактов ввода/вывода

1. В новой строке файла, с помощью команды Set Input Delay, установите максимальную входную задержку для двух 8-разрядных шин dataa и datab равную 3.25 ns относительно тактовой частоты clk1.

2. В меню Edit, в разделе Insert Constraint выберите команду Set Input Delay.

3. В открывшемся окне введите следующие значения:

Clock name = clk1 (используйте выпадающее меню)

Input Delay Options = Maximum (выберите Both для опции Rise\Fall)

Delay Value = 3.25

Targets = [get_ports data*]

Вы можете воспользоваться кнопкой просмотра и утилитой Name Finder для выбора всех сигналов входных данных (как вы делали с clk1), но иногда, особенно при работе с шинами, удобнее задавать тип в командной строке и использовать подстановочные знаки. Если вы не знаете имени группы сигналов, можно воспользоваться утилитой Name Finder и добавить подстановочные знаки в командной строке Name Finder SDC, выбрав сигнал, принадлежащий соответствующей группе.

Ваше диалоговое окно Set Input Delay должно выглядеть, как показано выше.

4. Нажмите кнопку Insert.

5. С помощью команды Set Input Delay, установите минимальную входную задержку равную 1.75 ns для двух 8-разрядных шин dataa и datab относительно тактовой частоты clk1. Чтобы сделать это быстрее можно, используя коменды copy и paste, скопировать строку с командой установки максимальной входной задержки и вставить ее в новой строке. Отредактировать новую строку, изменив –max на –min и 3.25 на 1.75.

5. Подобным образом, с помощью команды Set Output Delay, установите максимальное значение выходной задержки, равное 0.7 ns для 16-разрядной выходной шины данных q, относительно тактовой частоты clk1. Здесь будет очень удобно воспользоваться подстановочными знаками.

6. С помощью команды Set Output Delay, установите минимальное значение выходной задержки равное 0.0 ns для 16-разрядной выходной шины q, относительно тактовой частоты clk1.

7. С помощью команды Set Input Delay, установите все параметры для входных сигналов rdaddress и wraddress. Значение максимальной входной задержки должно быть равное 2.5 ns, минимальная входная задержка – 1.0 ns, относительно тактовой частоты clk1.

8. Сохраните файл.

 Шаг 5: Обновите список связей проекта для временного анализа

  1. Для того, чтобы новые ограничения вступили в силу, необходимо обновить список связей проекта для временного анализа. В меню Netlist основного окна утилиты TimeQuest выберите команду Delete Timing Netlist.
  2. Повторно зайдите в меню Netlist и создайте новый список связей проекта на основе списка  Post-map.
  3. Обновите список связей проекта с учетом новых назначений, которые были добавлены в SDC файл. В окне Tasks (утилиты TimeQuest), дважды нажмите левую кнопку мышки на команде Update Timing Netlist.

Вы могли бы выполнить команду Read SDC File вручную, перед обновлением списка связей проекта, но при выполнении команды обновления списка связей проекта автоматически читается созданный вами файл SDC с именем, совпадающим с именем проекта.

Шаг 6: Проверьте правильность установленных назначений с помощью отчетов утилиты TimeQuest

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

1. В окне Tasks дважды нажмите левую кнопку мышки на команде Report SDC.

В окне Report будет создана новая папка SDC Assignments, содержащая три отчета: Create Clock, Set Input Delay и Set Output Delay. Все ли данные, содержащиеся в этих отчетах, совпадают с введенными вами назначениями?

2. В окне Tasks дважды нажмите левую кнопку мышки на команде Report Clocks.

Используйте данный отчет для проверки правильности назначения тактовой частоты (тактовых частот) и их привязки к соответствующим портам или контактам.

3. В окне Tasks дважды нажмите левую кнопку мышки на команде Report Ignored Constraints.

Этот отчет содержит те назначения, которые были проигнорированы утилитой TimeQuest. Например, если вы некорректно указали имя порта, то такая SDC команда будет проигнорирована и информация об этом появится в данном отчете. Есть ли в данном отчете информация о неправильно сделанных вами назначениях? Если да, откройте SDC файл, исправьте ошибку, повторно создайте и обновите список связей проекта и сгенерируйте данный отчет.

4. В окне Tasks дважды нажмите левую кнопку мышки на команде Report Unconstrained Paths.

Используйте данный  отчет для проверки полноты сделанных назначений в проекте. Есть ли сигналы, для которых не введены назначения? Если да, тогда что необходимо сделать?

5. Посмотрите полученный результат в отчете Unconstrained Paths и проверьте, для каких сигналов не введены назначения.

Отчет Unconstrained Paths Summary (отмеченный красным цветом) указывает вам, что один входной порт и 16 связей входного порта остались без назначений. Откройте папки Setup Analysis и Hold Analysis, чтобы проверить какой именно это порт и какие связи.

Вы обратили внимание, что для входного порта wren не введены назначения? Соответственно, связи от порта wren до входов разрешения записи входных регистров write enable input registers блока ram тоже не имеют назначений.

6. Вернитесь к вашему SDC файлу и, с помощью команды Set Input Delay, установите назначения для сигнала wren. Установите значение максимальной входной задержки равное 2.5 ns, а минимальной входной задержки  – 1.0 ns, относительно тактовой частоты clk1.

7. Вернитесь в основное окно утилиты TimeQuest, удалите  и повторно создайте список связей проекта для временного анализа. Затем восстановите отчеты, которые были созданы ранее.

Сейчас в вашем проекте сделаны все назначения?

Шаг 7: Создайте командный файл Tcl для автоматического выполнения команд

Очевидно, что обновление списка связей проекта и отчетов каждый раз после изменения SDC файла, процесс весьма трудоемкий. Для его автоматизации мы создадим простой командный файл на языке Tcl,  который будет обновлять все данные после изменения SDC файла.

1. В основном окне утилиты TimeQuest создайте новый SDC файл.

2. В меню File выберите команду Save As. Задайте имя файла pipemult_timing.tcl и выберите настройку Save as type как Tcl Script File (*.tcl).

3. Поскольку редактор SDC файлов и текстовый редактор Quartus II одинаковы, можно создать файл на языке Tcl, не переходя в основное окно САПР Quartus II.

4. Введите команды на языке Tcl в новый файл, в указанном ниже порядке. Вы можете вводить каждую команду вручную или копировать их из диалогового окна утилиты TimeQuest GUI (закладка Console или закладка History).

5. Создайте  список связей проекта на основе post-map списка.

6. Прочитайте файл SDC.

7. Обновите список связей проекта для временного анализа

8. Создайте отчет о назначениях для тактовой частоты.

9. Создайте отчет о сигналах без назначений.

10. Создайте отчет о проигнорированных назначениях.

11. Создайте отчет о внесенных SDC назначениях.

12. Сохраните файл.

13. В основном окне TimeQuest, войдите в меню Netlist и удалите текущий список связей проекта.

14. В меню Script выберите команду Run Tcl Script и укажите командный файл pipemult_timing.tcl.

Автоматически должен быть создан и обновлен список связей проекта и должны быть восстановлены все отчеты. Единственным недостатком, в данном случае, является необходимость вручную удалять список связей проекта до запуска командного файла. Иначе утилита TimeQuest будет выдавать сообщение об ошибке. Если ввести команду удаления списка связей проекта в начале командного файла, может возникнуть другая проблема: если список связей проекта еще не создан, утилита TimeQuest будет выдавать другое сообщение об ошибке. Можно создать более сложный командный файл, учитывающий эту ситуацию, но уже не в рамках данной лабораторной работы.

Шаг 8: Выполните компиляцию проекта, с учетом данных SDC файла.

1. Перейдите к основному окну САПР Quartus II.

2. В меню Assignments выберите команду Timing Analysis Settings.

Откроется диалоговое окно Settings с выбранным разделом Timing Analysis Settings.

3. Отметьте опцию Use TimeQuest Timing Analyzer during compilation как показано выше.

4. Добавьте файл pipemult.sdc к проекту. В диалоговом окне Settings выберите категорию TimeQuest Timing Analyzer (в разделе Timing Analysis Settings). С помощью кнопки выберите файл pipemult.sdc, нажмите кнопку Open, а затем кнопку Add.

5. Установите опции Enable multicorner timing analysis during compilation и Report worst-case paths during compilation.

6. Нажмите OK, чтобы закрыть диалоговое окно Settings.

7. Нажмите кнопку или выберите команду Start Compilation в меню Processing.

8. После завершения компиляции, откройте папку TimeQuest Timing Analyzer в отчете компилятора Compilation Report.

Удовлетворяет ли ваш проект временным требованиям? Быстрый взгляд на сводную таблицу отчета даст вам ответ. Проверьте отчеты для двух типов временных моделей – быстрой и медленной. Отмечены ли они красным цветом? Если нет, то все временные требования выполняются. Больше никаких параметров не нужно проверять.

9. Выпишите наихудшие значения временного запаса (slack) для  времени установки (setup) и времени удержания (hold) сигнала в Таблицу 3.

Помните, что эти значения могут быть различными для быстрой и медленной модели.

Шаг 9: Примените SDC файл к версии проекта pipemult_lc

Сейчас вы воспользуетесь созданным SDC файлом для проверки временных характеристик версии проекта pipemult_lc.

1. С помощью выпадающего меню в верхней части основного окна САПР Quartus II измените текущую версию проекта на pipemult_lc.

2. Установите применение утилиты TimeQuest в процессе компиляции (Assignments-> Timing Analysis Settings).

3. Добавьте файл pipemult.sdc к проекту в качестве файла описания временных назначений, и установите опции Enable multicorner timing analysis during compilation и Report worst-case paths during compilation.

4. Выполните полную компиляцию версии проекта pipemult_lc.

Удовлетворяет ли данная версия проекта требованиям к временным параметрам?

5. В отчете компилятора Compilation Report откройте таблицы Setup Summary и Hold Summary, соответствующие быстрой и медленной временным моделям. Выпишите наихудшие значения временного запаса (slack) для  времени установки (setup) и времени удержания (hold) сигнала в Таблицу 3.

Видно, что для сигнала clk1 не выполняется требование к времени установки, равное 0.7 ns. Будем исследовать эту проблему.

6. Откройте утилиту TimeQuest.

В данном случае, т.к. SDC файл уже создан и добавлен к текущему проекту, в нем полностью описаны все временные назначения, можно перейти в окно Tasks для генерации отчетов. Дополнительно, вы можете отредактировать ваш файл pipemult_timing.tcl для создания списка связей проекта на основе post-fit списка для быстрой или медленной временной модели и генерации отчетов о временных запасах для времен установки и удержания.

7. Сгенерируйте отчет Setup Summary. В окне Tasks дважды нажмите левую кнопку мышки на команде Report Setup Summary.

Обратите внимание, рядом с командами Create Timing Netlist, Read SDC File и Update Timing Netlist появились соответствующие зеленые отметки об их выполнении. Вызов команды генерации отчетов из окна Tasks автоматически выполняет все необходимые команды для их создания. Такая возможность существует для данного проекта потому, что он использует заданный по умолчанию post-fit список для создания списка связей проекта, в отличие от post-map списка, который вы выбирали вручную на предыдущих шагах.

В окне Report отчет Summary (Setup) отмечен красным цветом, сообщая о наличии ошибки (которая уже известна вам).

8. Создайте подробный отчет. В отчете Summary (Setup) выделите сигнал clk1. Нажмите правую клавишу мышки и выберите из контекстного меню команду Report Timing.

9. В открывшемся диалоговом окне Report Timing, в разделе Paths установите значение Report number of paths равное 20. В разделе Output для указания Detail level: с помощью выпадающего меню выберите значение Summary. Если хототе, скопируйте данную Tcl команду и добавьте её в ваш командный файл. Нажмите кнпку Report Timing.


Появился отчет Setup: clk1 Summary. Обратите внимание, он содержит 20 связей с наихудшими значениями. Что общего для этих связей? Видно, что это имена источника и приемника сигнала.

Вся логические элементы, реализующие умножитель, расположены между двумя банками регистров, входным и выходным. В результате реализации умножителя на логических ячейках, между фиксирующими регистрами располагается большое количество логических элементов, что ухудшает быстродействие устройства. Чтобы убедиться в этом, воспользуйтесь утилитой Technology Map Viewer для просмотра используемых ресурсов. Сделайте следующее:

1. Вернитесь в основное окно Quartus II и откройте утилиту Technology Map Viewer из меню Tools.

2. Нажмите правую клавишу мышки на любом блоке и выберите команду Viewer Options из контекстного меню. В разделе Filtering отключите опцию Number of filtering levels. Нажмите OK.

3. Перейдите ниже на два иерархических уровня в блоке mult.

4. Выделите выходной контакт OUT1. Нажмите правую клавишу мышки и выберите команду Filter Þ Sources. Вы должны увидеть регистр с именем output_reg[0]. Это выходной регистр умножителя. Между выходным регистром умножителя и выходным контактом нет логических элементов.

5. Снова выделите output_reg[0], нажмите правую клавишу мышки и выберите команду Filter Þ Sources.

Теперь вы видите два уровня логических элементов (реализующих функцию умножения) и три входных регистра.

6. Выделите один из трех регистров, нажмите правую клавишу мышки и выберите команду Filter Þ Sources .

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

Шаг 10: Разрешите выполнение физического синтеза для новой версии проекта

Прежде, чем вы воспользуетесь возможностью физического синтеза для улучшения временных параметров, создайте новую версию проекта. Это полезно потому, что если проект требует длительного времени для компиляции а результат физического синтеза окажется неудовлетворительным, можно быстро вернуться к предыдущей версии проекта.

1. В меню Project основного окна САПР QuartusII выберите команду Revisions.

2. В диалоговом окне Revisions нажмите кнопку Create.

3. Укажите имя pipemult_lc_phys_syn для новой версии Revision name. Остальные настройки оставьте без изменений. Нажмите OK.

4. Нажмите OK, чтобы закрыть диалоговое окно Revisions.

5. В меню Assignments выберите команду Settings. Перейдите на страницу Physical Synthesis

Optimizations в разделе Fitter Settings.

6. В окне Fitter optimizations установите опцию Perform register retiming. В разделе Physical synthesis effort установите режим Normal.

7. Нажмите OK, чтобы закрыть диалоговое окно Settings.

8. Нажмите кнопку для выполнения полной компиляции.

Создавая новую версию проекта, основанную на версии pipemult_lc, все необходимые настройки (файл SDC, назначения контактов ввода/вывода и пр.) переносятся из базовой версии, поэтому нет необходимости их задавать.

9. После завершения компиляции, проверьте выполнение временных требований. Запишите полученные результаты в Таблицу 3.

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

Шаг 11: Сравните полученные результаты для различных версий проекта

1. В меню Project выберите команду Revisions.

2. В диалоговом окне Revisions нажмите кнопку Compare.

Откроется таблица сравнения, в которой отражены сделанные назначения и полученные результаты для четырех версий проекта, созданных вами. Сравнивните:

  • Общее количество логических элементов – Total number of logic elements (Fitter section)
  • Общее количество регистров – Total number of registers (Fitter or Analysis & Synthesis section)
  • Общее количество специализированных блоков умножения – Total embedded multiplier 9-bit elements (Fitter section)
  • Временной запас – Setup & hold slack (TimeQuest section)