exponenta event banner

Упрощение постоянных операций и снижение сложности проектирования в кодере HDL

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

Методы оптимизации:

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

  • Упростите дизайн

  • Повышение качества и эффективности генерируемого кода ЛПВП

  • Сокращение задержек и занимаемой площади

  • Улучшение синхронизации проектирования на целевом оборудовании

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

Кодер HDL удаляет избыточные операции в конструкции, заранее оценивая постоянные подчиненные выражения. Этот метод оптимизации определяет блоки Simulink ® в модели, которые имеют постоянные значения на всех входных портах, а затем заменяет блоки постоянными блоками. Генератор кода распространяет входные константы внутри блоков для вычисления результирующего значения константы.

   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 подсистема.

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

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

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

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

Примеры этого метода оптимизации включают замену блока изделия или блока деления блоком усиления. Если один из входов в блок произведения или блок деления является константой и мощностью два, генератор кода заменяет этот блок блоком усиления. Генератор кода распространяет значение константы внутри блока произведения или блока деления для вычисления параметра усиления. Эта оптимизация работает с отдельными типами данных в 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 блоком Синкоса. Если один и тот же входной сигнал подается на блок 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» > «Плавающая точка» задайте для параметра «Библиотека IP с плавающей точкой» значение Native Floating Point. Сведения о собственной поддержке плавающей точки в кодере HDL см. в разделе Создание целевого независимого кода HDL с собственной плавающей точкой.

  • При оптимизации сохраняются все комментарии из блоков в созданном коде. Сведения об указании комментариев к блокам см. в разделе Создание кода с аннотациями или комментариями.

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

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

Связанные темы