3. Recipe数据模型与结构化表达

在半导体制造中,Recipe 常被误解为“一组工艺设定值”。但真正进入设备控制层后,Recipe 是一个高度结构化的数据对象:它既包含可调的工艺参数,也包含设备固有的常数、硬件配置、时序逻辑和校准数据。如果把这些内容混在一个扁平参数表里,版本控制、差异比对和生产防错都会变得极其困难。因此,本节的核心任务是:把 Recipe 拆成可分类、可继承、可校验的结构化模型,并为每一类数据设计合适的元数据。

一、Recipe 内容的五类数据模型

从设备控制与工艺执行的角度,Recipe 内容可以划分为五类,它们在“谁可以改、是否随设备变化、是否参与版本比对”上具有明显不同的行为。

  • 工艺参数(Process Parameters):决定晶圆实际经历的物理化学条件,如温度设定点、气体流量、RF 功率、压力、时间。这类数据是 Recipe 的核心,通常随产品/层别变化,必须纳入版本控制。
  • 设备常数(Equipment Constants):描述设备固有属性,如腔体体积、电极面积、泵抽速、热容。它们一般不随产品变化,但会影响工艺参数的实际效果,应作为设备级元数据独立管理。
  • 硬件配置(Hardware Configuration):描述当前设备上安装了哪些硬件,如喷淋头型号、ESC 类型、RF 匹配网络、气体管路配置。硬件配置变化会直接导致 Recipe 不可移植,必须与 Recipe 绑定校验。
  • 时序逻辑(Timing Logic):描述步骤顺序、斜坡、稳定等待、阀门切换、抽气/充气时序。它决定工艺参数在时间轴上的执行方式,是 Recipe 中最容易产生“看起来一样、实际不同”的部分。
  • 校准数据(Calibration Data):描述传感器与执行器的修正关系,如 MFC 校准系数、热电偶补偿曲线、压力计零点偏移。校准数据通常由设备工程师维护,但会直接影响工艺参数的真实输出。

这五类数据的差异,可以用一张结构关系图来直观表达。下图展示 Recipe 数据模型的分层结构,以及各类数据与设备执行层之间的绑定关系。

Recipe 数据模型分层结构 Recipe 对象 Recipe ID / 版本 / 产品 / 层别 工艺参数 温度/流量/功率 压力/时间 设备常数 腔体体积/电极面积 泵抽速/热容 硬件配置 喷淋头/ESC/RF 气体管路 时序逻辑 步骤顺序/斜坡 稳定等待/阀门 校准数据 MFC系数/TC补偿 压力零点 元数据层(Metadata) 版本号 · 生效日期 · 设备绑定 · 变更原因 · 审批人 · 校验规则 · 继承关系 单位 · 上下限 · 数据类型 · 是否可调 · 是否参与比对 设备执行层 PLC / 控制器 / 传感器 / 执行器 下发与校验

二、元数据设计:让每一类数据“可管、可比、可校验”

分类只是第一步。真正让 Recipe 可管理的是元数据。元数据不是简单的“备注”,而是决定数据行为的规则集合。对每一类数据,至少应定义以下元数据字段:

元数据字段 作用 示例
数据类型 决定存储与校验方式 float / int / enum / string / curve
单位 避免单位混用导致误设 ℃、sccm、mTorr、W、s
上下限 防止超范围设定 温度 0–1200 ℃,功率 0–3000 W
是否可调 区分工艺可调与设备锁定 工艺参数可调;设备常数只读
是否参与比对 决定版本差异是否告警 工艺参数参与;校准数据单独比对
绑定对象 明确数据归属 产品/层别/设备/腔体/硬件配置
继承关系 支持基础 Recipe 派生 Base → Product A → Layer 3

以温度参数为例,一个结构化的表达不应只是 Temp = 650,而应类似:

{
  "param_id": "TEMP_SETPOINT",
  "category": "process_parameter",
  "value": 650.0,
  "unit": "degC",
  "data_type": "float",
  "min": 0.0,
  "max": 1200.0,
  "adjustable": true,
  "compare_in_diff": true,
  "bound_to": ["chamber_A"],
  "inherit_from": "BASE_TEMP_RECIPE"
}

这样的结构让系统在加载 Recipe 时,可以自动判断:该参数是否超出范围、是否与设备能力匹配、是否在版本比对中产生告警。对于设备常数和校准数据,adjustable 应设为 false,compare_in_diff 可根据管理策略单独设置,避免工艺工程师误改设备固有属性。

三、时序逻辑的结构化表达

时序逻辑是最容易被低估的部分。两个 Recipe 的工艺参数完全相同,但步骤顺序、斜坡时间或稳定等待不同,结果可能完全不同。因此,时序逻辑不应写成一段自然语言描述,而应结构化为步骤序列。每个步骤至少包含:步骤编号、步骤类型、目标参数、持续时间、斜坡方式、结束条件。

例如,一个简化的沉积步骤序列可以表达为:

step_01: type=PUMP_DOWN, target_pressure=10 mTorr, timeout=30 s
step_02: type=GAS_STABILIZE, gas=SiH4/Ar, flow=200/500 sccm, wait=5 s
step_03: type=RF_RAMP, power=0→800 W, ramp_time=3 s
step_04: type=DEPOSIT, power=800 W, pressure=2 Torr, time=120 s
step_05: type=RF_OFF, ramp_down=2 s
step_06: type=PUMP_PURGE, cycles=3

这种结构化表达的好处是:版本比对时可以直接定位到“第 3 步斜坡时间从 3 s 改为 5 s”,而不是只看到一段文字描述变化。同时,设备端可以按步骤类型执行互锁校验,例如 RF 未关闭时禁止打开某些阀门。

四、硬件配置与校准数据的绑定策略

硬件配置和校准数据虽然不直接决定工艺设定值,但它们决定了工艺参数的实际效果。建议采用“设备级绑定 + Recipe 级校验”的策略:硬件配置和校准数据存储在设备档案中,Recipe 在加载时读取当前设备配置,并与 Recipe 中声明的兼容范围进行比对。若不一致,系统应阻止下发或给出明确告警。

防错要点:不要把校准数据直接写死在 Recipe 中。校准数据会随设备维护、传感器更换而变化,若写死在 Recipe 里,会导致同一版本 Recipe 在不同时间产生不同结果,破坏版本控制的可追溯性。

五、分类建模的落地检查

在实际项目中,可以用以下问题检查 Recipe 数据模型是否合格:工艺参数是否都有单位、上下限和可调标识?设备常数是否与工艺参数分离?硬件配置是否与 Recipe 绑定校验?时序逻辑是否结构化到步骤级?校准数据是否独立管理并带有效期?元数据是否支持版本比对和继承?如果这些问题都能明确回答,Recipe 就不再是一张参数表,而是一个可管理、可校验、可追溯的工程对象。

实践建议:在建模初期,先为每一类数据指定唯一的 category 和 param_id 命名规范,再逐步补充单位、上下限和比对规则。命名规范一旦确定,后续的版本控制、差异比对和防错校验都会大幅简化。