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