Tcl与pt_shell的使用 Design:有一定逻辑功能的电路描述,它可以是独立的,也可以包含有其他 的子设计。虽然严格地来说子设计只是设计的一部份,但是Synopsys也把它看作 是一个design. Cell:在Synopsys的术语中,cell和instance被认为是同样的概念,都是 design中例化的一个具体元件。 Port:指主要的input、output或者design的I/0管脚。 Pin:对应于设计中的cell的input、output或者I/0管脚。 Reference:cell或者instance参考的源设计的定义。 Net:是指信号的名字,即通过连接ports与pins或者pins与pins而把一 个设计连接在一起的金属线的名字。 Clock:作为时钟源的port或者pin。 下面的例子是用VHDL语言描述的一个电路,包含了上面所说的各种对象: Figure3-1 §3.4.2在PrimeTime中使用对象 PrimeTime提供了一个命令来选中这些对象,或者更准确地说是建立一个这些 对象的collection,命令的形式为: get_objtype 其中objtype是这种对象的类型,可以使用“help get*”来查看。这个命令与 Design Compiler中的find命令有点类似。 值得注意的是,这个命令并不是返回被选中对象的列表,而是建立一个指向被 选中对象的collection。这种方法比在memory中保存一个庞大的列表要节省时间 和资源。要列举所选中的对象,可以用query_objects命令。通常可以把建立的 collection设置为变量,以方便使用,例如: set data_ports [get_ports D[*] query_objects $data_ports 另外,也可以用all_objtype命令来建立某种对象的collection,例如: all_clocks、all_inputs、all_outputs、all_instances、all_registers
Tcl 与 pt_shell 的使用 8 Design:有一定逻辑功能的电路描述,它可以是独立的,也可以包含有其他 的子设计。虽然严格地来说子设计只是设计的一部份,但是 Synopsys 也把它看作 是一个 design。 Cell:在 Synopsys 的术语中,cell 和 instance 被认为是同样的概念,都是 design 中例化的一个具体元件。 Port:指主要的 input、output 或者 design 的 I/O 管脚。 Pin:对应于设计中的 cell 的 input、output 或者 I/O 管脚。 Reference:cell 或者 instance 参考的源设计的定义。 Net:是指信号的名字,即通过连接 ports 与 pins 或者 pins 与 pins 而把一 个设计连接在一起的金属线的名字。 Clock:作为时钟源的 port 或者 pin。 下面的例子是用 VHDL 语言描述的一个电路,包含了上面所说的各种对象: Figure3-1 §3.4.2 在 PrimeTime 中使用对象 PrimeTime 提供了一个命令来选中这些对象,或者更准确地说是建立一个这些 对象的 collection,命令的形式为: get_objtype 其中 objtype 是这种对象的类型,可以使用“help get_*”来查看。这个命令与 Design Compiler 中的 find 命令有点类似。 值得注意的是,这个命令并不是返回被选中对象的列表,而是建立一个指向被 选中对象的 collection。这种方法比在 memory 中保存一个庞大的列表要节省时间 和资源。要列举所选中的对象,可以用 query_objects 命令。通常可以把建立的 collection 设置为变量,以方便使用,例如: set data_ports [get_ports D[*] ] query_objects $data_ports 另外,也可以用 all_objtype 命令来建立某种对象的 collection,例如: all_clocks、all_inputs、all_outputs、all_instances、all_registers
Tcl与pt_shell的使用 9 all_connected等。其中all_connected的作用是列出与某对象连接的所有pin、 port或者net,例如要得到所有连接到CLOCK的对象,可以: query_objects [all_connected [get_nets CLOCK]] §3.4.3针对collection的操作 1)foreach in collection 顾名思义,这个命令的作用是对一个collection中的所有的对象进行某种操 作,其形式为 foreach in_collection variable collection body 例如,要打印出端口总线Y OUTPUT的电容: foreach_in_collection outpin [get_ports Y_OUTPUT[*]] set maxcap [get_attribute Soutpin wire_capacitance_max] set pinnname [get_attribute Soutpin full_name] echo "Max capacitance of port Spinname is $maxcap" ?} 说明:①问号表示命令尚未结束,出现在引号,大括号和中括号里。 ②这个命令比较复杂,它的执行过程是这样的:执行get_ports命令得到 collection;依次定义三个新的变量:outpin、maxcap以及pinname:然后对于 collection中的每一项,依次执行echo命令。 foreach in collection命令是针对于collection的,对于一般的列表可以 使用Tcl中的标准命令foreach。 2)从collection中增加或删除对象 add to collection collection object remove_from collection collection object 其中的object表示要增加或者删除的对象,这两个命令将返回一个新的 collectione 3)collection的过滤
Tcl 与 pt_shell 的使用 9 all_connected 等。其中 all_connected 的作用是列出与某对象连接的所有 pin、 port 或者 net,例如要得到所有连接到 CLOCK 的对象,可以: query_objects [all_connected [get_nets CLOCK]] §3.4.3 针对 collection 的操作 1)foreach_in_collection 顾名思义,这个命令的作用是对一个 collection 中的所有的对象进行某种操 作,其形式为 foreach_in_collection variable collection { body } 例如,要打印出端口总线 Y_OUTPUT 的电容: foreach_in_collection outpin [get_ports Y_OUTPUT[*]] { ? set maxcap [get_attribute $outpin wire_capacitance_max] ? set pinnname [get_attribute $outpin full_name] ? echo "Max capacitance of port $pinname is $maxcap" ? } 说明:①问号表示命令尚未结束,出现在引号,大括号和中括号里。 ②这个命令比较复杂,它的执行过程是这样的:执行 get_ports 命令得到 collection;依次定义三个新的变量:outpin、maxcap 以及 pinname;然后对于 collection 中的每一项,依次执行 echo 命令。 foreach_in_collection 命令是针对于 collection 的,对于一般的列表可以 使用 Tcl 中的标准命令 foreach。 2)从 collection 中增加或删除对象 add_to_collection collection object remove_from_collection collection object 其中的 object 表示要增加或者删除的对象,这两个命令将返回一个新的 collection。 3)collection 的过滤
Tcl与pt_shell的使用 10 根据一定的条件对collection进行过滤,可以使用filter collection命 令,它将在collection中寻找符合条件的对象,并返回一个新的collection,如 果没有匹配的对象的话将返回空的字符串。也可以collection命令中使用-filter 参数。 fi1tr命令中的条件表达式可以使用以下的运算符:=,!=,>,<,>=,<=,= 例如,要列出名字是ND2,ND21,ND3,ND4p诸如此类的ce11s: query [get_cells *-hier -filter "ref name =ND*"] 说明:在使用PrimeTime时可以使用缩略的命令,这里就使用了query来代替 query_objects. §3.5属性 属性(arritubes)可以是PrimeTime预定义的,也可以是从综合软件如Design Compiler继承下来的(例如时钟周期、输入延迟、net的电容等),也可以是由用户 定义的。 与属性相关的命令有: list arritubes get_arritube report_arritube define user arritube set_user arritube remove_user arritube 利用这些命令可以很方便地了解设计,例如想知道AM2910设计中的最大电 压,可以: get_attribute [get_designs AM2910]voltage_max §3.6查看命令 与Unix相似,可以使用help或者man来查看命令的用法。例如查看与clock 相关的命令可以:
Tcl 与 pt_shell 的使用 10 根据一定的条件对 collection 进行过滤,可以使用 filter_collection 命 令,它将在 collection 中寻找符合条件的对象,并返回一个新的 collection,如 果没有匹配的对象的话将返回空的字符串。也可以 collection 命令中使用-filter 参数。 filter 命令中的条件表达式可以使用以下的运算符:==,!=,>,<,>=,<=,=~ 例如,要列出名字是 ND2,ND21,ND3,ND4p 诸如此类的 cells: query [get_cells * -hier -filter "ref_name =~ ND*"] 说明:在使用 PrimeTime 时可以使用缩略的命令,这里就使用了 query 来代替 query_objects。 §3.5 属性 属性(arritubes)可以是 PrimeTime 预定义的,也可以是从综合软件如 Design Compiler 继承下来的(例如时钟周期、输入延迟、net 的电容等),也可以是由用户 定义的。 与属性相关的命令有: list_arritubes get_arritube report_arritube define_user_arritube set_user_arritube remove_user_arritube 利用这些命令可以很方便地了解设计,例如想知道 AM2910 设计中的最大电 压,可以: get_attribute [get_designs AM2910] voltage_max §3.6 查看命令 与 Unix 相似,可以使用 help 或者 man 来查看命令的用法。例如查看与 clock 相关的命令可以:
Tcl与pt_shell的使用 1 help *clock 查看命令的参数可以用如下的命令: help -verbose 其他的命令这里就不再赘述了,在后面的章节中使用到时再一一作介绍
Tcl 与 pt_shell 的使用 11 help *clock 查看命令的参数可以用如下的命令: help -verbose 其他的命令这里就不再赘述了,在后面的章节中使用到时再一一作介绍