Skip to content

第 4 章:特殊提取场景

来源:mystic_ug.pdf(W‑2024.09),Chapter 4 Special Use Cases

本章汇总在 Mystic 环境中较少见但实际项目常遇到的场景:如瞬态波形提取、MOSRA 可靠性分析、基于 PCA 的变异建模、RF 目标的处理、PrimeSim LUT 行为模型以及约瑟夫结(Josephson Junction)器件的提取方法。


4.1 瞬态仿真提取

Mystic 能够像处理 DC/AC 数据一样处理来自 Sentaurus Device 或其它来源的瞬态(Transient)目标数据。本节以一个 RC 时间常数示例(图 12)为例,说明如何上传波形并对 SPICE 模型参数进行拟合。

spice
.subckt rc in out

r in out 100.0
c out 0 1e-12

.ends
  1. 准备目标数据:使用 PrimeSim HSPICE 在 R=100 ΩC=3e-12 F 条件下施加方波激励,生成合成目标波形(图 13),保存为 CSV。
  2. 上传至数据库
    python
    Data.from_csv(
      "rc.csv",
      ivar="time",
      stimulus="vin",
      metadata={"nodes": ["in", "out"], "t": 300},
      upload_ds="rc-target-data"
    )
    • 瞬态数据的 ivar 必须为 time,Mystic 会据此生成正确的 SPICE 仿真类型。
    • stimulus 列(此例中为 vin)会在后台转成 PWL 源,确保仿真触发条件与目标一致。
  3. 编写提取脚本
    python
    RC = mdb.Load(ivar="time", dvar="vout")
    ExtractionUtils.PrintErrors("RC-trans", RC, Simulator, Model, "rmsd")
    RC.WritePLTFile("RC-trans-init", bias_info=False)
    
    C = OptParam("C", 1e-12, 1e-13, 1e-11, 1e-12)
    ExtractionUtils.DoStage("RC-trans", Model, Simulator, [C], Optimizer, [RC])
    
    RC.WritePLTFile("RC-trans", bias_info=False)
    优化结束后,可输出参数历史 CSV(图 14)并验证拟合波形。

4.2 MOSFET 可靠性(MOSRA)提取

随着 CMOS 缩放,热载流子注入、BTI 等可靠性效应越来越关键。PrimeSim HSPICE 提供 MOSRA 分析以建模器件退化,Mystic 则支持针对 (\Delta V_{th})、(\Delta I_{ds}) 等目标提取 MOSRA 参数。

  1. CSV 结构:至少包含 temperaturestresstime 及一个目标列(如 delvth0dids)。可选列包括实例参数(l)、端口偏置(vdrainvgate)等。
  2. 加载方式:MOSRA 数据无需上传数据库,可直接以 SimData.CreateMOSRATarget 读取:
    python
    dvth = SimData.CreateMOSRATarget(
      "mosra_target.csv",
      target=["delvth0"],
      instances=["l"],
      metadata={
        "nodes": ["drain","gate","source","substrate"],
        "mosra": {
          "bias": {"source": 0.0, "substrate": 0.0},
          "mosra_model": "nfet_ra",
          "base_model": "nfet"
        }
      }
    )
    • mosra_modelbase_model 必须与模型卡内的 MOSRA/基带模型名称一致。
  3. 内置方程:若同时提取多条 MOSRA 曲线,仿真开销较大。可设置 Simulator.UseMOSRAEquation = True 调用 Mystic 内置方程,在提取结束后再运行一次 PrimeSim 验证。
  4. 自定义方程:若 PrimeSim 中修改了 MOSRA 模型,可用 SwitchMOSRAEquation 替换 Mystic 内置方程:
    python
    def mosra_eq(model, data):
        L = data.metadata["mosra"]["instances"]["l"]
        hciap = model.get_model_parameter("nfet_ra.hciap")
        btiap = model.get_model_parameter("nfet_ra.btiap")
        return {
          "delvth0": 1e-3 * btiap * L,
          "dids": hciap * L
        }
    
    SwitchMOSRAEquation(mosra_eq, Model, dvth, error_threshold=1.0)
    Mystic 会触发 PrimeSim 验证以确认误差阈值。
  5. 输出:提取完成后可调用 WriteMOSRAFile 生成带 _target / _fit 后缀的 CSV。

4.3 基于 PCA 的变异提取

Mystic 可借助 CorrelatedParameters 类直接在模型卡中引入 PCA 变异,或与 RandomSpice 联动处理 Garand VE 等统计仿真数据。

4.3.1 相关参数(Correlated Parameters)

以 BSIM-CMG 模型为例,选择工作函数(PHIG)、亚阈斜率(CDSC)、低场迁移率(U0)、场依赖迁移率(UA)四个参数:

python
PHIG = OptParam("PHIG", 4.5, 4.2, 4.7, 1.0)
CDSC = OptParam("CDSC", 0.1, 0.0, 10.0, 1.0)
U0   = OptParam("U0", 0.02, 0.006, 1.0, 1.0)
UA   = OptParam("UA", 0.3, 0.0, 100.0, 1.0)
CP   = CorrelatedParameters([PHIG, CDSC, U0, UA])

CP.setup_model(Model)
CP.update_model(Model)

CP.set_sigma("PHIG", 0.01)
CP.set_sigma("CDSC", 0.001)
CP.set_sigma("U0", 0.005)
CP.set_sigma("UA", 0.002)
CP.set_correlation("PHIG", "CDSC", 0.7)
CP.set_correlation("U0",   "UA",   0.8)

CP.update_model(Model, components=2)
  • setup_model/update_model 会在模型卡中添加 *_var 表达式与 pcaX 随机源(agauss)。
  • components 控制 PCA 维度,可忽略贡献较小的主成分。
  • 设置标准差/相关系数后再次 update_model,即可把综合变异写入模型。

4.3.2 变异目标数据

当拥有 Garand VE 等统计 TCAD 数据时,可直接加载并转换为统计 FoM:

python
IdVg = mdb.Load(ivar="vgate", dvar="idrain", combine=True)
ExtractionUtils.PrintErrors("Variation", IdVg, Simulator, Model, "rmsd")

VtIon = IdVg.MakeFoMTarget(["vt", "ion"], [5e-8, None])
MeanStd = VtIon.MakeFoMTarget(["mean", "std"])
  • combine=True 保留 ensemble_id 作为第二自变量,使 Mystic 识别为 Monte Carlo。
  • 通过 MakeFoMTarget 把分布转换为“均值/标准差”等指标,再对这些 FoM 进行比较或优化(图 15)。
  • 亦可写出 PLT/CSV,用 Sentaurus Visual 或 matplotlib 绘制对比。

4.4 RF 提取

RF 场景需拟合导纳(Y)或散射参数(S),同时考虑分布式寄生。Mystic 支持从 Sentaurus Device 小信号 AC 仿真中导入数据、转换矩阵并执行多偏置、多频段拟合。

4.4.1 上传数据

  1. Sentaurus Device 生成的两端口 Y 参数 PLT(图 16)可通过 Data.from_plt 上传:
    python
    ds = dbi.create_dataset(node_prj, "rf-data", clean=True)
    metadata = {
      "temperature": 298,
      "instances": {"l": 3e-8, "w": 5e-5},
      "ports": {"1": "gate", "2": "drain"},
      "nodes": ["drain","gate","source","substrate"],
      "bias": {"source": 0.0, "substrate": 0.0}
    }
    Data.from_plt(
      "RFQ_ac_des.plot",
      ivar="frequency",
      metadata=metadata,
      upload_ds=ds,
      rf_data=True,
      combine=True
    )
    • ports 映射网络端口与模型端子,常见 MOSFET 为 gate/drain。
    • rf_data=True 会返回 RF_Data(继承自 Data),用于矩阵转换与复数拆分。
    • combine=True 将各个 Y 组件横向合并成单一结构,列名格式须符合表 10(如 y(11)rey(12)i)。
    • 若来源非 Sentaurus,可借助 column_map 手动映射列名。

4.4.2 加载与处理

python
Y_data = mdb.Load(
  ivar="frequency",
  dvar=["y(11)re","y(11)i","y(12)re","y(12)i","y(21)re","y(21)i","y(22)re","y(22)i"]
)

Y_f28 = Y_data.FilterData("eq", 28e9, dtype="ivar")
Y22 = Y_f28.FilterData("eq", ["y(22)re","y(22)i"], dtype="column", mask=True)
  • mask=True 可避免多次仿真,并确保根数据仍可用于构建 HSPICE 网表。
  • RF_Data.MakeFoMTarget("convert", "s") 可将 Y 转换为 S 参数。

4.4.3 参数拟合与权重

python
cfs = OptParam("submosn.cfringes", 1e-16, 1e-17, 1e-14, 1e-18)
cfd = OptParam("submosn.cfringed", 1e-16, 1e-17, 1e-14, 1e-17)
ExtractionUtils.DoStage(
  "Step1", Model, Simulator,
  [cfd, cfs], Optimizer,
  [Y12_data1, Y12_data2, Y12_data3],
  [2, 2, 1]
)
  • 通过权重 [2,2,1] 提升某些偏置的影响度,以兼顾全频段性能。
  • 拟合完成后可 WritePLTFile / WriteCSVFile 导出,再用 Sentaurus Visual 绘制散射参数拟合(图 17)。

4.5 Lookup Table (LUT) 建模

当紧凑模型尚未完整建立时,可先用 PrimeSim LUT 行为模型做快速分析。过程:

  1. 上传数据:与常规 I–V/Q–V 数据一致,需包含四端电压/电流与长度、宽度、温度等元数据。
  2. 重采样
    python
    IV = mdb.Load(project=target_project, ivar="vgate", combine=True, extra_index="all")
    IVr = IV.resampleNd(points={"vdrain": 51, "vgate": 51, "vsubstrate": 11})
    • combine=True + extra_index="all" 将所有偏置整合成单对象,便于 resampleNd 构建均匀网格。
    • 网格越密,LUT 响应越平滑,但仿真时间更长。
  3. 写出 LUT
    python
    column_map = {
      "vdrain": "Vds", "vgate": "Vgs", "vsubstrate": "Vbs",
      "idrain": "Id",  "igate": "Ig",  "isource": "Is",
      "qdrain": "Qd",  "qgate": "Qg",  "qsource": "Qs"
    }
    Simulator.write_LUT(IVr[0], "nmosmod", path="LUT_MODELS", column_map=column_map)
    输出文件命名示例:LUT_MODELS/nmosmod_W1u_L32n_T27.dat
  4. 验证:切换 PrimeSim 执行体并打印误差:
    python
    Simulator.executable = "primesim"
    ExtractionUtils.PrintErrors("IV", IVr, Simulator, Model, "rmsd")
    理想情况下误差≈0,代表 LUT 仿真与目标一致。

4.6 约瑟夫结(Josephson Junction)提取

约瑟夫结由两个超导电极夹一层绝缘层组成,低温下可在无电压时产生超导电流,被用于 RSFQ 数字电路、SQUID、超导量子位等。PrimeSim HSPICE 提供对应行为模型,Mystic 则可针对拟合器件的准静态 I–V 数据进行提取。

4.6.1 关键 FoM

  • 原始瞬态 I–V 往往噪声大,直接拟合困难。可先应用时间平均的 .MEASURE(命令 jj-avg)平滑波形:
    python
    iv = mdb.Load(ivar="time", temperature=4.2)
    iv_smooth = iv.ApplyMeasure("jj-avg")
    iv_smooth.TestMeasure(Simulator)
  • 之后计算图 8 中的特征点 P1–P5 及 rnormrsg
    python
    p1, p2, p3, p4, p5 = (iv_smooth.P1()[0], iv_smooth.P2()[0], ...)
    rnorm = iv_smooth.rnorm()[0]
    rsub  = iv_smooth.rsg()
  • 由于 PrimeSim 模型为行为型,可直接用 FoM 设参:
    python
    Model.SetModelParameter("ics",   p1)
    Model.SetModelParameter("rnorm", rnorm)
    Model.SetModelParameter("rsub",  rsub)
    Model.SetModelParameter("vgap",  (p2 + p3)/2)
    Model.SetModelParameter("delv",  p3 - p2)

4.6.2 温度依赖优化

  • 温度升高会降低隧穿势垒,可对 tctcfct 做贝叶斯优化:
    python
    Optimizer.set_method("doe")
    Optimizer.set_optimization_parameters(method="bayesian_optimizer", Ns=10, do_plots=True)
    
    tcfct = OptParam("jj_u.tcfct", 1.5, 1.5, 2.5, 100.0)
    tc    = OptParam("jj_u.tc",    9.28, 7.1, 9.5, 10.0)
    
    p2 = iv_smooth.MakeFoMTarget("p2", add_as_fom=True, apply_to_measure=True)
    p3 = iv_smooth.MakeFoMTarget("p3", add_as_fom=True, apply_to_measure=True)
    
    ExtractionUtils.DoStage("Stage1", Model, Simulator, [tc, tcfct], Optimizer, [p2, p3], parallel=True)
  • 由于经历多层转换(平滑 + FoM),传统梯度算法难以收敛,贝叶斯优化通过拉丁超立方采样+高斯过程回归在参数空间中搜索最优误差(图 18)。

4.6.3 数据输出

  • 目标/拟合 I–V 可通过 WritePLTFileWriteCSVFile 导出,Sentaurus Visual 中能直观看到不同温度下的拟合效果(图 19),验证提取得到的 tctcfct 与目标一致。

基于 Sentaurus TCAD 官方文档构建

代码块