Генератор кода представляет регистры, когда вы задаете определенные реализации блоков или используете определенные настройки. Вы можете следовать этим рекомендациям, чтобы узнать больше об этих регистрах и о том, как вы можете использовать их для оптимизации сроков вашего проекта.
Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.
3.2.1
Информативный
В большинстве случаев генератор кода вводит регистры в областях, которые работают медленнее, чем тактовая частота. Чтобы избежать или минимизировать дополнительную задержку, можно запустить эти регистры с быстрой тактовой частотой с помощью конвейеризации с тактовой частотой. Вы можете использовать конвейеризацию с тактовой частотой с этими оптимизациями:
Входная и выходная конвейеризация
Многоциклические реализации блоков, такие как сложные математические операции, такие как Sqrt и Reciprocal.
Отображение библиотек с плавающей точкой
Балансировка задержки
Совместное использование ресурсов и потоковая передача
В сложение, для проектов с несколькими иерархиями, для улучшения возможностей конвейеризации по тактовой частоте, рекомендуется, чтобы свойство HDL- блока FlattenHierarchy включено в Подсистеме верхнего уровня.
Чтобы узнать больше о конвейеризации с тактовой частотой и блоках, которые выступают в качестве барьеров для этой оптимизации, см. Раздел «Конвейеризация с тактовой частотой».
3.2.2
Рекомендуется
Распределённая конвейеризация является оптимизацией скорости, которая уменьшает критический путь путем перемещения существующих задержек в проекте с сохранением функционального поведения.
Чтобы использовать эту оптимизацию для Subsystem, установите значение свойства DistributedPipelining HDL-блока on
.
Чтобы более эффективно использовать эту оптимизацию, в диалоговом окне Параметров конфигурации, на панели HDL Code Generation > Optimization, можно задать эти дополнительные параметры.
ConstrainedOutputPipeline: Убедитесь, что общее количество вставленных задержек, включая любое размещение и выход конвейеризации, которые вы задаете, больше или равно значению, которое вы задаете для 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, чтобы избежать генерации бесконечного шага расчета.