❝本附录将介绍标准寄生参数提取格式(SPEF),它是 IEEE Std 1481 标准的一部分。❞

 

C.1 基础

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 文件可以拆分为多个文件,也可以分层。

 

C.2 格式

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 文件的信息,这些信息无法通过读取文件来获得。

 

预定义的字符串值为:

 

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

 

名称映射将指定名称到唯一整数值(它们的索引)的映射。名称映射有助于通过索引来对名称进行引用从而减小文件的大小,名称可以是网络名称或实例名称。考虑图 C-7 中的名称映射,以后可以使用它们的索引在 SPEF 文件中引用这些名称,例如:

 

 

因此,名称映射会通过使用其唯一的整数表示来避免重复长名称及其路径。

 

power definition 部分定义了电源和接地网络:

 

 

以下是一些例子:

 

 

external_definition 包含了设计的逻辑和物理端口的定义。图 C-8 显示了逻辑端口的示例,逻辑端口可以以下形式描述:

 

图 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 中为一个分布式网络定义的示例:

 

图 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)可以包含以下规范:

 

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 网络。

 

图 C-13

 

图 C-14

 

可使用*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:

 

 

打个广告

 

 

新一期的路科验证春季班已经开始了!现在报名早鸟班(开班之前)即可享受 500 优惠,此外在文末扫描二维码联系路科验证 MOMO,然后报出 a 暗号摸鱼范式就能获得额外的200 优惠券!可以和早鸟班的 500 优惠叠加!对于课程学习有任何问题,都可以扫描下面的二维码,加我微信咨询。

 

除了这门升级中的 V2Pro 课程,恐怕你找不到更好的学验证的途径了

贝塔的微信❞

MOMO 的微信❞