电路板
设计规则检查
每个 PCB 布局规则及其 id、严重级别和运行条件:铜、钻孔、阻焊、丝印、组装、铺铜区、信号、测试访问和布局。
布局检查从规则注册表运行,每条规则都有一个稳定的 id、一个类别(copper、drill、mask、silk、assembly、zone、signal、test、placement)、一个默认严重级别,以及一个针对电路板的条件:内层规则仅在铜层数达到 4 层或以上时运行,过孔填充规则仅在过孔位于焊盘内时运行,BGA 规则仅在存在 BGA 时运行。每条规则的消息都以方括号内的 id 开头,例如 [via-cuts-pad]。agentee drc NAME --list(MCP drc 配合 list = true)会打印每条规则及其类别、严重级别,以及它是否适用于此电路板及原因;agentee drc NAME 仅打印布局的规则消息。
[drc] # in the board file
disable = ["silk-width"] # rule ids to skip; their checks are not computed, so with silk-text
# and silk-hidden off `agentee silk` has nothing to move
severity = { "starved-thermal" = "error", "via-in-pad" = "warning" } # info | warning | error
tombstone_ratio = 3 # copper or feed width one chip pad may have over the other| id | 严重级别 | 运行条件 | 检查项 |
|---|---|---|---|
via-cuts-pad | 错误 | 始终 | 过孔的铜与 SMD 焊盘重叠或接触,但其钻孔未完全位于焊盘内:焊锡会沿过孔孔壁流下,损坏焊盘边缘。其他网络的过孔接触焊盘时,报告为 short。 |
via-annulus-past-pad | 警告 | 焊盘内的过孔 | 钻孔位于焊盘内,但过孔的环宽延伸到了阻焊层下的焊盘边缘之外。 |
via-in-pad | 信息 | 焊盘内的过孔 | 统计属于其自身网络且钻孔位于焊盘内的 SMD 焊盘中的过孔数量;fab-notes.txt 要求板厂恰好填充并封顶这些过孔(IPC-4761 类型 VII)。 |
via-in-pad-fill | 错误 | 焊盘内的过孔 | 焊盘内的过孔钻孔宽度超过 max_filled_via_drill,或其过孔类型设置的 fill 不是 filled_capped(IPC-4761 类型 VII)。 |
hole-to-smd-pad | 警告 | 始终 | 过孔孔壁距离其自身网络(或无网络)且不接触的 SMD 焊盘小于 min_hole_to_smd_pad;焊膏和焊锡可能流入孔中。 |
drill-size | 错误 | 始终 | 焊盘孔小于 min_drill(镀孔)或 min_npth_drill(非镀孔),或大于 max_drill(更大的孔作为开槽处理,绘制为切口)。过孔尺寸在电路板的 [[vias]] 中检查。 |
slot-size | 错误 | 长圆孔 | 长圆孔宽度小于 min_plated_slot_width 或 min_npth_slot_width,或长度小于其宽度的两倍。 |
aspect-ratio | 错误 | 始终 | 镀孔的深度(其穿过的铜和介质)与钻孔直径之比超过 max_aspect_ratio。 |
hole-to-copper | 错误 | 始终 | 过孔或镀孔焊盘孔壁距离其穿过的层上其他网络的铜小于 min_via_hole_to_copper 或 min_pth_hole_to_copper:走线、焊盘、过孔、铺铜。 |
inner-hole-to-copper | 错误 | 4 层及以上铜层 | 镀孔焊盘孔壁距离内层上其他网络的铜小于 min_inner_pth_hole_to_copper。 |
npth-to-copper | 错误 | 非镀孔 | 非镀孔孔壁距离任何铜(包括其自身网络的铺铜)小于 min_npth_to_copper。 |
hole-to-edge | 错误 | 非镀孔 | 非镀孔孔壁距离电路板轮廓或电路板切口小于 min_copper_to_edge,或穿过轮廓/切口。 |
smd-pad-gap | 错误 | 始终 | 不同网络的 SMD 焊盘间距小于 min_smd_pad_gap,每对拥有最近焊盘的元件输出一行。 |
pad-to-edge | 错误 | 始终 | 焊盘铜距离电路板轮廓或电路板切口小于 min_copper_to_edge;标记为 edge = true 的焊盘除外。 |
edge-pad-reach | 警告 | 始终 | 标记为 edge = true 的焊盘未延伸至电路板轮廓。 |
starved-thermal | 警告 | 铺铜区 | 焊盘与其自身网络的铺铜连接面积小于其轮廓的一半,连接辐条少于两条且宽度小于 min_track_width,且总铜量小于焊盘自身宽度。 |
part-to-edge | 警告 | 元件 | SMD 焊盘距离轮廓或电路板切口小于 min_part_to_edge,此处分板应力可能导致元件开裂;跳过基准点、安装孔和带有 edge 焊盘的元件。 |
part-body-to-edge | 信息 | 元件 | 元件本体距离轮廓或电路板切口小于 min_body_to_edge,或超出轮廓(超出切口视为超出)(装配 DFM 指南:元件距边缘不超过 1 mm)。本体指板厂轮廓,否则为占位区,否则为焊盘铜,消息中会指明是哪一种;跳过基准点、安装孔、带有 edge 焊盘的元件以及 overhang = true 的封装。 |
fiducials | 信息 | 元件 | 电路板上没有名称类似 Fiducial 的封装。 |
tooling-holes | 信息 | 元件 | 没有 1.5 mm 或更大的非镀孔。 |
bga-pad | 错误 | 存在 BGA | BGA 焊盘(16 个或更多圆形 SMD 焊盘)小于 min_bga_pad。 |
bga-pitch | 错误 | 存在 BGA | 球间距小于 min_bga_pitch。 |
bga-pad-ratio | 警告 | 存在 BGA | 焊盘直径不在间距的 40% 到 65% 之间(IPC-7351 焊盘尺寸)。 |
paste-without-mask | 警告 | 元件 | 铜焊盘有焊膏但该侧没有阻焊开窗,导致钢网将焊膏印在阻焊层上。 |
mlcc-flex-zone-case | 信息 | 陶瓷电容 | 0805(公制 2012)或更大封装的陶瓷电容位于轮廓、电路板角落、电路板切口、安装孔(MountingHole* 封装)或 2 mm 或更大的非镀孔的 flex_zone 范围内(Knowles:应力区通常在 PCB 边缘或固定点 5 mm 以内);芯片越长,其两端承受的应变越大。 |
mlcc-flex-zone | 信息 | 陶瓷电容 | 较小的陶瓷电容位于 flex_zone 范围内,且其长轴指向最近的边缘、角落或孔(Murata FAQ:将芯片水平放置于应力方向,使其长轴沿边缘方向)。 |
mlcc-flex-zone-info | 信息 | 陶瓷电容 | 统计位于 flex_zone 范围内且已沿边缘放置的较小陶瓷电容数量。 |
tombstone-risk | 信息 | 0603 或更小的芯片 | 0603(公制 1608)或更小的双焊盘 SMD 元件,其焊盘尺寸或形状不同,一个焊盘有另一个没有过孔,或其所在层上距离一个焊盘 0.3 mm 范围内的铜(其网络的走线、过孔、铺铜)超过另一个焊盘的 tombstone_ratio(默认 3)倍;通过热焊盘连接的焊盘按其辐条宽度与另一个焊盘上的走线宽度对比,且尚未有走线、过孔或铺铜的焊盘不参与比较;先受热的一端先润湿,会将元件立起(EMS DFM 指南:对称焊盘且两端铜量平衡)。 |
tall-part-shadow | 信息 | 高度超过 3 mm 的元件 | 0603 或更小的双焊盘芯片距离高度超过 3 mm 的元件小于该元件的高度,从芯片焊盘测量到高大元件本体(EMS 经验法则 1:1:回流焊和检测中的阴影效应);高度来自封装的 height,否则来自 3D 视图在无模型时绘制的本体:其系列默认值(SOIC、QFN、排针、屏蔽罩)或名称中带有 _h1.25mm 的部分。 |
test-access | 信息 | 元件 | 探针侧无法访问的、[test] 部分要求测试的网络:没有测试点焊盘(位号 TP1 等,或名称为 TestPoint* 的封装),没有暴露的镀通孔焊盘(through_holes),没有未盖阻焊的过孔(vias)。具有阻抗目标的网络类中的网络,以及差分对的网络,因悬空段会损害它们而豁免并会被点名 |
test-pad-geometry | 信息 | 测试点 | 探针侧的测试点焊盘小于 min_test_pad,中心到中心距离小于 min_test_pad_pitch,到探针侧其他元件本体的距离小于 min_test_pad_to_body,到板边或工艺孔(非镀通孔和安装孔)的距离小于 min_test_pad_to_edge,或不在探针侧 |
placement-decoupling-distance | 信息 | 元件 | 电源与地之间的电容,其电源焊盘距离该电源上最近的 IC 引脚超过 decoupling_distance(3 mm),大于 1 uF 的储能电容为 2.5 倍该值 |
placement-crystal-distance | 信息 | 元件 | 晶振或振荡器(位号 Y,或名称类似晶振或振荡器的封装),其信号焊盘距离其网络上 IC 引脚超过 crystal_distance(5 mm) |
placement-large-part-off-centre | 信息 | 元件 | 大型芯片(BGA、引脚数 16 个以上且面积超过 25 mm2 的封装,否则为引脚数最多的元件),其占位区中心距离板中心到板边的距离超过 off_centre(0.6) |
placement-hot-parts-close | 信息 | 元件 | 两个发热元件的占位区距离小于 hot_distance(5 mm):本布局热仿真中功率 0.25 W 及以上的 [[sources]],以及这些仿真未列出的大型封装(占位区 49 mm2 及以上) |
placement-cluster-spread | 信息 | 元件 | 两引脚无源元件,其信号网络仅连接到一个 IC,且距离该 IC 引脚超过 cluster_spread(10 mm) |
placement-connector-not-at-edge | 信息 | 元件 | 连接器(边缘焊盘、overhang = true,或位号为 J/P 且非 Tag-Connect、U.FL 或测试焊盘),其占位区距离轮廓超过 connector_edge(3 mm) |
short | 错误 | 始终 | 两个不同网络的铜皮接触 |
clearance | 错误 | 始终 | 两个网络的铜皮距离小于其网络类间距中较大者(封装的 clearance 对其焊盘替代该值),或铜皮进入非镀通孔 |
unrouted | 错误 | 始终 | 网络的所有焊盘未通过走线、过孔和铺铜连接,点名分离的组 |
dangling-track | 警告 | 始终 | 走线末端未接触其网络的铜皮或铺铜 |
track-grazes-pad | 警告 | 始终 | 走线仅以边缘接触焊盘;应将中心线引入焊盘 |
copper-to-edge | 错误 | 始终 | 走线或过孔距离板轮廓或板切口小于 min_copper_to_edge,或超出板外(走线跨越切口即超出板外) |
pad-off-board | 错误 | 始终 | 焊盘在轮廓外或板切口内;标记为 edge = true 的焊盘豁免 |
stitching | 信息 | 始终 | 统计每个 [[stitching]] 条目放置的过孔数量 |
stitching-empty | 警告 | 始终 | 未放置过孔的 [[stitching]] 条目 |
fanout-empty | 警告 | 始终 | 未放置过孔的 [[fanouts]] 条目 |
hole-to-hole | 错误 | 始终 | 不同元件或过孔的孔壁距离小于 min_hole_to_hole,按第一对计数;仅当孔的层范围共享介质时计数,因此微孔与埋孔相邻不算一对 |
stacked-via | 错误 | 始终 | 同一位置、穿过同一介质的同网络过孔(钻两次),在 stacked_microvias 关闭时或压合顺序不符时(下层过孔钻孔步骤晚于上层)与另一过孔堆叠,或与受控深度过孔堆叠 |
via-lamination | 错误 | 始终 | 过孔的层范围和钻孔类型不匹配压合的任何钻孔步骤(参见压合),按过孔类型和层范围;消息点名板的 [[vias]] 条目,并按钻孔类型列出压合钻的所有层范围。板检查将布局放置的过孔类型留给此规则 |
neckdown | 信息 | 始终 | 走线宽度小于其网络类宽度但未低于 min_track_width,长度不超过网络类 neckdown 长度(默认 0.5 mm) |
class-width | 错误 | 始终 | 宽度小于其网络类宽度且非颈部收缩的走线 |
impedance-width | 警告 | 阻抗网络类 | 阻抗网络类的走线宽度不同,其阻抗变化 |
impedance-trace | 错误 | 阻抗网络类 | 阻抗网络类的走线,其宽度(含颈部收缩)或外层相邻铜皮使其阻抗超出网络类容差;焊盘或连接点颈部收缩长度内的间隙不检查 |
track-overlap | 错误 | 始终 | 同一网络的走线重叠,铜皮加倍 |
acute-turn | 警告 | 始终 | 走线折返超过 90 度,形成酸阱 |
zone-overlap | 错误 | 铺铜区 | 同一层两个网络的铺铜重叠,形成短路 |
zone-to-zone | 错误 | 铺铜区 | 同一层两个网络的铺铜距离小于其间距 |
zone-clearance | 错误 | 铺铜区 | 铺铜覆盖或过于接近其他网络的铜皮 |
zone-tips | 警告 | 铺铜区 | 铺铜尖端角度小于 30 度;增大铺铜的 min_width |
copper-neck | 警告 | 铺铜区 | 铺铜中颈部宽度小于铺铜 min_width 的 90%,铺铜本应打开;按最窄处计数 |
zone-islands | 信息 | 始终 | 未接触铺铜网络任何部分且被移除的铺铜孤岛 |
courtyard-overlap | 错误 | 元件 | 同一侧两个元件的占位区按轮廓重叠 |
courtyard-hole | 错误 | 元件 | 占位区覆盖其他元件的安装孔或非镀通孔 |
mask-web | 错误 | 始终 | 不同网络焊盘的阻焊开口小于 min_mask_web,每对元件一行;同一封装中 mask_web = false 的焊盘之间跳过 |
silk-text | 错误 | 始终 | 丝印文字拥挤其他文字、位于焊盘上、印在过孔上、跨越丝印轮廓或超出板外;位号获得清晰位置(agentee silk 将其移至该处) |
silk-hidden | 警告 | 始终 | 仅被其他元件本体遮挡的丝印文字 |
silk-text-height | 警告 | 始终 | 小于 min_silk_text_height 的丝印文字 |
silk-artwork | 错误 | 始终 | 位于焊盘上、覆盖丝印文字或超出板外的丝印图形 |
watermark | 错误 | 始终 | agentee vX.Y.Z-HASH 水印在丝印上没有清晰位置,或 [watermark] 位置不清晰;板厂拒绝无位置的板,禁用规则不会移除水印 |
silk-width | 警告 | 始终 | 板丝印线(布局的 [[graphics]],非文字)小于 min_silk_width,按最细线计数;封装丝印随封装检查 |
pair-skew | 错误 | 差分对 | 一对走线的偏差超过了其 max_skew 或网络类的 max_skew,并指明了需要加长的那条网络 |
pair-skew-info | 信息 | 差分对 | 每对走线在其限值内的偏差 |
pair-gap | 错误 | 差分对 | 一对走线并排走线,间距不同于网络类的 diff_gap,且超出 max_uncoupled |
pair-coupling | 警告 | 差分对 | 一对走线中少于 80% 的长度以该对间距并排走线 |
match-length | 错误 | 等长组 | 等长组中的某条走线偏离目标长度超过容差 |
interface-pair | 错误 | 接口 | 差分接口中某条网络没有配对伙伴 |
interface-impedance | 错误 | 接口 | 接口网络的网络类没有阻抗目标,阻抗超出窗口,或差分接口没有配对间距 |
interface-skew | 错误 | 接口 | 一对走线的偏差超过了接口的 max_skew |
interface-bus-skew | 错误 | 接口 | 数据信号的偏差超过了 max_bus_skew |
interface-clock-window | 错误 | 接口 | 数据信号相对于时钟到达时间超出了 clock_window |
interface-vias | 错误 | 接口 | 某条走线中的过孔数量超过了 max_vias |
interface-stub | 错误 | 接口 | 过孔残桩长度超过了 max_stub |
interface-return-via | 错误 | 接口 | 信号过孔在 return_via 范围内没有参考过孔 |
interface-length | 错误 | 接口 | 某条走线长度超过了 max_length |
interface-reference | 错误 | 接口 | 某条走线在超过 max_unreferenced 的长度内没有相邻的参考平面 |
布局规则是元件放置位置的指导,默认为提示;可通过 [drc] severity 提高其严重级别。其阈值位于电路板文件中:
[drc.placement]
decoupling_distance = "3mm" # supply pad of a decoupling cap to the IC pin
crystal_distance = "5mm"
cluster_spread = "10mm" # a passive to the only IC it serves
hot_distance = "5mm" # courtyard gap between large packages
connector_edge = "3mm" # connector courtyard to the outline
off_centre = 0.6 # fraction of the half width or height from the centre机械规则(part-body-to-edge、mlcc-flex-zone 规则、tombstone-risk、tall-part-shadow)是指导,默认为信息级别;可通过 [drc] severity 提高其严重级别。陶瓷电容是指封装名称为 C_* 或包含 Capacitor,或位号为 C 加数字的元件,且恰好有两个表面贴装焊盘,除非封装名称中包含 CP_、Tantal、Elec 或 Polymer;封装或布局中的 mlcc 会覆盖此推断。封装尺寸取自封装名称(1608Metric,否则为英制代码,如 0603),否则取自两个焊盘中心之间的距离,该距离接近本体长度。
未命名任何规则的标识符是警告。文件本身的错误(如原理图中不存在的网络、非铜层、无效的预设)不是规则,无法禁用。