exponenta event banner

Настройка параметра усиления во время моделирования

Шаг 1. Создание простой модели усиления

Чтобы выполнить шаги примера самостоятельно, сначала создайте модель примера.

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

  1. Откройте библиотеку блоков Simulink ® и выберите «Часто используемые блоки».

  2. Добавление блока Inport.

  3. Добавьте блок усиления. Дважды щелкните, чтобы открыть маску блока и изменить значение параметра «Усиление» на gain.

  4. Дважды щелкните блок усиления, чтобы открыть маску блока. На вкладке Signal Attributes установите тип данных Output равным uint8.

    Примечание

    Если оставить тип данных Output как Inherit: Inherit via internal rule, Simulink Coder™ выбирает тип данных на основе значения по умолчанию Gain , который может не соответствовать значению при настройке параметра после генерации DPI. Укажите конкретный тип выходного сигнала блока, чтобы избежать неправильной настройки типа с помощью Simulink Coder.

  5. Добавление блока исходящего порта.

  6. Подключите все блоки, как показано на предыдущей схеме.

Шаг 2. Создание объекта данных для параметра усиления

  1. Создайте объект данных для параметра усиления:

    В командной строке MATLAB ® введите:

     gain = Simulink.Parameter
  2. Далее введите:

    open('gain')

    Эта команда открывает диалоговое окно свойств для объекта параметра.

  3. Введите или выберите следующие значения:

    • Значение: 2

    • Тип данных: двойной

    • Класс хранения: Model default

  4. Нажмите кнопку ОК.

Дополнительные сведения об использовании объектов параметров для генерации кода см. в разделе Конфигурация генерации кода C для элементов интерфейса модели (Simulink Coder).

Примечание

Установка для класса хранилища значения Auto оптимизирует параметр во время создания кода. Рекомендуемые значения при создании настраиваемых параметров DPI:

  • Model default

  • SimulinkGlobal

  • ExportedGlobal

Использовать Model default когда параметр специфичен для экземпляра, и выберите SimulinkGlobal и ExportedGlobal для создания глобальной переменной.

Шаг 3. Создать компонент DPI SystemVerilog

  1. На вкладке Приложения Simulink щелкните Верификатор HDL. Затем на вкладке HDL Verifier щелкните C Code Settings. Откроется диалоговое окно Параметры конфигурации (Configuration Parameters) в окне Создание кода (Code Generation).

  2. В системном целевом файле нажмите кнопку Обзор и выберите systemverilog_dpi_grt.tlc.

    • Если у вас есть лицензия на Embedded Coder ®, вы можете выбрать целевойsystemverilog_dpi_ert.tlc. Этот целевой объект позволяет получить доступ к дополнительным параметрам создания кода (на панели Создание кода (Code Generation) в окне Параметры конфигурации модели (Model Configuration Parameters)).

  3. В окне «Цепь инструментов» в разделе «Процесс построения» выберите из списка цепь инструментов, которую требуется использовать. Руководство по выбору цепочки инструментов см. в разделе Создание кроссплатформенных компонентов DPI.

    При необходимости можно выбрать флаги для компиляции. В разделе Конфигурация сборки (Build Configuration) выберите Specify из раскрывающегося списка. Щелкните Показать параметры (Show Settings), чтобы отобразить текущие флаги.

  4. В группе Создание кода выберите SystemVerilog DPI.

  5. Снимите флажки «Создать тестовый стенд» и «Настроить сгенерированный код SystemVerilog» (поскольку в этом примере изменяется сгенерированный код SystemVerilog, любой тестовый стенд, сгенерированный одновременно, не имеет правильных результатов).

  6. Нажмите кнопку ОК, чтобы принять эти настройки и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).

  7. В примере модели щелкните правой кнопкой мыши блоки усиления и задержки и выберите Создать подсистему из выбора (Create Subsystem from Selection). В этом примере переименуйте подсистему dut.

  8. В окне «Simulink Toolstrip» на вкладке «HDL Verifier» выберите «Generate DPI Component».

  9. В диалоговом окне «Build code for subsystem» нажмите кнопку «Build».

    Компонент SystemVerilog создается как dut_build/dut_dpi.sv в текущей рабочей папке.

Шаг 4. Добавление кода настройки параметров в файл SystemVerilog

  1. Открыть файл dut_build/dut_dpi.sv и проверьте сформированный код.

  2. В этом примере после вызова reset функция, вызовите DPI_dut_setparam_gain с новым значением параметра. Например, здесь коэффициент усиления изменяется на 6:

    DPI_dut_setparam_gain(objhandle, 6);
    
  3. Если сигнал асинхронного сброса имеет высокий уровень (от 0 до 1), вызовите reset снова функция.

    if(reset == 1'b1) begin
        DPI_dut_reset(objhandle, dut_U_In1, dut_Y_Out1);
        DPI_dut_setparam_gain(objhandle, 6);
    end
    
  4. Теперь код SystemVerilog выглядит следующим образом:

    module dut_dpi(
        input clk,
        input clk_enable,
        input reset,
        input real dut_U_In1,
        output real dut_Y_Out1
    );
    
        chandle objhandle=null;
        // Declare imported C functions
        import "DPI" function chandle DPI_dut_initialize(chandle existhandle);
        import "DPI" function void DPI_dut_reset(input chandle objhandle, input real dut_U_In1, inout real dut_Y_Out1);
        import "DPI" function void DPI_dut_output(input chandle objhandle, input real dut_U_In1, inout real dut_Y_Out1);
        import "DPI" function void DPI_dut_update(input chandle objhandle, input real dut_U_In1);
        import "DPI" function void DPI_dut_terminate(input chandle objhandle);
        import "DPI" function void DPI_dut_setparam_gain(input chandle objhandle, input real dut_P_gain);
    
        initial begin
            objhandle = DPI_dut_initialize(objhandle);
            DPI_dut_setparam_gain(objhandle, 6);
        end
    	
        final begin
            DPI_dut_terminate(objhandle);
        end
    
        always @(posedge clk or posedge reset) begin
            if(reset == 1'b1) begin
                DPI_dut_reset(objhandle, dut_U_In1, dut_Y_Out1);
                DPI_dut_setparam_gain(objhandle, 6);
            end
            else if(clk_enable) begin
                DPI_dut_output(objhandle, dut_U_In1, dut_Y_Out1);
                DPI_dut_update(objhandle, dut_U_In1);
            end
        end
    endmodule
    

Шаг 5. Запустить моделирование с изменением параметров

Чтобы запустить моделирование, создайте общую библиотеку и экспортируйте компонент, как описано в следующих разделах.