exponenta event banner

Создание основного кода строки для модели, содержащей функциональный блок MATLAB

Языки программирования и среды предполагают единую структуру массива для всех данных. MATLAB ® и Fortran по умолчанию используют компоновку «основной столбец», в то время как C и C++ используют компоновку «основная строка». С помощью Simulink ® Coder™ можно создать код C/C + +, использующий макет основной строки или макет основной строки.

Дополнительные сведения о генерации кода основной строки см. в разделе Генерация кода матриц и массивов.

Функциональные блоки MATLAB позволяют определять пользовательские функциональные возможности в моделях Simulink на языке MATLAB. Можно создать основной код строки для моделей, которые содержат функциональный блок MATLAB, используя основные данные строки или столбца. Дополнительные сведения о функциональных блоках MATLAB см. в разделе Реализация функций MATLAB с использованием блоков.

По умолчанию генератор кода генерирует основной код столбца. Для генерации кода C/C + + можно задать компоновку массива на уровне модели с помощью параметра конфигурации модели компоновки массива. Установка для этого параметра значенияRow-major включает модель для генерации основного кода строки. Чтобы включить функциональный блок MATLAB в модели для генерации основного кода строки, используйте coder.rowMajor функция на уровне функции внутри блока.

Создание основного кода строки

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

  1. Рассмотрим пример модели ex_row_major_MLFB.

    Эта модель содержит блок константы, имеющий [5 4] матрица. Чтобы задать матрицу, задайте для параметра Константа значение:

    reshape(1:20,5,4)
    Блок Inport также определяет [5 4] матрица. Чтобы задать матрицу, задайте для размеров порта значение [5 4].

  2. В диалоговом окне «Параметры конфигурации» задайте для параметра «Макет массива» значение Row-major.

  3. Запись функции для добавления матрицы с именем addMatrix. Блок MATLAB Function наследует настройку компоновки массива из параметра конфигурации модели Array layout, если не указано иное.

    Дополнительно можно использовать coder.rowMajor для явной установки макета массива блока MATLAB Function на макет основной строки.

    function S  = addMatrix(A,B) 
    S = zeros(size(A));
    for row = 1:size(A,1) 
       for col = 1:size(A,2)  
           S(row,col) = A(row,col) + B(row,col);
       end
    end

  4. Создайте код для модели. На вкладке C Code нажмите кнопку Build.

Генератор кода создает код C:

for (b_row = 0; b_row < 5; b_row++) {
    for (b_col = 0; b_col < 4; b_col++) {
      rtb_S_tmp = (b_row << 2) + b_col;
      rtb_S[rtb_S_tmp] = ex_row_major_MLFB_P.Constant_Value[rtb_S_tmp] +
        ex_row_major_MLFB_U.Inport1[rtb_S_tmp];
    }
  }
Созданный код имеет два for петли. Первое for цикл получает доступ к строкам, а второй for цикл получает доступ к столбцам. Если структура массива блока MATLAB Function и модели одинаковая, генерируемый код эффективен, поскольку не требуется транспозиций или преобразования.

Создание кода смешанного большинства

Код смешанного большинства можно создать при наличии модели, которая работает с основными данными строки, и функционального блока MATLAB, который работает с основными данными столбца. При создании кода для модели, в которой используется компоновка «основной столбец», а модель содержит блок MATLAB Function, в котором используется компоновка «основная строка», генератор кода преобразует входные данные блока в компоновку «основная строка», а выходные данные блока, при необходимости, обратно в компоновку «основная строка». Смешанный мажоритарный код можно также создать при наличии модели, которая работает с основными данными столбца, и функционального блока MATLAB, который работает с основными данными строки.

Преобразования компоновки массива могут влиять на производительность.

  1. Рассмотрим пример модели ex_row_major_MLFB. Дополнительные сведения о модели примера см. в разделе Создание основного кода строки.

    В диалоговом окне «Параметры конфигурации» задайте для параметра «Макет массива» значение Row-major.

  2. Обновить addMatrix функция в блоке MATLAB Function для основных данных столбца с помощью coder.columnMajor функция.

    function S  = addMatrix(A,B) 
    coder.columnMajor;
    S = zeros(size(A));
    for row = 1:size(A,1) 
       for col = 1:size(A,2)  
           S(row,col) = A(row,col) + B(row,col);
       end
    end
    Код смешанного большинства можно создать с помощью функционального блока MATLAB. В этом случае модель настраивается для макета основного массива строки и блока MATLAB Function для макета основного массива столбца.

  3. Создайте код для модели. На вкладке C Code нажмите кнопку Build.

Генератор кода создает код C:

for (b_row = 0; b_row < 4; b_row++) {
    for (b_col = 0; b_col < 5; b_col++) {
      B_tmp = (b_col << 2) + b_row;
      B_tmp_0 = b_col + 5 * b_row;
      B[B_tmp_0] = ex_row_major_MLFB_19b_U.Inport1[B_tmp];
      A[B_tmp_0] = ex_row_major_MLFB_19b_P.Constant_Value[B_tmp];
    }
  }

  for (b_row = 0; b_row < 5; b_row++) {
    /* Outport: '<Root>/Outport' */
    for (b_col = 0; b_col < 4; b_col++) {
      B_tmp = 5 * b_col + b_row;
      ex_row_major_MLFB_19b_Y.Outport[b_col + (b_row << 2)] = A[B_tmp] + B[B_tmp];
    }
Входные данные функционального блока MATLAB находятся в основной среде строки. Генератор кода выполняет операцию преобразования на входах перед их подачей в блок MATLAB Function, так как блок является компоновкой «основной столбец». После обработки алгоритма в блоке MATLAB Function генератор кода преобразует данные обратно в основные данные строки перед передачей данных в Outport.

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