跳转到内容

Python 命令参考#

信息

本参考手册介绍了用于在嵌入式 Python 解释器中设计、模拟和构建 VisualApplets 设计的 Python 函数。此处记录的所有 Python 函数均区分大小写。文件路径以及指定设计元素中的层级路径时,请使用正斜杠(/)。

图表中的位置参数 每当函数期望设计窗口中的某个位置时,就会使用 Python 元组 (x, y) 。

端口/链接识别 链接和模块端口通过元组进行识别 (full_module_name, port_name). full_module_name 具有以下语法: <HierLevelPath>/<ModuleName>.

  • <HierLevelPath> 指定了模块所在设计中层级结构的路径。从处理层级开始。请使用正斜杠。
  • <ModuleName> 指定模块的名称。

返回值 除非另有说明,函数返回 None 如果没有需要返回的特殊内容。某些函数在执行查询时确实会返回特定数据(例如列表、字符串)。

枚举类型参数 在某些函数调用中,特定参数可以是枚举类型(例如, LinkParam.Arithmetic, LinkParam.ColorFlavor等)或是该成员的字符串名称。例如, SetLinkParams 可以接受枚举成员(例如 Arithmetic.UNSIGNED)或字符串(例如 "UNSIGNED")。

文件覆盖行为 写入文件的函数(例如, SaveDesign, ChangePlatform)可能包含布尔参数,例如 overwrite=False。 如果 False,尝试覆盖现有文件可能会引发异常。

创建、加载和保存设计#

LoadDesign#

命令语法
LoadDesign (file_name: str)

用于加载设计的命令 file_name。请在 file_name 中指定文件系统中的文件路径以及文件名本身。不要忘记声明文件扩展名(*.va 或 *.vad)。使用斜杠表示设计文件的路径。

示例

LoadDesign("c:/VA_Python/BaseAreaGray8.va")

如果已经加载了设计:通过命令 CloseDesign 关闭当前加载的设计 LoadDesign.

CreateDesign#

命令语法
CreateDesign (design_name: str, platform_name: str)

使用硬件平台名称创建新设计的命令。若要指定设计的目标平台,您可以使用

  • 平台的 VisualApplets 库名称(例如“iF-CXP12-Q”),或者
  • 平台的完整名称(例如“imaFlex CXP-12 Quad”)。

示例

CreateDesign("MyNewProject", "iF-CXP12-Q")

SaveDesign#

命令语法
SaveDesign (file_name: str, overwrite: bool = False)

用于将设计保存在 file_name。请在 file_name 指定的文件路径和文件名下的命令。使用斜杠表示设计文件的路径。

不要忘记在文件名中添加文件扩展名。

  • 如果您指定文件扩展名 *.va 或 *.vad,您的设计将以标准的 VisualApplets 设计格式保存。文件的所有内容都将被保存。建议将 *.vad 文件格式作为 VisualApplets 设计的主数据格式。

如果需要覆盖现有文件,请设置可选参数 overwrite 变为 True.

示例

SaveDesign("c:/VA_Python/Project1.va")

ChangePlatform#

命令语法
ChangePlatform (platform_name: str, file_name: str, overwrite: bool = False)

用于将当前设计转换为另一个硬件平台的命令 platform_name 并将转换后的设计保存为 file_name.

在参数中指定所需硬件平台的名称 platform_name。若要指定设计的目标平台,您可以使用

  • 平台的 VisualApplets 库名称(例如“iF-CXP12-Q”),或者
  • 平台的完整名称(例如“imaFlex CXP-12 Quad”)。

在 file_name 中指定文件的路径(使用正斜杠)、文件名本身以及文件扩展名。如果需要覆盖现有文件,请设置可选参数 overwrite 变为 True.

示例

ChangePlatform("iF-CXP12-Q", "c:/VA_Python/ConvertedDesign.va")

CloseDesign#

命令语法
CloseDesign (discard: bool = False)

用于关闭当前打开的设计的命令。

如果设置了可选参数 discard 变为 True,即使设计包含尚未保存的更改,该设计也会被关闭。未保存的更改将被丢弃。

如果参数 discard 参数 False,且设计包含尚未保存的更改,则该命令将终止,并会收到相应的错误消息。

示例

CloseDesign(discard=True)

SetDesignProperty#

命令语法
SetDesignProperty (key: DesignProperty | str, value: str)

使用此命令可输入当前加载的设计的 Property。

您可以使用四个键:

  • ProjectName (您希望赋予该项目的名称)
  • Version (设计的版本)
  • Description (项目的描述)。
  • TargetRuntime (在此处指定将在运行此 applet 的主控 PC 上使用的操作系统。)

    允许使用以下值:

    • Win64
    • Win32
    • Linux64
    • Linux32

其他枚举类型 DesignProperty (例如 Loaded)无法设置,只能使用以下方式读取 GetDesignProperty().

示例

SetDesignProperty("TargetRuntime", "Win64")
SetDesignProperty(DesignProperty.ProjectName, "MyProject")

SetDesignClock#

命令语法
SetDesignClock (freq_in_MHz: float)

用于设置 FPGA 基本时钟频率(以 MHz 为单位)的命令。

示例

SetDesignClock(320.0)

开发设计#

CreateProcess#

命令语法
CreateProcess ( )

用于创建新进程的命令。VisualApplets 会自动为新进程编号。

示例

CreateProcess()

DeleteProcess#

命令语法
DeleteProcess (process_name: str)

用于删除指定名称进程的命令 process_name.

示例

DeleteProcess("Process1")

CreateModule#

命令语法
CreateModule (operator: str, full_module_name: str, mult: None | dict[str,int] = None, pos: tuple[int,int] = (0,0))

用于创建算子实例(模块)的命令 OperatorType并在设计窗口中对该模块进行定位。

该命令具有两个必选参数和两个可选参数:

  • operator:算子名称(例如 "BRANCH", "NOP", "Add"等)。
  • full_module_name: 分层路径 加上所需的模块名称,例如, "Process0/MyModule".
  • mult (可选参数):使用此参数可指定端口的多重性。
    例如: {"O": 3} 在具有名为 "O"的输出多端口的算子上创建 3 个输出端口。请参见下面的说明。
  • pos (可选参数):一个元组 (x, y) ,用于指定该新模块在设计窗口中的放置位置。

示例

# A BRANCH operator with 3 output ports, placed at (43, 123)
CreateModule("BRANCH", "Process0/branchz", {"O": 3}, (43, 123))

# A simple NOP operator at position (83, 163)
CreateModule("NOP", "Process0/myNop", pos=(83,163))

使用可选参数 mult:

许多算子在实例化时具有固定数量的端口。另一方面,也存在端口数量可变的算子。在实例化具有可变端口数量的算子期间,您可以定义该模块将拥有的端口数量。

例如,当实例化算子 BRANCH时,您可以定义该实例将拥有的输出端口数量:

CreateModule 命令:输入输出

因此,输出端口 O 的数量是可变的。我们将具有可变端口数量的端口称为 多端口。

多端口通过其基本名称进行识别。例如,在 BRANCH中,输出端口的基本名称是 O。通过添加到基本名称的索引,可以识别并寻址特定的端口:

CreateModule 命令:多端口

当使用命令 CreateModule时,您可以使用可选参数 mult 使用字典来指定模块的向量输入和向量输出的多重性,其中键是端口的基本名称,值是端口数量。通过这种方式,您可以定义具有可变端口数量的算子实例(模块)中的端口数量,例如,算子 BRANCH 或 ADD.

示例

CreateModule("BRANCH", "Process0/branchz", {"O": 3}, (43, 123))

Command CreateModule:带有 3 个 Output Ports 的 BRANCH 示例

默认值:如果您不使用 mult,模块将使用默认的输入和输出端口数量创建。默认创建多少个端口取决于算子类型。

示例

CreateModule("BRANCH", "Process0/branch", {}, (43, 123))

Command CreateModule:带有 2 个 Output Ports 的 BRANCH 示例

将创建默认数量的端口,即 1 个输入端口和 2 个输出端口。

示例

CreateModule("HierarchicalBox", "Process0/hier", {"I": 2,"O":3}, (123, 163))

Command CreateModule:带有 2 个输入端口和 3 个输出端口的 Hierarchical Box 示例

InstUserLibOperator#

命令语法
InstUserLibOperator (library: str, operator: str, full_module_name: str, pos: tuple[int,int] = (0,0))

用于实例化用户库元素的命令。通过参数 library指定用户库,通过参数 operator指定库中的元素(算子)名称,通过参数 full_module_name以及通过可选参数指定的模块在设计窗口中的位置 pos.

示例

InstUserLibOperator("MyUserLib", "MyOperator", "Process0/MyModule", (100,100))

InstCustomLibOperator#

命令语法
InstCustomLibOperator (library: str, operator: str, full_module_name: str, pos: tuple[int,int] = (0,0))

命令语法 InstUserLibOperator ( library指定用户库,通过参数 operator指定库中的元素(算子)名称,通过参数 full_module_name以及通过可选的可选参数指定的模块在设计窗口中的位置 pos.

示例

InstCustomLibOperator("MyCustomLib", "MyOperator", "Process0/MyModule", (100,100))

DeleteModule#

命令语法
DeleteModule (full_module_name: str)

用于删除模块的命令 full_module_name.

无法通过此命令删除仿真模块。若要删除仿真模块,请使用命令 DeleteSimModule.

示例

DeleteModule("Process0/Branch1")

ConnectModules#

命令语法
ConnectModules (from_port: tuple[str,str], to_port: tuple[str,str], x1: int|None = None, y2: int|None = None, x3: int|None = None)

用于连接模块端口的命令。

参数 from_port 和 to_port 是语法如下的元组: (full_module_name, port_name).

full_module_name 具有以下语法: <HierLevelPath>/<ModuleName>.

示例

ConnectModules(("Process0/CxpCamera", "O"),("Process0/FrameBufferMultiRoi", "I"))

Command ConnectModules

通过可选参数 x1, y2,和 x3 您可以定义连接多边形的几何形状:从以下位置的水平线 from_port 到位置 x1,到位置的垂直线 y2,到位置的水平线 x3,到高度的垂直线 to_port,水平线至 to_port.

Command ConnectModules:连接多边形几何形状示例 2

示例

ConnectModules(("Process0/CxpCamera", "O"),("Process0/FrameBufferMultiRoi", "I"), x1=90, y2=300, x3=120)

DisconnectModules#

命令语法
DisconnectModules (port: tuple[str,str])

用于删除连接到端口的连线的命令 port.

示例

DisconnectModules(("Process0/cam1", "O"))

CreateComment#

命令语法
CreateComment (full_box_name: str, text: str, pos: tuple[int,int] = (0,0))

用于创建注释框的命令。

的语法 full_box_name 是 <HierLevelPath>/<BoxName>.

  • <HierLevelPath> 定义了设计中特定层级结构的路径。从进程层开始。使用正斜杠。
  • <BoxName> 指定您希望注释框具有的名称。

示例

CreateComment("Process0/MyComment", "This is my comment.", (400,400))

对于注释框内容 text 您可以使用 Unicode 字符。

您通过参数定义的注释框在设计窗口中的位置 pos.

函数的返回值 CreateComment 是 full_box_name (注释框的完整层级路径,包含注释框的名称)。

DeleteComment#

命令语法
DeleteComment (full_box_name: str)

用于删除注释框的命令 full_box_name.

的语法 full_box_name 是 <HierLevelPath>/<BoxName>.

  • <HierLevelPath> 指定设计中注释框所在层级路径。从进程层级开始。使用正斜杠。
  • <BoxName> 指定要删除的注释框名称。

示例

DeleteComment("Process0/MyComment")

SetModuleParam#

命令语法
SetModuleParam (full_module_name: str, param_name: str, value: str|int|float|list[int]|list[float], index: int = -1)

用于设置模块参数的命令。

信息

仅可将此命令用于将现有参数设置为特定值。无法将此命令用于创建元数据参数。若要创建新的元数据参数,请使用命令 SetParamString 改为使用。

示例

SetModuleParam("Process0/module6", "XLength", 512)
SetModuleParam("Process0/LUT1", "LUTcontent", [12, 13, 14, 15], 4)

字段参数:对于设置字段参数,必须提供 index 参数。

编辑字段参数的示例:

在输入命令之前,Enter values 对话框如下所示:

Command SetModuleParam:编辑参数示例

输入命令

SetModuleParam("Process0/module3", "LUTcontent", [12, 13, 14], 4)

将产生以下结果:

Command SetModuleParam:输入值示例

SetModuleParamProperty#

命令语法
SetModuleParamProperty (full_module_name: str, param_name: str, prop:ParamProperty|str, value:ParamTypeFlag|str|int|list[ParamTypeFlag]|list[str])

用于更改模块参数属性(例如将其变为 dynamic 或 static)的命令。此命令可以替换 SetModuleParamType。单个属性名称可以有多个值。您可以更改以下属性: prop:

  • access: 一个或多个标志,例如:

    • write: 如果该参数可以在此方向上切换(例如在算子 LinkParamTranslator中),它将变为写参数。
    • read: 如果该参数可以在此方向上切换(例如在算子 LinkParamTranslator),它将变为一个只读 Property。
    • dynamic:如果 Property 既可以是动态的也可以是静态的,它将在此变为动态 Property。
    • static:如果 Property 既可以是动态的也可以是静态的,它将在此变为静态 Property。
  • position:一个用于定义 Property 在多个 Property 中位置的整数。

示例

# Make a parameter dynamic (if supported).
SetModuleParamProperty("Process0/LinkParamTranslator1", "MyParam", "access", ["dynamic", "write"])

# Reposition a parameter in a hierarchical box
SetModuleParamProperty("Process0/hierBox", "ParamA", "position", 3)

SetParamString#

命令语法
SetParamString (full_module_name: str, param_name: str, value: str)

使用此命令为特定模块定义元数据 Property。

信息

请勿使用此命令将现有的模块 Property 设置为新值,即使该模块 Property 的类型为 string.

要将现有的模块 Property 设置为新值,请务必在脚本中使用命令 SetModuleParam 。

示例

SetParamString("Process0/MyModule", "MyNewMeta", "Some custom meta info.")

SetModuleParamType#

命令语法
SetModuleParamType (full_module_name: str, param_name: str, type_flag:ParamTypeFlag|str|list[ParamTypeFlag]|list[str])

用于更改 Property 类型的命令。可用类型标志如下:

  • Dynamic:如果 Property 可以是动态的或静态的,此标志会将其设为动态 Property。
  • Static:如果 Property 可以是动态的或静态的,此标志会将其设为静态 Property。

Dynamic 和 Static 互斥。

示例

SetModuleParamType("Process0/MyOperator", "Threshold", "Dynamic")

SetLinkParams#

命令语法
SetLinkParams(link: tuple[str,str], param_dict: dict[LinkParam|str, int|<enum>|str])

用于配置链路格式的命令,例如 Bit Width、Arithmetic、Color Format 等。可以通过以下方式识别链路参数: LinkParam 枚举(例如 LinkParam.BitWidth)、枚举名称(例如“BitWidth”)或 GUI 中的名称(例如“Bit Width”)。

  • link:通过连接的模块端口识别连线的元组 `(, )
  • param_dict:指定 Property 值对的字典。链路格式参数的名称与 VisualApplets GUI 中的名称相同。示例键: LinkParam.BitWidth, "Arithmetic"等。

示例

SetLinkParams(
    ("Process0/CreateBlankImage","O"),
    {
        "Parallelism": 4,
        "ImageProtocol": "VALT_LINE1D",
        "MaxImageWidth": "2048"
    }
)

信息

在手动编写 Python 脚本时,该命令仅适用于可更改的 Property。如果您尝试设置无法更改的链路参数,将收到相应的错误消息:

Command SetLinkParams:示例

SetResourceMapping#

命令语法
SetResourceMapping (full_module_name: str, resource_name: str, new_mapping: int, index: int = -1)

用于更改资源到模块(例如“RAM”)映射的命令。该资源 resource_name 将映射到新的索引 new_mapping。如果模块分配了多个相同类型的资源,请使用可选参数 index 来选择资源。

示例

SetResourceMapping("Process0/ImageBuffer", "RAM", 1)

命令语法
SplitLink (link: tuple[str,str], number: int = 2)

用于创建模块的命令 BRANCH。新的分支模块插入在由 link标识的链路上。新的分支模块具有 number 个输出端口。如果不使用可选参数 number,则新分支模块有两个输出端口。

函数的返回值 SplitLink 是 full_module_name 新分支模块的(包含模块名称在内的完整分层路径)。

示例

branchName = SplitLink(("Process0/MyModule","O"), 3)
# branchName might be "Process0/BRANCH_1"

查询设计结构和设计详情#

GetDesignProperty#

命令语法
GetDesignProperty (key: DesignProperty|str) → str | bool

此命令用于检索设计 Property。您可以为以下参数使用这些值 key:

  • ProjectName: 项目名称
  • FileName: 当前加载的设计文件的完整路径
  • HardwarePlatform: 目标硬件平台的库名称,例如 iF-CXP12-Q
  • Version: 设计版本
  • Description: 项目描述
  • TargetRuntime: 指定将在帧采集卡上运行此 Applet 的主机 PC 上使用的操作系统
  • Loaded: 设计已加载;返回布尔值(True/False)

设计 Property Loaded 在未加载任何设计时也可以进行请求。这不会导致错误消息。如果在未加载设计时请求任何其他 Design Property,则会导致错误消息。

示例

val = GetDesignProperty("ProjectName")
print(val)  # e.g., "MyProject"

GetDesignClock#

命令语法
GetDesignClock ( ) → float

此命令以 MHz 为单位返回 FPGA 的基本时钟频率,即 float.

GetProcesses#

命令语法
GetProcesses ( ) → list[str]

此命令返回一个 list[str] 包含设计中所有流程的名称。

示例

processes = GetProcesses()
# e.g. ["Process0","Process1"]

GetSubModules#

命令语法
GetSubModules (hierarchy_name: str) → list[str]

此命令返回一个 list[str] 使用位于所请求层次结构中的模块名称。 hierarchy_name.

每个子模块都列出了完整的层级名称。

示例

mods = GetSubModules("Process0")

GetParentHier#

命令语法
GetParentHier (full_element_name: str) → str

此命令返回层级名称(full_module_name)所述元素的父元素 full_element_name也就是说, full_module_name 层级元素中的元素 full_element_name 位于。

full_element_name 可以是模块、模拟模块或评论框。

示例

parent = GetParentHier("Process0/MyModule")

GetModules#

命令语法
GetModules (scope:SearchScope|ModuleScope|str, specifier: str, module_list:list[str]|None = None) → list[str]

此命令按特定条件筛选模块。该命令返回一个列表,其中包含具有您通过指定特征的模块。 scope 和 specifier列表包含以下内容: full_module_name 对于所有找到的模块(模块路径,包括各个模块的名称)。如果您不想在整个设计范围内搜索,而只想在一组特定的模块中搜索,则可以在可选参数中指定这些模块。 module_list (通过他们的) full_module_name)。

scope 可以取以下值:

  • "Pattern":使用 specifier 作为通配符表达式,用于 full_module_name。如果指定“*”作为限定符,将返回设计中的所有模块。
  • "Flat":使用 specifier 作为通配符表达式,用于 full_module_name 模块(类似于“Pattern”)。将不返回层级框(Hierarchical boxes)。
  • "Ordered":返回设计的所有模块。使用 specifier 来定义排序“Pattern”。您有以下选项:
    • "path":模块按其在设计图中的位置排序(即,在仿真期间数据流流经模块时的顺序)。
    • "name":模块按其 full_module_name.
  • "OperatorType":使用 specifier 来定义您正在寻找的模块的算子类型(“O”、“M”、“P”、“O+P”、“M+P”、“unknown”)。
  • "Operator":用于获取特定算子的所有实例。使用 specifier 来指定算子名称(例如“NOP”)。
  • "LibraryType":使用 specifier 以定义特定的库类型。将返回设计中属于该类型库中所含算子实例的所有模块。允许以下值:operator、user 和 custom(另请参阅 GetModuleProperty)。
  • "Library":使用 specifier 以定义特定的库。将返回属于该库算子实例的所有模块。
  • "Version":使用 specifier 以定义特定的算子版本。将返回属于该版本算子实例的所有模块。

示例

allModules = GetModules("Pattern", "*")  # all modules

GetModulePorts#

命令语法
GetModulePorts (full_module_name: str, scope: PortScope|str) → list[str]

此命令返回一个 list[str] ,包含指定模块的所有端口名称。您可以使用可选参数 scope 来过滤特定端口:

  • "Inputs":仅返回输入端口
  • "Outputs":仅返回输出端口
  • "All":返回模块的所有端口(默认)

示例

inPorts = GetModulePorts("Process0/Branch1", "inputs")

GetModulePortProperty#

命令语法
GetModulePortProperty (port: tuple[str,str], prop: PortProperty | str)

此命令用于获取模块端口的 Property。以下可用的 prop 值为:

  • "IsConnected":返回一个布尔值 (True/False)。
  • "Position":以元组形式返回指定端口在图表(设计窗口)中的位置 (xPos, yPos)。如果 port 指定了一个内部层次化框节点,例如 ("Process0/HBox","INBOUND#I000"),则会返回该节点在层次化框设计窗口中的位置。

GetModuleProperty#

命令语法
GetModuleProperty (full_module_name: str, prop: ModuleProperty | str) → varies

此命令用于返回模块的 Property。

以下可用的 prop 值为:

  • "Status":返回一个整数:如果模块未处于错误状态,则返回 0;否则返回错误代码。
  • "Operator":返回该模块作为其实例的 operator 名称,例如 BRANCH.
  • "OperatorType":返回 operator 类型(O、P、M、未知)。对于层次化框和用户库模块,将返回“Unknown”。
  • "LibraryType":返回 operator 所属库的库类型。将返回以下值之一: operator, user, custom.
  • "Version":返回该模块作为其实例的 operator 的版本。
  • "Type":返回模块类型。将返回以下值之一: process, hierBox, operator, user, custom.
  • "IsHierModule":返回 True (如果指定的模块能够包含子模块);返回 False (如果指定的模块不能包含子模块)。
  • "IsProtected":返回 True (如果该模块是受保护库元素的实例)。
  • "Library":返回 operator 所属库的名称。
  • "Position":以列表形式返回设计窗口中的位置 (xPos, yPos)。
  • "Resources":返回由元组组成的列表 (ResourceName, ResourceMapping)
  • "Name":返回模块名称。

示例

operatorName = GetModuleProperty("Process0/MyModule", "Operator")
pos         = GetModuleProperty("Process0/MyModule", "Position")

GetModuleParams#

命令语法
GetModuleParams (full_module_name: str, select: list[str] | None = None) → dict

返回一个字典,其中键为参数名称,值采用取决于值类型的格式:

整数参数:int 浮点参数:float 枚举参数:str 整数域:list[int] 浮点参数域:list[float] 字符串参数:str

如果您想获取模块的所有参数及其当前设置的值,请使用命令 GetModuleParams 仅带参数 full_module_name.

示例:

Command GetModuleParams:示例

如果您只想获取特定参数的值,可以使用可选参数来限制输出 select.

示例:

Python Command GetModuleParams: Example with {param_names}

示例

allParams = GetModuleParams("Process0/MyModule")
someParams = GetModuleParams("Process0/MyLUT", ["LUTcontent","ImplementationType"])

GetModuleParamProperty#

命令语法
GetModuleParamProperty (full_module_name: str, param_name: str, prop: ParamProperty | str)

用于检索参数 Property 的命令。

对于参数 prop,可用值如下:

  • "Status":返回一个整数:如果模块未处于错误状态,则返回 0;否则返回错误代码。
  • "Type":返回参数类型为 ParamType,其可以为 ParamType.Int, ParamType.Float, ParamType.Enum, ParamType.String, ParamType.IntField或 ParamType.FloatField.
  • "Access":返回参数是否为只读参数:将参数访问权限返回为 ParamTypeFlag 其可以为 ParamTypeFlag.Write 或 ParamTypeFlag.Read.
  • "Unit":返回参数的单位。
  • "Range":对于整数和浮点数据类型,该命令将值范围返回为包含三个条目的列表 Min, Max, Step。对于 enum 参数,它返回由 enum 名称和 enum 值组成的对的列表。
  • "Size":返回域的大小。仅适用于 IntField 和 FloatField 参数。
  • "IsDynamic":返回 True 如果请求的参数是动态的;否则返回 False.
  • "IsStatic":返回 True 如果请求的参数是静态的;否则返回 False.
  • "IsEditable":返回 True 如果请求的参数可编辑;否则返回 False.
  • "Position":以整数形式返回参数列表中的位置。

示例

rangeVal = GetModuleParamProperty("Process0/LUT1", "LUTcontent", "Range")

GetLinkParams#

命令语法
GetLinkParams (link: tuple[str,str], select: list[LinkParam|str]|None = None) → dict[LinkParam, (various)]

返回一个字典,其中键是以下对象的成员 LinkParam 且值以取决于键的格式给出:

  • BitWidth : int
  • Arithmetic : Arithmetic
  • Parallelism : int
  • KernelColumns : int
  • KernelRows : int
  • ImageProtocol : ImageProtocol
  • ColorFormat : ColorFormat
  • ColorFlavor : ColorFlavor
  • MaxImageWidth : int
  • MaxImageHeight : int

使用可选的 select 参数来提供用于特定查询这些参数的链路参数列表。

示例:

Python Command GetLinkParams:示例

示例

params = GetLinkParams(("Process0/MyModule","O"))
bw = params[LinkParam.BitWidth]  # e.g. 8

示例

params = GetLinkParams(("Process0/MyModule","O"), [LinkParam.BitWidth])
bw = params[LinkParam.BitWidth]  # e.g. 8

GetLinkParamProperty#

命令语法
GetLinkParamProperty (link: (str, str), param: LinkParam | str, prop: ParamProperty | str) → varies

此命令检索特定链路参数的属性。

参数的以下值 prop 是可能的:

  • Status:返回一个整数:如果模块未处于错误状态,则返回 0;否则返回错误代码。
  • IsEditable:返回 True 如果参数值可以更改;否则返回 False.
  • Range:
    • For integer data types, the command returns the value range either as a tuple containing three elements (Min, Max, Step), or as a tuple containing all allowed values. You distinguish the two kinds of tuples as follows: The Min-Max-Step tuple contains 3 tuple elements; the third tuple element is smaller or equal to the second tuple element. A tuple stating all allowed values starts with the smalles value and ends with the highest value. If only one value is allowed, the value is returned in format {value value 1}, for example, { 4 4 1} for min=4, max=4, step=1.
    • 对于枚举参数,该命令返回由枚举名称和枚举值对组成的元组。
  • Type: 返回参数类型:返回 ParamType.Enum 对于参数 LinkParam.Arithmetic, LinkParam.ImageProtocol, LinkParam.ColorFormat或 LinkParam.ColorFlavor。对于任何其他链路参数, ParamType.Int 将被返回。

GetLinkProperty#

命令语法
GetLinkProperty (link: tuple[str,str], prop: LinkProperty|str) → 视情况而定

此命令返回特定 link 的特定 Property。如果您使用参数寻址分层盒(hierarchical box)的端口 link,只要该分层盒内部存在通往该端口或来自该端口的 link,此命令就会生效。

该参数的以下选项 prop 可用,其返回类型取决于参数:

  • Status:返回一个整数:如果模块未处于错误状态(即,连线源和连线目标的参数设置匹配,且 DRC 未发现错误),则返回 0;否则返回错误代码。
  • From:返回 link 的起点。起点可以是前置模块的 out 端口,也可以是内部的分层盒节点(INBOUND#...),该 link 连接至此节点。此命令返回一个包含这两个值的元组 <FullModulenname> 和 <PortName>.
  • To:返回 link 的终点。终点可以是后续模块的 in 端口,也可以是内部的分层盒节点(OUTBOUND#...),该 link 连接至此节点。此命令返回一个包含这两个值的元组 <FullModulenname> 和 <PortName>.
  • Source:返回包含由以下项指定的 link 的元组 link ,适用于从 link 源开始的所有前置 link。沿层级向后追踪 link 链,从您在以下项中指定的模块开始 <FullModulenname> 返回起点。返回列表中元素的顺序与查找的逆向过程相对应(源模块是列表中的最后一项)。
  • Dest:返回一个元组,其中包含由以下项指定的 link link ,适用于直至 link 目标模块的所有后续 link。沿层级向前推进 link 链,从您在以下项中指定的模块开始 <FullModulenname>直到终点(sink)。返回列表中元素的顺序与查找的正向过程相对应——目标模块(目的地)是列表中的最后一项。
  • HasConnectedSimModule:返回 True 如果仿真模块已连接到该 link;则返回 False 如果未连接仿真模块。
  • ConnectedSimModule:返回已连接仿真模块的分层名称。

示例

src = GetLinkProperty(("Process0/MyModule","O"), "To")

GetSimModules#

命令语法
GetSimModules (sim_type: SimModuleType|str, scope: SearchScope|str, specifier: str) → list[str]

返回与给定类型/过滤器匹配的 simulation 模块的全名。

  • sim_type 可以用于 "Source" 或 "Probe".
  • scope 可以用于 "Hierarchy" 或 ""Pattern"".
  • specifier 是用于过滤器或层级的字符串。

示例

simProbes = GetSimModules("Probe",""Pattern"","*")

GetCommentBoxes#

命令语法
GetCommentBoxes (scope: SearchScope|str, specifier: str) → list[str]

此命令检索设计中的注释框(comment box)。该命令返回一个列表,其中包含您通过参数指定的具有相应特征的所有注释框 scope 和 specifier列表包含以下内容: FullElmentNames (包含方框名称的分层名称)。

  • scope:可以是 "Hierarchy" 或 ""Pattern"".
  • specifier: 为字符串“Pattern”或层次结构名称。

GetCommentProperty#

命令语法
GetCommentProperty (full_box_name: str, prop: CommentProperty | str) → str | tuple

此命令检索注释方框的 Property。

full_box_name 具有以下语法: <HierLevelPath>/<BoxName>.

  • <HierLevelPath> 指定设计中注释框所在层级路径。从进程层级开始。使用正斜杠。
  • <BoxName> 指定注释方框的单独名称。

prop 具有以下选项:

  • Content: 注释方框的内容作为字符串返回。
  • Position: 注释方框在设计窗口中左上角的 X 和 Y 位置作为元组返回。

编辑设计 – 更多命令#

Move#

命令语法
Move (item: tuple[str, str]|str, pos: tuple[int, int])

用于将模块、分层方框节点、注释方框或仿真模块重新定位到设计窗口内的新位置的命令。

  • item 可以是:
  • 一个字符串 "<FullModuleName>" 用于标识模块、注释方框或仿真模块。
  • 一个元组 (<FullModuleName>, <HierNodeName>) 用于移动分层节点,例如 ("Process0/Box1","INBOUND#I000").
  • pos 是 (x, y).

示例

Move("Process0/MyModule", (100, 200))

Select#

命令语法
Select (item`: str|tuple[str, str])

用于选择模块、仿真模块、注释方框或链接的命令。

  • item 可以是:
  • 一个字符串 "<FullModuleName>" 按名称选择模块、仿真模块或注释方框。
  • 一个元组 (<FullModuleName>, <PortName>) 选择链接。

示例

Select("Process0/MyModule")
Select(("Process0/Branch1", "O"))

ClearSelection#

命令语法
ClearSelection (parent_hierarchy: str)

用于删除所选元素(模块、层次框节点、链接、注释框或仿真模块)的命令。

使用可选参数 parent_hierarchy 来取消选中该层次级别上的所有元素 parent_hierarchy.

如果不使用 parent_hierarchy,则会全局清除元素选择,并且在执行该命令后,设计中将没有任何选中的元素。

CopySelected#

命令语法
CopySelected (parent_hierarchy: str)

用于复制该层次级别上所选元素的命令 parent_hierarchy。如果不使用可选参数 parent_hierarchy,则会复制当前活动设计窗口的层次级别上所选的元素。

DeleteSelected#

命令语法
DeleteSelected (parent_hierarchy: str)

用于删除层次级别上所选元素的命令 parent_hierarchy。仅删除您在 parent_hierarchy 下指定的层次级别所选的模块,其他级别上选定的模块将保留。如果不使用可选参数 parent_hierarchy,则会删除当前活动设计窗口的层次级别上所选的元素。

CutSelected#

命令语法
CutSelected (parent_hierarchy: str)

用于剪切层次级别上所选元素的命令 parent_hierarchy。如果不使用可选参数 parent_hierarchy,则会剪切当前活动设计窗口的层次级别上所选的元素。

GetSelected#

命令语法
GetSelected (scope: SelectionScope|str, parent_hierarchy: str) → list

返回层次级别上所选元素的列表 parent_hierarchy。通过 scope 您可以定义是要获取所选模块的列表("Modules")、所选链接的列表("Links")、所选仿真模块的列表("SimModules")还是所选注释框的列表("CommentBoxes")。

如果您不使用可选参数 parent_hierarchy,将返回当前活动设计窗口层级结构上所选的元素。

如果您使用 scope = SelectionScope.Modules/SimModules/CommentBoxes,则会返回一个分层元素路径列表。

如果您使用 scope = Links 您将获得一个链接标识元组列表。

示例

selectedModules = GetSelected("Modules")
selectedLinks = GetSelected("Links")

Paste#

命令语法
Paste (parent_hierarchy: str, pos: tuple[int, int] = (0,0))

用于将剪贴板中的元素粘贴到层级中的命令 parent_hierarchy(即粘贴先前已复制或剪切的元素)。

如果您不使用可选参数 parent_hierarchy,元素将被粘贴到当前活动设计窗口的层级中。

使用可选的位置参数 pos 来定义设计窗口中插入内容的左上角位置。

InsertModulePort#

命令语法
InsertModulePort (port: tuple[str,str], where: InsertPosition|str)

用于在端口旁边插入新模块端口的命令 port.

信息

您只能插入那些可以在命令中指定多重性的端口 CreateModule.

where 提供以下选项:

  • before 或 above:新端口直接插入到参数中指定的端口之前 port.
  • after 或 below:新端口直接插入到参数中指定的端口之后 port (默认)。

如果您不使用可选参数 where,新端口直接插入到端口之后 port.

RemoveModulePort#

命令语法
RemoveModulePort (port: tuple[str,str])

用于删除模块端口的命令。

示例

RemoveModulePort(("Process0/BRANCH", "O001"))

信息

您只能删除那些可以在命令中指定多重性的端口 CreateModule。特定类型的端口数量将始终保留最小值。如果尝试进一步缩减至低于最小值,将会收到相应的错误消息。示例:虽然您可以删除算子 Branch 的第三个输出端口(端口名称:O002),但两个最小输出端口(O001 和 O000)无法删除: Command RemoveModulePort

AppendModulePort#

命令语法
AppendModulePort (full_hier_box_name: str, direction:PortDirection | str)

用于向分层框添加输入端口或输出端口的命令。

方向可使用以下值:

PortDirection.Input 或 "Input":创建一个输入端口。

PortDirection.Ouput 或 "Ouput":创建一个输出端口。

示例

AppendModulePort("Process0/MyHierBox", "Input")

Rename#

命令语法
Rename (full_module_name: str, new_name: str)

用于重命名模块或仿真框的命令。在 new_name 中,您无需分层路径即可指定实例新的自定义名称。

示例

Rename("Process0/module1", "DMA")

SetActiveHierarchy#

命令语法
SetActiveHierarchy (hierarchy: str)

用于在 VisualApplets 中打开并激活指定设计分层窗口的命令。

示例

SetActiveHierarchy("Process0/MyBox")

GetActiveHierarchy#

命令语法
GetActiveHierarchy ( ) → str

返回有关当前在 VisualApplets 中打开并处于活动状态的设计窗口分层级别的信息。

示例

print(GetActiveHierarchy())

模拟设计#

CreateSimSource#

命令语法
CreateSimSource (full_sim_module_name: str, pos:tuple[int, int] = (0,0)) → str

用于创建仿真源模块并在设计窗口中定位该模块的命令。

full_sim_module_name 具有以下语法: <HierLevelPath>/<SimModuleName>

  • <HierLevelPath> 定义设计中特定分层级别的路径。
  • <SimModuleName> 指定您希望仿真源模块拥有的自定义名称。或者,您可以将 <SimModuleName> 留空。在这种情况下,您需要以斜杠结束 full_sim_module_name ;该模块将被自动命名。

函数的返回值 CreateSimSource 是 full_module_name 新仿真源模块的(包含模块名称的仿真源模块完整分层路径)。

示例

srcName = CreateSimSource("Process0/MySimSource", (200,200))

CreateSimProbe#

命令语法
CreateSimProbe (full_sim_module_name: str, pos:tuple[int, int] = (0,0)) → str

用于创建仿真探针模块并在设计窗口中定位该模块的命令。

full_sim_module_name 具有以下语法: <HierLevelPath>/<SimModuleName>

  • <HierLevelPath> 用于定义设计中特定层级路径的参数。
  • <SimModuleName> 用于指定仿真探针模块所需的名称。或者,您可以将其留空 <SimModuleName> 留空。在这种情况下,您需要以斜杠结束 full_sim_module_name ;该模块将被自动命名。

函数的返回值 CreateSimProbe 是 full_module_name 新仿真探针模块的完整层级路径(包括模块名称)。

DeleteSimModule#

命令语法
DeleteSimModule (full_sim_module_name: str)

用于删除仿真模块(仿真源或仿真探针)的命令。

ConnectSimModule#

命令语法
ConnectSimModule (full_sim_module_name: str, link: tuple[str,str], pos: tuple[int,int] = (0,0))

用于将仿真模块连接到现有链路的命令。

示例

ConnectSimModule("Process0/MySimProbe", ("Process0/Branch1","O"))

DisconnectSimModule#

命令语法
DisconnectSimModule (full_sim_module_name: str)

用于从链路中分离仿真模块的命令。

SetSimModuleProperty#

命令语法
SetSimModuleProperty (full_sim_module_name: str, prop: SimProperty|str, value: bool|int|dict[str,int])

用于定义仿真模块 Property 的命令。

  • 通用 Property(以整数形式 value):
  • "PixelAlignmentOffset", "ImageFileSubPixels", "ImageFilePixelBits", "CurrentImage"
  • 通用 Property(以布尔值形式 value):
  • "ImageFileNormalize" 可以设置为 True或 False
  • 通用 Property(以字典形式 value):
  • "CropRect":传入包含以下键的字典: {"index", "x", "y", "width", "height"} 用于指定源图像中的 ROI。

使用 prop 用于标识要设置的 Property。请按如下格式设置各个 Property。可用 Property 及其对应的值格式如下:

pixelAlignmentOffset BITS

使用此参数将对齐偏移量指定为整数值 BITS.

imageFileSubPixels NUMBER

使用此参数将分配给一个链路像素的文件像素数指定为整数值 NUMBER.

来源: NUMBER 个像素合并为一个像素。

探针:一个像素被拆分为 NUMBER 文件中的像素。

imageFilePixelBits bits

使用此参数将图像文件中的 Bit Width 指定为整数值 bits。允许的值为 1、8 和 16。

imageFileNormalize choice

使用此 Property 配置保存模拟结果图像的方式。

如果要在 8 位文件格式中保存 1 位模拟结果,请将 imageFileNormalize 设置为 1。在此语境中,“归一化”是指将 0 映射到 0(黑色),将 1 映射到 255(白色)。

以下可用的 choice 是可能的: choice = "1" | "0"

cropRect [imageNr] x y width height

此 Property 仅适用于模拟源。指定图像索引 [imageNr] 是必填项。使用此参数可裁剪图像并指定要用于模拟的图像区域 (ROI)。通过 x 和 y ,您可以定义 ROI 的左上角。

currentImage index

使用此参数可选择模拟模块内的图像。指定 index 作为整数值。

示例

SetSimModuleProperty("Process0/SimSource1", "ImageFileNormalize", True)
SetSimModuleProperty("Process0/SimSource1", "CropRect",
                     {"index": 0, "x":10, "y":20, "width":100, "height":100})

AddImage#

命令语法
AddImage (full_sim_module_name: str, image_file_name: str|list[str], image_lib: ImageLibrary|str)

用于将图像添加到仿真 source 模块的命令。如果仿真 source 连接到的链接的内核元素数量大于 1,则必须指定与内核元素数量相同的图像。

或者,您可以声明要使用的图像库( image_lib = "Native" | "ImageMagick")。

示例

AddImage("Process0/MySimSource", "c:/VA_Python/testimage.tif")

RemoveImage#

命令语法
RemoveImage (full_sim_module_name: str, image_index: int = -1)

用于从模拟中删除一个或所有图像的命令 source 模块。使用可选参数 image_index 指定要删除的图像。如果将 image_index 设置为 -1,或者根本不使用 image_index ,则会删除模拟模块中的所有图像。

Simulate#

命令语法
Simulate (processing_cycles: int, save_log_file_name: str)

用于模拟设计的命令。使用 processing_cycles 参数来定义要通过该命令执行的处理周期数。

使用可选参数 save_log_file_name 以便将执行周期的日志保存到文件。请在 save_log_file_name 文件路径和文件名本身。由于日志是以 HTML 格式写入的,请使用扩展名为 *.html 的文件名。请使用正斜杠来表示路径。

示例

Simulate(1, "c:/temp/simlog.html")

ResetSimulation#

命令语法
ResetSimulation ( )

用于重置仿真引擎的命令。执行此操作后,设计中的所有仿真探针都将被清除。

GetSimModuleProperty#

命令语法
GetSimModuleProperty (full_sim_module_name: str, prop:SimModuleProperty|str , image_index:int = -1) → 视情况而定

用于检索仿真模块 Property 的命令。返回类型取决于所查询的 Property。可用 Property 如下:

  • IsConnected → bool:返回 True(如果仿真模块已连接到链路;否则返回) False.
  • ConnectedLink → (FullModuleName, PortName):返回一个元组,用于标识仿真模块所连接到的链路。返回值始终通过真实的模块端口来描述链路,即它从不指示内部 H 盒节点(例如 INBOUND#I000 或 OUTBOUND#O000)。
  • IsSource → bool:返回 True,如果仿真模块是 SimulationSource;否则返回) False.
  • IsProbe → bool:返回 True,如果仿真模块是 SimulationProbe;否则返回) False.
  • Position → (x,y):以元组形式返回仿真模块在程序窗口中的位置。
  • ImageCount → int:返回仿真模块中的图像数量。
  • PixelAligmentOffset → int:返回作为整数值的对齐偏移量。
  • ImageFileSubPixels → bool:以整数值返回分配给链路像素的文件像素数。
  • ImageFilePixelBits → int:以整数值返回图像文件中的 Bit Width 设置。可能的值为 1、8 和 16。
  • ImageFileNormalize → bool:返回 True 或 False 根据保存仿真结果图像的设置。如果设置为 1,则在将 1 位仿真结果保存到 8 位 * 文件中时, format:0 映射到 0(黑色),1 映射到 255(白色),即仿真图像的格式为“归一化”。
  • CropRect → dict,带有 {"x","y","width","height"}:此 Property 仅适用于仿真源。使用参数 image_index 是强制性的。返回带有键的裁剪矩形字典 Index, X, Y, Width,和 Height.
  • CurrentImage → int:以整数值返回当前选定的图像。

SetSimImageData#

命令语法
SetSimImageData (full_sim_module_name: str, image_index: int, x: int, y: int, kernel_row: int = 0, kernel_col: int = 0, component: int = 0, width: int 0 1, data: list[str])

用于覆盖模拟模块(source 或 probe)in memory 中的一个或多个相邻像素的命令。该命令适用于在运行模拟或保存模拟之前进行测试修改。

您可以使用以下命令:

  • 在 SimSources 中用于修改用于模拟的图像。
  • 在 SimProbes 中用于在图像中可视化结果。

  • image_index:要修改哪张图像,从 0 开始计数。

  • x, y:要写入的左上角像素坐标。
  • kernel_row, kernel_col如果图像包含内核,请确定要修改的是哪个内核元素。
  • component:对于彩色图像,要设置哪个颜色通道。
  • width:要连续设置一行中的多少个像素。中的其他数据 data 可能会溢出到后续行。
  • data: 十六进制字符串 形式的像素值列表,例如 ["0A","0B","FF"].

示例

SetSimImageData("Process0/SimSource1", 0, 10, 10, component=0, width=3,
                data=["12","13","14"])

对图像的修改是临时的。只要您选择同一仿真模块的其他图像或重新选择已修改的图像,该图像就会从硬盘重新加载,并且您的修改将被丢弃。如果您在 Python 控制台中输入新图像的命令( image_index 属于同一仿真模块),或者如果您在 VisualApplets GUI 的查看器中点击同一仿真模块的其他图像,则会选择另一张图像。

但是,只要该修改后的图像处于活动状态,您就可以将其以新文件名保存,从而使修改永久生效。

您可以将临时修改的图像用于仿真。但是,每个 SimSource 模块只能将一张图像用于修改状态下的仿真,因为在同一 SimSource 中修改另一张图像会重置您之前修改的图像的像素值。只要每个仿真模块只有一张临时修改的图像,您就可以将任意数量的临时修改图像用于仿真。

每个像素一个值:命令 SetSimImageData 允许您每个像素只写入一个值。因此,对于灰度像素,您必须执行 SetSimImageData 命令只需一次即可写入每个像素完整的颜色信息。对于彩色像素,您将只能写入每个像素的三个颜色分量之一。因此,如果您想更改彩色像素的所有三个颜色分量,您必须执行 SetSimImageData 命令三次。

写入带有 kernel 的图像:当写入带有 kernel 的图像时,在使用命令时必须指定要覆盖的相应像素的哪个 kernel 元素 SetSimImageData 。如果您想覆盖所有 kernel 元素,您必须执行 SetSimImageData 命令正好 kernel_row * kernel_col 次。

要使用该命令:

在使用该命令之前,请关闭要更改的图像所在的仿真模块的图像查看器。

使用索引指定要修改的图像 image_index. 注意: image_index 从 0 开始,而 VisualApplets GUI 中仿真模块里的图像编号从 1 开始。其值映射关系如下:

image_index = 0 对应 VisualApplets GUI 查看器中的图像 1。

image_index = 1 对应 VisualApplets GUI 查看器中的图像 2。

image_index = 2 对应图像 3

依此类推。

信息

在 VisualApplets 的 GUI 上,下一个模拟周期中使用的图像索引会显示在方括号中,并带有前缀“sim”(例如 sim[2])。

使用 kernel_row 和 kernel_col 用于指定要更改像素值的卷积核元素。

您可以在仿真模块连接到的 Link 的 Link Properties 中查看仿真图像的卷积核大小。卷积核大小大于 1 个像素的 Link 总是带有允许指定卷积核的算子实例(例如,算子 FIRkernelNxM)。

Kernel Columns 和 Kernel Rows 的计数从 0 开始。因此,如果您只有一个元素的卷积核,请将这两个值(kernel_row 和 kernel_col) 设置为 0:

SetSimImageData 命令:计算 Kernel Columns 和 Kernel Rows

对于包含 4 个元素的卷积核,您可以按如下方式识别单个卷积核元素:

SetSimImageData 命令:在 4 个元素中识别 kernel 元素

对于包含 9 个元素的卷积核,您可以按如下方式识别单个卷积核元素:

SetSimImageData 命令:在 9 个元素中识别 kernel 元素

使用 component 参数用于指定要设置的像素的颜色分量。对于灰度图像,请将 component 设为 0。对于多通道图像(彩色),通过其在色彩模型中的位置指定要写入的分量。示例:设置 component 为 0(如果您想寻址 RGB 图像中的红色分量),设置 component 为 1(如果您想寻址 RGB 图像中的绿色分量),或设置 component 为 2(如果您想寻址 RGB 图像中的蓝色分量)。

设置位置(x,y) 以定义图像内写入的起点(第一个像素)。

使用 width 用于指定每行要覆盖的相邻像素数量。如果您指定的数量 values 大于您在一行中写入的像素数(width),则写入操作将在下一行的位置 x继续。通过这种方式,您可以写入宽度为 width.

指定各个像素值 data 以十六进制书写,不带前缀“0x”。负值请使用补码表示法。您在 data 决定了图像中将有多少像素被修改。

GetSimImageData#

命令语法
GetSimImageData (full_sim_module_name: str, image_index: int, x: int, y: int, kernel_row: int = 0, kernel_col: int = 0, component: int = 0, width: int = 1, height: int = 1])

用于读取仿真模块(源或探针)内图像中一个或多个相邻像素值的命令。返回十六进制字符串列表。

每个像素一个值:命令 GetSimImageData 每个像素仅返回一个值。因此,对于灰度像素,您必须执行 GetSimImageData 命令一次即可检索每个像素的完整颜色信息。对于彩色像素,您将只能检索每个像素的三个颜色分量之一。因此,如果您想读取彩色像素的所有三个颜色分量,您必须执行 GetSimImageData 命令三次。

读取带有 kernel 的图像:当从带有 kernel 的图像中读取时,在使用命令时必须指定要读取的相应像素的哪个 kernel 元素 GetSimImageData 除了要读取的(第一个)像素的确切位置之外。如果您想读取所有算子元素,您必须执行 GetSimImageData命令正好 kernel_row * kernel_col 次。

要使用该命令:

指定具有索引的图像 image_index.

注意: image_index 从 0 开始,而 VisualApplets GUI 中仿真模块里的图像编号从 1 开始。其值映射关系如下:

image_index = 0 对应 VisualApplets GUI 查看器中的图像 1。

image_index = 1 对应 VisualApplets GUI 查看器中的图像 2。

image_index = 2 指 VisualApplets GUI 查看器中的图像 3,

依此类推。

信息

在 VisualApplets 的 GUI 上,下一个模拟周期中使用的图像索引会显示在方括号中,并带有前缀“sim”(例如 sim[2])。

使用 kernel_row 和 kernel_col 以指定要从中读取的算子元素。

您的仿真图像算子的大小可以在与仿真模块连接的链接的链接属性中查看。算子大小大于 1 个元素的链接前面总是带有允许指定算子的算子实例(例如,算子 FIRkernelNxM)。

算子的列和行从 0 开始计数。因此,如果您只有一个元素的算子,请将两个值都设置为 0。

GetSimImageData 命令:计算 Kernel Columns 和 Kernel Rows

对于包含 4 个元素的卷积核,您可以按如下方式识别单个卷积核元素:

命令 GetSimImageData:识别 4 个元素中的内核元素

对于包含 9 个元素的卷积核,您可以按如下方式识别单个卷积核元素:

命令 GetSimImageData:识别 9 个元素中的内核元素

使用参数 component 指定要读取的像素颜色分量。在灰度图像中,设置 component 设为 0。在多通道图像(彩色)中,通过其在颜色模型中的位置指定要读取的分量。示例:设置 component 如果您想读取 RGB 图像中的红色分量,请将其设为 0;设置 component 如果您想读取 RGB 图像中的绿色分量,请将其设为 1;或者设置 component 如果您想读取 RGB 图像中的蓝色分量,请将其设为 2。

设置位置(x,y) 以定义您在图像中读取的起点(第一个像素)。

如果您不使用参数 Width,将返回恰好一个像素的值。如果仅指定 width, width 行中的值 y 将被返回。如果您指定 width 和 height, width * height 将返回相应的值。使用 width 和 height 允许您定义一个感兴趣区 (ROI),以读取该区域的像素值(灰度)/像素分量值(彩色)。

各个像素值以十六进制形式返回,不带前缀“0x”。负数以补码形式返回。

示例

vals = GetSimImageData("Process0/SimProbe1", 0, 100, 200, width=4, height=2)
# E.g., ["00","00","01","02","03","FF","7A","7B"]

CreateSimImage#

命令语法
CreateSimImage (full_sim_module_name: str, shape: tuple[int,int] = (-1,-1))

用于在具有指定属性的仿真模块(通常为源模块)中创建/分配新图像的命令 height 和 width.

如果任一维度为 -1,则使用该链接的最大维度。

参数 shape 定义了类似于 numpy 数组的图像形状。第一个元组项是 height ,第二个是 width。 如果 shape 包含三个条目时,第三个条目将被忽略(分量数量由链接格式决定)。

示例

CreateSimImage("Process0/MySimSource", (768, 1024))

GetSimImageProperty#

命令语法
GetSimImageProperty (full_sim_module_name: str, image_index: int, prop: SimImageProperty|str, line_index: int = -1, line_count: int = 1) → 变化

用于检索仿真图像属性(在源模块或探测模块中)的命令。

  • prop 可以是:
  • "LineWidth": 返回线宽列表(如果 lineCount > 1)。
  • "ImageSize": 返回一个字典 {"Width": <width>, "Height": <height>} 其中 <width> 和 <height> 是用于图像宽度和高度的整数。

CreateImageMemory#

命令语法
CreateImageMemory (format_dict: dict[LinkParam|str, int|<enum>|str] = None ) → SharedImageMemory

用于创建可通过类型为 VisualApples 的对象访问的 VisualApples 图像内存的命令 SharedImageMemory.

  • format_dict:使用与指定链接格式等效的字典来指定内存格式(使用诸如以下键): LinkParam.MaxImageWidth, LinkParam.MaxImageHeight, LinkParam.ColorFormat等等)。如果省略,则使用以下默认值:

    • LinkParam.MaxImageHeight: 1024
    • LinkParam.MaxImageWidth: 1024
    • LinkParam.ColorFormat: VAF_GRAY
    • LinkParam.BitWidth: 8

参数 format_dict 是可选的。如果您想通过调用来设置映像内存。 CopySimImageData不要提供任何格式。仿真模块会覆盖默认格式。

内存会在执行以下操作之一时首次分配:

  • 呼唤 CopySimImageData() 用于从仿真元素复制数据
  • 调用方法 data() 从 Python 获取缓冲区对象 SharedImageMemory.

此函数返回一个 SharedImageMemory 可与以下对象一起使用 CopySimImageData.

返回 SharedImageMemory 该对象提供以下类方法:

  • data()获得 memoryview 该对象通过 Python 缓冲区协议提供内存访问,而无需复制。
  • shape()返回图像的形状(尺寸),可以是(Height, Width) 适用于灰度格式或(Height, Width, Components)适用于彩色图像。
  • datatype()返回与缓冲区数据对应的 numpy 数据类型的字符串表示形式。此字符串可用作参数。 numpy.dtype() 获取 numpy 数据类型的函数。
  • casttype()返回图像数据的 PEP 3118 缓冲区类型转换。此字符串可用于 memoryview.cast().

示例

sharedMem = CreateImageMemory({"Max. Image Width": 100, "Max. Image Height": 100})
resultMem = CreateImageMemory({LinkParam.MaxImageWidth: 2, LinkParam.MaxImageHeight: 1, LinkParam.BitWidth: 16})

# Access the buffer sharedMem via numpy
import numpy as np

arr = np.frombuffer(sharedMem.data(0,0), dtype=np.dtype(sharedMem.datatype()))
arr = arr.reshape(sharedMem.shape())
arr[:] = 0 # initialize buffer with zeros

# Access the buffer resultMem via buffer protocol
resultData = resultMem.data(0,0).cast(resultMem.casttype())
resultData[0] = 0x1234
resultData[1] = 0x5678

CopySimImageData#

命令语法
CopySimImageData (full_sim_module_name: str, image_index: int, image_memory: SharedImageMemory, copy_to_sim_module: bool = False)

用于复制数据的命令 至或来自 模拟模块,至或来自 SharedImageMemory buffer。默认情况下,数据会从 simulation 模块复制到 image memory。

  • 如果 copy_to_sim_module=False (默认值),数据将从 sim 模块流向 image_memory.
  • 如果 copy_to_sim_module=True,则 image_memory 中的数据将写入 sim 模块的图像中。

示例

buf = CreateImageMemory()
CopySimImageData("Process0/SimProbe1", 0, buf)  # read data from probe
# ... do something in Python ...
CopySimImageData("Process0/SimProbe1", 0, buf, True)  # write it back

SaveImage#

命令语法
SaveImage (full_sim_module_name: str, image_index: int, image_base_name: str)

用于保存来自 simulation 探针的一个或所有结果图像的命令。

使用必填参数 image_index 从结果图像中保存特定图像。如果您想保存探针的所有图像,请设置 image_index 变为 -1.

使用 image_base_name 以指定文件系统中用于保存图像的目录路径,并用于指定图像文件的文件名。请确保您指定的目录在文件系统中已经存在。否则,您可以使用命令创建它们 MakeDirectoryPath.

示例:"C:/images/testimage"。在保存过程中,文件名字扩展名(例如 *.tif)将被自动添加到名称中。

如果您保存探针的所有图像,图像索引将自动添加到文件名中。

示例 1:

输入

SaveImage("Process0/mySimProbe", -1, "C:/images/testimage")

以获取以下文件:

C:/images/testimage_0001.tif

C:/images/testimage_0002.tif

C:/images/testimage_0003.tif

…

示例 2:

输入

SaveImage("Process0/mySimProbe", 4, "C:/images/testimage")

以获取以下文件:

C:/images/testimage.tif

Building the Design#

Drc#

命令语法
Drc (save_log_file_name: str = " ")

用于启动第一级设计规则检查(DRC 1)的命令。

若要获取日志输出,您可以选择在 save_log_file_name 参数。

Drc2#

命令语法
Drc2 (save_log_file_name: str = " ")

用于启动第二级设计规则检查 (DRC 2) 的命令。

若要获取日志输出,您可以选择在 save_log_file_name 参数。

SelectBuildConfiguration#

命令语法
SelectBuildConfiguration (config_name: str)

用于将已保存的构建配置选择为活动构建配置的命令。

在参数中指定所需构建配置的名称 config_name.

若要获取所有可用构建配置的概览,请输入 SelectBuildConfiguration("?") - 返回所有可用构建配置的名称列表。当前选定的构建配置显示在列表的第一项中。

示例:

命令 SelectBuildConfiguration

该命令返回当前选定构建配置的名称。通过此返回值,您可以检查重新设置构建配置是否成功。

示例:

命令 SelectBuildConfiguration 输出

构建#

命令语法
构建 (save_log_file_name: str = " ", max_time: float | int = 24.0)

用于启动构建流程的命令。

若要获取日志输出,您可以在参数中可选地指定 HTML 日志文件 (*.html) 的路径和名称 save_log_file_name.

若要为构建过程设置时间限制,您可以在参数中可选地指定最大构建时间 max_time (以小时为单位)。参数 max_time 的类型为浮点数。这样,您就可以指定不足一小时的小时数。的默认设置 max_time 为 24 小时。

创建日志文件的命令示例 build_log.html 并指定最大构建时间为半小时:

示例

Build("build_log.html", 0.5)  # stop after 30 minutes

处理文件、路径、程序实例和消息#

Source#

命令语法
Source (file_path: str, encoding: str = utf-8)

用于在当前环境中执行另一个 Python 脚本文件的命令。请使用正斜杠指定路径。该命令会自动替换以下占位符(例如命令 MakeDirectoryPath):

%UserDir%:当前用户的数据目录(例如, c:/Users/Smith)

%AppDataDir%: VisualApplets 的应用程序数据目录

%VaInstallDir%: VisualApplets 的安装目录

%UserLibDir%: 用户库的目录。

%CustomLibDir%: 自定义库的目录。

%VaVersion%: VisualApplets 程序版本,例如“3.1”

%CurrDateTime%: 符合 ISO 8601(基本格式)的当前日期和时间,例如“20170530T134522”

%DateTime%: 符合 ISO 8601(基本格式)的 VisualApplets 启动时的日期和时间,例如“20170530T134350”

%CurrDesignDir%: 当前加载的设计所在的目录。

MakeDirectoryPath#

命令语法
MakeDirectoryPath (full_path: str) → str

用于创建任意所需深度的路径(及其目录)的命令。

该命令会自动替换以下占位符:

%UserDir%:当前用户的数据目录(例如, c:/Users/Smith)

%AppDataDir%: VisualApplets 的应用程序数据目录

%VaInstallDir%: VisualApplets 的安装目录

%UserLibDir%: 用户库的目录。

%CustomLibDir%: 自定义库的目录。

%VaVersion%: VisualApplets 程序版本,例如“3.1”

%CurrDateTime%: 符合 ISO 8601(基本格式)的当前日期和时间,例如“20170530T134522”

%DateTime%: 符合 ISO 8601(基本格式)的 VisualApplets 启动时的日期和时间,例如“20170530T134350”

%CurrDesignDir%: 当前加载的设计所在的目录。

如果命令成功执行,将返回绝对路径。

示例

absPath = MakeDirectoryPath("c:/temp/myFolder/sub")

GetAbsolutePath#

命令语法
GetAbsolutePath (path: str) → str

返回在参数中指定的路径的绝对路径 path.

该命令会自动替换与命令相同的别名(占位符) MakeDirectoryPath.

您可以在 path 中引用不存在的目录或文件,以便生成的路径名指向不存在的目录或文件。

Wait#

命令语法
Wait (time_in_milli_sec: int)

用于等待指定时间的命令 time_in_milli_sec。在等待期间,VisualApplets GUI 保持活动状态。

如果将 time_in_milli_sec 设为 0,VisualApplets 将至少执行一次 GUI 的事件循环更新。您可以使用此功能来确保 GUI 显示早期命令的结果。

消息#

命令语法
消息 (msg_type: MessageType|str, code: int, text: str)

用于发出

  • 错误消息的命令 (msg_type=MessageType.Error 或 msg_type="Error"),
  • 一条警告(msg_type=MessageType.Warning 或 msg_type="Warning"),或者
  • 一条信息性消息(msg_type=MessageType.Info 或 msg_type="Info")

在 code,您可以为您的消息定义消息代码。 code 的值范围为 -999 到 +999。为避免与 VisualApplets 的当前和/或未来版本发生冲突,请仅使用此范围内的值。

使用 text 以输入消息。该消息会自动以一个点结尾。

示例

Message("Info", 100, "Starting build steps...")

FlushConsole#

命令语法
FlushConsole ( )

将 Python stdout/stderr 中累积的输出立即传输到 VisualApplets 控制台。

Exit#

命令语法
Exit (discard: bool = False)

用于终止当前 VisualApplets 会话的命令。您可以使用 Exit ,即使您仍打开着设计。但是,请别忘了在此之前保存您的更改。

如果您仍打开着设计且该设计包含未保存的更改:

  • 如果设置了可选参数 discard 变为 True,即使打开的设计包含尚未保存的更改,它也会被关闭。未保存的更改将被丢弃。
  • 如果设置了可选参数 discard 变为 False 并且存在未保存的更改,该命令将失败。
  • 如果您使用 Exit 在不使用 discard 参数的情况下,尽管打开的设计包含未保存的更改,该命令仍将被终止,并且您会收到相应的错误消息。