Design Introspection and Editing
Tessent Shell 提供了一系列用于检查(examining/introspecting)和编辑design的命令。
Design Introspection
Tessent Shell 的 Introspection 命令用于检查设计数据模型中的设计对象。通过这些命令可以访问工具内部的数据结构,可以使你灵活的使用Tcl脚本,并把所有的计算密集型过程放在工具的后台执行。
或者说是对设计数据进行检索,然后使用 Tcl 脚本使定制的设计流程自动化
这些命令作用于对象规范(object specifications),返回值是集合(collections)
【简单来说,Design Introspection 就是获取设计的一些信息,对设计进行编辑等。】
Object Specification Format
Object Specification 列出了特定命令所作用的设计对象(如module、pins、nets等)。
Object Specification 可以是对象的名称、Tcl中的list的名称或者是集合(collection)的名称。
对于用唯一ID的设计对象,如instances,IDs 也可以作为对象名称。
add_schematic_objects命令的几种有效的 Object Specification 的如下所示:

所有作用于用户指定对象的 Tessent Shell 命令都可以将 Object Specification 作为参数。
Collections
Collections 是对Tcl的一个拓展,专门用于Tessent Shell,Tcl本身的命令(如foreach、puts)等无法识别collections。
collection 表示的是一组设计对象。(设计对象的数量可以是0)
Design Introspection 相关的命令会返回设计对象的 collections。对象保存在工具内部的数据结构中,工具返回 string handle 到 collection中。string handle 由 @ 和数字 ID 构成,例如@1。
换句话说,完整数据仍然是保留在工具内部的数据结构中,collections 中的内容类似一个指针。这样 Tcl 接口不会因数据量太大而过载。
在 tessent shell 中直接使用 Design Introspection 相关命令会显示 collection 中前 50 个元素的名称(即设计对象的名称),因为名称比collections 的 ID 更加有用。但是,在非交互模式下(例如执行dofile)名称是不会显示的。

只有在 Termial 直接使用 Design Introspection 命令的时候才会显示设计对象的命令,其他情况下读取到的都是 string handle。

如果想要获取 collection 中的设计对象的一些具体信息,就需要配合管理 collection 的其他命令,如下所示:

使用get_instances和get_name_list命令返回的内容就是对象的 collections,如下所示:

在该示例中,第一条命令返回了名称的 collection。对象保存在工具内部的数据结构中,工具返回 string handle 到 collection 中。这个时候,puts 命令并不会输出内容。
下面的这个示例中,get_instances 命令创建的 collection 被保存在变量 instCollection 中(这意味着 collection 被引用)。

当你unset变量instCollection、给变量 instCollection 赋新值或者是Tcl变量引用的集合超范围的时候,Tessent Shell 就会删除该collection。
在下面这种情况中,get_pins 命令创建的 collection 被传递给 get_attribute_value_list 命令。这个 collection 也被引用,但是 Tessent shell 会在get_attribute_value_list返回值的时候删除该collection。

此外,collection可以引用不存在的对象(使用编辑命令(如delete_pins)删除的对象)。对象被删除之后,内部属性“is_valid”会被设置为false。所有将collection指针作为输入的命令都会自动忽略属性“is_valid”为false的对象。
Collections的持续时间
当Collections被保存在变量中或者是别传递到命令的时候,collection被引用。当collection被不再被引用的时候,工具会自动将其删除。
不能对collection使用Tcl list之外的其他Tcl自身的命令(如foreach等),因为这些命令不会引用collection。
Collections内容的Transcript
get_name_list命令可以返回collection中名称的列表,配合puts等命令就可以将其内容输出到日志文件中。
Tessent Shell提供了一些命令对 collection 进行创建、管理和查询,部分命令如下表所示:

get_* 这一类命令返回的是 collection,不是使用 TCL 的命令对其进行操作,但是 ger_*_list 返回的就是普通的 list,这个时候是可以使用标准的 TCL 命令对其进行操作的。
Syntax
常用的 collection 相关的命令的语法
foreach_in_collection itr_var collection {body}
Examples
示例1:连接特定的 pins。
将属性 myAtt 为 True 的 pins 连接到与其同名的 net 上。
foreach_in_collection pin [get_pins -filter “myAtt”] {
set leaf [lindex [get_attribute_value_list $pin -name leaf_name] 0]
set parent [lindex [get_attribute_value_list $pin -name parent_instance] 0]
if {[sizeof_collection [get_nets ${parent}/${leaf} -silent]] = 0} {
create_net ${parent}/${leaf}
}
create_connections $pin ${parent}/${leaf}
}
-filter选项执行的速度比较慢,一种更块的方法如下所示:
foreach_in_collection pin [get_pins] {
if {[get_attribute_value_list $pin -name myAtt]} {
set leaf [lindex [get_attribute_value_list $pin -name leaf_name] 0]
set parent [lindex [get_attribute_value_list $pin -name parent_instance] 0]
if {[sizeof_collection [get_nets ${parent}/${leaf} -silent]] = 0} {
create_net ${parent}/${leaf}
}
create_connections $pin ${parent}/${leaf}
}
}
示例 2 : 数量统计
sizeof_collection 可以统计 collections 中的 objects 的数量。
> puts [sizeof_collection [get_instances -filter {type == “cell”}]
56781
Design Introspection Example
Design introspection 可以用于展示感兴趣的设计数据(通过procedure实现)、创建和设置属性、创建和处理collection、生成定制的报告等。

基于图2-1的一些Design Introspection的示例如下:
1. 创建procedure来展示FF的扇出
创建一个名为 show_fanouts 的 procedure 来返回特定FF的扇出。
proc show_fanouts {flop} {
set ff_fanout [get_fanouts $flop/Q]
puts "$flop/Q is connected to: [get_name_list $ff_fanout]"
}
show_fanouts 的执行示例如下:

2. 打印输入端口的数量
输出名称以“mod”为开头模块的输入端口的数量。

3. 创建属性和操作collection
基于下图的设计,给出了一个创建和设置用户自定义属性、创建和操作collection的完整过程。

① 为设计对象 instance 新建 color 属性

② 为每个 instance 设置正确的 color 属性

③ 为相同颜色的instance 创建 collections

④ 对collection进行操作并生成其他的collection

4. 输出collection的属性值
接着示例3,使用下图所示的命令输出collection中AND逻辑门的颜色。

示例3中,新建属性的另一种方法如下:

这样一来可以使用布尔值来进行筛选,如下所示:

5. 改变 collection 的属性
将DFFs的颜色属性更改为绿色。

6. 删除collection中重复的对象

7. 生成定制的报告
生成一个 leaf name 以u开头的instance的collection,然后每行输出10个 instance 名称。

Design Introspection Command Summary
Design Introspection的命令包括get_命令和各种用于操作属性的命令。
Design Introspection的命令如下:

Attribute Introspection的命令如下:

Bundle Objects Introspection
(先跳过,如果后面用得到再回头看)
Design Editing
Tessent Shell 的 Design Editing 命令可以在工具读入RTL或门级网表之后对设计进行修改。(Tessent Shell Flow支持各种硬件描述语言,但也有一定的限制,具体内容在reference manual 中。)
Design Editing 命令可以对设计的模块、实例、线网、端口、引脚进行操作。(交互式或者Tcl脚本均可)
Design Editing 命令和collection、Introspection命令以及Tcl本身的命令一起使用,可以使很多任务自动化。
根据命令的功能( create, modify, or remove elements …)进行分类,一些常见的 Design Editing 命令如下所示:

Design Editing Command Summary
Design Editing 命令能够作用于模块、连接关系(connections)、实例、线网、引脚、端口。一些常用的编辑命令如下所示:

Editing Complex Signals
(skip)
Design Editing Examples
在 Tcl 脚本环境中,对设计进行修改( create, modify, or remove elements )的方法有很多,以下图的电路为例,给出使用 Tessent
Shell 编辑设计的示例。

1. 创建新的模块
以图 3-3 中的模块C (modc)为例,说明如何创建一个独立的模块。

(如果没有读入单元库,这个创建设计的操作可以完成吗?)
2. 模块(Module)替换
把实例 u5 的模块定义从 modd 替换为 modc。

3. Intercepting a Connection
通过插入一个 inverter 更改现有的连接关系。

4. 为设计添加输入输出的Pads



(Pads的概念还不是很清晰,不过可以先学习脚本写法和工具命令)
5. Non-Unique Design Scopes
在对非唯一的设计空间(例如,同一个模块有多个实例等),这个时候要多加小心。在使用delete_connections、move_connections命令时,只会对每个module执行一次相应的操作。
(后面遇到再补充吧)
Simulation Contexts
Tessent Shell 提供simulation context 来帮助进行设计分析和 introspection 。
使用这些 contexts 创建 “simulation scratch pads”,可以快速分析设计的特定部分的 good-machine。
Simulation Context Overview
Tessent Shell 提供命令用于创建和管理 simulation context。在特定的额用户自定义仿真 context 中,你可以使用这些命令对特定的 gate_pins 施加激励、运行特定周期的仿真,然后对 gate_pins 的仿真值进行检查(introspection)。
-
管理 Simulation Context 的命令
下面这些命令用于创建或者管理用于自定义的仿真context,或者是使用预定义的仿真 context 。

-
Simulation Context 中管理激励(stimulus)和仿真的命令
在 Simulation Context 中使用下列命令来管理 stimulus (仿真的是施加和时钟)和运行有限的仿真。

-
Simulation Context 中用于 Introspection 和分析的命令

Introspection and Analysis Using Simulation Contexts
Simulation contexts 可以用于进行各种类型的 design analysis and introspection。
四种预定义的 Simulation Context 为:stable_after_setup, stable_load_unload, stable_shift, and stable_capture
在设定好 simulation context 之后,可以对 gate_pins 的仿真值进行 introspect 。例如,trace_flat_model命令可以在当前 simulation context 中基于特定的值进行设计追踪(design tracing)。
需要注意的是,本章提及的所有技术的使用,都需要满足如下条件:
(1)Tessent Shell 的系统模式为 analysis;
(2)flattened design,并且已经读入 test procedure file 。这样, 在设定对应的 simulation context 之后,setup, shift, capture, and load_unload 的 procedures 中指定的值就会被读入设计。
示例:
如果你想在shift procedure 中基于特定的值对设计进行追钟,可以使用 set_current_simulation_context stable_shift 命令。如下图所示,使用该命令之后,gate_pins 的值会在工具的图形化界面中展示 (Tessent Visualizer Flat Schematic)。

在该示例中,只有 sen 端口是加了特定的值。;
除了在图形化界面查看之外,还可以使用下面的方法来获取 gate_pins 的仿真值。



(这部分内容挺有用的, 后面debug的时候因该会用的到。)
Automatic Design Mapping
逻辑综合可能会导致设计中的端口(port)的名称和footprint发生变化。
(DFT中插入的MemoryBIST、LBIST、OCC等内容是需要 synthesis 的,所以这一部分内容不应该跳过吧,,)
1841

被折叠的 条评论
为什么被折叠?



