Упрощение постоянных операций и уменьшение сложности Проекта при HDL Coder

HDL Coder™ выполняет определенные методы оптимизации, которые улучшают качество сгенерированного HDL-кода. Когда вы используете типы данных с плавающей точкой в Native Floating Point mode и сгенерируйте код из вашей модели, во время компиляции, HDL Coder ищет подмножество блоков, которые соответствуют определенному шаблону. Когда генератор кода распознает шаблон, он автоматически выполняет определенные методы оптимизации, чтобы заменить блоки в подмножестве другими, более простыми блоками.

Оптимизация методов:

  • Удалите избыточные расчеты во время выполнения

  • Упростите свой проект

  • Повышение качества и эффективности сгенерированного HDL-кода

  • Уменьшите задержки и площадь участка

  • Улучшите сроки вашего проекта на целевом компьютере

Упрощение постоянных операций

HDL Coder удаляет избыточные операции в вашем проекте, оценивая постоянные подэкспрессии в усовершенствование. Этот метод оптимизации идентифицирует блоки Simulink ® в вашей модели, которые имеют постоянные значения во всех входных портах, а затем заменяет блоки на блоки Constant. Генератор кода распространяет входные константы внутри блоков, чтобы вычислить полученное значение Константы.

   For example, c = 3 * 5 becomes c = 15.

Эта оптимизация работает с любым блоком Simulink, который поддерживает генерацию HDL-кода. Для примера:

  • Откройте модель hdlcoder_constant_simplification. Дважды кликните Trigonometric Functions Подсистема.

open_system('hdlcoder_constant_simplification')
open_system('hdlcoder_constant_simplification/Trigonometric Functions')
set_param('hdlcoder_constant_simplification', 'SimulationCommand', 'update');

  • Чтобы сгенерировать HDL-код для hdlcoder_constant_simplification модель, введите эту команду.

makehdl('hdlcoder_constant_simplification')
  • Откройте сгенерированную модель и дважды кликните Trigonometric Functions подсистема.

HDL Coder™ распознал шаблон моделирования и заменил постоянные тригонометрические операции с одной точностью на константы. Эта оптимизация приводит к значительному сокращению площади и улучшению синхронизации при развертывании кода на целевой платформе.

Замена медленных операций более быстрыми эквивалентами

Эта оптимизация автоматически заменяет медленные операции более быстрыми эквивалентами.

   For example, r1 = r2 / 2 becomes r1 = r2 >> 1.

Примеры этого метода оптимизации включают замену блока Product или блока Divide блоком Gain. Если один из входов в блок Product или блок Divide является константой и степенью двойки, генератор кода заменяет этот блок блоком Gain. Генератор кода распространяет Постоянное значение внутри блока Product или блока Divide, чтобы вычислить параметр Gain. Эта оптимизация работает с отдельными типами данных в Native Floating Point режим.

Для примера:

  • Откройте модель hdlcoder_slow_operation_replacement. Дважды кликните Подсистему DUT.

open_system('hdlcoder_slow_operation_replacement')
open_system('hdlcoder_slow_operation_replacement/DUT')
set_param('hdlcoder_slow_operation_replacement', 'SimulationCommand', 'update');

  • Чтобы сгенерировать HDL-код для Подсистемы DUT, введите следующую команду:

makehdl('hdlcoder_slow_operation_replacement/DUT')
  • Откройте сгенерированную модель и дважды кликните DUT подсистема.

HDL Coder™ распознал шаблон моделирования и заменил блок Product и блок Divide блоком Gain. Эта оптимизация значительно уменьшает задержку вашего проекта и улучшает область и время на целевом FPGA.

Комбинация нескольких операций

Эта оптимизация заменяет несколько операций на одну эквивалентную операцию. Примеры этого метода оптимизации включают замену блока Sin и блока Cos блоком Sincos. Если вы предоставляете тот же входной сигнал блоку Sin и блоку Cos в вашей модели, и когда свойства HDL-блока блоков Sin и Cos совпадают, генератор кода заменяет блоки на блок Sincos. Эта оптимизация работает с отдельными типами данных в Native Floating Point режим.

Для примера:

  • Откройте модель hdlcoder_combine_operations. Дважды кликните Подсистему DUT.

open_system('hdlcoder_combine_operations')
open_system('hdlcoder_combine_operations/DUT')
set_param('hdlcoder_combine_operations', 'SimulationCommand', 'update');

  • Чтобы сгенерировать HDL-код для Подсистемы DUT, введите следующую команду:

makehdl('hdlcoder_combine_operations/DUT')
  • Откройте сгенерированную модель и дважды щелкните Подсистему DUT. Сгенерированная модель появится следующим образом.

HDL Coder™ распознал шаблон моделирования и заменил блок Sin и блок Cos блоком Sincos. Этот метод оптимизации значительно улучшает эффективность вашего проекта на целевой платформе.

Факторы

  • Оптимизация работает с типами данных с плавающей точкой. На проекты с фиксированной точкой эта оптимизация не влияет. Когда вы используете отдельные типы данных, включите Native Floating Point режим. В диалоговом окне Параметров конфигурации на панели Генерации HDL-кода > Floating Точки установите значение библиотеки IP с плавающей точкой Native Floating Point. Чтобы узнать о собственной поддержке с плавающей точкой в HDL Coder, смотрите Генерация независимого от цели HDL-кода с собственной плавающей точкой.

  • Оптимизация сохраняет все комментарии от блоков в сгенерированном коде. Чтобы узнать об указании комментариев к блокам, см. Раздел «Генерация кода с аннотациями» или «Комментарии».

  • Оптимизация не оптимизирует блоки, которые используют настраиваемые параметры или родовые входы, потому что настраиваемые параметры не рассматриваются как постоянные значения. Чтобы эти блоки участвовали в оптимизации, в редакторе масок для блоков снимите флажок Настроить (Tunable). Чтобы узнать о настраиваемых параметрах, см. «Генерация портов DUT для настраиваемых параметров».

  • Оптимизации рассматривают значения перечисления и константы из браузера Рабочей области как постоянные значения. Поэтому генератор кода распространяет эти значения внутри различных компонентов и упрощает постоянные операции.

Похожие темы