数字ic后端设计从入门到精通(含fusion compiler, tcl教学)
pin
在集成电路设计中,特别是在使用工具如 Fusion Compiler 时,理解“引脚”(pin)的基础知识对于设计、优化和验证电路至关重要。以下是从 Fusion Compiler 的角度出发,关于引脚(pin)的基础知识介绍,包括其定义、类型、属性以及如何在 Fusion Compiler 中操作和查询引脚。
引脚(Pin)基础知识
1. 什么是引脚?
- 引脚是电路元件或模块的输入输出接口,用于与其他元件或模块进行信号传输。
- 在数字设计中,引脚可以连接到网络(nets),形成信号路径。
- 引脚可以是物理引脚(如芯片上的引脚)或逻辑引脚(如模块内部的连接点)。
2. 引脚的类型
- 输入引脚(Input Pin):接收来自其他元件或模块的信号。
- 输出引脚(Output Pin):向其他元件或模块发送信号。
- 双向引脚(Inout Pin):既可以作为输入也可以作为输出的引脚。
- 电源引脚(Power Pin):提供电源电压。
- 地引脚(Ground Pin):提供接地参考。
3. 引脚的主要属性
- 名称(Name):引脚的标识符。
- 方向(Direction):输入、输出、双向等。
- 连接的网络(Connected Nets):引脚连接到哪些网络。
- 电平标准(Electrical Standards):如 LVCMOS, LVTTL 等。
- 负载(Load):引脚的负载特性,影响信号完整性。
- 时序约束(Timing Constraints):如建立时间、保持时间等。
create pin
命令概述
- 命令名称:
create_pin - 功能:在一个或多个单元(cell)上创建引脚。
- 用途:用于定义单元的输入、输出或双向引脚。这些引脚可以后续用于连接网络(nets)以传递信号。
语法
collection create_pin [-design design] [-direction in | out | inout] pin_names
参数说明
-
[-design design]
- 类型:集合(collection)
- 含义:指定要在哪个设计中创建引脚。如果未指定,则默认在当前设计中创建。
- 示例:
create_pin -design my_design {data1 data2}
-
[-direction in | out | inout]
- 类型:可选参数
- 含义:指定引脚的方向。如果不指定,默认方向为
in(输入)。 - 选项:
in:输入引脚。out:输出引脚。inout:双向引脚。
- 示例:
create_pin -direction out {output1 output2}
-
pin_names
- 类型:列表(list)
- 含义:指定要创建的引脚名称。每个引脚名称必须是唯一的。
- 示例:
create_pin {input1 input2}
详细描述
-
作用:
- 在当前设计(或通过
-design指定的设计)中的单元上创建引脚。 - 创建的引脚是标量引脚(单比特),即每次只能创建一个单独的引脚。
- 在当前设计(或通过
-
限制:
- 如果指定的引脚名称已经存在于目标单元上,则会显示错误消息。
- 创建的引脚不会自动连接到任何网络(net)。需要使用
connect_net命令手动建立连接。
-
重要提示:
- 引脚的方向决定了它在电路中的作用(输入、输出或双向)。
- 引脚的命名必须唯一,避免冲突。
示例用法
示例 1:在单元上创建输入和输出引脚
# 在单元 u14 上创建输入引脚 data1
create_pin -direction in u14/data1# 在单元 u14 上创建输出引脚 data2
create_pin -direction out u14/data2
- 结果:
- 创建了一个名为
u14/data1的输入引脚。 - 创建了一个名为
u14/data2的输出引脚。
- 创建了一个名为
示例 2:在嵌套单元上创建多个输入引脚
# 在嵌套单元 u23/u8/u1 上创建输入引脚 xg1 和 xg2
create_pin {u23/u8/u1/xg1 u23/u8/u1/xg2}
- 结果:
- 创建了两个输入引脚
u23/u8/u1/xg1和u23/u8/u1/xg2(默认方向为in)。
- 创建了两个输入引脚
示例 3:切换当前实例并创建引脚
# 切换到单元 u5/u7
current_instance u5/u7# 在单元 u5/u7 上创建输入引脚 usr1 和 usr2
create_pin -direction in {usr1 usr2}
- 结果:
- 创建了两个输入引脚
u5/u7/usr1和u5/u7/usr2。
- 创建了两个输入引脚
注意事项
-
引脚的唯一性:
- 每个单元上的引脚名称必须唯一。如果尝试创建一个已经存在的引脚,工具会报错。
-
引脚的连接:
- 使用
create_pin创建的引脚默认未连接到任何网络。需要使用connect_net命令将引脚连接到特定的网络。
- 使用
-
设计范围:
- 如果未指定
-design参数,命令将在当前设计中执行。 - 如果指定了
-design参数,则命令将在指定的设计中执行。
- 如果未指定
-
引脚方向:
- 默认方向为
in(输入)。如果需要其他方向,必须明确指定-direction参数。
- 默认方向为
总结
create_pin命令的核心功能是在设计中的单元上创建引脚,并指定其名称和方向。- 主要用途包括定义单元的输入、输出或双向接口。
- 最佳实践:
- 确保引脚名称唯一。
- 创建引脚后,使用
connect_net命令建立连接。 - 在低功耗或多电源域设计中,合理规划引脚的方向和位置。
get_pins
get_pins 是 Synopsys Fusion Compiler 中的一个命令,用于从网表中创建一个引脚(pins)的集合。这个命令非常强大且灵活,允许用户通过多种方式选择和过滤引脚,以满足不同的设计需求。以下是对其主要参数和用法的详细解释:
主要用途
- 获取引脚集合:
get_pins命令可以帮助你从设计中提取特定的一组引脚,这些引脚可以基于名称、连接的对象、物理位置等条件进行筛选。 - 支持多种查询方式:你可以通过指定模式、对象、点、区域等方式来获取所需的引脚集合。
参数详解
-
基本语法
collection get_pins [options] [patterns | -of_objects objects | -at point | -within region | -touching region | -intersect region]这里的
collection是返回的引脚集合,而options和后面的参数用于定义如何筛选这些引脚。 -
常用选项
-hierarchical:层次化搜索引脚,适用于需要跨层级查找的情况。-filter expression:使用表达式进一步过滤结果集中的引脚,比如根据引脚属性。-regexp:将模式视为正则表达式而非简单的通配符模式。-nocase:忽略大小写进行匹配。-exact:精确匹配,禁用简单模式匹配。-leaf:仅包含叶子单元上的引脚,通常与-of_objects一起使用。-physical_context:只搜索物理引脚。-design design_name:在指定的设计中查找引脚。
-
筛选引脚的方式
- patterns:基于名称模式匹配引脚。可以使用通配符
*和?或者正则表达式(如果启用了-regexp)。 - -of_objects objects:获取与指定对象(如单元、网络等)相连的所有引脚。
- -at point:获取位于指定坐标
{x y}上的所有引脚。 - -within region:获取完全位于指定矩形或多边形区域内的所有引脚。
- -touching region:获取与指定区域接触的所有引脚。
- -intersect region:获取与指定区域相交的所有引脚。
- patterns:基于名称模式匹配引脚。可以使用通配符
-
其他选项
-expect exact_count:期望找到的确切数量的引脚,如果不是该数量则报错。-expect_at_least minimum_count:期望找到的最少数量的引脚,如果不是至少该数量则报错。-expect_each_pattern_matches:确保每个模式都至少匹配到一个对象,否则报错。-hsc separator_character:指定分隔符,默认为/。
示例
-
按名称模式获取引脚
set pins [get_pins "u1/*"]获取名为
u1的模块下的所有引脚。 -
基于对象获取引脚
set net_pins [get_pins -of_objects [get_nets "net_name"]]获取与名为
net_name的网络相连的所有引脚。 -
基于位置获取引脚
set pin_at_point [get_pins -at {100 200}]获取位于坐标
(100, 200)上的所有引脚。 -
使用过滤器
set filtered_pins [get_pins -filter "DIRECTION==IN" -of_objects [get_cells "cell_name"]]获取名为
cell_name的单元中方向为输入的所有引脚。
通过这些例子可以看出,get_pins 命令提供了丰富的选项来帮助设计师高效地管理和操作设计中的引脚,是后端设计流程中不可或缺的一部分。
核心功能
-
创建引脚集合:
get_pins命令的主要功能是从当前设计中提取一组满足条件的引脚。- 返回值是一个 集合(collection),可以包含零个或多个引脚。
-
支持多种筛选方式:
- 通过名称模式、对象连接关系、物理位置、区域等条件来筛选引脚。
- 可以使用过滤器表达式进一步缩小结果范围。
-
自动链接设计:
- 如果没有找到匹配的对象,并且当前设计未链接(linked),工具会尝试自动链接设计。
-
支持总线(bus)引脚:
- 对于具有总线结构的引脚,可以通过通配符、正则表达式或下标模式来匹配多个引脚。
-
嵌套使用:
get_pins的结果可以直接作为其他命令的输入,也可以赋值给变量以便后续操作。
关键概念
1. 引脚的层次化搜索
- 默认行为:
get_pins默认只在当前实例的同一层级上搜索引脚。 - 跨层级搜索:
- 使用
-hierarchical参数可以跨越层次结构搜索引脚。 - 使用
-leaf参数可以仅返回叶子单元上的引脚,同时跨越层次边界。
- 使用
2. 基于对象的引脚筛选
- 当使用
-of_objects参数时,get_pins会查找与指定对象(如单元或网络)相连的所有引脚。 - 两种变体:
- 默认行为:仅返回与对象在同一层级上的引脚。
- 结合
-leaf:仅返回与叶子单元相连的引脚。
3. 总线引脚的匹配
- 通配符匹配:
- 示例:
u1/A[*]匹配总线A[0],A[1], 等等。
- 示例:
- 下标模式:
- 总线下标模式:
u1/A[0:7:2]表示从索引 0 到 7,步长为 2 的引脚(即A[0],A[2],A[4],A[6])。 - 名称扩展下标模式:
u1/B(0:4:2)C(1:2,5)表示生成所有符合规则的引脚名称(如B0C1,B2C5等)。
- 总线下标模式:
4. 正则表达式匹配
- 使用
-regexp参数可以将模式视为正则表达式。 - 正则表达式的匹配是锚定的,意味着它必须完全匹配引脚名称的开头和结尾。
- 示例:
这将匹配所有以get_pins -regexp {o.*_reg/CP}o开头并以_reg/CP结尾的引脚。
5. 过滤器表达式
- 使用
-filter参数可以根据引脚的属性进行过滤。 - 示例:
这将返回所有方向为输入的引脚。get_pins -filter "DIRECTION == IN"
常见用例
1. 按名称模式获取引脚
get_pins o*/CP
- 获取所有以
o开头且后缀为/CP的引脚。 - 输出示例:
{"o_reg1/CP", "o_reg2/CP", "o_reg3/CP"}
2. 基于总线下标获取引脚
get_pins {U1/A[0:1,3:7:2]}
- 获取总线
A的特定索引引脚。 - 输出示例:
{"U1/A[0]", "U1/A[1]", "U1/A[3]", "U1/A[5]", "U1/A[7]"}
3. 基于名称扩展获取引脚
get_pins U1/B(0:4:2)C(1:2,5)
- 获取名称符合扩展规则的所有引脚。
- 输出示例:
{"U1/B0C1", "U1/B0C2", "U1/B0C5", ...}
4. 基于对象获取引脚
set csel [get_cells o_reg1]
query_objects [get_pins -of_objects $csel]
- 获取
o_reg1单元的所有引脚。 - 输出示例:
{"o_reg1/D", "o_reg1/CP", "o_reg1/CD", "o_reg1/Q", "o_reg1/QN"}
5. 区分局部引脚和叶子引脚
get_pins -of_objects [get_nets NET1]
get_pins -leaf -of_objects [get_nets NET1]
- 第一条命令返回
NET1的局部引脚。 - 第二条命令返回
NET1的叶子引脚(跨越层次边界)。
6. 创建时钟信号
create_clock -period 8 -name CLK [get_pins o_reg*/CP]
- 创建一个名为
CLK的时钟信号,周期为 8,作用于所有匹配o_reg*/CP的引脚。
注意事项
-
空结果处理:
- 如果没有找到匹配的引脚,命令返回空字符串。
- 可以使用
-quiet参数抑制警告信息。
-
引脚数量限制:
- 默认情况下,工具最多显示 100 个引脚。
- 可以通过设置
shell.common.collection_result_display_limit来调整显示数量。
-
特殊字符转义:
- 在使用总线下标模式时,
[]和()是 Tcl 的特殊字符,需要转义。例如:get_pins U1/A\[0:7\]
- 在使用总线下标模式时,
-
组合选项:
- 某些选项是互斥的,比如
patterns和-of_objects不能同时使用。 - 需要根据具体需求选择合适的参数组合。
- 某些选项是互斥的,比如
总结
get_pins 是一个灵活且功能强大的命令,适用于各种引脚筛选场景。通过掌握其基本语法、常用选项和实际用例,你可以高效地管理设计中的引脚集合,从而优化后端设计流程。如果还有其他问题或需要更深入的解释,请随时告诉我!
port和pin
在集成电路设计中,特别是在使用工具如 Fusion Compiler 时,port 和 pin 是两个相关但不同的概念。理解它们之间的关系对于有效地进行电路设计和优化至关重要。
Port(端口)
-
定义:
- 端口是模块或设计单元的输入、输出或双向接口。
- 它们用于定义模块与外部环境或其他模块之间的信号交互点。
-
用途:
- 端口通常在高层次的设计描述(如 Verilog 或 VHDL 文件)中定义,并作为模块接口的一部分。
- 端口可以是标量(单比特)或总线(多位)形式。
-
属性:
- 方向:输入(input)、输出(output)、双向(inout)。
- 类型:标量端口或总线端口。
- 名称:端口名称必须唯一且符合语言规范。
Pin(引脚)
-
定义:
- 引脚是物理或逻辑上的连接点,用于连接模块内部的信号到外部网络或其他模块。
- 在综合后或布局布线阶段,端口会映射为具体的引脚。
-
用途:
- 引脚用于表示模块内部逻辑单元之间的具体连接点。
- 在物理设计中,引脚还可能指代芯片封装上的实际物理引脚。
-
属性:
- 方向:输入、输出、双向。
- 连接的网络:每个引脚都会连接到一个网络(net),用于信号传输。
- 其他电气属性:驱动强度、负载等。
关系
- 端口与引脚的关系:
- 抽象与实现:端口是一个更高层次的概念,属于设计描述的一部分;而引脚则是端口的具体实现,在物理设计中有明确的位置和连接。
- 映射:在设计过程中,端口会被映射为引脚。例如,在综合阶段,HDL 中定义的端口将被转换为网表中的引脚。
- 对应性:通常,一个端口对应一个或多个引脚。对于简单的设计,这种对应是一对一的;但对于复杂的设计(如总线端口),一个端口可能对应多个引脚。
示例说明
假设有一个简单的模块 my_module:
module my_module (input wire clk, // 输入端口input wire reset_n, // 输入端口output reg [7:0] data_out // 输出端口(总线)
);// 模块内部逻辑...
endmodule
在这个例子中:
clk和reset_n是输入端口。data_out是一个8位宽的输出端口。
在综合和布局布线之后:
clk和reset_n将被映射为具体的输入引脚。data_out将被映射为8个独立的输出引脚(每个位一个引脚)。
使用 Fusion Compiler 创建端口和引脚
创建端口
使用 create_logic_port 命令创建端口:
# 创建输入端口
create_logic_port clk -direction in
create_logic_port reset_n -direction in# 创建输出端口
create_logic_port data_out -direction out
创建引脚
使用 create_pin 命令创建引脚:
# 在单元上创建输入引脚
create_pin -direction in {clk reset_n}# 在单元上创建输出引脚(假设数据总线宽度为8)。
create_pin -direction out {data_out[0] data_out[1] data_out[2] ... data_out[7]}
总结
- Port(端口):是模块对外的接口,用于定义模块与其他模块或外部环境之间的信号交换点。
- Pin(引脚):是端口的具体实现,代表了物理或逻辑上的连接点,用于信号的实际传递。
- 关系:端口在高层次设计中定义,经过综合和布局布线后映射为具体的引脚。
- fusion compiler: 由于该工具既能综合又能布线,所以同时存在上述两种命令
在 Synopsys Fusion Compiler 2019(简称 FC2019)中,查看引脚(pin)的宽度、面积等物理参数需要使用相关的查询命令和工具功能。以下是具体的步骤和方法:
1. 使用 get_attribute 命令
get_attribute 命令可以用来查询对象(如 pin、net、cell 等)的属性值。对于引脚(pin),可以通过以下方式获取其物理参数:
语法
get_attribute [get_pins <pin_name>] <attribute_name>
常见物理属性
-
宽度(Width):
- 引脚的宽度通常由金属层的宽度定义。
- 示例:
get_attribute [get_pins u1/A] WIDTH
-
面积(Area):
- 引脚的面积可能与其形状或占用的金属资源相关。
- 示例:
get_attribute [get_pins u1/A] AREA
-
位置(Location):
- 获取引脚的物理坐标(X 和 Y)。
- 示例:
get_attribute [get_pins u1/A] LOCATION
-
层(Layer):
- 查看引脚所在的具体金属层。
- 示例:
get_attribute [get_pins u1/A] LAYER
-
方向(Direction):
- 查看引脚的方向(输入、输出或双向)。
- 示例:
get_attribute [get_pins u1/A] DIRECTION
2. 使用 report_pin 命令
report_pin 是一个专门用于生成引脚相关信息的报告命令。它可以显示引脚的物理和逻辑信息。
语法
report_pin [-physical] [-verbose] <pin_name>
选项说明
-
-physical:- 显示引脚的物理属性(如宽度、层、位置等)。
- 示例:
report_pin -physical [get_pins u1/A]
-
-verbose:- 显示更详细的引脚信息。
- 示例:
report_pin -verbose [get_pins u1/A]
输出示例
运行上述命令后,工具会输出类似以下的信息:
Pin: u1/ADirection: inputLayer: METAL3Width: 0.12Height: 0.08Location: (100.5, 200.3)Area: 0.0096
3. 使用图形化界面(GUI)
如果您的设计已经加载到 Fusion Compiler 的 GUI 中,您可以通过图形化界面直接查看引脚的物理参数。
步骤
- 打开设计并进入布局视图(Layout View)。
- 在视图中选择目标引脚(可以通过搜索功能快速定位)。
- 右键单击引脚,选择“Properties”或“Attributes”。
- 在弹出的窗口中查看引脚的物理参数(如宽度、面积、层等)。
4. 使用 query_objects 命令
query_objects 命令可以用来显示对象的详细信息,包括引脚的物理参数。
语法
query_objects [get_pins <pin_name>]
示例
query_objects [get_pins u1/A]
输出示例
Object: PINName: u1/AType: INPUTLayer: METAL3Width: 0.12Height: 0.08Location: (100.5, 200.3)Area: 0.0096
5. 使用 report_timing 或 report_power 命令
虽然这些命令主要用于时序和功耗分析,但它们也可能间接提供引脚的相关信息。例如:
report_timing可能显示引脚的负载电容(Capacitance)。report_power可能显示引脚的动态功耗。
示例
report_timing -to [get_pins u1/A]
report_power -pin [get_pins u1/A]
6. 注意事项
-
确保设计已链接(Linked):
- 如果设计未链接,某些物理属性可能无法查询。使用以下命令检查或链接设计:
check_design link_design
- 如果设计未链接,某些物理属性可能无法查询。使用以下命令检查或链接设计:
-
单位系统:
- Fusion Compiler 默认使用库文件中的单位(如微米、皮法拉等)。确保您了解当前设计的单位设置。
-
权限限制:
- 某些高级属性可能需要特定的许可证或工具配置才能访问。
-
空结果处理:
- 如果引脚没有定义某些物理属性(如宽度或面积),命令可能会返回空值。
总结
在 Synopsys Fusion Compiler 2019 中,查看引脚的宽度、面积等物理参数可以通过多种方式实现,包括使用 get_attribute、report_pin、query_objects 等命令,或者通过图形化界面直接查看。根据具体需求选择合适的方法,并确保设计已正确链接和初始化。
net
在数字 IC 后端设计中,net 是另一个非常重要的概念。它是信号在电路中的传输路径,连接了不同引脚(pins)或单元(cells)。以下是对 net 的基础知识的详细讲解,涵盖定义、类型、属性以及在工具中的操作方法。
1. 什么是 Net?
- 定义:
Net是电路中的一条信号路径,用于连接多个引脚或单元。- 它表示一个逻辑信号在网络中的传播路径。
- 作用:
- 在逻辑上,
net定义了信号的流向。 - 在物理上,
net对应于实际的金属连线(wires)。
- 在逻辑上,
2. Net 的类型
根据功能和连接方式,net 可分为以下几种类型:
- 信号网(Signal Net):
- 用于传输普通信号(如数据、控制信号)。
- 示例:时钟信号(CLK)、数据信号(DATA)。
- 电源网(Power Net):
- 提供电源电压。
- 示例:VDD、VSS。
- 地网(Ground Net):
- 提供接地连接。
- 示例:GND。
- 时钟网(Clock Net):
- 专用于传输时钟信号。
- 示例:全局时钟网络。
3. Net 的属性
每个 net 都有一些关键属性,这些属性会影响信号完整性和时序性能:
- 电气属性:
- 负载电容(Capacitance):网络的总电容值。
- 电阻(Resistance):网络的总电阻值。
- 驱动能力(Drive Strength):网络的驱动能力。
- 物理属性:
- 布线层(Routing Layer):网络所在的金属层。
- 长度(Length):网络的总长度。
- 宽度(Width):金属线的宽度。
- 时序属性:
- 延时(Delay):信号在网络上的传输延迟。
- 扇出(Fanout):网络连接的负载数量。
- 其他属性:
- 是否为电源或地(Is Power/Ground):标记该网络是否为电源或地。
- 网络名称(Name):网络的唯一标识符。
4. Net 在工具中的操作
在后端设计工具(如 Synopsys Fusion Compiler)中,net 的操作包括创建、修改、删除和查询:
-
创建 Net:
create_net -name new_net_name -
修改 Net 属性:
set_attribute -name ROUTE_LAYER -value METAL3 [get_nets net_name] -
删除 Net:
remove_net [get_nets net_name] -
查询 Net:
get_nets "pattern" -
获取与 Net 相关的 Pin:
get_pins -of_objects [get_nets net_name]
get_nets
get_nets 是 Synopsys Fusion Compiler 中的一个重要命令,用于从设计的网表(netlist)中提取一组网络(nets)。它可以用来查询、筛选和操作设计中的信号网络。以下是对该命令的详细解释,包括其语法、选项和用法。
核心功能
-
创建网络集合:
get_nets命令的主要功能是从当前设计或指定设计中提取满足条件的网络。- 返回值是一个 集合(collection),可以包含零个或多个网络。
-
支持多种筛选方式:
- 通过名称模式、对象连接关系、物理上下文等条件来筛选网络。
- 可以使用过滤器表达式进一步缩小结果范围。
-
嵌套使用:
get_nets的结果可以直接作为其他命令的输入,也可以赋值给变量以便后续操作。
-
自动链接设计:
- 如果没有找到匹配的对象,并且当前设计未链接(linked),工具会尝试自动链接设计。
-
支持层次化搜索:
- 可以跨越层次结构搜索网络,或者仅返回特定层级的网络。
语法概述
get_nets [-options] patterns | -of_objects objects
-
patterns:
- 匹配网络名称的模式,支持通配符(
*和?)或正则表达式。 - 示例:
get_nets "data*",get_nets {clk\[0:7\]}。
- 匹配网络名称的模式,支持通配符(
-
-of_objects:
- 根据指定的对象(如引脚、单元、网络等)提取与其连接的网络。
- 示例:
get_nets -of_objects [get_pins u1/A]。
关键选项
1. 指定设计范围
-design design:- 指定要搜索的设计。如果不指定,则默认在当前设计中搜索。
- 示例:
get_nets -design top_module "data*"
2. 层次化搜索
-hierarchical:- 在当前实例的层次结构中搜索网络。
- 默认情况下,只匹配同一层级的网络名称。如果启用了
-physical_context,则按物理层次逐级搜索。 - 示例:
get_nets -hierarchical "muxsel"
3. 过滤器
-filter expression:- 使用表达式对网络进行过滤。
- 示例:
get_nets -filter "CAPACITANCE > 0.1"
4. 正则表达式匹配
-regexp:- 将模式视为正则表达式而不是简单的通配符。
- 示例:
get_nets -regexp {data_\d+}
5. 精确匹配
-exact:- 禁用通配符匹配,要求完全匹配网络名称。
- 示例:
get_nets -exact "data_bus"
6. 预期数量检查
-
-expect exact_count:- 指定期望返回的网络数量。如果实际数量不符,则抛出错误。
- 示例:
get_nets -expect 1 "clk"
-
-expect_at_least minimum_count:- 指定最少返回的网络数量。如果实际数量少于指定值,则抛出错误。
- 示例:
get_nets -expect_at_least 2 "data*"
7. 物理上下文
-physical_context:- 仅搜索物理网络(physical nets)。
- 示例:
get_nets -physical_context "power_net"
8. 边界类型
-boundary_type lower | upper | both:- 指定如何处理边界引脚的网络。需要与
-of_objects配合使用。 - 允许的值:
lower:返回层次内部的网络。upper:返回层次外部的网络。both:返回层次内外的网络。
- 示例:
get_nets -of_objects [get_pins u1/A] -boundary_type both
- 指定如何处理边界引脚的网络。需要与
9. 分段搜索
-segments:- 返回网络的所有全局分段(global segments)。
- 示例:
get_nets -segments "clk"
10. 屏蔽网络
-
-include_shielded:- 包含屏蔽网络(shielded nets)。
- 示例:
get_nets -of_objects [get_shapes shield] -include_shielded
-
-shielded_only:- 仅返回屏蔽网络。
- 示例:
get_nets -of_objects [get_shapes shield] -shielded_only
常见用例
1. 按名称模式获取网络
get_nets "data*"
- 获取所有以
data开头的网络。 - 输出示例:
{"data_bus", "data_in", "data_out"}
2. 基于对象获取网络
get_nets -of_objects [get_pins u1/A]
- 获取与引脚
u1/A连接的网络。 - 输出示例:
{"net1"}
3. 层次化搜索网络
get_nets -hierarchical "muxsel"
- 在层次结构中搜索名为
muxsel的网络。 - 输出示例:
{"u1/muxsel"}
4. 按属性过滤网络
get_nets -filter "CAPACITANCE > 0.1"
- 获取电容大于 0.1 的网络。
- 输出示例:
{"clk_net", "data_net"}
5. 获取物理网络
get_nets -physical_context "power_net"
- 获取名为
power_net的物理网络。
6. 获取屏蔽网络
get_nets -of_objects [get_shapes shield] -include_shielded
- 获取与屏蔽形状相关的网络。
注意事项
-
空结果处理:
- 如果没有找到匹配的网络,命令返回空字符串。
- 使用
-quiet参数可以抑制警告信息。
-
互斥选项:
- 某些选项是互斥的,例如
-regexp和-exact不能同时使用。 patterns和-of_objects也不能同时使用。
- 某些选项是互斥的,例如
-
特殊字符转义:
- 在使用总线下标模式时,
[]和()是 Tcl 的特殊字符,需要转义。例如:get_nets U1/A\[0:7\]
- 在使用总线下标模式时,
-
组合选项:
- 某些选项需要与其他选项配合使用,例如
-boundary_type必须与-of_objects配合使用。
- 某些选项需要与其他选项配合使用,例如
总结
get_nets 是一个功能强大的命令,适用于各种网络筛选场景。通过掌握其基本语法、常用选项和实际用例,你可以高效地管理设计中的网络集合,从而优化后端设计流程。如果还有其他问题或需要更深入的解释,请随时告诉我!
在之前的解释中,我们已经详细介绍了 get_nets 命令的基本功能、语法和选项。现在我们将基于您提供的描述和示例进一步深入讲解,帮助您更好地理解该命令的使用场景和高级特性。
核心概念补充
1. 隐式查询与显式查询
-
隐式查询:
- 当直接在命令行运行
get_nets时,工具会自动显示匹配的网络集合。 - 默认情况下,最多显示 100 个对象。如果需要更多或更少的对象显示数量,可以通过设置以下选项调整:
set_app_options -name shell.common.collection_result_display_limit -value <limit>
- 当直接在命令行运行
-
显式查询:
- 如果需要更灵活的输出(如显示对象类型、属性等),可以将
get_nets的结果作为参数传递给query_objects命令。 - 示例:
query_objects [get_nets "data*"]
- 如果需要更灵活的输出(如显示对象类型、属性等),可以将
2. 正则表达式与通配符的区别
-
通配符模式:
- 使用
*和?匹配名称。 - 示例:
get_nets "data*"会匹配所有以data开头的网络。
- 使用
-
正则表达式模式:
- 使用
-regexp参数启用正则表达式匹配。 - 示例:
get_nets -regexp {^data_\d+$}会匹配以data_开头且后面跟随一个数字的网络。 - 注意:正则表达式默认是“锚定”的,即从名称开头开始匹配。如果需要放宽匹配范围,可以在表达式前后添加
.*。
- 使用
3. 子脚本模式
-
子脚本模式允许通过索引范围来获取总线网络(bus nets)或扩展名称的网络。
-
总线子脚本模式:
- 格式:
name[begin_index:end_index:step_n] - 示例:
输出:get_nets {A[0:7:2]}{"A[0]", "A[2]", "A[4]", "A[6]"}
- 格式:
-
名称扩展子脚本模式:
- 格式:
name(begin_index:end_index:step_n) - 示例:
输出:get_nets B(0:4:2)C(1:2,5){"B0C1", "B0C2", "B0C5", "B2C1", "B2C2", "B2C5", "B4C1", "B4C2", "B4C5"}
- 格式:
4. 层次化搜索
-
普通层次化搜索:
- 使用
-hierarchical参数时,工具会在当前实例的层次结构中搜索网络。 - 示例:
输出:get_nets * -hierarchical{topnet u1/net5 u2/net7}
- 使用
-
顶层网络过滤:
- 使用
-top_net_of_hierarchical_group参数时,仅返回层次化组中的顶层网络。 - 示例:
输出:get_nets * -hierarchical -top_net_of_hierarchical_group{topnet}
- 使用
-
物理上下文搜索:
- 使用
-physical_context参数时,工具会搜索物理网络(physical nets),忽略逻辑层次。 - 示例:
输出:get_nets -physical_context{topnet}
- 使用
5. 边界类型
-
-boundary_type参数用于控制如何处理层次边界上的网络。 -
lower:- 返回层次内部的网络。
- 示例:
输出:get_nets -of_objects u2/in -boundary_type lower{u2/net7}
-
upper:- 返回层次外部的网络。
- 示例:
输出:get_nets -of_objects u2/in -boundary_type upper{topnet}
-
both:- 返回层次内外的所有相关网络。
- 示例:
输出:get_nets -of_objects u2/in -boundary_type both{u2/net7 topnet}
示例解析
示例 1:总线子脚本模式
get_nets {A[0:1,3:7:2]}
- 这是一个总线子脚本模式的例子。
- 它会匹配索引范围
[0:1]和[3:7:2]中的网络。 - 输出:
{"A[0]", "A[1]", "A[3]", "A[5]", "A[7]"}
示例 2:名称扩展子脚本模式
get_nets B(0:4:2)C(1:2,5)
- 这是一个名称扩展子脚本模式的例子。
- 它会生成所有符合
Bx Cy格式的网络名称,其中x和y分别来自指定的索引范围。 - 输出:
{"B0C1", "B0C2", "B0C5", "B2C1", "B2C2", "B2C5", "B4C1", "B4C2", "B4C5"}
示例 3:层次化搜索与顶层网络过滤
get_nets * -hierarchical
- 搜索所有层次中的网络。
- 输出:
{topnet u1/net5 u2/net7}
get_nets * -hierarchical -top_net_of_hierarchical_group
- 仅返回层次化组中的顶层网络。
- 输出:
{topnet}
示例 4:边界类型控制
get_nets -of_objects u2/in -boundary_type lower
- 返回层次内部的网络。
- 输出:
{u2/net7}
get_nets -of_objects u2/in -boundary_type both
- 返回层次内外的所有相关网络。
- 输出:
{u2/net7 topnet}
注意事项
-
转义特殊字符:
- 在使用总线子脚本模式时,
[]是 Tcl 的特殊字符,需要使用反斜杠\转义,或者用大括号{}包裹。 - 示例:
或get_nets A\[0:7\]get_nets {A[0:7]}
- 在使用总线子脚本模式时,
-
性能优化:
- 在大规模设计中,使用
-filter参数可以显著减少搜索范围,提高效率。 - 示例:
get_nets -filter "CAPACITANCE > 0.1"
- 在大规模设计中,使用
-
空结果处理:
- 如果没有找到匹配的网络,命令会返回空集合。
- 使用
-quiet参数可以抑制警告信息。
总结
get_nets 命令是 Synopsys Fusion Compiler 中一个非常强大的工具,能够高效地筛选和操作设计中的网络集合。通过掌握其高级选项(如层次化搜索、边界类型控制、子脚本模式等),您可以更灵活地管理设计中的信号路径,从而优化后端设计流程。
相关文章:
数字ic后端设计从入门到精通(含fusion compiler, tcl教学)
pin 在集成电路设计中,特别是在使用工具如 Fusion Compiler 时,理解“引脚”(pin)的基础知识对于设计、优化和验证电路至关重要。以下是从 Fusion Compiler 的角度出发,关于引脚(pin)的基础知识…...
Django从零搭建卖家中心登陆与注册实战
在电商系统开发中,卖家中心是一个重要的组成部分,而用户注册与登陆则是卖家中心的第一步。本文将详细介绍如何使用Django框架从零开始搭建一个功能完善的卖家注册页面,包括前端界面设计和后端逻辑实现。 一、项目概述 我们将创建一个名为sel…...
MySQL表的使用(4)
首先回顾一下之前所学的增删查改,这些覆盖了平时使用的80% 我们上节课中学习到了MySQL的约束 其中Primary key 是主键约束,我们今天要学习的是外键约束 插入一个表 外键约束 父表 子表 这条记录中classid为5时候,不能插入; 删除…...
ollama修改配置使用多GPU,使用EvalScope进行模型压力测试,查看使用负载均衡前后的性能区别
文章目录 省流结论机器配置不同量化模型占用显存1. 创建虚拟环境2. 创建测试jsonl文件3. 新建测试脚本3. 默认加载方式,单卡运行模型3.1 7b模型输出213 tok/s3.1 32b模型输出81 tok/s3.1 70b模型输出43tok/s 4. 使用负载均衡,多卡运行4.1 7b模型输出217t…...
深入定制 QSlider——实现精准点击跳转与拖拽区分
在使用 Qt 编写界面应用时,QSlider 是一个常用的滑动控件。但你可能会注意到,默认情况下点击滑轨(groove)区域时,滑块并不会直接跳到鼠标点击的位置,而是按照内部的分页步进(page step)行为响应。此外,垂直 Slider 在点击最底部时还存在 releaseEvent(或 sliderRelea…...
Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)
前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划,今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...
Java Spring Cloud框架使用及常见问题
Spring Cloud作为基于Spring Boot的分布式微服务框架,显著简化了微服务架构的开发与管理。其核心优势包括集成Eureka、Ribbon、Hystrix等组件,提供一站式服务发现、负载均衡、熔断容错等解决方案,支持动态配置与消息总线,实现高效…...
[连载]Transformer架构详解
Transformer: Attention Is All You Need Paper 地址:https://arxiv.org/abs/1706.03762 Paper 代码:https://github.com/tensorflow/tensor2tensor Paper 作者:Ashish Vaswani,Noam Shazeer,Niki Parmar,Jakob Uszkoreit,Llion Jones,Aidan…...
DeepSeek:穿透行业知识壁垒的搜索引擎攻防战
DeepSeek:穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组(人机协同创作) 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示,百度搜索结果前10页中,61.7%的内容存在"伪专业化"现象——看似…...
AF3 generate_chain_data_cache脚本解读
AlphaFold3 generate_chain_data_cache 脚本在源代码的scripts文件夹下。该脚本从指定目录中批量解析 mmCIF/PDB 文件的工具,并将每个链的基本信息(序列、分辨率、是否属于聚类等)提取并写入 JSON 文件,主要用于后续蛋白质建模、过滤或训练数据准备。 源代码: import ar…...
LVGL Video控件和Radiobtn控件详解
LVGL Video控件和Radiobtn控件详解 一、 Video控件详解1. 概述2. 创建和初始化3. 基本属性设置4. 视频控制5. 回调函数6. 高级功能7. 注意事项 二、Radiobtn控件详解1. 概述2. 创建和初始化3. 属性设置4. 状态控制5. 组管理6. 事件处理7. 样式设置8. 注意事项 三、效果展示四、…...
组合数哭唧唧
前言:手写一个简单的组合数,但是由于长期没写,导致一些细节没处理好 题目链接 #include<bits/stdc.h> using namespace std; #define endl "\n"#define int long longconst int N (int)2e510; const int Mod (int)1e97;int…...
NLP高频面试题(四十二)——RAG系统评估:方法、指标与实践指南
1. 引言:RAG系统概述与评估挑战 检索增强生成(Retrieval-Augmented Generation,简称 RAG)是近年来自然语言处理领域的一个重要进展。RAG系统在大型语言模型生成文本的过程中引入了外部检索模块,从外部知识库获取相关信息,以缓解纯生成模型可能出现的幻觉和知识盲点。通过…...
MySQL-COUNT函数使用
COUNT聚合函数 COUNT 是 MySQL 中一个常用的聚合函数,用于统计满足条件的行数。有3种使用方式: COUNT(*):统计表中所有行的数量,包括 NULL 值。COUNT(字段):统计指定字段非 NULL 值的行数。COUNT(条件查询)ÿ…...
Linux路漫漫
目录 Vim模式 基本操作 文本编辑 更多功能 1. 直接启动 Vim 2. 打开一个已存在的文件 3. 打开多个文件 4. 以只读模式打开文件 5. 从指定行号开始编辑 6. 快速打开并执行命令 7. 检查是否安装了 Vim 8. 退出 Vim 前提条件 SCP 命令格式 具体操作 1. Windows 命…...
游戏引擎学习第227天
今天的计划 今天的工作重点是进行吸引模式(attract mode)的开发,主要是处理游戏的进出和其他一些小的细节问题,这些是之前想要整理和清理的部分。我做了一些工作,将游戏代码中的不同部分分离到逻辑上独立的区域&#…...
一键直达:用n8n打造谷歌邮箱到Telegram的实时通知流
欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 一键直达:用n8n打造谷歌邮箱到Telegram的实时通知流 前言n8n的强大之处实现简便性实战…...
【QT】 QT定时器的使用
QT定时器的使用 1. QTimer介绍(1)QTimer的使用方法步骤示例代码1:定时器的启动和关闭现象:示例代码2:定时器每隔1s在标签上切换图片现象: (2)实际开发的作用 2.日期 QDate(1)主要方法 3.时间 QTime(1)主要方…...
深入解析分类模型评估指标:ROC曲线、AUC值、F1分数与分类报告
标题:深入解析分类模型评估指标:ROC曲线、AUC值、F1分数与分类报告 摘要: 在机器学习中,评估分类模型的性能是至关重要的一步。本文详细介绍了四个核心评估指标:ROC曲线、AUC值、F1分数和分类报告。通过对比这些指标…...
【自动化测试】如何获取cookie,跳过登录的简单操作
前言 🌟🌟本期讲解关于自动化测试函数相关知识介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话…...
每天五分钟深度学习PyTorch:RNN CELL模型原理以及搭建
本文重点 RNN Cell(循环神经网络单元)是循环神经网络(RNN)的核心组成部分,用于处理序列数据中的每个时间步,并维护隐藏状态以捕获序列中的时间依赖关系。 RNN CELL的结构 RNN是一个循环结构,它可以看作是RNN CELL的循环,RNN CELL的结构如下图所示,RNN CELL不断进行…...
【AI提示词】业务开发经理
提示说明 业务开发经理旨在帮助用户构建一个高效、有洞察力的业务发展角色,能够在竞争激烈的市场中寻找并抓住商机。 提示词 # 角色 业务开发经理专家## 注意 - 业务开发经理应具备强烈的市场洞察力和人际沟通能力。 - 专家设计应考虑业务发展的实际需求和挑战。…...
【基于开源insightface的人脸检测,人脸识别初步测试】
简介 InsightFace是一个基于深度学习的开源人脸识别项目,由蚂蚁金服的深度学习团队开发。该项目提供了人脸检测、人脸特征提取、人脸识别等功能,支持多种操作系统和深度学习框架。本文将详细介绍如何在Ubuntu系统上安装和实战InsightFace项目。 目前github有非常多的人脸识…...
进程(完)
今天我们就补充一个小的知识点,查看进程树命令,来结束我们对linux进程的学习,那么话不多说,来看. 查看进程树 pstree 基本语法: pstree [选项] 优点:可以更加直观的来查看进程信息 常用选项: -p:显示进程的pid -uÿ…...
Linux的网络配置的资料
目前有两种方式,network和NetworkManager。 network方式是在CentOS 6及更早版本中引入的配置方法,支持使用配置文件的方式管理网卡的配置。 NetworkManager是在CentOS 7及后续的版本中使用的配置方法,支持使用命令行和图形化界面的方式来管理…...
C/C++运算
C语言字符串的比较 #include <string.h> int strcmp( const char *str1, const char *str2 );例如: int ret; ret strcmp(str1, str2);返回值: str1 < str2时, 返回值< 0(有些编译器返回 -1) str1 > str2时…...
【控制学】控制学分类
【控制学】控制学分类 文章目录 [TOC](文章目录) 前言一、工程控制论1. 经典控制理论2. 现代控制理论 二、生物控制论三、经济控制论总结 前言 控制学是物理、数学与工程的桥梁 提示:以下是本篇文章正文内容,下面案例可供参考 一、工程控制论 1. 经典…...
AOSP14 Launcher3——最近任务TaskViewSimulator详解
前言:TaskViewSimulator 这个类在最近任务中起到了一个非常重要的作用。 从字面意思上理解,这个单词是由TaskViewSimulator组合而来,字面意思就是TaskView的模拟器,顾名思义,就是一个用来模拟TaskView的类。 为什么要模…...
软考中级-软件设计师 2022年上半年下午题真题解析:通关秘籍+避坑指南
📚 目录(快速跳转) 大题(下午题)(每题15分,共75分)一、结构化分析与设计🍔 试题一:外卖订餐系统 二、数据库应用分析与设计🚗 试题二:…...
波束形成(BF)从算法仿真到工程源码实现-第十节-非线性波束形成
一、概述 本节我们基于webrtc的非线性波束形成进行代码仿真,并对仿真结果进行展示和分析总结。更多资料和代码可以进入https://t.zsxq.com/qgmoN ,同时欢迎大家提出宝贵的建议,以共同探讨学习。 二、仿真代码 2.1 常量参数 % *author : a…...
