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

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

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

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

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

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

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

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

    Примечание

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

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

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

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

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

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

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

    open('gain')

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

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

    • <reservedrangesplaceholder0> 2

    • Data type: double

    • <reservedrangesplaceholder1> <reservedrangesplaceholder0>

  4. Нажмите OK.

Для получения дополнительной информации об использовании объектов параметров для генерации кода смотрите Строение Генерации кода C для Элементов Интерфейса Модели (Simulink Coder).

Примечание

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

  • Model default

  • SimulinkGlobal

  • ExportedGlobal

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

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

  1. На вкладке Apps Simulink нажмите HDL Verifier. Затем на вкладке HDL Verifier нажмите C Code Settings. Диалоговое окно Configuration Parameters откроется на Code Generation.

  2. При System target file кликните Browse и выберите systemverilog_dpi_grt.tlc.

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

  3. В Toolchain, под Build process, выберите набор инструментов, который вы хотите использовать в списке. Инструкции по выбору набора инструментальных средств см. в разделе «Генерация кросс-платформенных компонентов DPI».

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

  4. В группе Генерация кода щелкните SystemVerilog DPI.

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

  6. Щелкните OK, чтобы принять эти настройки и закрыть диалоговое окно Параметры конфигурации.

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

  8. На панели инструментов Simulink, на вкладке HDL Verifier, нажмите Generate DPI Component.

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

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

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

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

  2. В этом примере после вызова reset function, вызовите 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. Запуск симуляции с изменением параметра

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

Для просмотра документации необходимо авторизоваться на сайте