Задержите балансировку

Почему балансировка задержки использования?

HDL Coder™ поддерживает несколько оптимизации, реализаций блока и опций, которые вводят дискретные задержки в вашу модель, с целью более эффективного аппаратного использования или достижения более высоких тактовых частот. Оптимизация такой, как выведено конвейеризация, потоковая передача или разделение ресурсов может ввести задержки. Некоторые реализации блока, такие как Ньютон-Raphson и архитектура CORDIC, по сути вводят задержки сгенерированного кода.

Когда оптимизация или опции реализации блока вводят задержки вдоль критического пути в модели, численных данных исходной модели и сгенерированной модели, или HDL-код может отличаться, потому что эквивалентные задержки не введены на другом, параллельны путям прохождения сигнала. Ручная вставка компенсации задержек вдоль других путей возможна, но подвержена ошибке и не масштабируется хорошо к большим моделям, которые имеют много путей прохождения сигнала или несколько частот дискретизации.

Чтобы избежать этой проблемы, HDL Coder поддерживает балансировку задержки. По умолчанию задержитесь, балансировка включена на модели. Генератор кода обнаруживает введение новых задержек вдоль одного пути, и затем вставляет соответствие с задержками на других путях. Когда вы включаете балансировку задержки, сгенерированная модель функционально эквивалентна исходной модели. Не рекомендуется, чтобы вы отключили задержку, балансирующуюся на модели. Если вы отключаете эту установку, HDL Coder генерирует предупреждение, что числовые различия могут произойти в модели валидации. Чтобы зафиксировать это предупреждение, включите Balance delays на модели или запустите установку балансировки задержки Проверки проверки модели.

Задайте балансировку задержки

Можно установить задержку, балансирующуюся для целой модели. Для более прекрасного управления можно также установить задержку, балансирующуюся для подсистем в подсистеме DUT верхнего уровня.

Установите задержку, балансирующуюся для модели

Чтобы установить задержку, балансирующуюся для модели, используйте их makehdl опции:

  • BalanceDelays: По умолчанию балансировка задержки уровня модели включена, и подсистемы в модели наследовали установку уровня модели. Чтобы изучить, как установить задержку, балансирующуюся для модели, смотрите задержки Баланса.

  • GenerateValidationModel: По умолчанию генерация модели валидации отключена. Когда вы включаете балансировку задержки, генерируете модель валидации, чтобы просмотреть задержки и другие различия между вашей исходной моделью и сгенерированной моделью. Чтобы изучить, как включить генерацию модели валидации, смотрите Сгенерировать раздел модели валидации в Параметрах Генерации Модели для HDL-кода.

Например, эти команды генерируют HDL-код, который имеет балансировку задержки, и сгенерируйте модель валидации.

dut = 'ex_rsqrt_delaybalancing/Subsystem';
makehdl(dut,'BalanceDelays','on','GenerateValidationModel','on');

Отключите задержку, балансирующуюся для подсистемы

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

Чтобы отключить задержку, балансирующуюся для подсистемы в подсистеме DUT верхнего уровня, отключите задержку, балансирующуюся на уровне модели. Когда вы отключаете задержку, балансирующуюся для модели, модель валидации не компенсирует задержку, вставленную в сгенерированную модель из-за оптимизации, или блокирует реализации. Модель валидации может поэтому показать несоответствия между исходной моделью и сгенерированной моделью.

Отключить задержку, балансирующуюся для подсистемы в подсистеме DUT верхнего уровня:

  1. Отключите задержку, балансирующуюся для модели.

  2. Включите задержку, балансирующуюся для подсистемы DUT верхнего уровня.

  3. Отключите задержку, балансирующуюся для подсистемы в подсистеме DUT.

Когда балансировка задержки включена на модели, установка балансировки задержки на отдельных подсистемах проигнорирована. Чтобы изучить, как установить задержку, балансирующуюся для подсистемы, смотрите, что Задержка Набора Балансируется Для Подсистемы.

Задержите балансирующиеся факторы

Когда вы генерируете HDL-код, балансировка задержки является основной частью оптимизации кода. Если какая-либо оптимизация включена, необходимо сбалансировать трубопроводы, введенные как часть той оптимизации. Отказ сбалансировать автоматически вставленный трубопровод задерживает проблемы причин в сгенерированном коде, развернутом в оборудовании. Рекомендуемый способ сбалансировать эти задержки состоит в том, чтобы сохранить BalanceDelays на для модели (ее значение по умолчанию).

Когда вы отключаете задержку, балансирующуюся для модели, или в некоторых определенных подсистемах, HDL Coder не компенсирует задержку, вставленную из-за оптимизации, или блокирует реализации. Несбалансированные задержки могут привести к несоответствию в результатах симуляции между HDL-кодом и вашей моделью Simulink и неожиданным и непротестированным поведением аппаратной реализации. Рекомендуется, чтобы вы сгенерировали модель валидации и наблюдали эффекты таких несбалансированных задержек. Для примеров балансировки задержки и модели валидации, смотрите, что Задержка Балансируется и Рабочий процесс Модели Валидации В HDL Coder™ и Твердости Числовое Несоответствие с Балансировкой Задержки.

Для некоторых многоскоростных моделей HDL Coder может сгенерировать большое количество регистров трубопровода, которые могут препятствовать тому, чтобы проект HDL поместился в FPGA. Прежде чем вы отключите задержку, балансирующуюся для модели, чтобы попытаться решить эту проблему, смотрите, что Задержка Балансируется на Многоскоростных проектах, и Оптимизируйте Сгенерированный HDL-код для Многоскоростных Проектов с Большими Дифференциалами Уровня.

Лучшие практики для отключения глобальной балансировки задержки

Если балансировка задержки отключена для вашей модели:

Сгенерируйте HDL-код с глобальной задержкой, балансирующейся прочь

Могут быть некоторые варианты использования, где необходимо выключить глобальную балансировку задержки. Отключить задержку, балансирующуюся для модели:

Задержите балансирующиеся ограничения

Если балансировка задержки неудачна, hdlcoder.optimizeDesign не может оптимизировать сгенерированный HDL-код.

Неподдерживаемые блоки

Следующие блоки и подсистемы не поддерживают балансировку задержки:

  • Triggered Subsystem

  • HDL Cosimulation

  • Data Type Duplicate

  • Decrement To Zero

  • Frame Conversion

  • Ground

  • FFT HDL Optimized

  • LMS Filter

  • Model Reference

  • To VCD File

  • Magnitude-Angle to Complex

Ограничения блочного режима

Блоки, которые имеют NoHDL архитектура не поддерживает балансировку задержки.

Ограничения уровня подсистемы

HDL Coder не поддерживает балансировку задержки, если:

  • Свойство блока BalanceDelays для всех экземпляров Atomic Subsystem или Model Reference решает к различному значению.

    Чтобы зафиксировать эту ошибку, отключите BalanceDelays для всех экземпляров Atomic Subsystem или Model Reference.

  • Блок в условной подсистеме и имеет задержки трубопровода.

  • Подсистема с BlackBox Architecture имеет набор свойств блока ImplementationLatency к отрицательной величине.

    Чтобы зафиксировать эту ошибку, для ImplementationLatency, вводят неотрицательное целое число.

Другие ограничения

HDL Coder не поддерживает балансировку задержки, если:

  • Задержки введены в обратной связи, и HDL Coder не может сбалансировать задержки пути. Например, если вы применяете конвейеризацию тактовой частоты в обратной связи, HDL Coder вводит задержку на тактовой частоте и может заставить задержку, балансирующуюся перестать работать.

    Чтобы сократить количество задержек тактовой частоты, увеличьте фактор Сверхдискретизации.

  • Шаг расчета не дискретен, или отношение шагов расчета самого быстрого к самому медленному уровню является слишком большим.

Задержите балансировку с постоянных блоков

Когда у вас есть блоки Constant как входные параметры в Подсистеме DUT, для которой включена балансировка задержки, вы видите, что начальная симуляция не сочетается в модели валидации. Рассмотрите эту модель в Подсистеме DUT. Блок Constant, который выводит значение 1 имеет набор свойства OutputPipeline блока HDL к 1.

Этот рисунок отображает сгенерированную модель валидации. Вы видите, что балансировка задержки добавила соответствующую задержку с входным портом, чтобы сбалансировать регистр трубопровода, вставленный для блока Delay. Генератор кода не вставляет соответствующую задержку на параллельном пути, содержащем блок Constant со значением 2 потому что выходное значение блока является константой. Эта задержка не вставленные результаты в начальном несоответствии симуляции.

Чтобы разрешить несоответствие симуляции, в модели валидации, вручную добавляют соответствующую задержку при выходе блока Constant со значением 2.

Задержите балансирующийся отчет

Чтобы видеть, что задержка балансирует информацию в отчете, прежде чем вы сгенерируете код для каждой подсистемы или модели - ссылки, включают отчет оптимизации. Во вкладке HDL Code Generation выберите Report, и затем выберите Generate optimization report.

Когда вы генерируете код для каждой подсистемы, модели - ссылки или блока MATLAB Function, HDL Coder представляет отчет оптимизации. Выберите раздел Delay Balancing отчета.

Отчет Балансировки Задержки показывает изменения задержки, трубопровод и задержку фазы в выходных портах и количество трубопроводов, добавленных в выходных портах, чтобы совпадать с задержками. Если балансировка задержки перестала работать, отчет отображает критерии, который был нарушен и ссылка на любой блок или подсистему, которая заставила задержку, балансирующуюся перестать работать.

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте