Настройки по умолчанию fimath возразите предлагают самую маленькую погрешность округления и предотвращают переполнение. Однако они могут привести к дополнительной логике в сгенерированном коде. Эти настройки по умолчанию:
RoundingMethod: Nearest
OverflowAction: Saturate
ProductMode: FullPrecision
SumMode: FullPrecision
Для более скудного кода рекомендуется, чтобы вы совпадали с fimath настройки к настройкам вашего процессора.
KeepLSB установка для ProductMode и SumMode моделирует поведение целочисленных операций на языке C. KeepMSB для ProductMode моделирует поведение многих устройств DSP.
Различные методы округления требуют различных сумм служебного кода. Установка RoundingMethod свойство к Floor, то, которое эквивалентно дополнительному усечению two, обеспечивает самую эффективную реализацию округления для большинства операций. Для функции деления, самого эффективного RoundingMethod Zero.
Стандартный метод для обработки переполнения состоит в том, чтобы перенести использование арифметика по модулю. Другие методы обработки переполнения создают дорогостоящую логику. Рекомендуется, чтобы вы установили OverflowAction свойство к Wrap если это возможно.
Основанные на CORDIC алгоритмы среди большей части оборудования, дружественного, потому что они требуют только итеративных операций shift-add. Заменение функций с одной из реализаций CORDIC может сделать ваш сгенерированный код более эффективным. Для списка функций CORDIC и примеров их реализовываемый, см. CORDIC.
Можно реализовать некоторые функции более эффективно при помощи подхода интерполяционной таблицы. Для примера смотрите Фиксированную точку Реализации Log2 Используя Интерполяционную таблицу.
Деление часто не поддерживается оборудованием. Когда возможно, лучше избегать операций деления.
Когда знаменатель является степенью двойки, можно переписать деление как немного операцию сдвига.
x/8
может быть переписан как
bitsra(x,3)
Другие времена более эффективно реализовать деление как умножение обратной величиной.
x/5
может быть переписан как
x*0.2