exponenta event banner

Советы по повышению эффективности генерируемого кода

Параметры fimath для эффективного кода

Настройки по умолчанию для fimath объект предлагает наименьшую ошибку округления и предотвращает переполнение. Однако они могут привести к дополнительной логике в сгенерированном коде. Эти настройки по умолчанию:

  • RoundingMethod: Nearest

  • OverflowAction: Saturate

  • ProductMode: FullPrecision

  • SumMode: FullPrecision

Для более мягкого кода рекомендуется сопоставить fimath настройки в соответствии с настройками процессора.

  • KeepLSB установка для ProductMode и SumMode моделирует поведение целочисленных операций на языке C. KeepMSB для ProductMode моделирует поведение многих DSP-устройств.

  • Различные методы округления требуют различных количеств кода накладных расходов. Установка RoundingMethod свойство для Floor, что эквивалентно усечению двух дополнений, обеспечивает наиболее эффективную реализацию округления для большинства операций. Для функции деления, наиболее эффективной RoundingMethod является Zero.

  • Стандартным методом обработки переполнений является перенос с использованием арифметики по модулю. Другие методы обработки переполнения создают дорогостоящую логику. Рекомендуется установить OverflowAction свойство для Wrap по возможности.

Замена функций на более эффективные реализации с фиксированными точками

CORDIC

Алгоритмы на основе CORDIC относятся к числу наиболее удобных аппаратных средств, поскольку они требуют только итеративных операций добавления сдвига. Замена функций одной из реализаций CORDIC может повысить эффективность созданного кода. Список функций CORDIC и примеры их реализации см. в разделе Алгоритмы CORDIC.

Таблицы подстановки

Некоторые функции можно реализовать более эффективно, используя подход таблицы поиска. Пример см. в разделе Реализация Log2 с фиксированной точкой с помощью таблицы подстановки.

Подразделение

Разделение часто не поддерживается аппаратным обеспечением. По возможности лучше избегать операций разделения.

Когда знаменателем является степень два, можно переписать деление как операцию битового сдвига.

x/8

может быть переписан как

bitsra(x,3)

В других случаях эффективнее реализовать деление как умножение на обратное.

x/5

может быть переписан как

x*0.2