Настройки по умолчанию объекта 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