跳转到内容

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 上使用的操作系统,该 applet 运行在 frame grabber 上。)

    允许以下值:

    • 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} 在一个带有名为以下内容的输出多端口的算子上创建 3 个输出端口 "O"。参见下文描述。
  • 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时,您可以定义该实例将具有多少个输出端口:

Command CreateModule: Enter Outputs

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

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

Command CreateModule: Multiports

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

示例

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

Command CreateModule: Example BRANCH with 3 Output Ports

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

示例

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

Command CreateModule: Example BRANCH with 2 Output Ports

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

示例

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

Command CreateModule: Example Hierarchical Box with 2 Input and 3 Output Ports

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))

用于实例化自定义库元素的命令。通过参数指定用户库 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: Geometry of the Connecting Polygon Example 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 对话框如下所示:

SetModuleParam 命令:编辑参数示例

输入命令

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

产生以下结果:

SetModuleParam 命令:输入值示例

SetModuleParamProperty#

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

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

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

    • write:如果参数可以在此方向上切换(例如在运算符 LinkParamTranslator中),它将变为写入参数。
    • read:如果参数可以在此方向上切换(例如在运算符 LinkParamTranslator中),它将变为读取参数。
    • dynamic:如果参数既可以是动态的也可以是静态的,则它在此处变为动态参数。
    • static:如果参数既可以是动态的也可以是静态的,则它在此处变为静态参数。
  • position:定义参数在多个参数中的位置的整数。

示例

# 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)

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

信息

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

若要将现有的模块参数设置为新值,请务必在脚本中使用命令 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])

用于更改参数类型的命令。可用以下类型标志:

  • Dynamic:如果参数可以是动态或静态的,则此标志使该参数成为动态参数。
  • Static:如果参数可以是动态或静态的,则此标志使该参数成为静态参数。

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: 一个指定参数值对的字典。链路格式参数的名称与 VisualApplets GUI 中的相同。示例键: LinkParam.BitWidth, "Arithmetic"等。

示例

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

信息

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

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 的主机的操作系统
  • Loaded:设计已加载;返回一个布尔值(True/False)

Design 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)

该命令用于检索模块 Port 的 Property。以下可用的 prop 值为:

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

GetModuleProperty#

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

此命令返回模块的 Property。

以下可用的 prop 值为:

  • "Status": 返回一个整数:如果模块未处于错误状态,则返回 0;否则返回错误代码。
  • "Operator":返回该模块作为实例的 Operator 的名称,例如 BRANCH.
  • "OperatorType":返回 Operator 类型(O、P、M、未知)。对于层次化 Box 和用户库模块,将返回“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.

示例:

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。对于枚举参数,它返回由枚举名称和枚举值组成的配对列表。
  • "Size":返回字段的大小。仅针对 IntField 和 FloatField Property。
  • "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 参数来提供针对这些参数的特定查询的 link parameters 列表。

示例:

Python 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

此命令检索特定 link parameter 的 Property。

参数的以下值 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.
    • 对于 enum 参数,该命令返回由 enum 名称和 enum 值对组成的元组。
  • Type: 返回参数类型:返回 ParamType.Enum 对于参数 LinkParam.Arithmetic, LinkParam.ImageProtocol, LinkParam.ColorFormat或 LinkParam.ColorFlavor。对于任何其他 link parameter, ParamType.Int 将被返回。

GetLinkProperty#

命令语法
GetLinkProperty (link: tuple[str,str], prop: LinkProperty|str) → varies

此命令返回特定 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>,一直延伸到终点(汇)。返回列表中各元素的顺序与查找的正向过程相对应 —— 目标模块(目的地)是列表中的最后一项。
  • 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]

此命令用于获取设计中的注释框。该命令会返回一个包含所有符合您通过参数指定的特征的注释框的列表 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> 您可用于指定要为 simulation probe 模块设置的名称。或者,您可以留空 <SimModuleName> 留空。在这种情况下,您需要使用斜杠终止 full_sim_module_name ;该模块将自动命名。

函数的返回值 CreateSimProbe 是 full_module_name 新 simulation probe 模块的路径(指向 simulation probe 模块的完整分层路径,包含模块名称)。

DeleteSimModule#

命令语法
DeleteSimModule (full_sim_module_name: str)

用于删除 simulation 模块(simulation source 或 simulation probe)的命令。

ConnectSimModule#

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

用于将 simulation 模块连接到现有 link 的命令。

示例

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

DisconnectSimModule#

命令语法
DisconnectSimModule (full_sim_module_name: str)

用于将 simulation 模块从 link 断开的命令。

SetSimModuleProperty#

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

用于定义 simulation 模块的 Property 的命令。

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

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

pixelAlignmentOffset BITS

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

imageFileSubPixels NUMBER

使用此参数将分配给 link 像素的文件像素数量指定为整数值 NUMBER.

Source: NUMBER 像素合并为一个像素。

Probe:一个像素拆分为 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) → varies

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

  • IsConnected → bool:返回 True,如果仿真模块已连接到链路;否则返回 False.
  • ConnectedLink → (FullModuleName, PortName): 返回一个元组,用于标识仿真模块连接到的链路。返回值始终通过真实的模块端口来描述链路,即它绝不会说明内部的 H box 节点(例如, 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-bit 仿真结果保存到 8-bit * 文件中期间 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])

用于在模拟模块(源或探针)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 命令三次。

写入带内核的图像:当写入带内核的图像时,使用命令 SetSimImageData 。如果您想覆盖所有内核元素,您必须执行 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)。

卷积核列和卷积核行的计数从 0 开始。因此,如果您使用的是只有单个元素的卷积核,请将这两个值(kernel_row 和 kernel_col)都设置为 0:

SetSimImageData 命令:计算 Kernel Columns 和 Kernel Rows

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

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

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

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

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

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

使用 width 用于指定每行要覆盖的相邻像素数量。如果您指定的 values 大于在单行中写入的像素数(width),则写入操作将在下一行的指定位置继续 x. 这样,您就可以写入一个具有相应宽度的感兴趣区域 (ROI) 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 命令三次。

读取带内核的图像:当读取带内核的图像时,使用命令 GetSimImageData 命令时,除了指定要读取的(第一个)像素的确切位置之外,还必须指定相应像素的哪个 Kernel 元素。如果要读取所有 Kernel 元素,必须执行 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 以指定要读取的 Kernel 元素。

仿真图像的 Kernel 大小可以在仿真模块所连接的 Link 的 link properties 中查看。Kernel 大小超过 1 个元素的 Link 前面总是会有一个允许指定 Kernel 的算子实例(例如算子 FIRkernelNxM)。

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

GetSimImageData 命令:计算 Kernel Columns 和 Kernel Rows

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

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

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

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

使用参数 component 来指定要读取的像素颜色分量。在灰度图像中,将 component 设为 0。在多通道图像(彩色)中,通过其在色彩模型中的位置来指定要读取的分量。例如:如果要读取 RGB 图像中的红色分量,请将 component 设为 0;如果要读取 RGB 图像中的绿色分量,请将 component 设为 1;或者如果要读取 RGB 图像中的蓝色分量,请将 component 设为 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) → varies

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

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

CreateImageMemory#

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

用于创建 VisualApplets 图像 Memory 的命令,该 Memory 可通过以下类型的对象进行访问: SharedImageMemory.

  • format_dict:指定 memory 格式,其字典等效于指定 link 格式(使用诸如 LinkParam.MaxImageWidth, LinkParam.MaxImageHeight, LinkParam.ColorFormat等键)。如果省略,将使用以下默认值:

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

参数 format_dict 是可选的。如果您想通过调用 CopySimImageData来设置图像 memory,请勿提供任何格式。随后该格式将被仿真模块覆盖。

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

  • 调用 CopySimImageData() 以从仿真元素复制数据
  • 调用方法 data() 以从 SharedImageMemory.

获取 Python buffer 对象 SharedImageMemory 此函数返回一个可与 CopySimImageData.

一起使用的 SharedImageMemory 对象,该对象提供以下类方法:

  • data():获取一个 memoryview 对象,该对象通过 Python buffer 协议提供 Memory 访问,而无需进行复制。
  • shape():返回图像的形状(维度),灰度格式返回 (Height, Width),或者彩色图像返回 (Height, Width, Components)。
  • datatype():返回与 buffer 数据对应的 numpy 数据类型的字符串表示形式。此字符串可用作 numpy.dtype() 函数的参数以获取 numpy 数据类型。
  • casttype():返回图像数据的 PEP 3118 buffer 转换类型。此字符串可用于 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。默认情况下,数据从仿真模块复制到图像 Memory 中。

  • 如果 copy_to_sim_module=False (默认情况下),数据从仿真模块流向 image_memory.
  • 如果 copy_to_sim_module=True中,其中的数据 image_memory 将被写入仿真模块的图像中。

示例

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)

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

使用必填参数 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

构建设计#

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("?") - 返回所有可用构建配置的名称列表。当前选定的构建配置显示在列表的第一项中。

示例:

Command SelectBuildConfiguration

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

示例:

Command SelectBuildConfiguration Output

Build#

命令语法
Build (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 参数的情况下(尽管打开的设计包含未保存的更改),命令将被终止,并且您会收到相应的错误消息。