exponenta event banner

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

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

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

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

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

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

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

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

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

Можно задать балансировку задержки для всей модели. Для более точного управления можно также установить балансировку задержки для подсистем в подсистеме 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.

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

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

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

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

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

  • Срабатывающая подсистема

  • Атомная подсистема

  • HDLCosimulation

  • Дублирование типа данных

  • Уменьшение до нуля

  • Преобразование кадров

  • Земля

  • FFT HDL оптимизирован

  • Фильтр LMS

  • Ссылка на модель

  • В файл VCD

  • Величина - угол к комплексу

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

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

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

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

  • Существует несколько экземпляров атомной подсистемы в различных условных подсистемах.

    В диалоговом окне «Параметры блока» атомной подсистемы можно установить для параметра «Упаковка функций» значение Nonreusable function.

  • Свойство блока BalureDelays для всех экземпляров атомной подсистемы или ссылки на модель получает другое значение.

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

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

  • Подсистема с BlackBox Свойство блока ImplementateLatency архитектуры имеет отрицательное значение.

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

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

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

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

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

  • Время выборки не является дискретным или отношение времени выборки самой быстрой к самой медленной скорости слишком велико.

Балансировка задержки с помощью констант

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

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

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

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

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

При создании кода для каждой подсистемы, ссылки на модель или функционального блока MATLAB кодер HDL создает отчет по оптимизации. В отчете выберите раздел «Балансировка задержки» отчета.

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

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

Подробнее