该命令按类型和名称定位对象。命令的参数按对象类型分组。
- find nets | signals <object_name> … [-internal] [-nofilter] {[-in] [-inout] [-out] | [-ports]}
- [-recursive]
-
- find instances | blocks {<object_name> … | -bydu <design_unit> | -file <file_name>}
- [-arch] [-protected] [-recursive] [-nodu]
-
- find virtuals <object_name> … [-kind <kind>] [-unsaved] [-recursive]
-
- find classes [<class_name>]
-
- find objects [-class <class_name>] [-isa <class_name>] [<object_name>]
find命令使用以下规则来定位对象:
•如果名称不包括数据集名称,则使用当前数据集。
•如果名称不是以路径分隔符开头,则使用当前上下文。
•如果名称是路径分隔符,后跟不是顶级设计单元名称的名称,则使用设计中的第一个顶级设计单元。
•对于包含层次化路径的相对名称,如果在当前上下文中找不到第一个对象名称,则向上搜索到设计层次结构的顶部,以查找匹配的对象名称。
•如果在指定的上下文中找不到指定名称的对象,则执行向上搜索,以在任何可见的封闭范围内查找匹配的对象,直到实例边界。如果在给定上下文中找到至少一个匹配,则不执行(更多)向上搜索;因此,当使用通配符时,如果某些对象在较高的封闭范围内,则在给定上下文中可能可见的对象将不会被找到。
•通配符“*”和“?”可以在名称的任何级别上使用,但数据集名称和切片规范内部除外。也可以使用方括号([])通配符。
•通配符永远不会与路径分隔符匹配。例如,/dut/*将匹配/dut/siga和/dut/clk。然而,/dut*与这两个都不匹配。
•由于方括号是find命令中的通配符,因此只有括号(())可以用于索引或切片数组。
•在执行搜索时,find命令使用WildcardFilter Tcl首选项变量来排除指定类型的对象。
有关指定名称的详细信息,请参见Design Object Names 。
命令的参数按对象类型分组。
搜索网络和信号时,find命令返回与名称规范匹配的所有网络、信号、寄存器、变量和命名事件的完整路径名。
•
(必需)指定要搜索的网络或信号。允许多个网络和信号以及通配符。通配符不能在切片规范内使用。空格、方括号和扩展标识符需要特殊的语法;有关更多详细信息,请参阅下面的示例。
• -in
(可选)指定搜索范围包括模式IN的端口。
• -inout
(可选)指定搜索范围包括模式INOUT的端口。
• -internal
(可选)指定搜索的范围是包括内部(非端口)对象。
• -nofilter
(可选)指定在查找信号或网络时忽略WildcardFilter-Tcl首选项变量。
• -out
(可选)指定搜索范围包括模式OUT的端口。
• -ports
(可选)指定搜索范围包括所有端口。具有与同时指定-in、-out和-inout相同的效果。
-recursive(递归的)
(可选)指定搜索的范围是递归下降到子区域。如果省略,则搜索仅限于所选区域。
搜索实例时,find命令返回主设计单元名称。
• -arch
仅与“instances”一起使用:列出相应的架构(architecture)名称以及find命令返回的任何VHDL设计单元名称的实体名称。
• -bydu
搜索设计单元。与-file和
• -file
将设计中实例的完整列表写入文件。与-bydu和
•
指定要搜索的实例或块的名称。允许多个实例和通配符。与-file和-bydu互斥。
• -protected
过滤并仅将输出减少为那些受保护的实例,因为该实例位于受保护的区域中,或者因为该实例在具有某些保护区域的设计单元中,或者由于这两个原因都适用。换句话说,find instances-protected命令仅返回位于受保护区域中的那些实例(由
• -recursive
(可选)指定搜索的范围是递归下降到子区域。如果省略,则搜索仅限于所选区域。
• -nodu
(可选)从输出中的任何实例中删除设计单元名称。
搜索虚拟值时,必须在任何对象名称之前指定所有可选参数。
•
(必需)指定要搜索的虚拟对象。允许多个虚拟字符和通配符。
• -kind
(可选)指定要搜索的虚拟对象的类型。
• designs
• explicits
• functions
• implicits
• signals
• -unsaved
指定ModelSim仅查找尚未保存到格式文件的虚拟体。
•
(可选)指定要搜索的incrTcl类。允许使用通配符。class_name的选项包括nets, objects, signals和 virtuals。如果不指定类名,该命令将返回当前命名空间上下文中的所有类。有关详细信息,请参阅Tcl Man Pages (Help > Tcl Man Pages)中的incrTcl命令。
• -class
(可选)将搜索限制为最特定的类为class_name的对象。
• -isa
(可选)将搜索限制为在其传统中任何位置具有class_name的对象。
•
(可选)指定要搜索的incrTcl对象。允许使用通配符。如果未指定对象名称,则该命令将返回当前命名空间上下文中的所有对象。请参阅Tcl Man Pages (Help > Tcl Man Pages)
了解更多信息。
•在整个设计中查找所有信号。
find signals -r /*
•查找整个设计中的所有实例,并将列表保存在文件instancelist.txt中。
find instances -file instancelist.txt -r /*
•在区域/top查找以字母“xy”开头的所有输入信号。
find nets -in /top/xy*
•查找设计层次结构中名称以“cl”开头的区域
find signals -r u1/u2/cl*
•查找名为s1的信号。请注意,由于方括号通配符,必须将对象括在大括号中。
find signals {s[1]}
•查找信号s1、s2或s3
find signals {s[123]}
•找到由值1索引的信号s的元素。请注意,find命令使用括号(()),而不是方括号([])来指定子元素索引。
find signals s(1)
•查找名为data的4位数组。注意,由于数组切片规范中的空格,必须使用大括号({})。
find signals {/top/data(3 downto 0)}
•请注意,当指定包含扩展标识符的对象作为名称的最后一部分时,在结束“\”之后和结束“}”之前必须有空格。
find signals {/top/\My extended id\ }
•如果/dut/core/pclk存在,则在transcript中打印消息“pclk does exist”。这通常在Tcl脚本中运行。
- if {[find signals /dut/core/pclk] != ""} {
- echo "pclk does exist"
•使用通配符根据实例的名称查找实例。将搜索结果发送到文本文件,该文件在单独的行上列出实例名称,包括层次结构路径。
- # Search for all instances with u1 in path
- set pattern_match "*u1*" ;
- # Get the list of instance paths
- set inst_list [find instances -r *] ;
- # Initialize an empty list to strip off the architecture names
- set ilist [list] ;
- foreach inst $inst_list {
- set ipath [lindex $inst 0]
- if {[string match $pattern_match $ipath]} {
- lappend ilist $ipath
- }
- }
- # At this point, ilist contains the list of instances only--
- # no architecture names
- #
- # Begin sorting list
- set ilist [lsort -dictionary $ilist]
- # Open a file to write out the list
- set fhandle [open "instancelist.txt" w]
- foreach inst $ilist {
- # Print instance path, one per line
- puts $fhandle $inst
- }
- # Close the file, done.
- close $fhandle ;
要在特定显示窗口中搜索HDL对象,请使用搜索命令或选择Edit > Find。