exponenta event banner

Замена кода масштабирования чистого откоса

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

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

Интерактивная разработка библиотеки замены кода

  1. Откройте инструмент замены кода (crtool) в командной строке MATLAB с помощью следующей команды:

    >>crtool
  2. Создайте таблицу.

    1. В контекстном меню crtool выберите «Файл» > «Новая таблица».

    2. На правой панели присвойте таблице имя crl_table_netslopeScaling. Нажмите кнопку «Применить».

  3. Создайте запись. В контекстном меню «crtool» выберите «File» > «New entry» > «Fixed Point Net Slope Operation».

  4. Создание параметров записи. В раскрывающемся списке «Операция» выберите Divide.

  5. Создайте концептуальное представление. Концептуальное представление описывает подпись функции, которую требуется заменить. В подразделе «Концептуальная функция» crtool укажите возвращаемый аргумент. y1и входной аргумент, u1 и u2 с типом данных fixdt(true,16,*,*) и Тип аргумента скаляра.

  6. Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. В подразделе Function arguments crtool укажите возвращаемый аргумент, y1и входной аргумент, u1 и u2 с типом данных int 16. Также задайте для параметра «Поправочный коэффициент уклона нетто» значение 1, а для параметра «Фиксированная степень нетто» значение 0.

    Укажите имя для функции замены в разделе Прототип функции.

  7. Укажите сведения о построении. Щелкните вкладку Сведения о построении, чтобы открыть панель требований к построению. Укажите файлы (источник, заголовок, объект), необходимые генератору кода для замены кода. В этом примере нет необходимости указывать информацию о построении.

  8. Проверьте и сохраните таблицу. На вкладке Информация о сопоставлении щелкните Проверить запись. В контекстном меню crtool выберите «Файл» > «Сохранить таблицу» > «Сохранить».

  9. Зарегистрируйте библиотеку замены кода. При регистрации создается библиотека, состоящая из указанных таблиц. Выберите «Файл» > «Создать файл регистрации». В диалоговом окне Создать файл регистрации заполните следующие поля:

    Чтобы использовать библиотеку замены кода, обновите текущий сеанс MATLAB с помощью команды:

    >>sl_refresh_customizations

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

Программная разработка библиотеки замены кода

  1. Откройте программный интерфейс в меню MATLAB, выбрав Создать > Функция.

  2. Создайте таблицу.

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

    2. Создание объекта таблицы путем вызова RTW.TflTable.

    function hTable = crl_table_netslopeScaling
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
  3. Создайте запись. Поскольку этот пример заменяет функцию, создайте запись замены кода в таблице, вызвав функцию записи. RTW.TflCOperationEntryGenerator_NetSlope.

    function hTable = crl_table_netslopeScaling
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    
  4. Установка параметров ввода оператора с вызовом setTflCOperationEntryParameters функция. Параметры определяют тип операции как деление, режим насыщения как переполнение, режимы округления как неуказанные и имя функции замены как user_div_*. NetSlopeAdjustmentFactor и NetFixedExponent укажите F и E части откоса сети F2E.

    function hTable = crl_table_netslopeScaling
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    
    %% Create entry parameters
    hEntry.setTflCOperationEntryParameters(...
       'Key',                      'RTW_OP_DIV', ...
       'Priority',                 90, ...
       'SaturationMode',           'RTW_WRAP_ON_OVERFLOW', ...
       'RoundingModes',            {'RTW_ROUND_CEILING'}, ...
       'NetSlopeAdjustmentFactor',   1.0, ...
       'NetFixedExponent',           0.0, ...
       'ImplementationName',       's16_div_s16_s16', ...
       'ImplementationHeaderFile', 's16_div_s16_s16.h', ...
       'ImplementationSourceFile', 's16_div_s16_s16.c');
  5. Создание концептуальных аргументов y1, u1, и u2. В этом примере используются вызовы createAndAddConceptualArg для создания и добавления аргумента с одним вызовом функции. Укажите каждый аргумент как фиксированную точку, 16 бит и подпись. Кроме того, для каждого аргумента укажите, что обработка запроса на замену кода не проверяет точное соответствие значениям наклона и смещения узла вызова.

    function hTable = crl_table_netslopeScaling
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    
    %% Create entry parameters
    hEntry.setTflCOperationEntryParameters(...
       'Key',                      'RTW_OP_DIV', ...
       'Priority',                 90, ...
       'SaturationMode',           'RTW_WRAP_ON_OVERFLOW', ...
       'RoundingModes',            {'RTW_ROUND_CEILING'}, ...
       'NetSlopeAdjustmentFactor',   1.0, ...
       'NetFixedExponent',           0.0, ...
       'ImplementationName',       's16_div_s16_s16', ...
       'ImplementationHeaderFile', 's16_div_s16_s16.h', ...
       'ImplementationSourceFile', 's16_div_s16_s16.c');
    
    %% Create the conceptual representation
    createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ...
       'Name',           'y1', ...
       'IOType',         'RTW_IO_OUTPUT', ...
       'CheckSlope',     false, ...
       'CheckBias',      false, ...
       'DataType',       'Fixed', ...
       'IsSigned',       true, ...
       'WordLength',     16);
    
    createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ...
       'Name',           'u1', ...
       'IOType',         'RTW_IO_INPUT', ...
       'CheckSlope',     false, ...
       'CheckBias',      false, ...
       'DataType',       'Fixed', ...
       'IsSigned',       true, ...
       'WordLength',     16);
    
    createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ...
       'Name',           'u2', ...
       'IOType',         'RTW_IO_INPUT', ...
       'CheckSlope',     false, ...
       'CheckBias',      false, ...
       'DataType',       'Fixed', ...
       'IsSigned',       true, ...
       'WordLength',     16);
  6. Создайте представление реализации. Представление реализации описывает сигнатуру функции оптимизации. В этом примере используются вызовы createAndSetCImplementationReturn и createAndAddImplementationArg для создания и добавления аргументов реализации к записи. Аргументы реализации должны описывать фундаментальные числовые типы данных (а не типы данных с фиксированной точкой). В этом случае выходные и входные аргументы составляют 16 бит и подписываются (int16).

    function hTable = crl_table_netslopeScaling
    % Create a function to call the code replacement library table 
    
    %% Create a table object
    hTable = RTW.TflTable;
    
    %% Create an entry
    hEntry = RTW.TflCOperationEntryGenerator_NetSlope;
    
    %% Create entry parameters
    hEntry.setTflCOperationEntryParameters(...
       'Key',                      'RTW_OP_DIV', ...
       'Priority',                 90, ...
       'SaturationMode',           'RTW_WRAP_ON_OVERFLOW', ...
       'RoundingModes',            {'RTW_ROUND_CEILING'}, ...
       'NetSlopeAdjustmentFactor',   1.0, ...
       'NetFixedExponent',           0.0, ...
       'ImplementationName',       's16_div_s16_s16', ...
       'ImplementationHeaderFile', 's16_div_s16_s16.h', ...
       'ImplementationSourceFile', 's16_div_s16_s16.c');
    
    %% Create the conceptual representation
    createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ...
       'Name',           'y1', ...
       'IOType',         'RTW_IO_OUTPUT', ...
       'CheckSlope',     false, ...
       'CheckBias',      false, ...
       'DataType',       'Fixed', ...
       'IsSigned',       true, ...
       'WordLength',     16);
    
    createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ...
       'Name',           'u1', ...
       'IOType',         'RTW_IO_INPUT', ...
       'CheckSlope',     false, ...
       'CheckBias',      false, ...
       'DataType',       'Fixed', ...
       'IsSigned',       true, ...
       'WordLength',     16);
    
    createAndAddConceptualArg(hEntry, 'RTW.TflArgNumeric', ...
       'Name',           'u2', ...
       'IOType',         'RTW_IO_INPUT', ...
       'CheckSlope',     false, ...
       'CheckBias',      false, ...
       'DataType',       'Fixed', ...
       'IsSigned',       true, ...
       'WordLength',     16);
    
    %% Create the Implementation Representation
    createAndSetCImplementationReturn(hEntry, 'RTW.TflArgNumeric', ...
                                  'Name',           'y1', ...
                                  'IOType',         'RTW_IO_OUTPUT', ...
                                  'IsSigned',       true, ...
                                  'WordLength',     16, ...
                                  'FractionLength', 0);
    
    createAndAddImplementationArg(hEntry, 'RTW.TflArgNumeric',...
                                  'Name',           'u1', ...
                                  'IOType',         'RTW_IO_INPUT', ...
                                  'IsSigned',       true, ...
                                  'WordLength',     16, ...
                                  'FractionLength', 0);
    
    createAndAddImplementationArg(hEntry, 'RTW.TflArgNumeric',...
                                  'Name',           'u2', ...
                                  'IOType',         'RTW_IO_INPUT', ...
                                  'IsSigned',       true, ...
                                  'WordLength',     16, ...
                                  'FractionLength', 0);
    
    %% Add the entry to the table
    addEntry(hTable, hEntry);
    
  7. Укажите сведения о построении. В параметрах ввода укажите файлы (заголовок, источник, объект), необходимые генератору кода для замены кода. Для этого примера информация о построении не требуется.

  8. Проверьте и сохраните файл настройки. В меню MATLAB сохраните этот файл настройки, выбрав «Файл» > «Сохранить». В командной строке проверьте таблицу библиотеки замены кода, вызвав ее:

    >> hTable = crl_table_netslopeScaling
  9. Зарегистрируйте библиотеку замены кода. Регистрация создает библиотеку замены кода, определяя имя библиотеки, таблицы замены кода и другую информацию. Создайте файл регистрации с помощью следующих спецификаций:

    function rtwTargetInfo(cm)
     
    cm.registerTargetInfo(@loc_register_crl);
    end
     
    function this = loc_register_crl 
     
    this(1) = RTW.TflRegistry; 
    this(1).Name = 'CRL for net slope scaling’;
    this(1).TableList = {'crl_table_netslopeScaling.m'}; % table created in this example
    this(1).TargetHWDeviceType = {'*'};
    this(1).Description = 'Example code replacement library';
    
    end
    

    Чтобы использовать библиотеку замены кода, обновите текущий сеанс MATLAB с помощью команды:

    >>sl_refresh_customizations

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

Связанные темы