Программное обеспечение Fixed-Point Designer™ предоставляет параметр оптимизации Use division for fixed-point net slope computing, который управляет тем, как программное обеспечение обрабатывает вычисления net slope. Сведения о том, как включить эту оптимизацию, см. в разделе Использование целочисленного деления для обработки вычислений чистого откоса.
Если изменение уклона с фиксированной точкой не является степенью двух, необходимо вычислить суммарный наклон. Как правило, вычисление чистого наклона выполняется с использованием целочисленного умножения, за которым следуют сдвиги. При определенных условиях вычисление чистого наклона может быть реализовано с использованием целочисленного деления или рационального приближения чистого наклона. Одним из условий является то, что чистый наклон может быть точно представлен как рациональная дробь или как обратная величина целого числа. При этом условии реализация деления даёт более точное численное поведение. В зависимости от компилятора и встроенного аппаратного обеспечения реализация разделения может быть более желательной, чем реализация умножения и сдвига. Сгенерированный код для реализации рационального приближения и/или целочисленного деления может потребовать меньше ПЗУ или увеличить время выполнения модели.
Эта оптимизация работает, если:
Чистый наклон может быть аппроксимирован дробью или представляет собой обратную величину целого числа.
Разделение более эффективно, чем умножение, за которым следуют сдвиги на целевом оборудовании.
Примечание
Программному обеспечению Fixed-Point Designer неизвестно о целевом оборудовании. Перед выбором этой опции убедитесь, что разделение эффективнее умножения, за которым следуют сдвиги на целевом оборудовании.
Эта оптимизация не работает, если:
Программное обеспечение не может выполнить разделение с использованием производственной цели long тип данных и поэтому должны использовать многословные операции.
Использование многословного деления не дает кода, подходящего для встроенных целей. Поэтому не используйте деление для обработки вычисления чистого наклона в моделях, использующих многословные операции. Если модель содержит блоки, использующие многословные операции, измените длину слов этих блоков, чтобы избежать этих операций.
Чистый наклон - это степень 2 или рациональное приближение чистого наклона содержит деление на степень 2.
Масштабирование только в двоичной точке, где суммарный наклон равен степени 2, включает перемещение двоичной точки в пределах слова с фиксированной точкой. Этот режим масштабирования уже минимизирует количество арифметических операций процессора.
Чтобы включить эту оптимизацию, выполните следующие действия.
В диалоговом окне «Параметры конфигурации» на панели «Математические типы и типы данных» > «Типы данных» задайте параметр «Использовать деление для вычисления чистого уклона с фиксированной точкой», чтобы On, или Use division for reciprocals of integers only
Дополнительные сведения см. в разделе Использование деления для расчета чистого уклона с фиксированной точкой.
На панели «Hardware Implementation > Device details» (Аппаратная реализация > Сведения об устройстве) задайте для параметра Signed integer division rounds значение configuration Floor или Zero, в соответствии с вашим целевым оборудованием. Оптимизация не выполняется, если параметр Signed integer division rounds to имеет значение Undefined.
Примечание
Установите для этого параметра значение, соответствующее целевому оборудованию. Невыполнение этого требования может привести к тому, что операции разделения будут соответствовать определению на панели «Реализация оборудования», но не подходят для целевого оборудования.
Установите режим округления «Целое число» для блоков, которые требуют вычисления чистого уклона (например, «Произведение», «Усиление» и «Преобразование типа данных») в Simplest или соответствует режиму округления целевого оборудования.
Примечание
Для предупреждения о неправильной настройке модели для этой оптимизации можно использовать Model Advisor. Откройте Model Advisor и выполните проверку определения сомнительных операций с фиксированной точкой. Дополнительные сведения см. в разделе Определение блоков, которые будут вызывать вычисления чистого откоса.
В этом примере показано, как задать для параметра Математические типы (Math) и Типы данных (Data Types) > Использовать деление (Use division) для расчета чистого откоса с фиксированной точкой значение On повышение численной точности. Чтобы открыть ex_net_slope1 в командной строке MATLAB ® введите:
addpath(fullfile(docroot,'toolbox','fixpoint','examples')) ex_net_slope1

Для блока Product в этой модели,
![]()
Эти значения представлены общей схемой кодирования [наклон смещения], описанной в Scaling: + Bi.
Поскольку отсутствует смещение для входов или выходов:
SbQb.ScQc
или
SbScSa.QbQc
где чистый уклон:
Чистый уклон для блока Product равен 7/11. Поскольку чистый наклон может быть представлен как дробное значение, состоящее из малых целых чисел, можно использовать On установка параметра оптимизации «Использовать деление для расчета чистого откоса с фиксированной точкой», если подходит конфигурация модели и оборудования. Дополнительные сведения см. в разделе Когда использовать деление для расчета чистого откоса в фиксированной точке.
Чтобы настроить модель и выполнить моделирование, выполните следующие действия.
Для блока константы Vb, задайте для типа данных Output значение fixdt(1, 8, 0.7, 0). Для блока константы Vc, задайте для типа данных Output значение fixdt(1, 8, 0).
Для блока Product установите тип данных Output равным fixdt(1, 16, 1.1, 0). Установите режим округления Integer в значение Simplest.
В диалоговом окне Configuration Parameters установите параметр Hardware Implementation > Device details > Signed integer division rounds to configuration в значение Zero.
Задайте для параметров «Математические типы» и «Типы данных» > «Использовать деление для вычисления чистого откоса с фиксированной точкой» значение Off.
В окне модели Simulink ® на вкладке Моделирование (Simulation) щелкните Выполнить (Run).

Поскольку при моделировании используется умножение, за которым следуют сдвиги для обработки вычисления чистого откоса, происходит потеря точности чистого откоса. Эта потеря точности приводит к численной неточности: вычисленное произведение 306.9, не 308, как вы и ожидаете.
Примечание
Можно настроить программу Fixed-Point Designer для предоставления предупреждений при потере точности в константах фиксированной точки. Дополнительные сведения см. в разделах Точность уклона и смещения.
Задайте для параметров «Математические типы» и «Типы данных» > «Использовать деление для вычисления чистого откоса с фиксированной точкой» значение On.
Сохраните модель и повторите моделирование.

Программное обеспечение реализует вычисление чистого наклона с использованием рациональной аппроксимации вместо умножения, за которым следуют сдвиги. Рассчитанный продукт: 308, как вы и ожидаете.
Оптимизация работает для этой модели, поскольку:
Чистый наклон представляется как дробь с небольшими целыми числами в числителе и знаменателе.
Параметр Hardware Implementation > Device details > Signed integer division rounds to configuration имеет значение Zero.
Примечание
Этот параметр должен соответствовать заданному режиму округления оборудования.
Режим округления Integer блока Product в модели имеет значение Simplest.
Модель не использует многословные операции.
В этом примере показано, как задать для параметра оптимизации Math and Data Types > Use division for fixed-point net close значение On повышение эффективности генерируемого кода.
Примечание
Генерируемый код эффективнее только в том случае, если деление эффективнее умножения, за которым следуют сдвиги на целевом оборудовании.
Чтобы открыть ex_net_slope2 в командной строке MATLAB введите:
addpath(fullfile(docroot,'toolbox','fixpoint','examples')) ex_net_slope2

Для блока Product в этой модели,
× Вб
Эти значения представлены общей схемой кодирования [наклон смещения], описанной в Scaling: + Bi.
Поскольку отсутствует смещение для входов или выходов:
SaQa.SbQb
или
SaSbSm.QaQb
где чистый уклон:
Чистый уклон для блока Product равен 9/10.
Аналогично, для блока «Преобразование типа данных» в этой модели
SbQb + Bb
Предвзятости нет. Таким образом, чистый уклон равен . Чистый уклон для этого блока также 9/10.
Поскольку чистый откос может быть представлен в виде дроби, можно задать для параметра Математические типы (Math) и Типы данных (Data Types) > Использовать деление (Use division) для расчета чистого откоса с фиксированной точкой значение On если подходящая модель и конфигурация оборудования. Дополнительные сведения см. в разделе Когда использовать деление для расчета чистого откоса в фиксированной точке.
Чтобы настроить модель и создать код, выполните следующие действия.
Для блока ввода Va, задайте для типа данных Output значение fixdt(1, 8, 9/10, 0); для блока Inport Vb, задайте для типа данных Output значение int8.
Для блока преобразования типа данных установите режим округления Integer в значение Simplest. Задайте для типа данных Output значение int16.
Для блока Product установите режим округления Integer в значение Simplest. Задайте для типа данных Output значение int16.
Установите параметр Hardware Implementation (Аппаратная реализация) > Device details (Сведения об устройстве) > Signed integer division Zero.
Задайте для параметров «Математические типы» и «Типы данных» > «Использовать деление для вычисления чистого откоса с фиксированной точкой» значение Off.
На вкладке Simulink Apps выберите Embedded Coder. На вкладке C Code нажмите кнопку Build.
Концептуально расчет чистого уклона 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, задайте для параметра Математические типы (Math) и Типы данных (Data Types) > Использовать деление (Use division) для расчета чистого откоса с фиксированной точкой значение Onобновите схему и снова создайте код.
Созданный код теперь использует целочисленное деление вместо умножения, за которым следуют сдвиги:
% For the conversion Vc = (int16_T)(Va * 9/10); % For the multiplication Vm = (int16_T)(Va * Vb * 9/10);
В сгенерированном коде значение вычисления чистого откоса теперь является идеальным значением 0.9. С помощью деления результаты являются численно точными.
В модели с постоянными вводами задайте для параметра Математические типы (Math) и Типы данных (Data Types) > Использовать деление (Use division) для расчета чистого откоса с фиксированной точкой значение On и смоделировать модель.

Оптимизация работает для этой модели, поскольку:
Чистый наклон представляется как дробь с небольшими целыми числами в числителе и знаменателе.
Hardware Implementation (Аппаратная реализация) > Device details (Сведения об устройстве) > Signed integer division ro Zero.
Примечание
Этот параметр должен соответствовать заданному режиму округления оборудования.
Для блоков преобразования продуктов и типов данных в модели в режиме округления целочисленных значений устанавливается значение Simplest.
Модель не использует многословные операции.
Установка для параметра «Математические типы и типы данных» > «Использовать деление для расчета чистого откоса с фиксированной точкой» значения Use division for reciprocals of integers only запускает оптимизацию только в тех случаях, когда чистый наклон является обратным целому числу. Эта настройка приводит к единичному целочисленному делению для обработки вычислений чистого наклона.