# AM05：trim FSM ＋模拟对象＋测量模块

本课把“模拟旋钮调到目标”变成有限步骤、结果可归属、失败可恢复的校准系统。先完成受控前台校准，再讨论未知输入的后台算法。

前置 AM03、握手/CDC、signed 定点平均、[控制项目契约](../mixed_signal/07_project.md)。[总纲](00_course.md) · [设置](07_setup.md) · [答案 AM05](09_answers.md#am05) · [记录](10_workbook.md)。预计 12–18 小时。

## 先明确模拟可观测量

教学模型定义稳态测量均值（以测量 ADC LSB 为单位）：`y_inf(code)=offset+gain×(code−128)`。8 bit trim，首版 offset=19、gain=0.75>0，目标0。映射电压 `V_inf=1 V + y_inf×0.5 mV`，再经10 kΩ/10 pF 的一阶动态，ADC 为 signed12：`y=clip(RNE((Vsample−1 V)/0.5 mV),−2048,2047)`。

RNE 为 round to nearest ties to even，负数也按数学定义处理。该规格是偏置量测量、含1 V共模的示例，不能沿用 AM03 unsigned10 的 floor。若测真实振荡频率、电流、失调或增益，应重定义单位和可观测条件。

数字 code 更新后先等待39拍/780 ns（标称 RC 最大255×0.75=191.25测量LSB阶跃，连续残差约0.0784 LSB），再测量。每块16次，采样间隔5拍/100 ns，量化后精确累加，再对除16结果做 ties-even；signed12 16次和需要 signed16。分离节点连续噪声和测量噪声，首版噪声为零，后续以给定种子/带宽/幅度模型加入。

本例均值根在 code≈102.6667；code103 稳态+0.25 LSB，code102为−0.5 LSB。两者均可满足数字 ±2 LSB 成功窗口；算法无需固定返回103，更不能把“返回103”作为唯一正确性判据。

## FSM 与事务

流程：SNAPSHOT→CHECK_ENDPOINTS→SEARCH→VERIFY→COMMIT；失败经ABORT/DRAIN→RESTORE或FAULT。接受校准时保存 committed_code 与版本，试探码使用独立 trial_code。成功只提交最终已验证候选；失败时在模拟条件允许下恢复之前的 committed_code，并重新等待稳定。

搜索前确认响应方向、目标可达及单调条件。端点检查能证明区间是否包住目标，不能证明内部全局单调；先有设计/模型单调依据，教学时再做完整256码扫描。正增益下均值>目标则减码，<目标则加码。二分搜索对已声明的单调模型可用于缩小候选区间；量化零平台需允许多个合格候选。

每次测量请求带 transaction_id、code_version、trial_code；ADC/适配器保持应答与身份直到确认。只接受当前请求，reset 后排空旧握手再复用 id。用 MIN=39 拍限制最早采样，ready 合法后采样，MAX=100 拍限定本次等待；本课规定截止边沿 timeout 优先，即有效应答必须在 MAX 之前完成。block 次数/搜索次数也设上限，不能仅依赖单次ADC超时。

最终候选需要**连续两块16次均值都在 ±2 ADC LSB 内**才 commit；中间任何一块越界重置连续通过计数，按有限重试策略重新评估或失败退出。均值的正确实现不保证噪声统计或模拟精度合格。

## 操作步骤

1. 写清 plant 的电压方程、单位、增益方向、动态和合法码范围。先独立扫 DC 码并绘制 y/code，确认单调及量测无饱和。
2. 为测量模型做几个正/负半整数 RNE 用例，核对累加范围；给 ADC 编码和 plant 各自一个独立参考，不能复制 FSM 判断作为检查器。
3. config 绑定 FSM RTL、plant 行为/RC、measurement ADC、握手适配器；同时保存 trial/committed/version、模拟节点、每次sample、block_sum/mean、state、ready/error。
4. 零噪声运行端点→搜索→两块验证，记录每次候选/等待/均值和最终提交。独立检查搜索方向、有限退出、每块16次、身份一致。
5. 用固定种子加入 ±1 LSB 有界测量扰动，再做相关噪声或低频漂移。比较单次判断与16次平均；相关噪声不一定按1/√16降低。
6. 单独替换 plant 或 measurement 为你的晶体管电路，重新测 gain、settling、噪声/供电依赖，调整等待与成功标准的物理解释。

## 必做失败实验

| 注入 | 必须观察的结果 |
|---|---|
| gain 反向/非单调 | 方向或模型前提不满足，拒绝按原算法 commit；非单调仅端点检测可能漏检 |
| offset=300、gain=0.75 | 全范围无法达到0，端点检查失败 |
| 测量饱和或非法身份 | 报无效测量，不当成有效校准值 |
| never-ready、应答恰在截止边沿 | 超时；截止边沿应答按本课规则不接受 |
| 搜索中复位/取消、旧版本结果迟到 | 排空旧事务，未验证试探值不得提交 |
| 供电故障导致不能安全恢复 | 进入FAULT，按模拟安全策略处理输出 |
| 噪声使两块交替通过/失败 | 有限重试后退出，不能无限循环 |

## 验收

提交零噪声收敛、噪声运行、端点不可达、超时和取消恢复五组台账；每个 commit 都有两块验证证据。记录 `trial_code` 与 `committed_code` 的区别，以及失败后节点是否重新稳定。

迁移到真实偏置/频率 trim 时，先确认被测量是否能唯一反映目标、对温度/负载是否可重复、是否需要独立校准输入。±2测量LSB是本课数字停止规则，实际电流/电压/频率误差还包含ADC、参考、量化、噪声和漂移，须单独预算。
