【Tessent Shell Users Manual】【Ch3】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_instancesget_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_connectionsmove_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 的,所以这一部分内容不应该跳过吧,,)

ICL and TCD Post-Synthesis Update

Updating ICL Attributes From the Design

Matching Rules for Port Names in Post-Synthesis Update

Controlling the Name Mapping


ICL Objects vs. Design Objects Introspection


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值