Документация Engee

Генератор кода в Engee

Генерация кода через графический интерфейс

Генерация кода для подсистемы

Для генерации кода через графический интерфейс Engee нажмите правой кнопкой мыши по подсистеме (блок Subsystem):

codegen subsystem ui ru

Таким образом можно сгенерировать код из любой выбранной подсистемы в модели.

Сгенерированный код находится в директории с именем modelname_Subsystem_code в той же директории, где находится модель (либо в текущей директории, если модель еще не сохранялась на диск). Здесь modelname — это имя модели, Subsystem — имя подсистемы, а code — суффикс, добавляемый к имени директории со сгенерированным кодом. Например, для блока с именем Subsystem в модели newmodel_1:

subsystem generated 1 ru

После завершения генерации в окне диагностики модели model diagnosis main появится уведомление об успешной генерации кода.

Генерация кода для верхнего уровня модели

Для создания кода всей модели в графическом интерфейсе Engee нажмите кнопку Сгенерировать код codegen icon 1, расположенную на панели инструментов рабочего пространства.

В выпадающем меню рядом с кнопкой генерации должна быть выбрана целевая платформа Engee (выбрана по умолчанию).

Кнопка генерации кода для верхнего уровня модели

Сгенерированный код находится в директории с именем modelname_code в той же директории, где находится модель (либо в текущей директории, если модель еще не сохранялась на диск). Здесь modelname — это имя модели, а code — суффикс, добавляемый к имени директории со сгенерированным кодом. Например, для модели newmodel_1 (подсистема не выбрана):

model generated 1 ru

Генерация кода через командную строку или интерактивный скрипт

Для генерации кода в Engee используется команда engee.generate_code в командной строке img 41 1 2 или редакторе скриптов interactive script icon.

Генерация кода для подсистемы

Для генерации кода подсистемы укажите полный путь к подсистеме с помощью аргумента subsystem_name. Полный путь к подсистеме включает ее имя в модели.

Сигнатура функции:

engee.generate_code(
    model_path::String,
    output_dir::String;
    subsystem_name::String = nothing,
    subsystem_id::String = nothing,
    target::String = "c",
    template_path::String = ""
)

Аргументы:

  • path/to/modelname.engee::String: абсолютный или относительный путь к модели из которой генерируется код. В качестве аргумента может выступать объект модели (объект типа model, полученный функцией engee.gcm).

  • path/to/output_dir::String: абсолютный или относительный путь к директории, в которую сохранится сгенерированный код. Если директории output_dir не существует — она будет создана автоматически.

  • subsystem_name=path/to/subsystem::String: полный путь к атомарной подсистеме из которой генерируется код.

  • subsystem_id = subsystem_id::String: уникальный идентификатор атомарной подсистемы из которой генерируется код.

  • target::String: указание языка для генерации кода. Поддерживаемые языки — Си (по умолчанию) или Verilog.

  • template_path::String: путь к пользовательскому .jl-шаблону (например, с функцией main), используемому при генерации кода. Если не указан, то используется шаблон по умолчанию.

Если указаны параметры subsystem_name или subsystem_id, то выполняется генерация кода для подсистемы. Если ни один из них не указан — генерация выполняется для всей модели.

Пример:

# Генерация Си кода для подсистемы
engee.generate_code("/user/newmodel_1.engee", "/user/newmodel_1/Subsystem")

# Генерация кода для атомарной подсистемы по ее id
engee.generate_code(
    "/user/newmodel_1.engee",
    "/user/newmodel_1/Subsystem";
    subsystem_name = "Subsystem",
    subsystem_id = "88275e0b-a049-4bb5-b8c7-057badd1b536"
)

Если указан неверный subsystem_id, то генерация завершится с ошибкой, даже если subsystem_name указан правильно. В таких случаях Engee не сможет найти подсистему, и код не будет сгенерирован. Поэтому надежнее использовать только subsystem_name (если он уникален в модели).

Генерация кода для модели

Для генерации кода из всей модели укажите путь к модели и директорию для сохранения сгенерированного кода. Если модель уже открыта в Engee, то можно передать объект модели, полученный с помощью функции engee.gcm).

Сигнатура функции:

engee.generate_code(
    path/to/modelname.engee::String,
    path/to/output_dir::String;
    target::String
)

Аргументы:

  • path/to/modelname.engee::String: абсолютный или относительный путь к модели из которой генерируется код. В качестве аргумента может выступать объект модели (объект типа model, полученный функцией engee.gcm).

  • path/to/output_dir::String: абсолютный или относительный путь к директории, в которую сохранится сгенерированный код. Если директории output_dir не существует — она будет создана автоматически.

  • target::String: указание языка для генерации кода. Поддерживаемые языки — Си (по умолчанию) или Verilog.

Пример:

# Абсолютный путь к модели
engee.generate_code("/user/newmodel_1.engee", "/user/newmodel_1/codegen_output")

# Относительный путь к модели
engee.generate_code("newmodel_1.engee", "newmodel_1/codegen_output")

# Получение текущей открытой модели и генерация кода из нее
m = engee.gcm()
engee.generate_code(m, "/user/newmodel_1/codegen_output")