Программное обеспечение Fixed-Point Designer™ обеспечивает параметр оптимизации, Use division for fixed-point net slope computation, который управляет, как программное обеспечение обрабатывает сетевое наклонное вычисление. Чтобы изучить, как включить эту оптимизацию, смотрите Целочисленное деление Использования, чтобы Обработать Сетевое Наклонное Вычисление.
Когда изменение наклона фиксированной точки не является степенью двойки, сетевое наклонное вычисление необходимо. Обычно, сетевое наклонное вычисление реализовано с помощью целочисленного умножения, сопровождаемого сдвигами. При определенных обстоятельствах сетевое наклонное вычисление может быть реализовано с помощью целочисленного деления или рационального приближения сетевого наклона. Одно из условий - то, что сетевой наклон может быть точно представлен как рациональная часть или как обратная величина целого числа. При этом условии реализация деления дает более точное числовое поведение. В зависимости от вашего компилятора и встроенного оборудования, реализация деления может быть более желательной, чем реализация сдвигов и умножение. Сгенерированный код для рациональной реализации приближения и/или целочисленного деления может потребовать меньшего количества ROM или улучшить образцовое время выполнения.
Эта оптимизация работает если:
Сетевой наклон может быть аппроксимирован с частью или является обратной величиной целого числа.
Деление более эффективно, чем умножение, сопровождаемое сдвигами на целевом компьютере.
Программное обеспечение Fixed-Point Designer не знает о целевом компьютере. Прежде, чем выбрать эту опцию, проверьте, что деление более эффективно, чем умножение, сопровождаемое сдвигами на вашем целевом компьютере.
Эта оптимизация не работает если:
Программное обеспечение не может выполнить деление с помощью производственной платформы тип данных long
и поэтому должно использовать операции многословные.
Используя деление многословное не производит код, подходящий для целевых процессоров. Поэтому не используйте деление, чтобы обработать сетевое наклонное вычисление в моделях, которые используют операции многословные. Если ваша модель содержит блоки, которые используют операции многословные, изменяют размер слова этих блоков, чтобы избежать этих операций.
Сетевой наклон является степенью 2, или рациональное приближение сетевого наклона содержит деление степенью 2.
Единственное двоичной точкой масштабирование, где сетевой наклон является степенью 2, включает перемещение двоичной точки в слове фиксированной точки. Этот режим масштабирования уже минимизирует количество арифметических операций процессора.
Включить эту оптимизацию:
В диалоговом окне Configuration Parameters, набор Optimization> Use division for fixed-point net slope computation к On
или Use division for reciprocals of integers only
Для получения дополнительной информации смотрите деление Использования для фиксированной точки сетевое наклонное вычисление (Simulink).
На Hardware Implementation> панель Production hardware, набор параметр конфигурации Signed integer division rounds to к Floor
или Zero
, как подходящий для вашего целевого компьютера. Оптимизация не происходит, если параметром Signed integer division rounds to является Undefined
.
Необходимо установить этот параметр на значение, которое подходит для целевого компьютера. Отказ сделать так может привести к операциям деления, которые выполняют определение на панели Hardware Implementation, но являются несоответствующими для целевого компьютера.
Установите Integer rounding mode блоков, которые требуют сетевого наклонного вычисления (например, продукт, Усиление и Преобразование типа данных) к Simplest
или совпадают с округляющимся режимом вашего целевого компьютера.
Можно использовать Model Advisor, чтобы предупредить вас, если вы не сконфигурировали свою модель правильно для этой оптимизации. Откройте Model Advisor и осуществите проверку Identify questionable fixed-point operations. Для получения дополнительной информации, seeIdentify блоки, которые вызовут сетевое наклонное вычисление.
Этот пример иллюстрирует, как, устанавливая Optimization> параметр Use division for fixed-point net slope computation к On
улучшает числовую точность. Это использует следующую модель.
Поскольку продукт блокируется в этой модели,
Эти значения представлены генералом [Наклонное Смещение] схема кодирования, описанная в Масштабировании:.
Поскольку нет никакого смещения для вводов или выводов:
, или
где сетевой наклон:
Сетевым наклоном для блока продукта является 7/11
. Поскольку сетевой наклон может быть представлен как дробное значение, состоящее из маленьких целых чисел, можно использовать установку On
параметра оптимизации Use division for fixed-point net slope computation, если и аппаратная конфигурация модели подходит. Для получения дополнительной информации смотрите, Когда Использовать Деление для Фиксированной точки Сетевое Наклонное Вычисление.
Настраивать модель и запускать симуляцию:
Для блока Constant Vb
, набор Output data type к fixdt(1, 8, 0.7, 0)
. Для блока Constant Vc
, набор Output data type к fixdt(1, 8, 0)
.
Для блока продукта, набор Output data type к fixdt(1, 16, 1.1, 0)
. Установите Integer rounding mode на Simplest
.
Установите Hardware Implementation> Production hardware> параметр конфигурации Signed integer division rounds to к Zero
.
Установите Optimization> Use division for fixed-point net slope computation к Off
.
В вашем окне модели Simulink® выберите Simulation> Run.
Поскольку симуляция использует умножение, сопровождаемое сдвигами, чтобы обработать сетевое наклонное вычисление, сетевая наклонная потеря точности происходит. Эта потеря точности приводит к числовой погрешности: расчетным продуктом является 306.9
, не 308
, как вы ожидаете.
Можно настроить программное обеспечение Fixed-Point Designer, чтобы обеспечить предупреждения, когда потеря точности происходит в константах фиксированной точки. Для получения дополнительной информации смотрите Сетевую Наклонную и Сетевую Точность Смещения.
Установите Optimization> Use division for fixed-point net slope computation к On
.
Сохраните свою модель и моделируйте снова.
Программное обеспечение реализует сетевое наклонное вычисление с помощью рационального приближения вместо умножения, сопровождаемого сдвигами. Расчетным продуктом является 308
, как вы ожидаете.
Оптимизация работает на эту модель потому что:
Сетевой наклон является представимым как часть с маленькими целыми числами в числителе и знаменателе.
Hardware Implementation> Production hardware> параметр конфигурации Signed integer division rounds to установлен в Zero
.
Эта установка должна совпадать с вашим режимом округления целевого компьютера.
Integer rounding mode блока продукта в модели установлен в Simplest
.
Модель не использует операции многословные.
Этот пример показывает, как, устанавливая параметр оптимизации Optimization> Use division for fixed-point net slope computation к On
повышает эффективность сгенерированного кода.
Сгенерированный код более эффективен, только если деление более эффективно, чем умножение, сопровождаемое сдвигами на вашем целевом компьютере.
Этот пример использует следующую модель.
Поскольку продукт блокируется в этой модели,
Эти значения представлены генералом [Наклонное Смещение] схема кодирования, описанная в Масштабировании:.
Поскольку нет никакого смещения для вводов или выводов:
, или
где сетевой наклон:
Сетевым наклоном для блока продукта является 9/10
.
Точно так же для блока Data Type Conversion в этой модели,
Нет никакого смещения. Поэтому сетевой наклон . Сетевым наклоном для этого блока является также 9/10
.
Поскольку сетевой наклон может быть представлен как часть, можно установить Optimization> параметр оптимизации Use division for fixed-point net slope computation к On
, если и аппаратная конфигурация модели подходит. Для получения дополнительной информации смотрите, Когда Использовать Деление для Фиксированной точки Сетевое Наклонное Вычисление.
Настраивать модель и генерировать код:
Для блока Inport Va
, набор Data type к fixdt(1, 8, 9/10, 0)
; для блока Inport Vb
, набор Data type к int8
.
Для блока Data Type Conversion, набор Integer rounding mode к Simplest
. Установите Output data type на int16
.
Для блока продукта, набор Integer rounding mode к Simplest
. Установите Output data type на int16
.
Установите Hardware Implementation> Production hardware> параметр конфигурации Signed integer division rounds to к Zero
.
Установите Optimization> Use division for fixed-point net slope computation к Off
.
Из меню модели Simulink выберите Code> C/C++ Code> Build Model.
Концептуально, сетевым наклонным вычислением является 9/10
или 0.9
:
Vc = 0.9 * Va; Vm = 0.9 * Va * Vb;
Сгенерированный код использует умножение со сдвигами:
% For the conversion Vc = (int16_T)(Va * 115 >> 7); % For the multiplication Vm = (int16_T)((Va * Vb >> 1) * 29491 >> 14);
Идеальным значением сетевого наклонного вычисления является 0.9
. В сгенерированном коде приближенным значением сетевого наклонного вычисления является 29491 >> 15 = 29491/2^15 = 0.899993896484375
. Это приближение вводит числовую погрешность. Например, использование той же модели с постоянными входными параметрами приводит к следующим результатам.
В исходной модели с входными параметрами Va
и Vb
, набор Optimization> параметр Use division for fixed-point net slope computation к On
, обновляют схему и генерируют код снова.
Сгенерированный код теперь использует целочисленное деление вместо умножения, сопровождаемого сдвигами:
% For the conversion Vc = (int16_T)(Va * 9/10); % For the multiplication Vm = (int16_T)(Va * Vb * 9/10);
В сгенерированном коде значение сетевого наклонного вычисления является теперь идеальным значением 0.9
. Используя деление, результаты численно точны.
В модели с постоянными входными параметрами, устанавливает Optimization> параметр Use division for fixed-point net slope computation к On
и моделировать модель.
Оптимизация работает на эту модель потому что:
Сетевой наклон является представимым как часть с маленькими целыми числами в числителе и знаменателе.
Hardware Implementation> Production hardware> параметр конфигурации Signed integer division rounds to установлен в Zero
.
Эта установка должна совпадать с вашим режимом округления целевого компьютера.
Для продукта и блоков Преобразования типа данных в модели, Integer rounding mode установлен в Simplest
.
Модель не использует операции многословные.
При установке Optimization> параметр Use division for fixed-point net slope computation к Use division for reciprocals of integers only
инициировал оптимизацию только в случаях, где сетевой наклон является обратной величиной целого числа. Эта установка приводит к одному целочисленному делению, чтобы обработать сетевые наклонные вычисления.