数字ic后端设计从入门到精通2(含fusion compiler, tcl教学)
上篇回顾
上一篇文章需要讨论了net,pin的基础用法,让我们来看一下高级一点的用法
instance
current_instance
current_instance
是 Synopsys 工具(如 Fusion Compiler 或 Design Compiler)中用于在设计层次结构中导航的关键命令。它允许用户设置当前的工作实例(即设计中的某个子单元或模块),从而使得其他命令可以相对于该实例执行操作。
以下是对 current_instance
命令的详细说明和用法介绍:
1. 基本功能
-
作用:
- 设置当前工作实例(instance)。
- 定义命令执行的上下文(context),以便后续命令(如
get_cells
,get_nets
,report_timing
等)能够针对特定的实例范围运行。
-
与
current_design
的区别:current_design
:设置当前的设计(design)并自动将上下文重置到设计的顶层。current_instance
:仅设置当前实例,而不改变设计本身。
2. 语法
current_instance [instance]
- 参数:
instance
:- 指定要切换到的目标实例路径。
- 如果未指定
instance
参数,则返回到当前设计的顶层(top-level)。 - 支持多种格式的路径表达方式(见下文)。
3. 参数详解
(1) 不指定参数
- 效果:
- 返回到当前设计的顶层(top-level)。
- 示例:
current_instance
- 输出可能为:
Current instance is the top-level of block 'TOP.design'.
- 输出可能为:
(2) 使用 "."
- 效果:
- 保持当前实例不变。
- 示例:
current_instance .
- 当前实例不会发生变化。
(3) 使用 ".."
- 效果:
- 将上下文向上移动一级(类似于 UNIX 中的
cd ..
)。
- 将上下文向上移动一级(类似于 UNIX 中的
- 示例:
current_instance ..
- 如果当前实例是
TOP/U1/U2
,则切换到TOP/U1
。
- 如果当前实例是
(4) 使用具体实例名称
- 效果:
- 切换到指定的子单元实例。
- 示例:
current_instance U1
- 如果当前设计是
TOP
,则切换到TOP/U1
。
- 如果当前设计是
(5) 多级路径
- 效果:
- 可以通过使用斜杠
/
遍历多级层次结构。
- 可以通过使用斜杠
- 示例:
current_instance U1/U2
- 如果当前设计是
TOP
,则切换到TOP/U1/U2
。
- 如果当前设计是
(6) 使用绝对路径
- 效果:
- 路径以
/
开头时,会同时设置当前设计和实例。
- 路径以
- 示例:
current_instance /TOP/U1
- 将当前设计设置为
TOP
,并将实例切换到TOP/U1
。
- 将当前设计设置为
(7) 使用相对路径
- 效果:
- 结合
".."
和具体实例名称,可以在当前上下文中灵活导航。
- 结合
- 示例:
current_instance "../../U3"
- 如果当前实例是
TOP/U1/U2
,则切换到TOP/U3
。
- 如果当前实例是
4. 示例场景
(1) 查看当前实例
current_instance
- 输出:
Current instance is the top-level of block 'TOP.design'.
(2) 切换到子单元
current_instance U1
- 输出:
U1
(3) 返回到上一级
current_instance ..
- 输出:
Current instance is the top-level of block 'TOP.design'.
(4) 遍历多级层次
current_instance U1/U2
- 输出:
U1/U2
(5) 使用绝对路径
current_instance /TOP/U1
- 输出:
U1
(6) 返回到顶层
current_instance /
- 输出:
Current instance is the top-level of block 'TOP.design'.
(7) 查询所有实例
结合 all_instances
查询当前层级的所有实例:
query_objects [all_instances]
- 输出:
{"U1", "U2", "U3", "U4"}
5. 注意事项
-
实例路径的正确性:
- 确保指定的实例路径存在。如果路径错误,工具会报错:
Error: Nothing matched for instance (SEL-005)
- 确保指定的实例路径存在。如果路径错误,工具会报错:
-
设计加载状态:
- 确保设计已正确加载(通过
link
和report_design
检查)。
- 确保设计已正确加载(通过
-
区分大小写:
- 实例名称通常是区分大小写的,请确保拼写正确。
-
多线程环境:
- 在多线程环境中,不同线程可能会有不同的
current_instance
上下文,需注意隔离。
- 在多线程环境中,不同线程可能会有不同的
6. 总结
current_instance
是一个强大的命令,用于在设计层次结构中导航。以下是常用的用法总结:
-
返回到顶层:
current_instance
-
切换到子单元:
current_instance U1
-
返回到上一级:
current_instance ..
-
遍历多级层次:
current_instance U1/U2
-
使用绝对路径:
current_instance /TOP/U1
redirect
要在 Synopsys 工具(如 Fusion Compiler 或 Design Compiler)中将某个命令的输出结果保存到 .txt
文件中,可以使用 redirect
命令。以下是完整的命令和步骤。
完整命令
假设你要对 get_nets
命令的输出结果进行重定向,并保存到 nets_output.txt
文件中:
redirect /home/nets_output.txt {get_nets}
解释
-
redirect
:- 这是 Synopsys 提供的一个专门用于重定向输出的命令。
- 它会将指定命令的输出保存到文件中。
-
/home/nets_output.txt
:- 输出文件的路径和名称。
- 如果文件已存在,默认会被覆盖。
- 如果目录不存在,请先创建它:
mkdir -p /home/result
-
{get_nets}
:- 要执行的命令及其输出将被重定向。
{}
用于包裹命令,确保复杂命令能够正确解析。
追加模式(可选)
如果你希望将输出追加到现有文件中,而不是覆盖文件内容,可以使用 -append
选项:
redirect -append /home/result/nets_output.txt {get_nets}
验证输出
-
执行上述命令后,检查文件是否生成:
ls /home/result/nets_output.txt
-
查看文件内容:
cat /home/result/nets_output.txt
注意事项
-
目录权限:
- 确保
/home/result
目录存在,并且当前用户对该目录有写权限。 - 如果没有权限,可以尝试以下命令更改权限:
chmod 755 /home/result
- 确保
-
路径格式:
- 使用绝对路径(如
/home/result/nets_output.txt
)以避免路径问题。 - 如果使用相对路径,请确保当前工作目录
- 使用绝对路径(如
reference
Reference(引用)
Reference 通常指的是对库单元或模块的引用。它代表了一个特定类型的单元或模块定义,该定义存在于库中。例如,在标准单元库中,AND2X1
可能是一个逻辑门的定义,这个定义可以被多次引用以创建多个实例。
-
特点:
- 唯一性:每个参考(Reference)通常是唯一的,表示一种特定类型的设计单元。
- 复用性:一个参考可以在设计中被多次使用,每次使用都会创建一个新的实例。
- 定义性:它包含了关于单元的功能、时序模型等信息,但并不包含具体的位置或连接信息。
-
示例:
如果你有一个名为AND2X1
的标准单元库中的逻辑门,那么AND2X1
就是这个逻辑门的 reference。无论你在设计中放置了多少个这样的逻辑门,它们都引用同一个AND2X1
reference。
Instance(实例)
Instance 是基于某个 reference 创建的具体对象。它是 reference 在设计中的具体实现,具有明确的位置、连接和其他物理属性。换句话说,instance 是 reference 在设计中的具体化。
-
特点:
- 多样性:同一 reference 可以有多个 instance,每个 instance 都可能有不同的位置、名称、参数设置等。
- 具体性:instance 包含了具体的物理布局信息,如坐标位置、连线关系等。
- 命名:每个 instance 都有一个唯一的名称,用于区分设计中的其他 instances。
-
示例:
假设你在设计中放置了三个AND2X1
的逻辑门,这三个逻辑门将分别成为独立的 instances,比如u1
,u2
,u3
。尽管它们都是基于同一个AND2X1
reference 创建的,但在设计中它们是独立的对象,可能位于不同的位置,并且与不同的信号相连。
总结
- Reference:是对库中某种类型单元的定义或模板,它定义了单元的功能、特性等信息。
- Instance:是基于 reference 创建的具体对象,具有明确的位置、连接等物理属性。
在实际操作中,当你查看设计时,report_reference
命令会显示所有使用的 references(即设计中引用的不同单元),而 current_instance
则允许你在设计的层次结构中导航,聚焦于特定的 instance 上进行更详细的操作或检查。理解这两者之间的关系有助于更好地管理和优化你的设计。
如何检查并确认设计是否已正确加载所有部分
1. 使用 report_reference
查找未解析的引用
report_reference
- 这个命令会列出所有单元及其状态。查找是否存在任何标记为
unresolved
的单元。
2. 正确使用 check_design
为了确保全面检查设计,可以尝试如下命令:
check_design -checks {all}
或者更具体地:
check_design -checks {unresolved_references unconnected_ports}
这将帮助识别设计中存在的潜在问题,如未解析的引用或未连接的端口。
3. 验证 current_instance
的路径
既然 link
已经确认设计已加载,接下来需要确保你尝试切换到的实例路径是正确的。基于你之前的描述,如果 reuse_wrapper_dummy_tile_t
存在于设计中,你应该使用其完整路径进行切换:
current_instance reuse_wrapper/reuse_wrapper_dummy_tile_t
确保路径是从顶层设计开始的完整路径。
-
link
命令的输出:- 输出表明设计已经链接(“Block ‘TileBuilderIntFX_Apr-20-2025_37.nlib:reuse_wrapper.design’ is already linked.”),这意味着
link
命令确认设计已经被正确加载。 - 但是,这并不直接说明设计中的所有实例都能被正确解析。它仅表示库和设计之间的基本连接没有问题。
- 输出表明设计已经链接(“Block ‘TileBuilderIntFX_Apr-20-2025_37.nlib:reuse_wrapper.design’ is already linked.”),这意味着
-
report_reference
的输出:- 你提到的输出实际上是库中不同单元的信息,而不是
report_reference
命令的结果。这些信息显示了当前设计引用的不同单元及其面积等属性。 - 要检查未解析的引用,应该使用
report_reference
命令,并关注是否有任何标记为unresolved
的条目。
- 你提到的输出实际上是库中不同单元的信息,而不是
-
check_design
命令的错误:- 错误提示
-checks
参数是必需的。这是因为check_design
需要指定具体要执行的检查类型。例如,你可以通过以下方式运行check_design
来检查特定方面的问题:check_design -checks {all}
- 或者针对特定类型的检查,如未连接端口、未解析的引用等:
check_design -checks {unresolved_references unconnected_ports}
- 错误提示
pitch
在 Fusion Compiler 的布局布线领域,pitch
是一个非常重要的参数,它用于定义设计元素之间的间距。这个概念贯穿于多个方面,包括标准单元的排列、电源网格的设计、以及信号线的布线等。理解 pitch
的含义及其在不同场景下的应用对于优化设计性能和确保物理实现的成功至关重要。
Pitch 的基本定义
- Pitch:指的是两个相邻结构(例如金属线条、晶体管栅极、标准单元或电源条带)中心点之间的距离。它可以是水平方向上的间距(x_pitch),也可以是垂直方向上的间距(y_pitch)。Pitch 决定了这些结构在物理层面上的密度和分布方式。
在布局布线中的具体应用
1. 标准单元布局
- 在标准单元布局中,
pitch
可以指一行或一列标准单元之间的距离。这直接影响到芯片的面积利用率和布线复杂度。 - 通过调整
pitch
,设计师可以优化单元之间的间距,确保有足够的空间进行信号线的布线,同时尽量减少芯片的整体面积。
2. 电源网格设计
- 在电源网格设计中,
pitch
指的是电源/地线之间的间距。合理的电源网格pitch
对于保证电源分配网络(PDN)的质量至关重要。 - 例如,在创建电源环 (
create_pg_ring
) 或电源网 (create_pg_mesh
) 时,pitch
参数决定了电源条带或过孔之间的距离,从而影响电源传输效率和电压降(IR Drop)。
3. 自动布线
- 在自动布线过程中,
pitch
可能涉及到设定导线之间的最小间隔,以满足制造工艺的要求,并防止短路或其他电气问题。 - 调整
pitch
值可以帮助工具更好地处理拥挤区域,提高布线成功率。
总结
在 Fusion Compiler 的布局布线流程中,pitch
参数主要用于控制设计元素之间的间距,无论是标准单元、电源网格还是信号线。合理设置 pitch
值可以帮助优化设计的性能指标,如面积利用率、电源完整性、布线成功率等。理解并正确使用 pitch
对于实现高效且可靠的物理设计至关重要。