4. 端口与激励的参数化配置
在 SIwave 的批量仿真流程中,端口与激励定义是最容易“一次做错、全批报废”的环节。原因在于:端口类型、参考地、去嵌长度、激励幅值与相位这五类参数,既决定了 S 参数的物理含义,也决定了后续所有扫描工况能否共用同一套端口拓扑。如果每个工况都手工改端口,批量脚本就失去了意义;反过来,如果端口定义过于笼统,又会导致差分对、单端信号和电源端口互相污染。本节的目标,是把这三类端口抽象成可参数化的配置对象,使它们在批量仿真中保持一致且可复用。
4.1 三类端口的类型选择与参考地约定
SIwave 中常见的端口形式包括电路端口(Circuit Port)、波端口(Wave Port)和集总端口(Lumped Port)。对于封装、PCB 走线级仿真,最常用的是电路端口与集总端口:前者适合在导体端点与参考平面之间建立激励,后者适合在焊球、过孔或连接器引脚处定义。差分对通常不直接定义为一个“差分端口”,而是由两个单端端口组成,再通过端口相位关系合成差分/共模响应。因此参数化配置的第一步,是明确每个物理端口属于哪一类逻辑端口。
参考地设置是端口定义中最容易被忽略、却影响最大的参数。对于单端信号,参考地应选择与信号回流路径最近的参考平面,而不是“整板地”。例如一条微带线,其参考地是正下方的地层;若错误地选到远处的电源平面,回流路径被拉长,S11 会出现虚假谐振。对于差分对,两个单端端口应共用同一参考地节点,否则差分阻抗的参考基准不一致,Sdd11 与 Scd11 会同时失真。对于电源端口,参考地通常是电源平面所对应的地平面,且正负端口应成对出现,避免只定义正端而让回流路径悬空。
在参数化脚本中,建议把参考地写成“层名 + 网络名”的组合,而不是固定坐标。例如 GND:PLANE_2 表示第二层地平面,这样当叠层顺序在批量工况中不变时,端口定义可以稳定复用;若叠层变化,则应在配置表中显式声明参考地映射关系,而不是让脚本自动猜测。
4.2 去嵌长度的参数化方法
去嵌(De-embedding)用于把测试夹具、连接器或过孔引入的寄生效应从结果中剥离。SIwave 中常见的做法是设置去嵌长度,把参考面从端口位置移动到目标位置。去嵌长度是一个有方向、有正负号的参数:沿信号传播方向从端口向目标面移动为正,反之为负。批量仿真中,如果每个工况都手工输入去嵌长度,极易出现方向不一致的问题。
参数化配置的思路是:把去嵌长度定义为“目标参考面坐标 − 端口坐标”的函数,并统一约定坐标轴方向。例如约定信号从端口 A 流向端口 B 为正方向,则端口 A 的去嵌长度为正值,端口 B 的去嵌长度为负值。对于差分对,两个单端端口的去嵌长度应分别计算,但目标参考面必须一致,否则差分相位差会被去嵌长度差污染。对于电源端口,去嵌长度通常设为 0,因为电源端口的关注点是低频阻抗,去嵌反而会引入不必要的相位修正。
4.3 激励幅值与相位的参数化
激励幅值决定端口注入能量的大小,相位决定多个端口之间的相对关系。对于单端信号,幅值通常设为 1 V 或 1 W 归一化,相位设为 0°。对于差分对,两个单端端口的幅值应相等,相位差设为 180°;若要激励共模,则相位差设为 0°。对于电源端口,幅值通常设为 1 A 或 1 V,相位设为 0°,但多个电源端口同时激励时,需要明确它们是同相还是反相,否则 PDN 阻抗曲线会出现虚假的抵消或叠加。
参数化配置的关键,是把“激励模式”抽象为一个可切换的枚举值,而不是在脚本中硬编码相位。例如定义 excitation_mode 为 single、differential、common、power 四种模式,每种模式对应一组幅值与相位规则。批量仿真时,只需切换模式,端口定义自动更新,而端口拓扑、参考地和去嵌长度保持不变。这样既保证了端口定义的一致性,又实现了激励的可复用。
4.4 批量仿真中的一致性与复用检查
完成参数化配置后,还需要在批量运行前做一次一致性检查。检查项包括:所有工况的端口数量是否一致、参考地映射是否相同、去嵌方向符号是否统一、激励模式切换后相位规则是否生效。一个实用的做法是让脚本在生成每个工况前,输出一份端口摘要表,包含端口名、类型、参考地、去嵌长度、幅值和相位。如果摘要表中出现参考地为空、去嵌长度符号相反或相位差不是 0°/180° 的情况,脚本应直接报错并终止该工况,而不是继续运行。
下面给出一个可直接参考的端口配置示例,用于差分对在批量扫描中的参数化定义。示例中的坐标、层名和数值均为教学假设,实际使用时需替换为设计中的真实值。
port_config = {
"diff_pair_1": {
"type": "circuit",
"p_port": {"name": "P1", "coord": [12.5, 8.0], "ref_gnd": "GND:PLANE_2"},
"n_port": {"name": "N1", "coord": [12.5, 8.4], "ref_gnd": "GND:PLANE_2"},
"deembed": {"target_face": [18.0, 8.2], "direction": "A_to_B"},
"excitation": {"mode": "differential", "amplitude": 1.0, "phase_diff": 180}
},
"power_rail_1": {
"type": "lumped",
"pos_port": {"name": "VDD", "coord": [30.0, 15.0], "ref_gnd": "GND:PLANE_2"},
"neg_port": {"name": "GND", "coord": [30.0, 15.5], "ref_gnd": "GND:PLANE_2"},
"deembed": {"target_face": [30.0, 15.25], "direction": "none"},
"excitation": {"mode": "power", "amplitude": 1.0, "phase_diff": 0}
}
}
这段配置的核心思想是:端口拓扑、参考地和去嵌目标面在批量扫描中保持不变,只有 excitation.mode 和对应的幅值/相位规则随工况切换。这样,差分扫描、共模扫描和电源阻抗扫描可以共用同一套端口定义,结果之间具有可比性。若某个工况需要改变去嵌长度,应作为独立配置项显式声明,而不是在脚本中临时修改,否则会破坏批量仿真的一致性。
最后需要强调的是,端口与激励的参数化配置不是一次性的设置工作,而是批量仿真可复用的基础。把端口类型、参考地、去嵌长度、幅值和相位这五类参数抽象成配置对象后,后续的扫描、优化和结果对比都可以在稳定的端口定义上进行。这样既减少了人工干预,也避免了因端口不一致导致的错误结论。