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