【附录C SPEF】静态时序分析圣经翻译计划
本文由知乎
赵俊军
授权转载,知乎主页为https://www.zhihu.com/people/zhao-jun-jun-19
本附录将介绍标准寄生参数提取格式(SPEF),它是IEEE Std 1481标准的一部分。
C.1 基础
SPEF允许以ASCII交换格式描述设计的寄生信息(R,L和C)。用户可以读取和检查SPEF文件中的值,尽管用户永远不会手动创建此文件。它主要用于将寄生信息从一个工具传递到另一个工具。图C-1显示了SPEF可以由诸如布局布线工具或寄生参数提取工具之类的工具生成,然后交由时序分析工具用于电路仿真或执行串扰分析。
寄生参数可以在许多不同的层次上表示。SPEF支持分布式(distributed)网络模型、(reduced)简化网络模型和(lumped)集总电容模型。在分布式网络模型(D_NET)中,网络走线的每段都有其自己的R和C。在简化网络模型(R_NET)中,在网络的负载引脚上考虑一个简化的R和C,而在网络的驱动引脚上考虑一个π模型(C-R-C)。在集总电容模型中,仅为整个网络指定一个电容。图C-2显示了物理网络走线的一个示例,图C-3显示了分布式网络模型,图C-4显示了简化的网络模型,图C-5显示了集总电容模型。
互连寄生效应取决于工艺,SPEF支持最佳(best-case)、典型(typical)和最差(worst-case)三种情况。允许R、L和C值、端口压摆和负载使用此三种不同情况下的值。
通过提供一个包含网络名称和实例名称映射到索引的一个名称映射(name map),可以有效地减小SPEF文件的大小,更重要的是,所有较长名称仅出现在一个位置。
设计的SPEF文件可以拆分为多个文件,也可以分层。
C.2 格式
SPEF文件的格式如下:
header_definition包含了基本信息,例如SPEF版本号、设计名称以及R,L和C的单位。name_map指定了网络名称和实例名称到索引的映射。power_definition声明了电源网络和地网络。external_definition定义了设计的端口。define_definition中指出了SPEF还在其它文件中进行了描述的那些实例。internal_definition包含的是文件的核心——设计的寄生参数。
图C-6显示了header_definition的示例:
SPEF name 指定了SPEF的版本号;
DESIGN name 指定了设计的名称;
DATE string 指定了创建文件时的时间戳;
VENDOR string 指定了用于创建SPEF的供应商工具;
PROGRAM string 指定了用于生成SPEF的程序;
VERSION string 指定了用于创建SPEF的程序的版本号;
DESIGN_FLOW string string string . . . 指定了在什么阶段创建SPEF文件。它描述了有关SPEF文件的信息,这些信息无法通过读取文件来获得。
预定义的字符串值为:
-
EXTERNAL_LOADS:外部载荷在SPEF文件中完全指定。
-
EXTERNAL_SLEWS:外部压摆在SPEF文件中完全指定。
-
FULL_CONNECTIVITY:SPEF中存在逻辑网表连接。
-
MISSING_NETS:SPEF文件中可能缺少某些逻辑网络。
-
NETLIST_TYPE_VERILOG:使用Verilog HDL类型命名约定。
-
NETLIST_TYPE_VHDL87:使用VHDL87命名约定。
-
NETLIST_TYPE_VHDL93:使用VHDL93网表命名约定。
-
NETLIST_TYPE_EDIF:使用EDIF类型命名约定。
-
ROUTING_CONFIDENCE:(正整数)所有网络的默认走线置信度,基本上是寄生精度的水平。
-
ROUTING_CONFIDENCE_ENTRY:补充走线置信度值。
-
NAME_SCOPE_LOCAL | FLAT:指定了SPEF文件中的路径是相对于文件还是相对于设计顶层。
-
SLEW_THRESHOLDS:(low_input_threshold_percent,high_input_threshold_percent)指定了设计的默认输入转换阈值。
-
PIN_CAP NONE | INPUT_OUTPUT | INPUT_ONLY:指定了作为总电容一部分的引脚电容类型,默认值为INPUT_OUTPUT。
DIVIDER / 指定了层次结构分隔符。可以使用的其它字符是" . " , " : "和" / "。
DELIMITER :指定了实例与其引脚之间的分隔符。可以使用的其它可能字符是" . " , " / " , " : " 或者 "|"。
BUS_DELIMITER [ ] 指定了用于标识总线位的前缀和后缀。可以用于前缀和后缀的其他可能字符是" { " , " ( " , " < " , " : "," ."和" } " , " ) ", " > "。
T_UNIT 正整数 NS | PS 指定了时间单位。
C_UNIT 正整数 PF | FF 指定了电容单位。
R_UNIT 正整数 OHM| KOHM 指定了电阻单位。
L_UNIT 正整数 HENRY | MH | UH 指定了电感单位。
SPEF文件中的注释可以两种形式出现:
图C-7显示了一个名称映射的示例。 它的形式为:
名称映射将指定名称到唯一整数值(它们的索引)的映射。名称映射有助于通过索引来对名称进行引用从而减小文件的大小,名称可以是网络名称或实例名称。考虑图C-7中的名称映射,以后可以使用它们的索引在SPEF文件中引用这些名称,例如:
因此,名称映射会通过使用其唯一的整数表示来避免重复长名称及其路径。
power definition部分定义了电源和接地网络:
以下是一些例子:
external_definition包含了设计的逻辑和物理端口的定义。图C-8显示了逻辑端口的示例,逻辑端口可以以下形式描述:
其中port_name可以是形式为*正整数的端口索引。方向为I表示输入,O表示输出,B表示双向。连接属性(conn_attribute)是可选的,可以是以下属性:
-
*C number number:端口的坐标。
-
*L par_value:端口的电容负载。
-
*S par_value par_value:定义端口上的波形。
-
*D cell_type:定义端口的驱动单元。
可以使用以下命令定义SPEF文件中的物理端口:
define definition部分定义了当前SPEF文件中引用的实例,但其寄生参数在其它SPEF文件中进行了描述:
当实例是物理分区(而不是逻辑层次结构)时,将使用*PDEFINE。以下有些例子:
这意味着将存在另一个带有*DESIGN值ddrphy的SPEF文件,该文件将包含设计ddrphy的寄生参数,其可能具有物理和逻辑层次结构。跨越层次边界的任何网络都必须描述为分布式网络(D_NET)。
internal definition部分包含了SPEF文件的核心,即设计中网络的寄生参数。基本上有两种形式:分布式网络D_NET和简化网络R_NET。图C-9中为一个分布式网络定义的示例:
第一行中的*5426是网络的索引号(网络名称请参见名称映射),0.899466是网络上的总电容值。电容值是网络上所有电容的总和,其中包括假定为接地的交叉耦合电容,还包括负载电容。它可能包含也可能不包含引脚电容,具体取决于DESIGN_FLOW定义中的PIN_CAP设置。
connectivity section描述了网络的驱动和负载引脚:
I表示内部引脚( * P表示端口),14212:D表示实例14212的D引脚,14212是一个索引号(有关实际名称需参见名称映射)。“ I”表示网络上的负载(输入引脚),“ O”表示网络上的驱动(输出引脚)。C和 D如先前在connection attributes中所定义的那样,C定义了引脚的坐标,*D定义了引脚的驱动单元。
capacitance section描述了分布式网络的电容,电容单位在之前已用* C_UNIT指定。
第一个数字是电容标识符。电容规范有两种形式: 第一种到第四种一种形式,第五种是另一种形式。第一种形式(第一至第四种)指定两个网络之间的交叉耦合电容,而第二种形式(id为5)指定接地电容。因此,在电容id1中,网络5426和5290之间的交叉耦合电容为0.217446;在电容id5中,接地电容为0.529736。请注意,第一个节点名称必须是所描述的D_NET的网络名称。网络索引后面的正整数(5426:10278中的10278)指定内部节点或连接点。因此,电容id4表示在内部节点10278的网络5426和内部节点9922的网络*5116之间存在耦合电容,该耦合电容的值为0.113918。
resistance section描述了分布式网络的电阻,电阻单位在之前已用* R_UNIT指定。
第一个字段是电阻标识符。因此,该网络具有三个电阻部分。第一个在内部节点5426:10278与14212上的D引脚之间,电阻值为0.34。使用图C-10中所示的RC网络可以更好地理解电容和电阻部分。
图C-11显示了分布式网络的另一个示例。该网络具有一个驱动和两个负载,网络上的总电容为2.69358。图C-12显示了与分布式网络相对应的RC网络。
通常,内部定义(internal definition)可以包含以下规范:
-
D_NET:逻辑网络的分布式RC网络形式。
-
R_NET:逻辑网络的简化RC网络形式。
-
D_PNET:物理网络的分布式形式。
-
R_PNET:物理网络的简化形式。
语法如下:
inductance section用于指定电感,其格式类似于电阻部分。 * V用于指定网络寄生参数的准确性。这些可以单独使用网络指定,也可以使用带有ROUTING_CONFIDENCE值的* DESIGN_FLOW语句进行全局指定,例如:
它指定了寄生参数是在最终单元布局和最终布线之后提取得到的,并且使用了3d提取。走线置信度的其它可能值为:
-
10:统计线负载模型
-
20:物理线负载模型
-
30:具有位置但没有单元布局的物理分区
-
40:使用基于斯坦纳树(steiner tree)的走线估计的单元位置
-
50:使用全局走线估计的单元位置
-
60:使用斯坦纳走线进行的最终单元布局
-
70:使用全局走线进行的最终单元布局
-
80:最终单元布局,最终走线,2d提取
-
90:最终单元布局,最终走线,2.5d提取
-
100:最终单元布局,最终走线,3d提取
reduced net是从分布式网络形式简化而来的网络。网络上每个驱动都有一个驱动精简部分(driver reduction section)。驱动精简部分的形式为:
*C2_R1_C1表示在网络的驱动引脚上使用π模型的寄生参数。 * RC结构中的rc_value是指Elmore延迟(R * C)。 图C-13显示了简化后的网络的SPEF示例,图C-14以图形方式显示了RC网络。
可使用D_NET或R_NET结构描述集总电容模型(lumped capacitance model),该结构仅具有总电容而没有其它信息。以下是集总电容声明的示例:
SPEF文件中的值可以采用三元数组的形式来表示工艺变化,例如:
- 0.243 : 0.269 : 0.300
最佳情况下值为0.243,典型情况下值为0.269,最差情况下值为0.300。
C.3 完整语法
本节描述了SPEF文件的完整语法。
可以在字符前面加上反斜杠(\)来对其进行转义。注释有两种形式://开始注释直到行尾,而/ * . . . * /是多行注释。
在以下语法中,粗体字符如(,[是语法的一部分。所有结构均按字母顺序排列,起始符号为SPEF_file: