Настройки по умолчанию для 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.
Некоторые функции можно реализовать более эффективно, используя подход таблицы поиска. Пример см. в разделе Реализация Log2 с фиксированной точкой с помощью таблицы подстановки.
Разделение часто не поддерживается аппаратным обеспечением. По возможности лучше избегать операций разделения.
Когда знаменателем является степень два, можно переписать деление как операцию битового сдвига.
x/8
может быть переписан как
bitsra(x,3)
В других случаях эффективнее реализовать деление как умножение на обратное.
x/5
может быть переписан как
x*0.2