Генератор кода вводит регистры, когда вы задаете определенные реализации блока или используете определенные настройки. Можно следовать этим инструкциям, чтобы узнать больше об этих регистрах и как можно использовать их, чтобы оптимизировать синхронизацию проекта.
Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
3.2.1
Информативный
В большинстве случаев генератор кода вводит регистры в областях, которые запускаются медленнее, чем тактовая частота. Чтобы избежать или минимизировать дополнительную задержку, можно запустить эти регистры на быстрой тактовой частоте при помощи конвейеризации тактовой частоты. Можно использовать конвейеризацию тактовой частоты с этой оптимизацией:
Конвейеризация ввода и вывода
Реализации блока мультицикла, такие как комплексные математические операции как Sqrt и Reciprocal.
Отображение библиотеки с плавающей точкой
Задержите балансировку
Разделение ресурсов и потоковая передача
Кроме того, для проектов с несколькими иерархиями, чтобы улучшить возможности для конвейеризации тактовой частоты, рекомендуется, чтобы у вас было свойство FlattenHierarchy блока HDL, включенное на Подсистеме верхнего уровня.
Чтобы узнать больше о конвейеризации тактовой частоты и блоках, которые действуют как барьеры для этой оптимизации, смотрите, что Тактовая частота Конвейерно обрабатывает.
3.2.2
Рекомендуемый
Распределенная конвейеризация является оптимизацией скорости, которая уменьшает критический путь путем перемещения существующих задержек проекта при сохранении функционального поведения.
Чтобы использовать эту оптимизацию для Subsystem, установите набор свойств блока DistributedPipelining HDL на on
.
Чтобы эффективнее использовать эту оптимизацию, в диалоговом окне Configuration Parameters, на HDL Code Generation> панель Optimization, можно задать эти дополнительные настройки.
ConstrainedOutputPipeline: Убедитесь, что общее количество задержек, которые вставляются включая anyinput и выводят конвейеризацию, что вы задаете, больше или равно значению, которое вы задаете для ConstrainedOutputPipeline на Subsystem.
Иерархическая распределенная конвейеризация: Выберите эту опцию, если вы хотите применить распределенную оптимизацию конвейеризации через несколько иерархия подсистемы. Убедитесь, что Subsystem верхнего уровня и каждая подсистема в иерархии имеют набор свойств блока DistributedPipelining HDL к on
.
Примечание
Если вы не можете включить DistributedPipelining на Subsystem верхнего уровня, можно включить FlattenHierarchy, который позволяет конвейерно обработать с другими блоками в более низкой иерархии модели.
Конвейеризация тактовой частоты: Выберите эту опцию, если вы хотите, чтобы генератор кода вставил регистры на тактовой частоте вместо скорости передачи данных.
Позвольте конвейеризацию тактовой частоты выходных портов DUT: Выберите эту опцию, если вы хотите, чтобы генератор кода вставил регистры на тактовой частоте вместо скорости передачи данных в выходных портах DUT.
Задержки проекта заповедника: Выберите эту опцию, если вы не хотите, чтобы генератор кода переместил задержки, вы добавили к своему проекту. Оптимизация только перемещает конвейерные регистры.
Распределенный приоритет конвейеризации: Задайте, хотите ли вы приоритет быть Numerical Integrity
или Performance
. Если вы используете Performance
, убедитесь, что результаты симуляции соответствуют. В некоторых случаях эта установка перемещает регистры в блоки, которые имеют начальные значения, такие как константы, которые могут влиять на результаты симуляции.
Subsystem, для которого вы хотите применить оптимизацию, должен удовлетворить эти требования:
Убедитесь, что Subsystem, на который вы применяете эту оптимизацию, не содержит обратной связи.
Используйте блоки, которые поддерживаются для распределенной конвейеризации. Для списка неподдерживаемых блоков смотрите Ограничения Распределенной Конвейеризации. Как обходное решение:
Поместите некоторые неподдерживаемые блоки, такие как Dot Product в другом Subsystem, который не имеет распределенной конвейеризации включенной.
Измените Distributed pipelining priority в Performance
для определенных блоков, таких как Enabled Subsystem.
Sample Time блоков должен быть дискретным. Если у вас есть блоки с набором Sample Time к Inf
, измените их в -1
. Чтобы идентифицировать и изменить шаг расчета программно, смотрите Параметры блоков Изменения при помощи find_system и set_param.
Удалите любые входные порты на блоках Scope, чтобы избежать генерации бесконечного шага расчета.