Единственная двоичной точкой замена масштабирования кода

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

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

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

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

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

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

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

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

    createAndSetCImplementationReturn(op_entry, 'RTW.TflArgNumeric', ...
       'Name',           'y1', ...
       'IOType',         'RTW_IO_OUTPUT', ...
       'IsSigned',       true, ...
       'WordLength',     32, ...
       '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).

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

    • В блоке Product:

      • Установите Output data type на fixdt(1,32,28).

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

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

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

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

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

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

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

Похожие темы