exponenta event banner

Оптимизация генерируемого кода HDL для многоскоростных проектов с большими разностями скоростей

Проблема

При генерации кода ЛПВП из многоскоростного алгоритма в Simulink ® Coder™ ЛПВП могут генерировать большое количество регистров конвейера, что может помешать установке конструкции ЛПВП в FPGA. Эта проблема возникает из-за моделей моделирования, которые могут привести к большим разницам скоростей. Эту проблему можно решить с помощью методов моделирования для управления соотношениями времени выборки.

Описание

Эта проблема возникает, когда модель Simulink™ имеет значительно большую разницу в частоте дискретизации или использует определенные реализации блоков или оптимизации, которые приводят к различным путям тактовой частоты, таким как:

  • Реализации многоцикловых блоков

  • Трубопровод ввода и вывода

  • Распределенная конвейерная обработка

  • Сопоставление библиотеки с плавающей запятой

  • Создание собственного кода HDL с плавающей запятой

  • Математические функции с фиксированной точкой, такие как обратное, sqrt или деление

  • Совместное использование ресурсов

  • Вытекание

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

Чтобы увидеть пример возникновения этой проблемы, откройте эту модель Simulink™.

open_system('hdlcoder_multirate_high_differential')

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

Создание кода HDL для hdlcoder_multirate_high_differential Подсистема и проверьте выходной журнал.

Откройте созданную модель. В командной строке введите gm_hdlcoder_multirate_high_differential. При компиляции модели дважды щелкните значок hdlcoder_multirate_high_differential Подсистема, модель выглядит так, как показано условным обозначением времени образца.

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

Рекомендации

Рекомендация 1: Использование односкоростной модели

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

Откройте модель, для которой время выборки блока константы изменено на 10E-06, которое является тем же временем выборки, что и базовое время выборки модели.

open_system('hdlcoder_singlerate')

При компиляции модели дважды щелкните значок hdlcoder_singlerate Подсистема, вы видите, что сигнальные тракты в модели работают в одно и то же время выборки 10E-06.

Создание кода HDL для hdlcoder_singlerate Подсистема и проверьте выходной журнал.

Вы видите, что задержка вывода значительно снизилась. Теперь откройте созданную модель. В командной строке MATLAB™ введите gm_hdlcoder_singlerate. При компиляции модели дважды щелкните значок hdlcoder_singlerate Подсистема, модель выглядит так, как показано условным обозначением времени образца.

Сгенерированный код HDL теперь оптимален и использует мало регистров. Поэтому можно развернуть проект на целевых платформах FPGA.

Рекомендация 2: Сокращение разницы в ставках

При необходимости использования многоскоростной модели рекомендуется уменьшить разницу в скорости. Дифференциал скорости соответствует отношению самой быстрой к самой медленной тактовой частоте в вашей конструкции. Если целевое приложение требует два пути сигнала, так что один путь сигнала проходит во временных единицах наносекунд (ns), а другой путь сигнала проходит во временных единицах микросекунд (us), можно выбрать сохранение многоскоростных путей в модели. Следует иметь в виду, что балансировка задержки может вводить значительно большое количество регистров для балансировки сигнальных трактов.

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

Откройте модель, для которой время выборки блока константы изменено на 0,01.

open_system ('hdlcoder_multirate_medium_differential')

При компиляции модели дважды щелкните значок hdlcoder__multirate_medium_differential Подсистема, вы видите, что разность скоростей между двумя трактами сигнала равна 1000.

Создание кода HDL для hdlcoder_multirate_medium_differential Подсистема и проверьте выходной журнал.

Откройте созданную модель. В командной строке MATLAB™ введите gm_hdlcoder_multirate_medium_differential. При компиляции созданной модели дважды щелкните значок hdlcoder_multirate_medium_differential Подсистема, модель отображается условным обозначением времени образца.

Модель имеет большое количество регистров, приблизительно 1000, в тракте быстрой тактовой частоты. Дополнительные затраты на регистры ожидаются при наличии управляющей логики, которая работает с частотой выборки, в 1000 раз превышающей частоту выборки системы. При развертывании созданного кода на целевой платформе следует иметь в виду ограничения на аппаратные ресурсы на целевой платформе. Эта рекомендация предлагает компромисс между созданием оптимального кода ЛПВП и ориентированием на практические приложения FPGA, которые могут потребовать чрезвычайно большой разницы скоростей.

Рекомендация 3: Отображение задержек трубопровода в ОЗУ

Для оптимизации количества регистров, используемых конструкцией на целевом устройстве FPGA, можно использовать параметр Map Pipeline Delays to RAM. Эта настройка представляет собой компромисс между регистрами конвейера, которые вставляются в код HDL с ресурсами ОЗУ для сохранения площади на целевом устройстве FPGA. Этот параметр можно включить на вкладке Создание кода HDL (HDL Code Generation) > Оптимизации (Optimizations) > Общие (General) диалогового окна Параметры конфигурации (Configuration Parameters).

Можно также указать этот параметр в командной строке с помощью MapPipelineDelaysToRAM свойство с hdlset_param или makehdl. Значение свойства можно просмотреть с помощью hdlget_param. Используйте любой из этих методов.

  • Передать свойство в качестве аргумента makehdl функция.

    makehdl('hdlcoder_multirate_high_differential/hdlcoder_multirate_high_differential', ... 
                                  'MapPipelineDelaysToRAM','on')
  • При использовании hdlset_param, можно задать параметр в модели, а затем создать код HDL с помощью makehdl.

    hdlset_param('hdlcoder_multirate_high_differential', ... 
                'MapPipelineDelaysToRAM','on')
    makehdl('hdlcoder_multirate_high_differential/hdlcoder_multirate_high_differential')

Используйте эту настройку в сочетании с предыдущими рекомендациями для дальнейшего повышения эффективности генерируемого кода HDL и развертывания кода на целевой платформе.

См. также

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

Подробнее