面向模拟 IC 工程师的数字设计课程
这是完整数模混合控制课程的 01–24 基础部分。已选方向、25–48 专项课及结课目标见 48 节方向总纲。本页原有讲义和实验继续使用。
版本:2026-10-03。对象:熟悉晶体管、电路时序、负载和 PVT,尚未系统学习 RTL 的模拟 IC 工程师。
学完要能做什么
独立完成一个小型数模控制模块的规格、RTL、验证和逻辑综合;能解释时序约束的物理来源,识别跨时钟与配置更新风险;具备阅读布局布线结果的基础。
贯穿案例是 SPI 控制模拟配置。先用单系统时钟 Master 建立同步设计直觉,再学习 Slave、跨时钟和配置提交。不会一开始就同时加入全部 SPI 模式、处理器、DMA 或复杂总线。
这是一套完整的课程讲义、实验任务、答案和验收标准。第 01 阶段有现成且已验证的 RTL/testbench;后续阶段的设计题由学习者逐步实现,并不代表仓库已经包含这些模块的可运行实现。
如何使用
每节先读“讲解”,自己完成练习,再看 参考答案。每阶段留下三种证据:一张电路/时序图、一份实验记录、一段对结果的解释。工具运行成功和学习验收分别记录。
建议安排 60–90 小时,按每周 6–8 小时约需 8–15 周;这是起始预算,按理解程度调整。每次学习约 60–90 分钟:20 分钟理解,30–50 分钟预测与实验,10–20 分钟复盘。通过验收再推进,不以日期强行跳过基础。
已有模拟知识可以直接用于理解门延迟、负载和时钟质量。需要特别训练的是:离散状态、寄存器更新语义、接口契约、自动验证、约束与实现的一致性。
课程目录
| 节次 | 主题 | 练习产物 |
|---|---|---|
| 01 | SPI 规格与接口契约 | 接口和时序表 |
| 02 | A5/3C 逐沿推演 | 完整一帧采样表 |
| 03 | 寄存器与非阻塞赋值 | 数据通路和 next-state 推导 |
| 04 | 分频、计数器与状态机 | 分频计算及状态转移图 |
| 05 | 复位、请求和完成语义 | 边界行为表 |
| 06 | 自检查验证与错误注入 | 覆盖矩阵和失败证据 |
| 07 | Liberty 与标准单元 | 单元模型对照表 |
| 08 | 综合、优化与网表 | 37 个触发器的解释 |
| 09 | setup/hold 与时序报告 | 两类 slack 手算 |
| 10 | SDC 与真实 SPI 预算 | 约束假设和外部预算 |
| 11 | SPI Slave 架构选择 | SCLK 域与过采样方案比较 |
| 12 | 单比特 CDC 与亚稳态 | 同步器及脉冲传输方案 |
| 13 | 多位数据与握手 | mailbox 时序图 |
| 14 | 影子寄存器与原子提交 | 模拟配置更新协议 |
| 15 | 多域复位、读回与 CDC 验证 | 异常恢复矩阵 |
| 16 | 模块分层与寄存器语义 | 地址表和接口规格 |
| 17 | FIFO、流控与吞吐量 | 同步 FIFO 边界推演 |
| 18 | 可选 APB 接口 | 握手表与适配器设计 |
| 19 | 物理实现输入与 floorplan | 数据依赖表和资源预算 |
| 20 | CTS 与时钟质量 | setup/hold 偏斜比较 |
| 21 | 布线、寄生与时序收敛 | 违例归因及修复计划 |
| 22 | 活动、功耗与数模耦合 | 活动统计和功耗预算 |
| 23 | SPI 模拟配置控制器规格 | 完整顶层契约 |
| 24 | 综合设计评审与交付 | 证据包和验收报告 |
六个阶段
| 顺序 | 讲义 | 学习门槛 |
|---|---|---|
| 一 | 01–06:同步 RTL 与 SPI Master | 看懂首位、末位、复位和 done;验证能发现错误 |
| 二 | 07–10:综合与时序 | 把报告对应到电路,分别计算 setup/hold |
| 三 | 11–15:SPI Slave、CDC 与配置 | 证明配置一致性,明确跨域与复位协议 |
| 四 | 16–18:集成与流控 | 明确一次操作何时接受、等待或拒绝 |
| 五 | 19–22:物理实现与功耗 | 根据物理数据解释时序变化和功耗来源 |
| 六 | 23–24:综合项目 | 规格、实现、验证和约束形成可审查的证据链 |
实验记录与验收表 用于记录自己的结果。现有 SPI 讲义 和 真实综合报告解读 是前两个阶段的工程参考。
实验环境和证据边界
本地保存源码,服务器 IC_Server 上运行独立 batch job。先读 进度记录,不重复安装已有工具。运行方式见 统一运行指南。不要修改现有 GUI 会话、共享服务或全局 PATH。
默认规格固定为 50 MHz 系统时钟、1 MHz SCLK、Mode 0、8 bit、MSB first;当前 Master 内部全部寄存器只由 clk 驱动,rst_n 同步低有效。后续 Slave 的时钟架构在单独阶段讨论,不回改第 01 课契约。
做修改前先查看 git status 和 git diff,保留未提交工作。改变 RTL/testbench/SDC 后,先运行 scripts/run_sim.sh 的分频 1、3、25 全套测试,再运行 scripts/run_synth.sh。检查退出码、完成标记、映射单元、约束检查及网表。恢复基线时同样确认恢复后的验证结果。
results/、波形、日志和 .tools/ 不进入 Git。文档记录命令、版本、结果摘要及证据位置,不复制许可证、PDK 或教学库正文。传输使用普通 scp,并校验 SHA-256。
现有 tutorial.lib 是教学模型,不是流片 PDK。逻辑综合讲义和数字预算计算可立即完成。Innovus 可执行文件存在并不意味着配套的技术 LEF、单元 LEF、RC 数据和多角库已具备;缺这些数据时,第五阶段做计算与报告阅读练习,不能虚构布局布线结果。
RTL 仿真不等于形式等价;正 slack 不等于接口或流片签核。后续物理实验是否能通过,需要真实运行确认。
第一轮学习安排
先做 01–02,不修改 RTL。标注默认参数第一帧的八个采样点,解释首位提前有效和末尾 CS 保持。把答案写入实验记录,再与老师讨论。之后推进 03–06,用小范围错误注入检查自己是否理解电路与验证。
不要先背完 SystemVerilog 语法。每遇到一段 RTL,都先回答:它描述哪些寄存器?D 端由什么逻辑产生?在哪个时钟边沿更新?外部信号需要满足什么时序?