数字ic后端设计从入门到精通5(含fusion compiler, tcl教学)def详解

发布于:2025-05-27 ⋅ 阅读:(21) ⋅ 点赞:(0)

📄 DEF 文件结构详解表

语句/部分 基础术语解释 说明 可选/必选 示例
VERSION 定义DEF版本 指定当前 DEF 文件使用的语法版本,如 5.8、5.7 等。 可选 VERSION 5.8 ;
DIVIDERCHAR 层次分隔符 指定模块层次之间的分隔字符,默认是 /,例如 u_cpu/u_alu/adder 可选 DIVIDERCHAR "/" ;
BUSBITCHARS 总线位号符号 定义总线命名中使用的括号形式,如 [ ]{ } 可选 BUSBITCHARS "[]" ;
DESIGN 设计名称 指定当前设计的顶层模块名,必须与 RTL 中一致。 必选 DESIGN chip_top ;
TECHNOLOGY 工艺库引用 指定所用工艺库的名称,需与 LEF 文件一致。 可选 TECHNOLOGY tsmc28nm ;
UNITS 单位定义 定义数据库中的单位换算关系,通常为微米(MICRONS)或纳米(NANO)。 可选 UNITS DISTANCE MICRONS 1000 ;
HISTORY 修改历史记录 记录该 DEF 文件的生成或修改信息,常由工具自动生成。 可选 HISTORY "Created by Innovus on 2023-01-01" ;
PROPERTYDEFINITIONS 自定义属性定义 允许用户为组件、网络等定义额外属性类型。 可选 PROPERTYDEFINITIONS COMPONENTS LEF58_TYPE STRING ;
DIEAREA 芯片边界区域 定义芯片的物理边界,通常以两个对角坐标表示矩形区域。 必选 DIEAREA ( 0 0 ) ( 100000 100000 ) ;
ROWS 标准单元行布局 定义标准单元摆放的“行”位置和方向,用于放置逻辑单元。 必选 ROW core_row1 core_site 0 0 N DO 100 STEP 2000 0 ;
TRACKS 布线轨道定义 定义全局布线器使用的轨道分布(按层和方向),指导布线路径规划。 必选 TRACKS X 1000 DO 50 STEP 2000 ;
GCELLGRID 全局布线网格 定义用于全局布线的网格划分,有助于优化长线资源分配。 可选 GCELLGRID X 1000 DO 101 STEP 100 ;
VIAS 通孔定义 定义设计中使用的通孔结构,包含不同金属层之间的连接形状。 可选 VIA via1_wide RECT metal1 ( 0 0 10 10 ) metal2 ( 5 5 15 15 ) ;
STYLES 图形样式定义 定义特殊图形模板,如接触孔阵列、多边形等。 可选 STYLES 1 RECTANGLES ( 0 0 5 5 ) ( 10 10 15 15 ) ;
NONDEFAULTRULES 非默认布线规则 定义特定网络或区域的布线规则,如宽线、多通孔等。 可选 NONDEFAULTRULES numRules ; ... END NONDEFAULTRULES
REGIONS 区域约束定义 定义设计中的物理区域(如电压域、布局限制),可设为硬性(FENCE)或软性(GUIDE)约束。 可选 REGIONS 1 - regionA ( 0 0 ) ( 1000 1000 ) + TYPE FENCE ;
COMPONENTMASKSHIFT 掩模偏移定义 在多重曝光光刻中指定掩模偏移值,用于避免图案冲突。 可选 COMPONENTMASKSHIFT 1 ;
COMPONENTS 组件定义 列出所有实例化单元(标准单元、宏、填充单元等),并指定其位置和方向。 必选 COMPONENTS 1 INVX1 + PLACED ( 1000 1000 ) N ;
PINS 引脚定义 定义顶层引脚的位置、方向、电气属性及几何形状。 可选 PINS 1 clk + DIRECTION INPUT + LAYER metal3 ( 0 0 10 10 ) ;
PINPROPERTIES 引脚属性扩展 为引脚添加附加属性,如表达式、用途等。 可选 PINPROPERTIES 1 clk + NETEXPR "clock" ;
BLOCKAGES 布局阻挡区域 定义不允许放置或布线的区域,防止某些区域被占用。 可选 BLOCKAGES 1 LAYER metal1 RECT ( 0 0 100 100 ) ;
SLOTS 金属槽定义 定义金属槽(Slotted Metal),防止热应力导致金属变形。 可选 SLOTS 1 LAYER metal1 RECT ( 0 0 10 10 ) ;
FILLS 填充单元定义 定义填充单元(如 dummy metal 或 poly),满足制造密度要求。 可选 FILLS 1 LAYER metal1 RECT ( 0 0 50 50 ) ;
SPECIALNETS 特殊网络定义 定义电源、地、时钟等特殊网络及其布线方式。 可选 SPECIALNETS 1 VDD + ROUTED metal1 ( 0 0 1000 20 ) ;
NETS 网络定义 定义信号网络及其布线路径,包括线段、通孔等信息。 必选 NETS 1 data + ROUTED metal1 ( 100 100 200 200 ) VIA via1 ( 150 150 ) ;
SCANCHAINS 扫描链定义 定义 DFT(可测性设计)中的扫描链结构,用于测试目的。 可选 SCANCHAINS chain1 + START PIN scan_in + STOP PIN scan_out ;
GROUPS 分组定义 将组件按功能或区域进行分组,便于管理和约束。 可选 GROUPS 1 analog_blocks + COMPONENTS opamp1 opamp2 ;
BEGINEXT / ENDEXT 扩展语法块 提供工具自定义内容插入点,用于保留非标准语法。 可选 BEGINEXT my_tool + OPTION "high_speed" ;
END DESIGN 结束标志 表示 DEF 文件结束,并再次声明顶层模块名,确保一致性。 必选 END DESIGN chip_top ;

🧠 基础术语补充说明

术语 含义
DEF Design Exchange Format,一种用于集成电路物理设计的数据交换格式,主要用于从综合到布局布线的数据传递。
LEF Library Exchange Format,描述标准单元、宏单元的物理信息,DEF 文件需要与其配合使用。
Standard Cell 标准单元,构成数字电路的基本逻辑门(如 AND、OR、FF 等)。
Macro 大型模块,如 RAM、DSP、PLL 等,通常有固定的尺寸和引脚定义。
Filler Cell 填充单元,在标准单元之间填充空隙,满足制造规则要求。
Track 布线轨道,布线器按照这些轨道来安排信号线的走向。
Via 通孔,连接不同金属层之间的导电通道。
Region 区域,将某些模块限定在一个区域内,分为硬约束(Fence)和软约束(Guide)。
Special Net 特殊网络,如电源(Power)、地(Ground)、时钟(Clock)等,需要特别处理。
Scan Chain 扫描链,用于 DFT 测试的一种结构,把触发器串联起来以便测试。

✅ 总结一句话:

DEF 是一个描述芯片物理设计结构的标准格式,它包含了从芯片边界、标准单元、引脚、布线规则到特殊网络等完整信息,是后端流程中非常关键的中间数据文件。



📌 DEF 中的 BLOCKAGES 详解

关键字 语法示例 作用说明
BLOCKAGES numBlockages ; BLOCKAGES 7; 声明本节中将定义的 blockage 数量。必须以数字开头,表示 blockage 总数。用于预分配内存或检查完整性。
- LAYER layerName - LAYER metal1 指定该 blockage 所在的层名,如 metal1, metal2, via1 等。通常用于布线层或通孔层,限制在该层上某些图形的插入。
+ SLOTS + SLOTS 在指定层上创建槽位(block),阻止插入 slot 类型图形(如金属槽)。适用于多重曝光工艺中的槽形设计规则。
+ FILLS + FILLS 在指定层上创建填充块(block),阻止插入 fill 类型图形(如 dummy metal 或 dummy poly)。用于避免制造时的过度填充。
+ PUSHDOWN + PUSHDOWN 表示该 blockage 是从顶层推入到模块中的,常用于 hierarchical 设计中,确保子模块不会放置或布线到被父级 blockage 覆盖的区域。
+ EXCEPTPGNET + EXCEPTPGNET 表示该 blockage 不影响电源/地网络(Power/Ground)的布线,仅限制信号网络。可用于防止干扰电源网络的自动连接,比如 VDD/VSS 的绕行。
+ COMPONENT compName + COMPONENT u_cpu 将 blockage 绑定到特定组件(宏、标准单元等)上。当组件移动时,blockage 也会随之移动,用于动态约束。
+ SPACING minSpacing + SPACING 0.2 设定该 blockage 与其他形状之间的最小间距,单位为 DEF 数据库单位。此值会覆盖默认的 spacing 规则,用于特殊避让需求。
+ DESIGNRULEWIDTH effectiveWidth + DESIGNRULEWIDTH 0.15 设定 blockage 的有效宽度用于 spacing 计算。注意:不适用于 20nm 及以下工艺节点。不能与 SPACING 同时使用。
+ MASK maskNum + MASK 1 指定用于多重曝光工艺的掩膜编号(如 1、2 或 3),用于 double/triple patterning,确保不同颜色的图形不会冲突。
RECT pt pt RECT ( -300 -310 ) ( 320 330 ) 定义矩形区域的坐标对,格式为左下角和右上角坐标。绝对坐标,非相对坐标。用于简单 blockage 区域定义。
POLYGON pt pt pt ... POLYGON (0 0) (100 0) (100 100) 定义多边形区域,至少三个点。支持 45 度角边缘。每个 POLYGON 语句定义一个封闭图形。适用于复杂形状的 blockage。
- PLACEMENT - PLACEMENT 定义放置 blockage(placement blockage),限制标准单元或其他元件的放置位置。与 routing blockage 不同,它只影响 placement 阶段。
+ SOFT + SOFT 软性 blockage,初始布局阶段不可用,但后续优化阶段(如 buffer 插入)可以使用该区域。适合用于临时保留空间。
+ PARTIAL maxDensity + PARTIAL 60.0 设置局部密度上限(百分比),限制该 blockage 区域内标准单元的最大占用比例。用于缓解拥塞区域,允许部分放置。
+ COMPONENT compName {RECT pt pt}... + COMPONENT u_pll {RECT (0 0)(100 100)} 将 blockage 绑定到具体组件上,并为其指定额外的 blockage 区域。用于保护该组件周围的布线或布局空间。

🧩 使用场景分类总结

场景 对应关键字 说明
布线阻挡(Routing Blockage) LAYER, SLOTS, FILLS, EXCEPTPGNET 控制某一层上是否允许插入特定图形,例如禁止在某个区域布线或打孔。
布局阻挡(Placement Blockage) PLACEMENT, SOFT, PARTIAL 控制标准单元或宏的放置行为,软性或硬性限制。
绑定组件(Component-bound Blockage) COMPONENT, PUSHDOWN blockage 与组件绑定,随组件一起移动或复制。
多重曝光控制 MASK, SLOTS, FILLS 控制不同掩膜层上的图形分布,满足先进工艺要求。
间距控制 SPACING, DESIGNRULEWIDTH 定义 blockage 与周围图形的最小间距,用于特殊避让需求。

✅ 示例完整 BLOCKAGE 定义

BLOCKAGES 2 ;
- LAYER metal1
  + SLOTS
  + SPACING 0.2
  RECT ( 1000 1000 ) ( 2000 2000 ) ;

- PLACEMENT
  + PARTIAL 50.0
  RECT ( 3000 3000 ) ( 4000 4000 ) ;
END BLOCKAGES

上述例子中:

  • 第一个 blockage 阻止在 metal1 层插入 slot 图形,并设定间距;
  • 第二个 blockage 是一个布局 blockage,限制区域内最多只能放 50% 的标准单元。


📌 DEF 中的 COMPONENTS 详解

关键字 语法示例 作用说明
COMPONENTS numComps ; COMPONENTS 10; 声明本节中将定义的组件总数。必须以数字开头,用于预分配内存或验证完整性。
- compName modelName - u1 INVX1 定义一个组件实例 compName,它是模型 modelName 的一个实例。模型名需与 LEF 库中的单元名称一致(如标准单元、宏等)。
+ EEQMASTER macroName + EEQMASTER RAM_A 指定该组件在电气上等价于另一个已定义的宏 macroName。用于电等价替换,例如 clock buffer 或 dummy cell 替换。
+ SOURCE {NETLIST | DIST | USER | TIMING} + SOURCE NETLIST 指定组件来源类型:
NETLIST:来自网表
DIST:分布生成
USER:用户手动添加
TIMING:时序驱动插入(如 buffer)
+ FIXED pt orient + FIXED (100 200) N 表示该组件为固定状态,不能被自动布局工具移动,但可以手动调整位置。需要指定坐标 (x y) 和方向(N/S/E/W 等)。
+ COVER pt orient + COVER (300 400) S 表示该组件是“COVER”类型,通常作为硬宏的一部分,不可被任何自动或手动工具移动。常用于封装宏模块。
+ PLACED pt orient + PLACED (500 600) W 表示该组件已经放置,可被后续优化工具修改位置。需提供坐标 (x y) 和方向(N/S/E/W/NE/NW 等)。
+ UNPLACED + UNPLACED 表示该组件尚未放置,默认状态下所有组件都是 UNPLACED
+ MASKSHIFT shiftLayerMasks + MASKSHIFT 12A3 用于多重曝光工艺,指定某些层的掩膜偏移值。值为十六进制编码,每一位代表一层掩膜编号(如用于 14nm 及以下先进工艺)。
+ HALO [SOFT] left bottom right top + HALO SOFT 100 50 100 50 在组件周围创建一个 placement blockage 区域,防止其他元件靠近。单位为 DEF 数据库单位。
– 若加 SOFT,后期优化阶段可忽略此区域;
– 若不加,则始终保留避让空间。
+ ROUTEHALO haloDist minLayer maxLayer + ROUTEHALO 200 metal1 metal5 在指定范围内创建布线避让区(route halo),防止布线靠近组件。
haloDist 是距离(单位为 DEF 单位)
minLayermaxLayer 是起止金属层范围
+ WEIGHT weight + WEIGHT 2 设置组件权重,在布局优化时影响其优先级。数值越大,越倾向于先放置。可用于控制关键路径单元的布局优先级。
+ REGION regionName + REGION REG0 将组件绑定到特定区域(REGION),限制其只能放置在该区域内。区域需在 REGIONS 部分预先定义。
+ PROPERTY {propName propVal}... + PROPERTY IS_SOFT TRUE 为组件添加自定义属性,可用于后续流程中的识别或处理。例如标记某个组件是否为 soft macro、clock cell 等。

🧩 使用场景分类总结

场景 对应关键字 说明
组件放置状态管理 FIXED, PLACED, COVER, UNPLACED 控制组件在布局阶段的状态,决定其是否可以被移动。
组件来源标识 SOURCE 标识组件的来源,便于工具判断是否可被优化或删除。
组件等效替换 EEQMASTER 指定电气等效宏,用于物理替换(如 dummy cell 替换为真实 cell)。
布局约束控制 HALO, REGION 控制组件周围的布局避让区域和放置区域限制。
布线避让控制 ROUTEHALO 控制组件周围的布线避让区域,避免信号线过于靠近敏感电路。
制造工艺支持 MASKSHIFT 支持多重曝光工艺,确保不同颜色图形不会冲突。
优先级设置 WEIGHT 设置组件布局优先级,影响自动布局器的决策顺序。
元数据扩展 PROPERTY 添加任意自定义属性,用于流程中识别或分类组件用途。

✅ 示例完整 COMPONENT 定义

COMPONENTS 2 ;
- u_cpu cpu_top + PLACED ( 1000 1000 ) N + REGION CORE_REGION + PROPERTY IS_CRITICAL TRUE ;
- u_pll pll_module + FIXED ( 2000 2000 ) E + HALO 100 100 100 100 + ROUTEHALO 200 metal1 metal4 ;
END COMPONENTS

上述例子中:

  • u_cpu 已经放置,位于 CORE_REGION 区域内,且是一个关键组件;
  • u_pll 固定放置,周围有布局避让区和布线避让区,防止干扰 PLL 模块。


📌 DEF 中的 ROW 详解

关键字 语法示例 作用说明
ROW rowName siteName origX origY siteOrient ROW row_0 siteA 1000 1000 N 定义一个 ROW(标准单元行),指定其名称、使用的 SITE 类型、起始坐标、方向等基本信息。是 ROW 定义的开头部分。
rowName row_0 该行的唯一标识名,用于布局工具识别和引用。通常以 row_*core_row* 命名。
siteName siteA 引用 LEF 中定义的 SITE 名称,表示每个单元放置的位置模板。SITE 定义了尺寸、类型和方向规则。
origX origY 1000 1000 ROW 起始点的坐标,单位为 DEF 数据库单位(dbu)。所有后续 SITE 都从此点开始排列。
siteOrient N, S, E, W, FN, FS, FE, FW ROW 中所有 SITE 的方向:
N = 北向(正常)
S = 南向(上下翻转)
E = 东向(右旋转90°)
W = 西向(左旋转90°)
FN = 镜像北向(左右翻转)
FS = 镜像南向
FE = 镜像东向
FW = 镜像西向
DO numX BY numY DO 10 BY 1 定义重复 SITE 的数量:
numX 表示横向数量
numY 表示纵向数量
其中必须有一个为 1:
– 若 numY = 1 → 横向排布(水平行)
– 若 numX = 1 → 纵向排布(垂直列)
STEP stepX stepY STEP 200 0 定义 SITE 之间的间距:
stepX 为水平间距
stepY 为垂直间距
单位为 dbu。若不指定,默认使用 SITE 在 LEF 中定义的宽度或高度。
PROPERTY propName propVal + PROPERTY IS_POWER TRUE 为 ROW 添加自定义属性,需在 PROPERTYDEFINITIONS 中预先定义。可用于标记电源行、特殊用途等。

🔍 示例完整 ROW 定义

ROW ROW_1 TS05_DST -12848889 -15864240 N DO 251939 BY 1 STEP 102 0 ;

✅ 各部分含义解析:

部分 含义
ROW ROW_1 定义了一个名为 ROW_1 的行
TS05_DST 使用的 site 类型(site type),通常在 LEF 文件中定义过,表示单元放置的基本单位
-12848889 -15864240 行的起始坐标(x, y)——这个点是该行第一个 site 的位置
N 方向(North),即单元从左到右水平放置,面向北(正Y方向)
其他可能值有:S(南)、E(东)、W(西)、FN(镜像北)、FS(镜像南)等
DO 251939 BY 1 DO 是 “do count”,表示重复的次数
BY 1 表示只有一列(垂直方向上不重复)
所以这一行有 251939 个 site,排成一行
STEP 102 0 每个 site 之间的步长(x 和 y 方向)。这里是 x 增加 102 单位,y 不变,说明这行是 水平排列

🧩 使用场景分类总结

场景 对应关键字 说明
标准单元行布局 ROW, SITE, ORIGIN, STEP 用于定义标准单元摆放的“行”结构,是数字逻辑区域的基础布局方式。
方向控制 siteOrient 控制整个行内所有单元的方向,用于绕开宏模块、优化布线长度等。
大规模行定义 DO ... BY ... 可快速生成大量标准单元的布局行,尤其适用于大芯片核心区域。
特殊属性定义 PROPERTY 标记某些行为电源域、测试路径、时钟区域等,便于后续流程识别和处理。

✅ 其他典型 ROW 定义示例

示例 1:垂直方向的 ROW(纵向列)

ROW col_0 siteA 0 0 E DO 1 BY 100 STEP 0 200 ;
  • 这是一个 垂直列(因为 DO 1 BY 100
  • 所有 SITE 按东方向(E)排列
  • 用于创建竖直方向的标准单元列,常见于异构设计或特定模块边界。

示例 2:带属性的 ROW

ROW power_row_0 siteB 0 10000 N DO 200 BY 1 STEP 100 0 + PROPERTY IS_POWER TRUE;
  • 定义了一个电源相关的标准单元行
  • 属性 IS_POWER 可用于后端工具识别并做特殊处理

📝 小贴士

  • SITE 是 LEF 中定义的最小放置单位,通常是标准单元的宽度。
  • STEP 通常等于 SITE 的宽度或高度,但也可以根据设计需求调整。
  • DO ... BY ... 中如果设置不当(如两个都大于1),可能导致非法 ROW 定义,工具会报错。
  • 大多数先进工艺设计中,ROW 主要用于标准单元区域;宏模块通常不通过 ROW 来定义。


📌 DEF 中的 TRACKS 详解

关键字 语法示例 作用说明
TRACKS TRACKS X 0 DO 20 STEP 5 LAYER M1; 定义布线轨道(tracks),用于指定标准单元设计中的布线网格。是布局布线工具进行自动布线时的重要参考依据。
{X | Y} XY 表示轨道方向:
X: 垂直轨道(vertical tracks),即竖直线
Y: 水平轨道(horizontal tracks),即水平线
start X 0Y 100 表示第一个轨道的起始坐标(X 或 Y 轴上的位置)。例如:X 0 表示从 x=0 开始画垂直线。单位为 DEF 数据库单位(dbu)。
DO numTracks DO 20 指定生成多少条轨道。不能为 0。
例如:DO 20 表示生成 20 条轨道,从起始点开始依次排列。
STEP space STEP 5 相邻轨道之间的间距,单位是 DEF 数据库单位(dbu)。
例如:STEP 5 表示每 5 dbu 画一条线。通常与 LEF 中定义的最小线宽/间距匹配。
MASK maskNum [SAMEMASK] MASK 2 SAMEMASK 指定多重曝光工艺中使用的掩膜编号(mask number):
maskNum 是正整数,如 1、2、3
– 如果不加 SAMEMASK,则会循环使用所有掩膜(如 1, 2, 3, 1, 2…)
– 加上 SAMEMASK 后,所有轨道都使用同一个掩膜编号(与第一条轨道相同)
LAYER layerName ... LAYER M1 M2 指定该轨道所使用的布线层名称(来自 LEF 文件定义)。可以指定多个层,每个层都会应用相同的轨道配置。
常用层名包括:M1, M2, …, V1, V2 等。

🔍 示例完整 TRACKS 定义

TRACKS X 0 DO 20 STEP 10 MASK 1 SAMEMASK LAYER M1 ;

✅ 各部分含义解析:

部分 含义
TRACKS 定义一组布线轨道
X 0 轨道方向为 X(垂直线),起始于 x=0
DO 20 总共生成 20 条轨道
STEP 10 每条轨道间隔 10 dbu
MASK 1 SAMEMASK 所有轨道都使用掩膜编号 1,不切换其他掩膜
LAYER M1 仅适用于金属层 M1 上的布线轨道

🧩 使用场景分类总结

场景 对应关键字 说明
布线轨道定义 TRACKS, X/Y, START, STEP, DO 为全局布线器提供布线路径参考,确保布线符合物理规则。
多层统一轨道规划 LAYER M1 M2 M3 多个金属层共享同一组轨道,有助于优化长线资源分配。
多重曝光支持 MASK, SAMEMASK 在先进工艺(如 7nm 及以下)中,用于控制不同颜色的轨道分配,满足多重曝光规则。
电源网络专用轨道 TRACKS Y ... 有时为电源网络单独定义水平轨道,便于电源网络的布线。

✅ 其他典型 TRACKS 定义示例

示例 1:定义多个金属层的轨道

TRACKS Y 0 DO 25 STEP 8 LAYER M2 M3 M4;
  • 定义了在 Y 方向(水平线)上,从 y=0 开始,每隔 8 dbu 画一条线,总共 25 条轨道。
  • 应用于 M2、M3、M4 三层。

示例 2:定义垂直轨道并应用于多个层

TRACKS X 500 DO 100 STEP 20 LAYER M1 M2;
  • 从 x=500 开始,每隔 20 dbu 画一条垂直轨道,共 100 条
  • 应用于 M1 和 M2 层

📝 小贴士

  • TRACKS 是后端布局布线阶段非常关键的数据结构,直接影响自动布线器如何安排信号线走向。
  • 轨道必须覆盖整个 DIEAREA,否则可能报错或出现无法布线区域。
  • 轨道方向应与标准单元行(ROW)方向配合,以保证最优布线效率。
  • 多重曝光工艺中,建议使用 MASK + SAMEMASK 明确指定轨道所属掩膜,避免违反 DP 规则。


📌 DEF 中的 SPECIALNETS 详解

关键字 语法示例 作用说明
SPECIALNETS numNets ; SPECIALNETS 10; 声明本节中将定义的特殊网络(special net)总数。必须以数字开头,用于预分配内存或验证完整性。
- netName - vdd_ring 定义一个特殊网络名称。每个 special net 可以包含多个组件引脚或 I/O 引脚,如电源、地、时钟等。
( compName pinName ) ( u1 vdd ) ( u2 vdd ) 列出属于该 special net 的所有引脚连接。例如:标准单元实例 u1vdd 引脚连接到这个特殊网络。
+ VOLTAGE volts + VOLTAGE 1.0 指定该 net 的电压值(单位通常是伏特),用于电源网络。便于工具识别电压域、进行 IR 分析等。
specialWiring NEW metal1 50 ( 200 100 ) VIAGEN21_2 DO 10 BY 20 STEP 1000 2000 ( 200 200 ) 描述该特殊网络的物理布线路径,通常由“特殊布线器”手动创建或固定布线。工具不应修改这些路径。常用于电源环、主干电源网络等。
+ SOURCE {DIST | NETLIST | TIMING | USER} + SOURCE NETLIST 指定该 net 的来源类型:
NETLIST:来自原始网表
DIST:分布生成(如 filler cells, tie-high/low 等)
TIMING:时序驱动插入
USER:用户手动添加
+ FIXEDBUMP + FIXEDBUMP 表示该 net 是一个固定 Bump(凸块)网络,不能被重新分配到其他引脚。常用于 Flip-Chip 设计中的 bump net,确保 bump 不被自动优化工具移动或删除。
+ ORIGINAL netName + ORIGINAL vdd_main 指明该 net 是从哪个原始 net 分裂而来的。用于分区或层次化设计中,帮助工具理解 net 的继承关系。
+ USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL | TIEOFF} + USE POWER 指定该 net 的用途类型,影响后续工具处理方式:
POWER: 电源网络,需特殊布线规则
GROUND: 地网络
CLOCK: 时钟网络,影响时钟树综合
SCAN: 扫描链相关网络
TIEOFF: 固定电平网络(如 tie-high/tie-low)
SIGNAL: 一般信号网络
RESET: 复位网络
ANALOG: 模拟信号网络
+ PATTERN {BALANCED | STEINER | TRUNK | WIREDLOGIC} + PATTERN BALANCED 指定该 net 的布线模式:
BALANCED:最小化延迟差异(适合时钟)
STEINER:最短路径布线(默认)
TRUNK:全局布线优化
WIREDLOGIC:ECL 设计专用
+ ESTCAP wireCapacitance + ESTCAP 0.12 预估该 net 的寄生电容(单位 pF 或 fF),用于时序驱动布局。可提高时序预测准确性。
+ WEIGHT weight + WEIGHT 5 设置该 net 的权重,在布线优先级中起作用。数值越大越优先。可用于控制关键路径、电源网络等的布线优先级。
+ PROPERTY {propName propVal}... + PROPERTY IS_POWER TRUE 为 net 添加自定义属性,需在 PROPERTYDEFINITIONS 中预先定义。可用于标记某些网络的用途或特征,便于后续流程识别和处理。

🔍 示例完整 SPECIALNET 定义

SPECIALNETS 2 ;
- VDD + USE POWER + VOLTAGE 1.0 + SOURCE NETLIST
  ( u_cpu vdd )
  ( u_pll vdd )
  NEW metal1 50 ( 0 0 ) ( 1000 0 ) VIA via1 ( 500 0 ) ;

- CLK + USE CLOCK + PATTERN BALANCED + WEIGHT 10
  ( u_ff0 clk )
  ( u_ff1 clk )
  NEW metal3 10 ( 0 100 ) ( 800 100 ) ;
END SPECIALNETS

✅ 各部分含义解析:

部分 含义
SPECIALNETS 2 ; 声明接下来要定义两个特殊网络
- VDD ... 定义一个名为 VDD 的特殊网络
+ USE POWER 标识为电源网络
+ VOLTAGE 1.0 电压为 1.0V
+ SOURCE NETLIST 来源于原始网表
( u_cpu vdd ) ... 连接了两个模块的 vdd 引脚
NEW metal1 ... 指定了该电源网络的物理布线路径
- CLK ... 定义另一个名为 CLK 的特殊网络
+ USE CLOCK 标识为时钟网络
+ PATTERN BALANCED 使用平衡布线模式,减少延迟差异
+ WEIGHT 10 设置较高布线优先级
NEW metal3 ... 指定时钟网络的布线路径

🧩 使用场景分类总结

场景 对应关键字 说明
电源网络定义 USE POWER, VOLTAGE, SPECIALWIRING 定义电源网络(如 VDD/VSS)及其布线路径,用于电源规划、IR 分析等。
时钟网络定义 USE CLOCK, PATTERN BALANCED 定义时钟网络,使用平衡布线策略,确保 clock skew 最小。
扫描链网络定义 USE SCAN 标记扫描链相关的网络,便于 DFT 工具识别并进行测试插入。
固定凸块网络 FIXEDBUMP 在 Flip-Chip 设计中锁定某些 Bump 的网络连接,防止被误删或重连。
布线优先级控制 WEIGHT 控制某些重要网络的布线优先级,如电源、时钟等。
寄生建模支持 ESTCAP 提供寄生电容估计,用于更精确的时序分析和优化。

📝 小贴士

  • SPECIALNETS 主要用于描述电源、地、时钟等需要特殊处理的网络。
  • SPECIALWIRING 中的布线路径是静态指定的,通常不会被自动布线器修改。
  • USE 字段非常重要,它决定了后续工具如何处理该网络(如是否做时钟树综合、是否做 IR drop 分析等)。
  • 如果你正在做先进封装(Flip-Chip)、多电源域(Power Domain)或 Clock Tree Synthesis(CTS),SPECIALNETS 是必不可少的一部分。

Special Wiring Statement 详解

在集成电路设计中,Special Wiring Statement 是用于定义特殊布线规则和路径的重要部分。这些规则通常应用于电源网络、地网络、时钟网络等需要特别处理的信号线。下面是对 Special Wiring Statement 中各个语法元素的详细解释:


📝 关键字与语法说明

1. 固定布线类型

+ COVER
  • 含义:表示这段布线是固定的,不能被自动布局工具或手动命令移动。
  • 用途:适用于电源网络、地网络等需要固定位置的布线。
  • 示例
    + COVER metal1 50 ( 0 0 ) ( 1000 0 )
    
+ FIXED
  • 含义:表示这段布线不能被自动布局工具移动,但可以被手动调整。
  • 用途:用于某些希望保留手动布线结果的情况。
  • 示例
    + FIXED metal2 30 ( 200 200 ) ( 800 200 )
    
+ ROUTED
  • 含义:表示这段布线是自动布线的,可以被后续优化移动。
  • 用途:用于普通信号线的定义。
  • 示例
    + ROUTED metal3 20 ( 300 300 ) ( 700 300 )
    

2. 屏蔽网络

+ SHIELD shieldNetName
  • 含义:表示这段布线是为名为 shieldNetName 的屏蔽网络服务的。
  • 用途:用于屏蔽敏感信号线,防止串扰。
  • 示例
    + SHIELD vdd_shield
    

3. 布线形状

+ SHAPE shapeType
  • 含义:指定布线形状类型。
  • 可选值
    • RING: 环形布线
    • PADRING: 垫环布线
    • BLOCKRING: 区块环布线
    • STRIPE: 条带布线
    • FOLLOWPIN: 跟随引脚布线
    • IOWIRE: I/O 线布线
    • COREWIRE: 核心区域布线
    • BLOCKWIRE: 区块布线
    • BLOCKAGEWIRE: 阻塞布线
    • FILLWIRE: 填充布线
    • FILLWIREOPC: 带有 OPC(光学邻近校正)的填充布线
    • DRCFILL: DRC(设计规则检查)填充布线
  • 示例
    + SHAPE RING
    

4. 光刻掩膜编号

+ MASK maskNum
  • 含义:指定该段布线使用的光刻掩膜编号(用于多重曝光工艺)。
  • 用途maskNum 通常为 1~3。未指定则表示未上色。
  • 示例
    + MASK 2
    

5. 多边形布线区域

+ POLYGON layerName pt pt pt …
  • 含义:在指定层 layerName 上绘制一个多边形布线区域。
  • 要求:至少三个点,支持45度斜角。
  • 示例
    + POLYGON metal1 ( 0 0 ) ( 100 100 ) ( 200 0 )
    

6. 矩形布线区域

+ RECT layerName pt pt
  • 含义:在指定层 layerName 上绘制一个矩形布线区域。
  • 要求:两个对角坐标定义矩形,不可为零面积。
  • 示例
    + RECT metal2 ( 50 50 ) ( 150 150 )
    

7. 通孔插入

+ VIA viaName [orient] pt …
  • 含义:在指定坐标插入通孔 viaName,并可指定方向 orient(如 N, S, E, W)。
  • 用途:改变当前布线层到通孔连接的另一层。
  • 示例
    + VIA via1 N ( 100 100 )
    

🧩 使用场景分类总结

场景 对应关键字 说明
固定布线 COVER, FIXED 适用于电源网络、地网络等需要固定位置的布线,确保关键网络不受自动布局影响。
自动布线 ROUTED 用于普通信号线的定义,允许后续优化和调整。
屏蔽网络 SHIELD 用于保护敏感信号线,防止串扰,提高信号完整性。
复杂布线形状 SHAPE 定义不同类型的布线形状,满足特定设计需求,如环形、条带、跟随引脚等。
光刻掩膜控制 MASK 在多重曝光工艺中指定不同的掩膜编号,实现精细控制。
多边形/矩形布线 POLYGON, RECT 绘制复杂几何图形的布线区域,适用于特殊设计需求。
通孔管理 VIA 插入通孔并指定方向,实现层间连接,确保信号连续性。

📝 示例完整 Special Wiring 定义

SPECIALNETS 1 ;
- VDD + USE POWER + VOLTAGE 1.0 + SOURCE NETLIST
  ( u_cpu vdd )
  ( u_pll vdd )
  + COVER metal1 50 ( 0 0 ) ( 1000 0 )
  + SHAPE RING
  + VIA via1 N ( 500 0 )
  NEW metal1 50 ( 0 0 ) ( 1000 0 ) VIA via1 ( 500 0 ) ;

END SPECIALNETS

✅ 各部分含义解析:

部分 含义
+ COVER metal1 ... 定义一段固定布线,位于 metal1 层,宽度为 50,从 (0,0)(1000,0)
+ SHAPE RING 指定布线形状为环形
+ VIA via1 N ... (500,0) 处插入通孔 via1,方向为北(N)
NEW metal1 ... 新增一段布线,同样位于 metal1 层,宽度为 50,从 (0,0)(1000,0),并在 (500,0) 处插入通孔 via1

🧪 实践应用建议

  • 电源/地网络:使用 COVERFIXED 确保电源和地网络的稳定性,避免自动布局工具的干扰。
  • 时钟网络:结合 SHAPESTYLE 定义时钟树的布线样式,如环形 (RING) 或条带 (STRIPE)。
  • 敏感信号线:利用 SHIELD 为敏感信号线提供屏蔽,减少串扰影响。
  • 复杂几何布线:使用 POLYGONRECT 绘制复杂形状的布线区域,满足特殊设计需求。

📌 DEF 中的 NETS 详解

关键字 语法示例 作用说明
NETS numNets ; NETS 10; 声明本节中将定义的 net 数量。必须以数字开头,用于预分配内存或验证完整性。
- netName - clk_net 定义一个 net 名称。每个 net 可以包含多个组件引脚(compName pinName)或 I/O 引脚(PIN pinName)。
( compName pinName ) ( u1 in ) ( u2 out) 列出属于该 net 的所有引脚连接。例如:标准单元实例 u1in 引脚连接到这个 net。
MUSTJOIN ( compName pinName ) MUSTJOIN ( ram_a data_in ) 用于定义“必须连接”的引脚组。这些引脚必须连在一起,系统会自动生成对应的 net 名称。通常在 LEF 中已定义,常用于宏模块接口。
+ SHIELDNET shieldNetName + SHIELDNET vdd_ring 指定该 net 被另一个特殊 net(如电源)屏蔽,用于减少串扰干扰。shieldNetName 必须已在 SPECIALNETS 中定义。
+ VPIN vpinName [LAYER layerName] pt pt<br>[PLACED pt orient | FIXED pt orient | COVER pt orient] + VPIN vpin_1 LAYER M2 (100 200) (150 250) FIXED (300 400) N 定义虚拟引脚(virtual pin),用于连接非标准逻辑单元(如 bump、pad、bonding wire 等)。可以指定位置和方向。
+ SUBNET subnetName<br>[ ( {compName pinName | PIN pinName | VPIN vpinName} ) ] ...<br>[NONDEFAULTRULE rulename]<br>[regularWiring] ... + SUBNET sub_clk ( u1 clk ) ( u2 clk ) + NONDEFAULTRULE clock_rule + ROUTED M2 (100 200) (300 200) 定义子网(subnet),用于将 net 划分为更小的路由区域。可指定非默认布线规则和具体布线路径。适用于复杂网络拓扑管理。
+ XTALK class + XTALK high 指定该 net 的串扰等级(class),用于分析或优化。值由用户定义,如 low, medium, high。用于 ECO 或时序修复流程。
+ NONDEFAULTRULE ruleName + NONDEFAULTRULE clock_ndr 指定使用非默认布线规则(Non-Default Rule),常用于时钟、电源等特殊网络。规则在 LEF 中定义。
+ SOURCE {DIST | NETLIST | TEST | TIMING | USER} + SOURCE NETLIST 指定 net 的来源类型:
NETLIST: 来自原始网表
DIST: 分布生成(如 filler cells)
TEST: 测试插入
TIMING: 时序驱动插入
USER: 用户手动添加
+ FIXEDBUMP + FIXEDBUMP 表示该 net 是一个固定 Bump(凸块)网络,不能被重新分配到其他引脚。常用于 Flip-Chip 设计中的 bump net。
+ FREQUENCY frequency + FREQUENCY 100e6 指定该 net 的频率(单位 Hz),用于 AC 电流密度检查或 via 数量选择。适用于高频信号线。
+ ORIGINAL netName + ORIGINAL clk_div 指明该 net 是从哪个原始 net 分裂而来的。用于分区或层次化设计中,帮助工具理解 net 的继承关系。
+ USE {ANALOG | CLOCK | GROUND | POWER | RESET | SCAN | SIGNAL | TIEOFF} + USE CLOCK 指定该 net 的用途类型,影响后续工具处理方式:
POWER: 电源网络,需特殊布线规则
GROUND: 地网络
CLOCK: 时钟网络,影响时钟树综合
SCAN: 扫描链相关网络
TIEOFF: 固定电平网络(如 tie-high/tie-low)
SIGNAL: 一般信号网络
RESET: 复位网络
ANALOG: 模拟信号网络
+ PATTERN {BALANCED | STEINER | TRUNK | WIREDLOGIC} + PATTERN BALANCED 指定该 net 的布线模式:
BALANCED: 最小化延迟差异(适合时钟)
STEINER: 最短路径布线(默认)
TRUNK: 全局布线优化
WIREDLOGIC: ECL 设计专用
+ ESTCAP wireCapacitance + ESTCAP 0.12 预估该 net 的寄生电容(单位 pF 或 fF),用于时序驱动布局。提高时序预测准确性。
+ WEIGHT weight + WEIGHT 5 设置该 net 的权重,在布线优先级中起作用。数值越大越优先。可用于控制关键路径、电源网络等的布线优先级。
+ PROPERTY {propName propVal}... + PROPERTY IS_CLOCK TRUE 为 net 添加自定义属性,需在 PROPERTYDEFINITIONS 中预先定义。可用于标记某些网络的用途或特征,便于后续流程识别和处理。

🔍 示例完整 NET 定义

NETS 2 ;
- CLK + USE CLOCK + PATTERN BALANCED + WEIGHT 10
  ( u_ff0 clk )
  ( u_ff1 clk )
  + NONDEFAULTRULE clock_ndr
  + ESTCAP 0.08 ;

- DATA_BUS + USE SIGNAL + XTALK medium
  ( u_cpu data[0] )
  ( u_ram data_in )
  + SUBNET data_subnet
    ( u_mux0 out )
    ( u_reg0 in )
    + ROUTED M2 ( 0 0 ) ( 500 0 ) ;
END NETS

✅ 各部分含义解析:

部分 含义
NETS 2 ; 声明接下来要定义两个普通网络
- CLK ... 定义一个名为 CLK 的时钟网络
+ USE CLOCK 标识为时钟网络
+ PATTERN BALANCED 使用平衡布线模式,减少延迟差异
+ WEIGHT 10 设置较高布线优先级
( u_ff0 clk ) ... 连接了两个触发器的 clk 引脚
+ NONDEFAULTRULE clock_ndr 使用自定义的非默认布线规则
+ ESTCAP 0.08 设置预估寄生电容
- DATA_BUS ... 定义另一个名为 DATA_BUS 的普通信号网络
+ USE SIGNAL 标识为一般信号网络
+ XTALK medium 设置中等串扰等级
+ SUBNET data_subnet ... 定义子网并指定布线路径

🧩 使用场景分类总结

场景 对应关键字 说明
时钟网络定义 USE CLOCK, PATTERN BALANCED 定义时钟网络,使用平衡布线策略,确保 clock skew 最小。
电源/地网络引用 SHIELDNET 引用电源网络作为屏蔽层,减少敏感信号线的串扰。
虚拟引脚定义 VPIN 用于封装设计中的 bump、pad、bonding wire 等非标准逻辑单元连接。
子网划分 SUBNET 将大型网络拆分成子网,便于局部布线优化和规则应用。
布线优先级控制 WEIGHT 控制某些重要网络的布线优先级,如时钟、关键路径等。
寄生建模支持 ESTCAP 提供寄生电容估计,用于更精确的时序分析和优化。
非默认布线规则 NONDEFAULTRULE 应用于特定网络(如时钟、电源),使用 LEF 中定义的高级布线规则。
串扰分析与优化 XTALK 根据设定的串扰等级,辅助 ECO 或时序修复流程。

📝 小贴士

  • NETS 主要用于描述普通信号网络的连接关系和布线约束。
  • USE 字段非常重要,它决定了后续工具如何处理该网络(如是否做时钟树综合、是否做 IR drop 分析等)。
  • 如果你正在做先进封装(Flip-Chip)、多电源域(Power Domain)或 Clock Tree Synthesis(CTS),NETS 是必不可少的一部分。


📌 DEF 中的 PINS 详解

关键字 是否必须 描述 示例
- pinName ✅ 必须 引脚名称 - clk
+ NET netName ✅ 必须 引脚连接的内部网络名 + NET vdd
+ SPECIAL ❌ 可选 表示这是一个特殊引脚(如电源、时钟等) + SPECIAL
+ DIRECTION {INPUT | OUTPUT | INOUT | FEEDTHRU} ❌ 可选 引脚方向:
INPUT: 输入
OUTPUT: 输出
INOUT: 双向
FEEDTHRU: 穿通引脚(仅用于模块定义)
+ DIRECTION INPUT
+ NETEXPR "netExprPropName defaultNetName" ❌ 可选 网络表达式属性,用于动态网络命名或默认网络指定 + NETEXPR "clock" "clk"
+ SUPPLYSENSITIVITY powerPinName ❌ 可选 敏感于某个电源引脚,表示该引脚依赖于特定电源 + SUPPLYSENSITIVITY vdd_pin
+ GROUNDSENSITIVITY groundPinName ❌ 可选 敏感于某个地引脚,表示该引脚依赖于特定地 + GROUNDSENSITIVITY gnd_pin
+ USE {SIGNAL | POWER | GROUND | CLOCK | TIEOFF | ANALOG | SCAN | RESET} ❌ 可选 引脚用途类型,影响后续工具处理方式:
POWER: 电源引脚
GROUND: 地引脚
CLOCK: 时钟引脚
TIEOFF: 固定电平信号
SIGNAL: 一般信号引脚
ANALOG: 模拟信号引脚
SCAN: 扫描链引脚
RESET: 复位引脚
+ USE POWER
+ ANTENNAMODEL {OXIDE1 | OXIDE2 | OXIDE3 | OXIDE4} ❌ 可选 天线模型类型,用于天线效应分析与修复 + ANTENNAMODEL OXIDE2
+ ANTENNAPINGATEAREA value [LAYER layerName] ❌ 可选 引脚连接的栅极面积,用于天线规则检查 + ANTENNAPINGATEAREA 1000 LAYER m1
+ ANTENNAPINPARTIALMETALAREA value [LAYER layerName] ❌ 可选 引脚连接的部分金属面积,用于天线效应分析 + ANTENNAPINPARTIALMETALAREA 500 LAYER m2
+ ANTENNAPINDIFFAREA value [LAYER layerName] ❌ 可选 扩散区面积,用于天线规则计算 + ANTENNAPINDIFFAREA 300 LAYER m1
+ ANTENNAPINMAXAREACAR value LAYER layerName ❌ 可选 最大累积天线比(基于金属面积),用于天线效应控制 + ANTENNAPINMAXAREACAR 200 LAYER m1
+ ANTENNAPINMAXSIDEAREACAR value LAYER layerName ❌ 可选 基于侧壁面积的最大 CAR(Cumulative Antenna Ratio) + ANTENNAPINMAXSIDEAREACAR 150 LAYER m1
+ ANTENNAPINMAXCUTCAR value LAYER layerName ❌ 可选 基于通孔面积的最大 CAR,用于天线效应优化 + ANTENNAPINMAXCUTCAR 180 LAYER via1
+ PORT ❌ 可选 定义该引脚的多个端口形状,用于物理描述(如 I/O pad 的多层覆盖) + PORT ...
+ LAYER layerName [MASK maskNum] [SPACING minSpacing | DESIGNRULEWIDTH effectiveWidth] pt pt ❌ 可选 定义金属层,用于描述引脚的物理布局 + LAYER metal3 (0 0) (10 10)
+ POLYGON layerName [MASK maskNum] pt pt pt ... ❌ 可选 定义多边形形状,用于复杂几何图形 + POLYGON metal3 (0 0 10 0 10 10 0 10)
+ VIA viaName [MASK viaMaskNum] pt ❌ 可选 定义通孔形状,用于连接不同金属层 + VIA via1 (100 100)
+ COVER pt orient ❌ 可选 引脚固定位置且不可被移动,常用于电源/地引脚锁定 + COVER (100 200) N
+ FIXED pt orient ❌ 可选 引脚固定位置但可交互修改,适用于手动布线结果保留 + FIXED (100 200) S
+ PLACED pt orient ❌ 可选 引脚已放置位置,表示该引脚已经过自动或手动摆放 + PLACED (100 200) E

🔍 示例完整 PIN 定义

PINS 3 ;
- CLK + NET clk_in + DIRECTION INPUT + USE CLOCK + PLACED ( 100 200 ) E
- VDD + NET vdd + DIRECTION INOUT + USE POWER + SPECIAL + COVER ( 0 0 ) N
  + LAYER M1 ( -50 -50 ) ( 50 50 )
- GND + NET gnd + DIRECTION INOUT + USE GROUND + SPECIAL + COVER ( 0 0 ) S
  + LAYER M1 ( -50 -50 ) ( 50 50 )
END PINS

✅ 各部分含义解析:

部分 含义
- CLK ... 定义一个名为 CLK 的输入引脚,连接到 clk_in 网络
+ DIRECTION INPUT 设置为输入方向
+ USE CLOCK 标识为时钟引脚
+ PLACED ( 100 200 ) E 已放置在 (100, 200),方向为东
- VDD ... 定义一个电源引脚,连接到 vdd 网络
+ USE POWER 标识为电源引脚
+ SPECIAL 特殊引脚,通常用于电源/地
+ COVER ... 位置固定,不能移动
+ LAYER M1 ... 使用 M1 层绘制物理区域
- GND ... 定义一个地引脚,连接到 gnd 网络

🧩 使用场景分类总结

场景 对应关键字 说明
标准引脚定义 pinName, NET, DIRECTION, USE 用于定义基本的输入输出引脚,适用于大多数数字逻辑单元。
电源/地引脚 USE POWER/GROUND, SPECIAL, COVER 定义固定电源/地引脚,防止被自动工具移动。
天线规则支持 ANTENNAMODEL, ANTENNAPINGATEAREA, ANTENNAPINMAXAREACAR 用于先进工艺下的天线效应分析与修复,确保制造可靠性。
I/O Pad 引脚定义 PORT, LAYER, POLYGON, VIA 定义复杂的 I/O 引脚结构,包括多层金属、通孔等。
时钟引脚 USE CLOCK, PLACED/FIXED 用于定义关键时钟路径,通常需要精确放置并避免干扰。
复用引脚配置 NETEXPR 动态指定网络名,便于支持多模式或多配置设计。
电源敏感性定义 SUPPLYSENSITIVITY, GROUNDSENSITIVITY 用于模拟电路或低功耗设计中,表示某些引脚依赖于特定电源/地。

📝 小贴士

  • PINS 是芯片级或模块级接口定义的关键部分,直接影响顶层布线、封装设计和测试流程。
  • USE 字段非常重要,它决定了后续工具如何处理该引脚(如是否做时钟树综合、是否做 IR drop 分析等)。
  • 如果你正在做先进封装(Flip-Chip)、多电源域(Power Domain)或 Clock Tree Synthesis(CTS),PINS 是必不可少的一部分。


📌 DEF 中的 SCANCHAINS 详解

关键字 是否必须 描述 示例
- chainName ✅ 必须 扫描链的名称 - chain1_clock1
+ PARTITION partitionName ❌ 可选 定义该链所属的分区组,用于链间兼容性判断(如时钟域一致) + PARTITION clock1
+ MAXBITS maxbits ❌ 可选(若使用 PARTITION 则推荐设置) 设置该链在分区内的最大比特数限制,防止扫描链过长 MAXBITS 1000
+ COMMONSCANPINS ( IN pin ) ( OUT pin ) ❌ 可选 定义所有组件共用的扫描入/出引脚,简化链定义 + COMMONSCANPINS (IN SI) (OUT SO)
+ START {fixedInComp | PIN} [outPin] ✅ 必须 定义扫描链的起点,可以是组件或 I/O 引脚 + START block1/reg_0 Q
+ STOP {fixedOutComp | PIN} [inPin] ✅ 必须 定义扫描链的终点 + STOP block1/reg_end SD
+ FLOATING {floatingComp [( IN pin )] [( OUT pin )] [( BITS numBits )]} ❌ 可选 定义浮动组件列表,工具可自由排序其顺序 block1/regA (IN SD) (OUT QZ)
+ ORDERED {fixedComp [( IN pin )] [( OUT pin )] [( BITS numBits )]} ❌ 可选 定义有序组件列表,顺序不可改变 block1/mux1 (IN A) (OUT X)
( IN pin ) ❌ 可选 组件上的扫描输入引脚 (IN SD)
( OUT pin ) ❌ 可选 组件上的扫描输出引脚 (OUT QZ)
( BITS numBits ) ❌ 可选 组件的位宽(如寄存器数组为4位) (BITS 4)

🔍 示例完整 SCANCHAIN 定义

SCANCHAINS 2 ;
- scan_chain_cpu
  + COMMONSCANPINS (IN SI) (OUT SO)
  + START PIN SI
  + STOP PIN SO
  + ORDERED {
    cpu_reg0 (IN SD) (OUT Q),
    cpu_reg1 (IN Q) (OUT Q),
    cpu_reg2 (IN Q) (OUT Q)
  }
  + FLOATING {
    cpu_mux0 (IN A) (OUT Z),
    cpu_latch0 (IN D) (OUT Q)
  }

- scan_chain_dma
  + PARTITION clock_dma
  + MAXBITS 512
  + START dma_reg0 Q
  + STOP dma_reg_end SD
  + ORDERED {
    dma_reg0 (IN SD) (OUT Q),
    dma_reg1 (IN Q) (OUT Q)
  }
END SCANCHAINS

✅ 各部分含义解析:

部分 含义
- scan_chain_cpu ... 定义一个名为 scan_chain_cpu 的扫描链
+ COMMONSCANPINS ... 使用统一的扫描入(SI)和扫描出(SO)引脚
+ START PIN SI 起始点为芯片级输入引脚 SI
+ STOP PIN SO 结束点为芯片级输出引脚 SO
+ ORDERED { ... } 定义一组顺序固定的寄存器
+ FLOATING { ... } 定义一组工具可自由排序的组件(如 multiplexer、latch 等)
- scan_chain_dma ... 定义另一个名为 scan_chain_dma 的扫描链
+ PARTITION clock_dma 归属于 clock_dma 分区,确保时钟一致性
+ MAXBITS 512 最大允许 512 个扫描位
+ START dma_reg0 Q 起始于模块 dma_reg0Q 输出端
+ STOP dma_reg_end SD 结束于模块 dma_reg_endSD 输入端

🧩 使用场景分类总结

场景 对应关键字 说明
基本扫描链定义 START, STOP, ORDERED, FLOATING 定义扫描链的起止点与内部组件连接关系,适用于大多数数字逻辑单元。
共享扫描引脚 COMMONSCANPINS 用于减少引脚数量,多个寄存器共享统一的扫描入/出引脚。
扫描链分区管理 PARTITION, MAXBITS 用于将不同时钟域或功能块的扫描链隔离管理,便于测试调度和优化。
固定顺序扫描链 ORDERED 某些设计要求扫描顺序不能被自动调整,例如带反馈路径的设计。
浮动顺序扫描链 FLOATING 允许工具根据布局布线情况进行优化排序,提升物理实现效率。
扫描链长度控制 MAXBITS 控制单条扫描链的最大位数,避免测试时间过长或功耗过高。

📝 小贴士

  • SCANCHAINSDFT(Design for Testability) 流程中的核心内容之一。
  • 合理划分扫描链结构,有助于:
    • 缩短测试时间
    • 减少测试向量复杂度
    • 提高故障覆盖率
    • 降低功耗
  • 如果你正在做 Scan Insertion、ATPG(自动测试模式生成) 或 Scan ReorderingSCANCHAINS 的定义至关重要。
  • 在先进工艺节点中,扫描链的长度、分区、电源域匹配等都需要严格控制。


网站公告

今日签到

点亮在社区的每一天
去签到