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

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

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

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

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

    >>crtool
  2. Составьте таблицу.

    1. В контекстном меню crtool выберите File > New Table.

    2. На правой панели назовите таблицу crl_table_netslopeScaling. Нажмите Apply.

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

  4. Создайте параметры входа. В раскрывающемся списке Operation выберите Divide.

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

  6. Создайте представление реализации. Представление реализации описывает сигнатуру оптимизационной функции. В Function arguments подразделе crtool задайте возвращаемый аргумент y1и входной параметр, u1 и u2 с Data Type int 16. Также установите Net slope Adjustment Factor равным 1, а Net Fixed Exponent равным 0.

    Задайте Name для функции замены под Function prototype.

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

  8. Проверьте и сохраните таблицу. На вкладке Mapping Information нажмите Validate entry. В контекстном меню crtool выберите File > Save table > Save.

  9. Зарегистрируйте библиотеку замещения кода. Регистрация создает библиотеку, состоящую из заданных таблиц. Выберите File > Generate registration file. В диалоговом окне Сгенерировать файл регистрации заполните следующие поля:

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

    >>sl_refresh_customizations

  10. Проверьте библиотеку замещения кода. Из командной строки MATLAB откройте библиотеку с помощью Code Replacement Viewer и проверьте, что таблица и запись заданы правильно. Дополнительные сведения см. в разделе Проверка библиотеки замещения кода. Сконфигурируйте модель, чтобы использовать библиотеку замены кода, сгенерировать код и проверить, что замена происходит должным образом. Если происходит непредвиденное поведение, исследуйте журналы попадания и пропуска, чтобы устранить проблемы.

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

  1. Откройте программный интерфейс из меню MATLAB, выбрав New > Function.

  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. Создайте запись. Поскольку этот пример заменяет функцию, создайте запись замены кода в вашей таблице, вызвав функцию entry 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 сохраните этот файл индивидуальной настройки, выбрав File > Save. В командной строке проверьте таблицу библиотеки замещения кода, вызвав ее:

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

Похожие темы