Настройки по умолчанию для fimath
объект предлагает наименьшую ошибку округления и предотвращает переполнение. Однако они могут привести к дополнительной логике в сгенерированном коде. Этими настройками по умолчанию являются:
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
Для более постного кода рекомендуется, чтобы вы совпадали с fimath
настройки настроек процессора.
The 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