При генерации кода ЛПВП из многоскоростного алгоритма в 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-файлов и снижает эффективность генерируемого кода.
Для большинства приложений, для которых предназначен код 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.
При необходимости использования многоскоростной модели рекомендуется уменьшить разницу в скорости. Дифференциал скорости соответствует отношению самой быстрой к самой медленной тактовой частоте в вашей конструкции. Если целевое приложение требует два пути сигнала, так что один путь сигнала проходит во временных единицах наносекунд (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, которые могут потребовать чрезвычайно большой разницы скоростей.
Для оптимизации количества регистров, используемых конструкцией на целевом устройстве 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 и развертывания кода на целевой платформе.
createFloatingPointTargetConfig