Оптимизация фиксированной точки Используя заданные минимальные и максимальные значения

В этом примере показано, как оптимизировать операции фиксированной точки в сгенерированном коде с помощью минимальных и максимальных значений, которые вы задаете в модели.

Обзор

Минимальные и максимальные значения могут представлять экологические пределы или механические пределы, такие как выходные области значений датчиков. Программное обеспечение генерации кода может использовать эти значения, чтобы создать более эффективный код путем устранения недостижимых ветвей кода и ненужных служебных функций.

Примечание: необходимо гарантировать, что заданные минимальные и максимальные значения точны и защищены. В противном случае оптимизация может привести к числовому несоответствию с симуляцией.

Преимущества оптимизации сгенерированного кода:

  • Сокращение ROM и потребления RAM.

  • Улучшение скорости выполнения.

Открытая модель

Откройте модель fxpdemo_min_max_optimization.

open_system('fxpdemo_min_max_optimization');

Смотрите модель

В этой модели существуют минимальные и максимальные значения, заданные во входных портах в восходящем направлении различных блоков фиксированной точки. Путем использования этих значений каждая операция фиксированной точки в модели оптимизирована в некотором роде.

Сгенерируйте код без оптимизации

Во-первых, не используя заданные минимальные и максимальные значения, сгенерируйте код для этой модели. Дважды кликните синюю кнопку.

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for: fxpdemo_min_max_optimization
### Successful completion of code generation for: fxpdemo_min_max_optimization

Build Summary

Top model targets built:

Model                         Action          Rebuild Reason                                    
================================================================================================
fxpdemo_min_max_optimization  Code generated  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 27.819s

Смотрите код без оптимизации

Отчет Генерации КОДА HTML открывается. Исследуйте код, соответствующий блоку "Product with reduced fraction length output data type". Щелкните правой кнопкой по этому блоку и выберите Code Generation> Navigate к коду....

rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');

Сгенерированный код:

rtY.Out1 = mul_u32_u32_u32_sr10(rtU.In1, rtU.In2);

Чтобы реализовать эту операцию умножения фиксированной точки, программное обеспечение генерации кода должно сгенерировать служебную функцию mul_u32_u32_u32_sr10. Кроме того, чтобы реализовать mul_u32_u32_u32_sr10, это должно сгенерировать вторую служебную функцию, mul_wide_u32. Эти функции состоят из многих строк кода и требуют нескольких временных переменных.

Включите оптимизацию

  1. Дважды кликните желтую кнопку, чтобы открыть диалоговое окно Configuration Parameters.

  2. В этом диалоговом окне, под Генерацией кода, выбирают Optimize с помощью, задал минимальные и максимальные значения.

set_param('fxpdemo_min_max_optimization', 'UseSpecifiedMinMax', 'on');

Сгенерируйте код с оптимизацией

Теперь регенерируйте код с помощью заданных минимальных и максимальных значений.

Дважды кликните синюю кнопку.

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for: fxpdemo_min_max_optimization
### Successful completion of code generation for: fxpdemo_min_max_optimization

Build Summary

Top model targets built:

Model                         Action          Rebuild Reason                   
===============================================================================
fxpdemo_min_max_optimization  Code generated  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 12.106s

Исследуйте оптимизированный код

Щелкните правой кнопкой по блоку "Product with reduced fraction length output data type" и выберите Code Generation> Navigate к коду....

rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');

Сгенерированный код:

rtY.Out1 = rtU.In1 * rtU.In2 >> 10;

Используя заданные минимальные и максимальные значения, программное обеспечение генерации кода решает, что может безопасно реализовать уменьшенную дробную длину при выходе со сдвигом вправо и не генерирует служебные функции.

Исследуйте другие операции

Исследуйте другие операции в сгенерированном коде, чтобы видеть, как программное обеспечение генерации кода использует заданные минимальные и максимальные значения. Программное обеспечение генерации кода теперь реализует каждую операцию фиксированной точки с простыми операциями C и устраняет ненужные функции помощника и ветви кода.