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

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

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

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

  1. Откройте Simulink® Block Library и нажмите Commonly Used Blocks.

  2. Добавьте блок Inport.

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

  4. Добавьте блок Outport.

  5. Соедините все блоки как показано в предыдущей схеме.

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

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

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

     gain = Simulink.Parameter
  2. Затем, тип:

    open('gain')

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

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

    • Value: 2

    • Data type: дважды

    • Storage class: Model default

  4. Нажмите OK.

Для получения дополнительной информации об использовании объектов параметра для генерации кода смотрите, Применяют Классы памяти к Отдельному Сигналу, состоянию и Элементам данных Параметра (Simulink Coder).

Шаг 3. Сгенерируйте компонент SystemVerilog DPI

  1. С открытой моделью усиления выберите Simulation> Model Configuration Parameters.

  2. Нажмите Code Generation.

  3. В System target file нажмите Browse и выберите systemverilog_dpi_grt.tlc.

    • Если у вас есть лицензия на Embedded Coder®, можно выбрать целевой systemverilog_dpi_ert.tlc. Эта цель позволяет вам получать доступ к своим опциям генерации дополнительного кода (на панели Генерации кода в Образцовых Параметрах конфигурации).

  4. В Toolchain, под Build process, выбирают набор инструментальных средств, который вы хотите использовать из списка. Смотрите Генерируют Кросс-платформенные Компоненты DPI для руководства при выборе набора инструментальных средств.

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

  5. В группе Генерации кода нажмите SystemVerilog DPI.

  6. Оставьте и Generate test bench и Customize generated SystemVerilog code очищенными (потому что этот пример изменяет сгенерированный код SystemVerilog, любой испытательный стенд, сгенерированный одновременно, не имеет правильных результатов).

  7. Нажмите OK, чтобы принять эти настройки и закрыть диалоговое окно Configuration Parameters.

  8. В модели в качестве примера щелкните правой кнопкой по усилению и блокам задержки и выберите Create Subsystem from Selection. В данном примере переименуйте подсистему dut.

  9. Щелкните правой кнопкой по подсистеме и выберите C/C++ Code> Build this subsystem.

  10. В коде Сборки для диалогового окна подсистемы нажмите Build.

    Компонент SystemVerilog сгенерирован как dut_build/dut_dpi.sv в вашей текущей рабочей папке.

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

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

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

    DPI_dut_setparam_gain(objhandle, 6);
    
  3. Если асинхронный сигнал сброса высок (идет от 0 до 1), вызовите Initialize снова.

    if(reset == 1'b1) begin
        objhandle = DPI_dut_initialize(objhandle);
        DPI_dut_setparam_gain(objhandle, 6);
    end
    
  4. Код SystemVerilog теперь выглядит так:

    // File: dut_build\dut_dpi.sv
    // Created: 2015-01-21 13:58:40
    // Generated by MATLAB 8.5 and HDL Verifier 4.6
    
    `timescale 1ns / 1ns
    
    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_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
    
        always @(posedge clk or posedge reset) begin
            if(reset == 1'b1) begin
                objhandle = DPI_dut_initialize(objhandle);
                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. Запустите симуляцию с изменением параметра

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