# AM01：RTL 计数器 → 理想 DAC → RC

用你熟悉的 RC 检查一个全新的数字/模拟工具流程。本课先证明“哪一个模型被仿真、何时改码、哪个电压响应”，不急着做复杂 ADC。

前置：寄存器、enable、同步复位、非阻塞赋值。[总纲](00_course.md) · [设置步骤](07_setup.md) · [答案 AM01](09_answers.md#am01) · [记录](10_workbook.md)。预计 8–12 小时。

## 电路与时序规格

独立 top 中放一个 8 位无符号计数器、DAC、10 kΩ 电阻、10 pF 电容到地。系统 clk=50 MHz；rst_n 同步低有效。所有数字寄存器只用 clk。计数 CE 每 100 个周期出现一次，所以每 2 µs 增加一码；255 后回到 0。复位后等待 100 个有效时钟才产生第一次 CE，明确边界而非依赖计数器初值猜测。

DAC 教学编码为 `Vtarget = 2 V × code / 256`，LSB=7.8125 mV，255 的终值为 1.9921875 V。首版输出为理想电压源，rout=0，更新不加边沿时间，RC 的 τ=100 ns。模拟初态明确设置 Vc(0)=0；数字复位本身不会瞬间放掉电容。无复位放电开关时，运行中复位只把 DAC 目标改成 0，电容随后放电。

选用显式 logic 总线输入、electrical 电压输出的混合 DAC 行为接口。模型负责解码，不在该总线上再插入每 bit L2E。若实现时选择纯 Verilog-A、电压 bit 输入的 DAC，先记录接口变更，再使用 AM02 的桥；两种接口不混用。

将普通计数模式与受控阶跃模式分开。计数模式用于看寄存器更新，阶跃模式由顶层选择唯一的数字驱动源，产生 0→128→0。避免 testbench 和 counter 同时驱动 code。阶跃每段保持至少 1 µs。

## 先完成纸上预测

1. 画出 8 个 DFF、加一组合逻辑、enable mux 和同步复位，说明 code 在时钟边沿后更新。
2. 给出 code=0、1、128、255 的电压；解释为什么没有恰好 2 V 的码。
3. 阶跃时刻定义为 DAC 实际目标改变的时刻 t0，计算 0→128 后 t0+100 ns、500 ns 的电压，以及达到 1% 终值误差的时间。
4. 计数模式求跳变前电容未完全稳定时的一般表达式：`Vc(t)=Vnew+(Vold_node−Vnew)exp(−(t−t0)/τ)`。Vold_node 是当时节点电压，不强行用前一码的理想终值。

## Virtuoso 实验步骤

1. 按 [共用流程](07_setup.md)建立个人教学库，先分别检查 counter 的数字波形和 DAC 的码值定义，再制作 symbol。
2. 建 top schematic，给 code bus、v_dac、v_rc、clk、rst_n 命名，确认总线位序 `[7:0]`。将 R/C 绑定原理图，counter 绑定 RTL，DAC 绑定混合行为视图。
3. 建 config，逐实例填写“期望视图/实际视图/端口域”，从 config 启动 ADE AMS UNL 流程。确认仿真的顶层确实是 config。
4. 首次只跑 0→128→0 的约 3 µs transient。保存 code、clk、rst_n、v_dac、v_rc；查看网表中的实例、参数和真实绑定，并确认编译、展开、仿真各阶段完成。
5. 再跑 255 次以上 CE，检查 254→255→0 回卷。在 t0 附近放大，数清“时钟边沿→寄存器更新→DAC 目标改变→RC 连续响应”。
6. 注入一个错误：交换两个 bit 的映射，或将 DAC 绑定到刻意输出常数的实验视图。用独立码值表发现它，再恢复。编译成功不等于选对模型。

不复制受许可证约束的 OA/PDK 到 Git。将你的模型源和绑定规格另存可追溯文本，实际 OA 在服务器个人忽略目录。菜单和视图名字以实际导入方式为准。

## 检查与边界实验

| 实验 | 检查目标 | 预期 |
|---|---|---|
| code=1/128/255 | scale、位序 | 理想 DAC 终值与独立算术一致 |
| 0→128 | τ、节点与时间原点 | 100 ns 约 0.632121 V，500 ns 约 0.993262 V |
| 255→0 | 回卷和负阶跃 | 数字回卷正确，电容连续放电 |
| 传输中同步复位 | 数字/模拟状态区分 | code 清零；电容按 RC 响应，不瞬间归零 |
| 错误 view/位序 | 检查器能否发现错误 | 终值或波形检查失败 |

先以电压绝对误差 ≤0.1 mV 核对解析点（理想模型条件），再减半 maxstep、收紧容差复核测量变化是否 ≤0.1 mV。若不满足，检查测量插值、初态和步长，不能直接放宽阈值。

完成后交：电路/域图、逐实例绑定表、数值预测与实际误差、数字回卷波形、故障检测记录。能解释同步复位与模拟初态的区别才进入 AM02。
