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

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

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

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

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

  • Улучшите качество и КПД сгенерированного HDL-кода

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

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

Упрощение операций Constant

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 в вашей модели, и когда HDL Block Properties соответствия блоков 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 режим. В диалоговом окне Configuration Parameters, на генерации HDL-кода> панель С плавающей точкой, устанавливает Библиотеку IP С плавающей точкой на Native Floating Point. Чтобы узнать о нативной поддержке с плавающей точкой в HDL Coder, смотрите, Генерируют Независимый от цели HDL-код с Собственным компонентом, С плавающей точкой.

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

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

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

Похожие темы