SPEF允许以ASCII交换格式描述设计的寄生信息(R,L和C)。用户可以读取和检查SPEF文件中的值,尽管用户永远不会手动创建此文件。它主要用于将寄生信息从一个工具传递到另一个工具。图C-1显示了SPEF可以由诸如布局布线工具或寄生参数提取工具之类的工具生成,然后交由时序分析工具用于电路仿真或执行串扰分析。
图C-1
寄生参数可以在许多不同的层次上表示。SPEF支持分布式(distributed)网络模型、(reduced)简化网络模型和(lumped)集总电容模型。在分布式网络模型(D_NET)中,网络走线的每段都有其自己的R和C。在简化网络模型(R_NET)中,在网络的负载引脚上考虑一个简化的R和C,而在网络的驱动引脚上考虑一个π模型(C-R-C)。在集总电容模型中,仅为整个网络指定一个电容。图C-2显示了物理网络走线的一个示例,图C-3显示了分布式网络模型,图C-4显示了简化的网络模型,图C-5显示了集总电容模型。
图C-2
图C-3
图C-4
图C-5
互连寄生效应取决于工艺,SPEF支持最佳(best-case)、典型(typical)和最差(worst-case)三种情况。允许R、L和C值、端口压摆和负载使用此三种不同情况下的值。
通过提供一个包含网络名称和实例名称映射到索引的一个名称映射(name map),可以有效地减小SPEF文件的大小,更重要的是,所有较长名称仅出现在一个位置。
设计的SPEF文件可以拆分为多个文件,也可以分层。
SPEF文件的格式如下:
header_definition包含了基本信息,例如SPEF版本号、设计名称以及R,L和C的单位。name_map指定了网络名称和实例名称到索引的映射。power_definition声明了电源网络和地网络。external_definition定义了设计的端口。define_definition中指出了SPEF还在其它文件中进行了描述的那些实例。internal_definition包含的是文件的核心——设计的寄生参数。
图C-6显示了header_definition的示例:
图C-6
SPEF name 指定了SPEF的版本号;
DESIGN name 指定了设计的名称;
DATE string 指定了创建文件时的时间戳;
VENDOR string 指定了用于创建SPEF的供应商工具;
PROGRAM string 指定了用于生成SPEF的程序;
VERSION string 指定了用于创建SPEF的程序的版本号;
DESIGN_FLOW string string string . . . 指定了在什么阶段创建SPEF文件。它描述了有关SPEF文件的信息,这些信息无法通过读取文件来获得。
预定义的字符串值为:
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
名称映射将指定名称到唯一整数值(它们的索引)的映射。名称映射有助于通过索引来对名称进行引用从而减小文件的大小,名称可以是网络名称或实例名称。考虑图C-7中的名称映射,以后可以使用它们的索引在SPEF文件中引用这些名称,例如:
因此,名称映射会通过使用其唯一的整数表示来避免重复长名称及其路径。
power definition部分定义了电源和接地网络:
以下是一些例子:
external_definition包含了设计的逻辑和物理端口的定义。图C-8显示了逻辑端口的示例,逻辑端口可以以下形式描述:
图C-8
其中port_name可以是形式为*正整数的端口索引。方向为I表示输入,O表示输出,B表示双向。连接属性(conn_attribute)是可选的,可以是以下属性:
可以使用以下命令定义SPEF文件中的物理端口:
define definition部分定义了当前SPEF文件中引用的实例,但其寄生参数在其它SPEF文件中进行了描述:
当实例是物理分区(而不是逻辑层次结构)时,将使用*PDEFINE。以下有些例子:
这意味着将存在另一个带有*DESIGN值ddrphy的SPEF文件,该文件将包含设计ddrphy的寄生参数,其可能具有物理和逻辑层次结构。跨越层次边界的任何网络都必须描述为分布式网络(D_NET)。
internal definition部分包含了SPEF文件的核心,即设计中网络的寄生参数。基本上有两种形式:分布式网络D_NET和简化网络R_NET。图C-9中为一个分布式网络定义的示例:
图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-10
图C-11显示了分布式网络的另一个示例。该网络具有一个驱动和两个负载,网络上的总电容为2.69358。图C-12显示了与分布式网络相对应的RC网络。
图C-11
图C-12
通常,内部定义(internal definition)可以包含以下规范:
语法如下:
inductance section用于指定电感,其格式类似于电阻部分。* V用于指定网络寄生参数的准确性。这些可以单独使用网络指定,也可以使用带有ROUTING_CONFIDENCE值的* DESIGN_FLOW语句进行全局指定,例如:
它指定了寄生参数是在最终单元布局和最终布线之后提取得到的,并且使用了3d提取。走线置信度的其它可能值为:
reduced net是从分布式网络形式简化而来的网络。网络上每个驱动都有一个驱动精简部分(driver reduction section)。驱动精简部分的形式为:
*C2_R1_C1表示在网络的驱动引脚上使用π模型的寄生参数。* RC结构中的rc_value是指Elmore延迟(R * C)。图C-13显示了简化后的网络的SPEF示例,图C-14以图形方式显示了RC网络。
图C-13
图C-14
可使用*D_NET或*R_NET结构描述集总电容模型(lumped capacitance model),该结构仅具有总电容而没有其它信息。以下是集总电容声明的示例:
SPEF文件中的值可以采用三元数组的形式来表示工艺变化,例如:
最佳情况下值为0.243,典型情况下值为0.269,最差情况下值为0.300。
本节描述了SPEF文件的完整语法。
可以在字符前面加上反斜杠(\)来对其进行转义。注释有两种形式://开始注释直到行尾,而/ * . . . * /是多行注释。
在以下语法中,粗体字符如(,[是语法的一部分。所有结构均按字母顺序排列,起始符号为SPEF_file:
END