При генерации HDL-кода из вашего мультирейтового алгоритма в Simulink®HDL Coder™ может сгенерировать большое количество регистров конвейера, которые могут предотвратить проект HDL- подбора кривой в FPGA. Эта проблема возникает из-за шаблонов моделирования, которые могут привести к большим дифференциалам скоростей. Вы можете решить эту проблему с помощью методов моделирования, чтобы управлять коэффициентами шага расчета.
Эта проблема возникает, когда ваша модель Simulink™ имеет значительно большое различие в скоростях дискретизации или использует определенные реализации или оптимизации блоков, которые приводят к различным путям с тактовой частотой, таким как:
Реализации многоядерных блоков
Входная и выходная конвейеризация
Распределённая конвейеризация
Отображение библиотек с плавающей точкой
Собственная генерация HDL-кода с плавающей точкой
Математические функции с фиксированной точкой, такие как returcal, sqrt или delide
Совместное использование ресурсов
Вытекание
Дополнительные трубопроводы приводят к накладным расходам на задержки, которые требуют вставки совпадающих задержек через несколько путей сигнала, работающих с различными скоростями. Если отношение самой быстрой и самой медленной тактовой частоты довольно большое, генератор кода потенциально может ввести в полученный HDL-код большое количество регистров. Большое количество регистров конвейера может увеличить размер сгенерированных файлов HDL и может предотвратить подбор кривой проекта в FPGA.
Чтобы увидеть пример того, как эта проблема возникает, откройте эту Simulink™ модель.
open_system('hdlcoder_multirate_high_differential')
Когда вы компилируете модель и дважды кликните hdlcoder_multirate_high_differential
Подсистема, можно увидеть, что модель имеет блок Gain с плавающей точкой, многоколесный оператор, в области быстрой тактовой частоты.
Сгенерируйте HDL-код для hdlcoder_multirate_high_differential
Подсистема и проверьте выходной журнал.
Откройте сгенерированную модель. В командной строке введите gm_hdlcoder_multirate_high_differential
. Когда вы компилируете модель и дважды кликните hdlcoder_multirate_high_differential
Подсистема, модель выглядит так, как отображается легендой шага расчета.
Большой выход в области быстрой тактовой частоты проекта введён генератором кода, чтобы сбалансировать задержки через несколько выходных путей системы. Эта большая задержка увеличивает размер сгенерированного HDL- файлов и снижает эффективность сгенерированного кода.
Большинство приложений, для которых вы нацелены на HDL-код, могут не потребовать такого большого дифференциала скорости. В этом случае рекомендуется использовать модель с одной скоростью. В этом примере можно изменить частоту дискретизации блока Constant внутри hdlcoder_multirate_high_differential Subsystem
быть таким же, как и у базовой модели.
Откройте эту модель, у которой значение шага расчета блока Constant изменено на 10E-06
, что является тем же шагом расчета, что и базовый шаг расчета модели.
open_system('hdlcoder_singlerate')
Когда вы компилируете модель и дважды кликните hdlcoder_singlerate
Подсистема, вы видите, что сигнальные пути в модели работают в то же шаг расчета 10E-06
.
Сгенерируйте HDL-код для hdlcoder_singlerate
Подсистема и проверьте выходной журнал.
Вы видите, что задержка на выходе значительно уменьшилась. Теперь откройте сгенерированную модель. В командной строке MATLAB™ введите gm_hdlcoder_singlerate
. Когда вы компилируете модель и дважды кликните hdlcoder_singlerate
Подсистема, модель выглядит так, как отображается легендой шага расчета.
Сгенерированный HDL-код теперь оптимален и использует мало регистров. Поэтому можно развернуть проект для целевых платформ FPGA.
Если вы хотите использовать многоскоростную модель, рекомендуется уменьшить дифференциал скорости. Дифференциал скорости соответствует отношению самой быстрой к самой медленной тактовой частоте в вашем проекте. Если ваше целевое приложение требует двух путей сигнала, таких что один путь сигнала запускается во временных модулях наносекунд (ns), а другой путь сигнала запускается во временных модулях микросекунд (us), вы можете принять решение сохранить мультирасовые пути в вашей модели. Следует иметь в виду, что балансировка задержки может ввести значительно большое количество регистров, чтобы сбалансировать пути сигнала.
В этом примере можно изменить частоту дискретизации блока Constant внутри Подсистемы hdlcoder_multirate_high_differential, чтобы уменьшить дифференциал скорости.
Откройте эту модель, у которой значение шага расчета блока Constant изменено на 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 раз быстрее, чем частота дискретизации системы. Когда вы развертываете сгенерированный код на целевой платформе, имейте в виду ограничения в аппаратных ресурсах на целевой платформе. Эта рекомендация предлагает компромисс между генерацией оптимального HDL-кода и нацеливанием на практические приложения FPGA, которые могут потребовать чрезвычайно большого дифференциала ставок.
Чтобы оптимизировать количество регистров, которые использует ваш проект на целевом устройстве FPGA, можно использовать настройку Map Pipeline Delays to RAM. Этот параметр является компромиссом регистров конвейера, которые вставляются в HDL-код с ресурсами ОЗУ, чтобы сохранить площадь участка на целевом устройстве FPGA. Эту настройку можно включить на вкладке HDL Code Generation > Optimizations > General диалогового окна Параметров конфигурации.
Можно также задать эту настройку в командной строке при помощи 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