📄 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 单位)– minLayer 和 maxLayer 是起止金属层范围 |
+ 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} |
X 或 Y |
表示轨道方向: – X : 垂直轨道(vertical tracks),即竖直线– Y : 水平轨道(horizontal tracks),即水平线 |
start |
X 0 或 Y 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 的所有引脚连接。例如:标准单元实例 u1 的 vdd 引脚连接到这个特殊网络。 |
+ 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 |
🧪 实践应用建议
- 电源/地网络:使用
COVER
或FIXED
确保电源和地网络的稳定性,避免自动布局工具的干扰。 - 时钟网络:结合
SHAPE
和STYLE
定义时钟树的布线样式,如环形 (RING
) 或条带 (STRIPE
)。 - 敏感信号线:利用
SHIELD
为敏感信号线提供屏蔽,减少串扰影响。 - 复杂几何布线:使用
POLYGON
和RECT
绘制复杂形状的布线区域,满足特殊设计需求。
📌 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 的所有引脚连接。例如:标准单元实例 u1 的 in 引脚连接到这个 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_reg0 的 Q 输出端 |
+ STOP dma_reg_end SD |
结束于模块 dma_reg_end 的 SD 输入端 |
🧩 使用场景分类总结
场景 | 对应关键字 | 说明 |
---|---|---|
基本扫描链定义 | START , STOP , ORDERED , FLOATING |
定义扫描链的起止点与内部组件连接关系,适用于大多数数字逻辑单元。 |
共享扫描引脚 | COMMONSCANPINS |
用于减少引脚数量,多个寄存器共享统一的扫描入/出引脚。 |
扫描链分区管理 | PARTITION , MAXBITS |
用于将不同时钟域或功能块的扫描链隔离管理,便于测试调度和优化。 |
固定顺序扫描链 | ORDERED |
某些设计要求扫描顺序不能被自动调整,例如带反馈路径的设计。 |
浮动顺序扫描链 | FLOATING |
允许工具根据布局布线情况进行优化排序,提升物理实现效率。 |
扫描链长度控制 | MAXBITS |
控制单条扫描链的最大位数,避免测试时间过长或功耗过高。 |
📝 小贴士
SCANCHAINS
是 DFT(Design for Testability) 流程中的核心内容之一。- 合理划分扫描链结构,有助于:
- 缩短测试时间
- 减少测试向量复杂度
- 提高故障覆盖率
- 降低功耗
- 如果你正在做 Scan Insertion、ATPG(自动测试模式生成) 或 Scan Reordering,
SCANCHAINS
的定义至关重要。 - 在先进工艺节点中,扫描链的长度、分区、电源域匹配等都需要严格控制。