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

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

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

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

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

  • Улучшите качество и эффективность сгенерированного HDL-кода.

  • Уменьшайте место области и задержка.

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

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

HDL Coder удаляет избыточные операции в вашем проекте путем оценки постоянных подвыражений заранее. Этот метод оптимизации идентифицирует блоки 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.

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

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

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

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

Примеры этого метода оптимизации включают замену блока продукта или блока Divide блоком Gain. Если одни из входных параметров к блоку продукта или блоку Divide являются константой и степенью двойки, замены генератора кода, которые блокируются блоком Gain. Генератор кода распространяет Постоянное значение в блоке продукта или блоке Divide, чтобы вычислить параметр Усиления. Эта оптимизация работает с одним типами данных в режиме 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™ распознал шаблон моделирования и заменил блок продукта и блок Divide блоком Gain. Эта оптимизация значительно уменьшает задержку вашего проекта и улучшает область и синхронизирующий на целевом FPGA.

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

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

Факторы

  • Оптимизация работает со всей фиксированной точкой и типами данных single. Когда вы используете типы данных single, включаете нативный режим с плавающей точкой. В диалоговом окне Configuration Parameters, на вкладке HDL Code Generation> Global Settings> Floating Point Target, устанавливает Floating-Point IP Library на Native Floating Point. Чтобы узнать о нативной поддержке с плавающей точкой в HDL Coder, смотрите Начало работы с Собственным компонентом HDL Coder Поддержка С плавающей точкой.

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

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

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

Похожие темы