Наклонное смещение, масштабирующее замену кода

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

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

  1. Создайте табличный файл определения, который содержит функциональное определение. Например:

    function hTable = crl_table_fixed_s16divslopebias
    
  2. В теле функции составьте таблицу путем вызова функционального RTW.TflTable.

    hTable = RTW.TflTable;
    
  3. Создайте запись для отображения оператора с вызовом RTW.TflCOperationEntry функция.

    op_entry = RTW.TflCOperationEntry;
    
  4. Установите параметры записи оператора с вызовом setTflCOperationEntryParameters функция. Параметры задают тип операции как деление, режим насыщения, как насыщают на целочисленном переполнении, округляя режимы, столь же круглые к потолку и имени заменяющей функции как s16_div_s16_s16_slopebias.

    setTflCOperationEntryParameters(op_entry, ...
       'Key',                      'RTW_OP_DIV', ...
       'Priority',                 90, ...
       'SaturationMode',           'RTW_SATURATE_ON_OVERFLOW', ...
       'RoundingModes',            {'RTW_ROUND_CEILING'}, ...
       'ImplementationName',       's16_div_s16_s16_slopebias', ...
       'ImplementationHeaderFile', 's16_div_s16_s16_slopebias.h', ...
       'ImplementationSourceFile', 's16_div_s16_s16_slopebias.c');
    
  5. Создайте концептуальные аргументы y1, u1, и u2. Существует несколько способов настроить концептуальные аргументы. Этот пример использует вызовы createAndAddConceptualArg функция, чтобы создать и добавить аргумент с одним вызовом функции. Каждый аргумент указывает, что тип данных является фиксированной точкой, режим является наклонным масштабированием смещения, и его заданный наклон и значения смещения должны точно совпадать с наклоном сайта вызова и значениями смещения. Выходной аргумент и входные параметры составляют 16 битов, подписанных, каждый с определенными наклонными спецификациями смещения.

    createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ...
       'Name',           'y1', ...
       'IOType',         'RTW_IO_OUTPUT', ...
       'CheckSlope',     true, ...
       'CheckBias',      true, ...
       'DataTypeMode',   'Fixed-point: slope and bias scaling', ...
       'IsSigned',       true, ...
       'WordLength',     16, ...
       'Slope',          15, ...
       'Bias',           2);
    
    createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ...
       'Name',           'u1', ...
       'IOType',         'RTW_IO_INPUT', ...
       'CheckSlope',     true, ...
       'CheckBias',      true, ...
       'DataTypeMode',   'Fixed-point: slope and bias scaling', ...
       'IsSigned',       true, ...
       'WordLength',     16, ...
       'Slope',          15, ...
       'Bias',           2);
    
    createAndAddConceptualArg(op_entry, 'RTW.TflArgNumeric', ...
       'Name',           'u2', ...
       'IOType',         'RTW_IO_INPUT', ...
       'CheckSlope',     true, ...
       'CheckBias',      true, ...
       'DataTypeMode',   'Fixed-point: slope and bias scaling', ...
       'IsSigned',       true, ...
       'WordLength',     16, ...
       'Slope',          13, ...
       'Bias',           5);
    
  6. Создайте аргументы реализации. Существует несколько способов настроить аргументы реализации. Этот пример использует вызовы createAndSetCImplementationReturn и createAndAddImplementationArg функции, чтобы создать и добавить аргументы реализации в запись. Аргументы реализации должны описать основные типы числовых данных (не типы данных с фиксированной точкой). В этом случае выходные аргументы и входные параметры составляют 16 битов и подписанный (int16).

    createAndSetCImplementationReturn(op_entry, 'RTW.TflArgNumeric', ...
       'Name',           'y1', ...
       'IOType',         'RTW_IO_OUTPUT', ...
       'IsSigned',       true, ...
       'WordLength',     16, ...
       'FractionLength', 0);
    
    createAndAddImplementationArg(op_entry, 'RTW.TflArgNumeric',...
       'Name',           'u1', ...
       'IOType',         'RTW_IO_INPUT', ...
       'IsSigned',       true, ...
       'WordLength',     16, ...
       'FractionLength', 0);
    
    createAndAddImplementationArg(op_entry, 'RTW.TflArgNumeric',...
       'Name',           'u2', ...
       'IOType',         'RTW_IO_INPUT', ...
       'IsSigned',       true, ...
       'WordLength',     16, ...
       'FractionLength', 0);
    
  7. Добавьте запись в заменяющую таблицу кода с вызовом addEntry функция.

    addEntry(hTable, op_entry);
  8. Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.

Протестировать этот пример:

  1. Укажите заменяющее отображение кода.

  2. Создайте модель.

  3. Для этой модели:

    • Установите Inport 1 Data type на fixdt(1,16,15,2).

    • Установите Inport 2 Data type на fixdt(1,16,13,5).

    • В блоке Divide:

      • Установите Output data type на Inherit: Inherit via back propagation.

      • Установите Integer rounding mode на Ceiling.

      • Выберите опцию Saturate on integer overflow.

  4. Сконфигурируйте модель со следующими настройками:

    • На панели Solver выберите фиксированный шаг, дискретный решатель.

    • На панели Code Generation выберите ERT-based system target file.

    • На Code Generation> панель Interface, выберите заменяющую библиотеку кода, которая содержит вашу запись операции сложения.

  5. Сгенерируйте код и отчет генерации кода.

  6. Рассмотрите замены кода.

Похожие темы