agentee

电路板

设计规则检查

每个 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错误存在 BGABGA 焊盘(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),否则取自两个焊盘中心之间的距离,该距离接近本体长度。

未命名任何规则的标识符是警告。文件本身的错误(如原理图中不存在的网络、非铜层、无效的预设)不是规则,无法禁用。

docs/format.md · 面向智能体的 Markdown