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

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

Этот пример создает заменяющую запись кода для умножения типов данных с фиксированной точкой. Вы задаете аргументы с помощью единственного двоичной точкой масштабирования. Пример задает функцию, сопоставляющую программно. Также можно использовать 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. Сохраните табличный файл определения. Используйте имя табличной функции определения, чтобы назвать файл.

Похожие темы