Балансировка задержки

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

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

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

  • Каскадирование: Некоторые блоки поддерживают каскадные реализации, которые вводят цикл задержки в сгенерированный код.

  • Реализации блоков: Некоторые реализации блоков, такие как архитектура Ньютона-Рафсона, по своей сути вводят задержки в сгенерированный код.

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

Чтобы помочь вам решить эту проблему, HDL Coder поддерживает delay balancing. По умолчанию балансировка задержки включена в модели. Генератор кода обнаруживает введение новых задержек вдоль одного пути, а затем вставляет соответствующие задержки на другие пути. Когда включена балансировка задержки, сгенерированная модель функционально эквивалентна исходной модели. Не рекомендуется отключать балансировку задержки на модели. Если вы отключаете эту настройку, 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.

Когда в модели включена балансировка задержки, установка балансировки задержки в отдельных подсистемах игнорируется. Чтобы узнать, как задать балансировку задержки для подсистемы, смотрите Set Delay Balancing For a Subsystem.

Ограничения балансировки задержки

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

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

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

  • Triggered Subsystem

  • Atomic Subsystem

  • HDLCosimulation

  • 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 не поддерживает балансировку задержки, если:

  • Существует несколько образцов Atomic Subsystem в разных условных подсистемах.

    В диалоговом окне Параметры Блоков Atomic Subsystem можно задать Function packaging Nonreusable function.

  • Свойство блока 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 установленное на 1 .

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

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

Отчет о балансировке задержки

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

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

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

Похожие примеры

Подробнее о