SOC_CDC_FLOW_项目介绍.md
处芯积律 低功耗双核 SoC · CDC 时钟域交叉实践(LPWR + SpyGlass)
| 字段 | 内容 |
|---|---|
| 项目标识(slug) | soc-cdc-flow(站内目录规划名,上线 IC 仿真实践列表时与此一致) |
| 短标题 | LPWR · CDC 时钟域交叉(SpyGlass) |
| 难度 | 中高 |
| 实践方向 | IP / 方法论(ip_methodology) |
| 状态 | 2026 年 5 月上线(工程母本已部署于实践服务器) |
| 服务器只读母本路径 | /project/SOC_CDC_FLOW |
| 关联项目 | 低功耗双核 SoC 实践(LPWR)(/project/lpwr_dual_core_soc/)— 同一 RTL 平台,本专项聚焦 静态 CDC 签核流程 |
一句话概览
在 异构双核低功耗 SoC(Cortex-M0 + Ibex) 真实网表上,使用 Synopsys SpyGlass CDC 完成从约束建立、批量 Goal 运行、报告审阅到 waiver 治理的 企业级 CDC 方法论闭环;并附带可独立运行的 CDC 教学小顶层(Gray FIFO、REQ/ACK、脉冲同步、RDC 等),把理论与工具规则一一对应。
项目定位与价值
适合谁
- 已完成或并行学习 LPWR 双核 SoC、具备 RTL/仿真基础的学员。
- 目标岗位涉及 前端签核、CDC/RDC、SoC 集成验证、设计质量(DV/QA) 的工程师。
- 希望把「听过 CDC 概念」升级为「能独立跑通 SpyGlass、能读报告、能写 waiver、能参与签核会议」的求职者。
建议学习周期
3~5 周(可按个人节奏;含教学顶层 1 周 + 整芯片 SoC 流 2~3 周 + 签核文档 1 周)。
前置要求
- Verilog/SystemVerilog 基础;理解时钟、复位、多 flop 同步器概念。
- 建议先具备 至少一个 SoC 仿真项目(V1.1 / V3.0 / LPWR 任一)经验,能看懂
soc_top层级。 - 了解 SDC 中
create_clock、set_clock_groups的基本含义(不要求会写完整 STA 约束)。 - 实践环境需能使用 SpyGlass + CDC License(VNC 实践服务器已预装示例版本 U-2023.03-SP1)。
学完能带走什么(交付物)
| 交付物 | 说明 |
|---|---|
| CDC 运行记录 | 至少一次完整四 Goal 运行的 logs/sg_cdc_*.log 与 work/ 目录快照说明 |
| 时钟树与 SDC 对照表 | 基于 docs/clock_tree.md 填写的时钟清单 + 与 constraints/cdc.sdc 一致性说明 |
| 违规 triage 笔记 | 从 moresimple.rpt / CDC-report.rpt 选取 ≥3 条真实或教学违规,完成「现象 → 根因 → 修复或 waiver」闭环 |
| 签核检查表 | 按 CDC_SIGNOFF_CHECKLIST.md 自检的勾选记录(可附在复盘报告中) |
| 可选:分层 CDC 方案草稿 | 阅读 docs/hierarchical_flow.md 后,写出 1 个 IP 的分块签核设想 |
岗位与面试价值
- 覆盖芯片公司 tape-out 前 CDC signoff 的真实工作流,而非仅课堂单模块仿真。
- 能讲述 结构性 CDC vs 功能性 CDC、多比特跨域错误模式、复位域交叉(RDC) 等高频面试点,并有仓库内 RTL/报告佐证。
- 与 UPF 低功耗实践、LPWR 双核系统验证 形成「系统功能 + 功耗意图 + 时钟域安全」的组合叙事。
导读:这是什么 · 能学什么 · 怎么学
一、这是什么项目?
本仓库 lpwr_soc_cdc_flow(服务器路径 SOC_CDC_FLOW) 在 LPWR 低功耗双核 SoC 完整 RTL 之上,封装了一套可复现的 SpyGlass CDC 批处理流(spyglass_cdc/)。顶层为 soc_top,RTL 列表来自 inputs/cdc_rtl.f(运行时展开 PRJ_ROOT 指向 sim 侧网表),约束来自 constraints/cdc.sdc,并与 docs/clock_tree.md 保持「单一事实来源」同步。
工程 不替代 VCS/UVM 动态仿真,而是专注 静态 CDC:在综合可读视图上发现跨时钟域路径、同步器缺失、复位完整性等问题。学员在个人 VNC 工作区 复制母本 后练习;母本只读,避免误改共享环境。
除整芯片流外,还提供 CDC_MODE=training 教学顶层 cdc_training_top:用更小网表对照 docs/cdc_knowledge_supplement.md 中的理论(亚稳态、Gray 指针、REQ/ACK、再汇聚、RDC 等),并可故意打开 CDC_TRAINING_BAD=1 观察工具报错模式。
二、能学到什么?
领域 A:CDC 理论与 RTL 模式
- 亚稳态与同步器深度:单比特跨域为何需要 2FF/3FF;MTBF 与周期数的关系(定性 + 项目级估算意识)。
- 单比特 vs 多比特:禁止对相关总线「逐 bit 各自 2FF」;理解 Gray 计数器、握手、FIFO 等安全模式。
- 再汇聚(reconvergence):多路独立同步后在目的域合并导致的毛刺/非法码;对照
edu_reconv_demo.sv。 - 复位域交叉(RDC):异步复位释放需同步到各时钟域;
edu_reset_sync.sv、edu_rdc_example.sv与可选 Goalrdc/rdc_verify_struct。
领域 B:SpyGlass CDC 工具链
- 四类核心 Goal(默认批跑顺序):
cdc/cdc_setup_check→cdc/clock_reset_integrity→cdc/cdc_verify_struct→cdc/cdc_verify。 - 扩展 Goal:
constraints/sdc_check、rdc/rdc_verify_struct、cdc/cdc_abstract(分层抽象,见 hierarchical flow)。 - 报告阅读顺序:
goals_summary.html→moresimple.rpt→CDC-report.rpt→adv_cdc.rpt(详见docs/reports_guide.md)。 - GUI 深潜:用
lpwr_soc_cdc.prj在 SpyGlass GUI 中查看路径 schematic 与时钟传播。
领域 C:约束、签核与工程治理
- 时钟树文档化:在
docs/clock_tree.md维护时钟清单、异步关系矩阵、复位表与变更日志。 - SDC 与 RTL 对齐:
constraints/cdc.sdc中create_clock、set_clock_groups必须反映真实时钟计划(含chip_pin_mux层次 pin)。 - Waiver 治理:
waivers/cdc_waiver.swl+waivers/README.md— 每条 waiver 需 owner、原因、关闭条件、日期。 - 签核标准区分:「流程跑通(Run Complete, Fatal=0)」≠「设计 signoff(Error 清零或已批准 waiver)」— 见
CDC_SIGNOFF_CHECKLIST.md。
领域 D:与 LPWR 平台的关系
- 共享 M0 + Ibex + AHB + PMU/低功耗 IP 的 SoC 上下文;CDC 流读取与仿真一致的 Ibex
prim构建路径(ibex/build/...)。 - 可先跑通 LPWR 功能仿真建立系统直觉,再在本项目中做 时钟/跨域安全 维度的静态分析。
- 仓库
docs/下保留 LPWR 架构介绍(soc_project_introduction.html、verification_environment_overview.md等),便于对照系统边界。
三、怎么学?
推荐节奏:教学顶层 → 整芯片批跑 → 报告 triage → 签核文档 →(可选)分层方案
- 第 1 周:理论与教学 lab
- 阅读
spyglass_cdc/docs/cdc_knowledge_supplement.md。 CDC_MODE=training ./run_cdc.sh;再试CDC_TRAINING_BAD=1对比违规数量。-
任选 2 个教学模块(如 Gray FIFO、REQ/ACK)在报告中找到对应路径。
-
第 2~3 周:整芯片
soc_top - 确认
SPYGLASS_HOME、License、ibex/build路径。 - 研读
docs/clock_tree.md,将 TODO 项替换为真实时钟参数并同步cdc.sdc。 -
执行
./run_cdc.sh或make cdc_all;按reports_guide.md完成首轮 triage。 -
第 4~5 周:签核与复盘
- 完成
CDC_SIGNOFF_CHECKLIST.md自检。 - 整理 waiver 样例(即使是教学用 mock 条目,也按 README 规范书写)。
- 撰写项目复盘:区分 flow complete vs design signoff,列出遗留 Error 与风险。
原则
- 一次只改 一类输入(RTL / SDC / waiver / Goal),便于 diff 报告。
- 时钟树变更 先改
clock_tree.md,再改 SDC,并记录 change log。 - 默认 不开启
ENABLE_CDC_AGGREGATE(部分安装会在 aggregate HTML 阶段崩溃;单 Goal 报告仍有效)。
系统与 CDC 分析范围(架构示意)
LPWR 平台为 异构双核 + 共享 AHB + 低功耗 PMU;CDC 实践关注其中 多时钟源与跨域路径(CPU 时钟、外设时钟、JTAG TCK、SPI/I2C 等 pad 时钟 — 以 clock_tree.md 为准)。
flowchart TB
subgraph PAD["Pad / MUX 时钟入口 chip_pin_mux"]
CLK_CPU["root_clk_cpu"]
PCLK["root_pclk"]
TCK["jtag_tck"]
SPI["spi*_clk / i2c_clk"]
end
subgraph CORES["异构双核"]
M0["Cortex-M0"]
IB["Ibex"]
end
subgraph SOC["soc_top 互连与外设"]
BUS["AHB 矩阵 / 桥"]
PERI["DMA / ISP / DM / Multicore"]
LP["low_power / PMU"]
end
subgraph CDC_TOOL["spyglass_cdc 静态分析"]
SDC["constraints/cdc.sdc"]
SG["SpyGlass CDC Goals"]
RPT["reports / waivers"]
end
CLK_CPU --> M0
CLK_CPU --> IB
PCLK --> BUS
TCK --> PERI
M0 --> BUS
IB --> BUS
BUS --> PERI
LP -.->|"时钟门控 / 关断"| CORES
PAD --> SDC
SOC --> SG
SDC --> SG
SG --> RPT
示意图强调 时钟源 → 各域逻辑 → CDC 工具约束 的关系;模块实例名与时钟名以 RTL 与
clock_tree.md为准。
工程目录结构(核心)
SOC_CDC_FLOW/ # 服务器母本 /project/SOC_CDC_FLOW
├── docs/ # SoC 架构与仿真指南(与 LPWR 共用说明)
│ ├── soc_project_introduction.html
│ ├── verification_environment_overview.md
│ └── 处芯积律 低功耗双核 SoC 实践(LPWR…)仿真指南.md
├── sim/ filelist/ ibex/ ip/ sw/ top/ test/ # 与 LPWR 一致的 SoC 交付树
└── spyglass_cdc/ # ★ CDC 实践主战场
├── run_cdc.sh # 批处理入口
├── Makefile # make cdc_all / cdc_training / cdc_signoff …
├── inputs/cdc_rtl.f # SoC RTL 列表(无 TB)
├── constraints/
│ ├── cdc.sdc # 整芯片约束
│ └── cdc_training.sdc # 教学顶层约束
├── tcl/cdc_batch.tcl # SpyGlass 批流程
├── docs/
│ ├── clock_tree.md
│ ├── reports_guide.md
│ ├── hierarchical_flow.md
│ └── cdc_knowledge_supplement.md
├── training/rtl/ # 教学用 SV 模块
├── waivers/ # waiver 规范与 cdc_waiver.swl
├── work/ # 运行产物(default_run / training_run)
├── logs/ # sg_shell 日志
├── QUICKSTART.md
├── CDC_SIGNOFF_CHECKLIST.md
└── README_spyglass_cdc.txt
模块与知识点对照
| 模块 / 主题 | 设计关注点 | CDC / 验证关注点 |
|---|---|---|
| chip_pin_mux 时钟入口 | 晶振/PLL/JTAG/SPI 等时钟进入芯片 | create_clock 层次 pin 必须与 RTL 一致 |
| Cortex-M0 / Ibex | 各自时钟、复位、调试接口 | 核间及核—总线跨域路径;Ibex prim 同步单元 |
| AHB 矩阵与桥 | 多主设备仲裁 | 总线宽度与协议转换处的跨域 |
| low_power / PMU | 门控、关断、唤醒 | 时钟门控后的「衍生时钟」是否在 SDC 中体现 |
| 外设域(DMA/ISP/DM 等) | 从设备寄存器时钟 | 与 CPU 时钟组的 async 关系是否正确声明 |
| 教学顶层 cdc_training_top | 双时钟教学 RTL | 脉冲/Gray/REQ-ACK/再汇聚/RDC 实验 |
教学 RTL 一览(training/rtl/)
| 文件 | 标签 / 用途 |
|---|---|
edu_sync_2ff.sv |
2FF 同步器基础块 |
edu_gray_fifo.sv |
Gray 指针异步 FIFO |
edu_reqack_bridge.sv |
REQ/ACK + 内部 FIFO 载荷 |
edu_pulse_sync.sv |
脉冲跨域 |
edu_reconv_demo.sv |
再汇聚错误示范 |
edu_naive_bus_sync_bad.sv |
多比特逐 bit 同步(BAD) |
edu_reset_sync.sv / edu_rdc_example.sv |
RDC 实验 |
cdc_training_top.sv |
教学顶层集成 |
SpyGlass CDC 流程说明
默认四 Goal(整芯片)
| 顺序 | Goal | 作用 |
|---|---|---|
| 1 | cdc/cdc_setup_check |
工程、时钟、约束基础检查 |
| 2 | cdc/clock_reset_integrity |
时钟树与复位结构完整性 |
| 3 | cdc/cdc_verify_struct |
结构性 CDC(同步器拓扑等) |
| 4 | cdc/cdc_verify |
功能性 CDC(datahold、再汇聚等) |
Signoff 最低要求(流程级):四类 Goal 均为 Run Complete,且各 Goal Fatal = 0;日志中应出现 project file saved: .../lpwr_soc_cdc.prj,无 SPG#3004 类致命错误。
设计 signoff 额外要求:moresimple.rpt 中 Error 级违规 须修复或按规范 waiver;约束经评审与 RTL 一致;利益相关方评审记录。
可选扩展
| 环境变量 / Make 目标 | 说明 |
|---|---|
CDC_INCLUDE_SDC_CHECK=1 |
前置 constraints/sdc_check |
CDC_INCLUDE_RDC=1 / make cdc_rdc |
追加 RDC 结构检查 |
CDC_INCLUDE_ABSTRACT=1 / make cdc_abstract |
IP 抽象,供分层 CDC |
make cdc_signoff |
SDC 检查 + 四 CDC + RDC + abstract 组合 |
GOAL=cdc/cdc_verify ./run_cdc.sh |
单 Goal 增量重跑 |
报告阅读顺序(必读)
work/<run>/lpwr_soc_cdc/html_reports/goals_summary.htmlconsolidated_reports/soc_top_cdc_<goal>/moresimple.rpt- 同目录
CDC-report.rpt soc_top/cdc/cdc_verify/spyglass_reports/adv_cdc.rpt(functional 深潜)
分阶段学习方案
阶段 1:环境与教学顶层(建立工具直觉)
目标:能独立 source 环境、跑通 training 模式,并在 goals_summary.html 中读懂各 Goal 状态。
任务清单
- [ ] 复制母本到个人目录,确认只读母本路径与可写工作区分离。
- [ ] 设置
SPYGLASS_HOME(示例:/opt/edatools/synopsys/spyglass/U-2023.03-SP1/SPYGLASS_HOME)。 - [ ]
cd spyglass_cdc && CDC_MODE=training ./run_cdc.sh。 - [ ] 阅读
cdc_knowledge_supplement.md第 1~4 节并对照 RTL。 - [ ] 运行
CDC_TRAINING_BAD=1,记录违规条数差异。
阶段出口:能解释 2FF、Gray FIFO、REQ/ACK 在报告中的典型条目;保存 work/training_run 路径说明。
阶段 2:时钟树与 SDC(约束正确性)
目标:理解「约束错误 = CDC 结果不可信」,完成 clock_tree.md 首轮填写。
任务清单
- [ ] 阅读
docs/clock_tree.md三张表:时钟清单、异步矩阵、复位表。 - [ ] 对照 RTL 与仿真文档,填写
root_clk_cpu、root_pclk、jtag_tck等周期与 owner。 - [ ] 同步修改
constraints/cdc.sdc中对应create_clock/set_clock_groups。 - [ ] 可选:
CDC_INCLUDE_SDC_CHECK=1 ./run_cdc.sh或make cdc_sdc_check。 - [ ] 在 change log 中记录本次 SDC 变更。
阶段出口:时钟表与 SDC 无未解释的 TODO;SDC check 无致命约束错误(若已跑)。
阶段 3:整芯片 soc_top 批跑与 triage
目标:完成一次完整四 Goal 运行,并对至少 3 条违规完成分析记录。
任务清单
- [ ] 确认
ibex/build/...与inputs/cdc_rtl.f一致(与 LPWR 仿真相同前置)。 - [ ]
./run_cdc.sh或make cdc_all,保留logs/sg_cdc_<timestamp>.log。 - [ ] 按
reports_guide.md打开goals_summary.html与moresimple.rpt。 - [ ] 任选 3 条违规:填写「规则名 / 层次 / 源宿时钟 / 修复或 waiver 决策」。
- [ ] 对需 waiver 的项,按
waivers/README.md起草条目(可先不提交 swl)。
阶段出口:流程级 四 Goal Run Complete;triage 笔记 ≥3 条。
阶段 4:签核检查表与项目复盘(可面试陈述)
目标:区分 flow signoff 与 design signoff,输出可展示文档。
任务清单
- [ ] 逐项完成
CDC_SIGNOFF_CHECKLIST.md。 - [ ] 撰写 2~4 页复盘:背景、时钟计划、工具版本、主要发现、遗留风险。
- [ ] 准备 5 分钟口述:为何多比特不能逐 bit 同步、再汇聚是什么、RDC 与 CDC 区别。
- [ ] (可选)阅读
hierarchical_flow.md,选一个 IP 写分层 CDC 迭代设想。
阶段出口:签核检查表 + 复盘 PDF/Markdown;能无讲义回答上述三个面试题。
快速命令参考(个人工作区)
将
/home/USER/soc3_practice与USER替换为你的 VNC 用户名与约定目录。
# 1. 复制母本(首次)
cd /home/USER/soc3_practice
cp -a /project/SOC_CDC_FLOW ./soc-cdc-flow_my
cd ./soc-cdc-flow_my/spyglass_cdc
# 2. 环境(按服务器实际路径)
export SPYGLASS_HOME=/opt/edatools/synopsys/spyglass/U-2023.03-SP1/SPYGLASS_HOME
# 3. 教学顶层
CDC_MODE=training ./run_cdc.sh
# 4. 整芯片默认四 Goal
./run_cdc.sh
# 5. 单 Goal 重跑
GOAL=cdc/cdc_verify ./run_cdc.sh
# 6. Make 帮助
make help
make cdc_signoff # 扩展签核组合(耗时更长)
# 7. GUI 打开工程(交互调试)
$SPYGLASS_HOME/bin/spyglass -project work/default_run/lpwr_soc_cdc.prj -gui
常见陷阱与规避
| 陷阱 | 后果 | 建议 |
|---|---|---|
| 未填时钟树直接跑整芯片 | SDC 与 RTL 不一致,报告大量误报 | 先完成阶段 2 再跑 soc_top |
| 把「Run Complete」当 design signoff | 遗漏真实 Error | 必须 triage moresimple.rpt |
| 多比特 bus 逐 bit 2FF | 功能性隐患 | 学习教学 BAD 用例与 Gray/握手修复 |
| 一次改 RTL+SDC+waiver | 无法归因 diff | 单变量迭代,每步保留 log |
| 开启 aggregate 导致崩溃 | 误以为整流失败 | 以 per-goal 报告为准;aggregate 可选 |
| 忽视 Ibex build 路径 | _elab 缺模块 | 与 LPWR 相同方式预生成 ibex/build |
验收标准(建议)
- [ ] 教学模式与整芯片模式各至少成功运行 1 次,日志无 SPG#3004。
- [ ]
clock_tree.md与cdc.sdc已对关键时钟完成首轮对齐并记录 change log。 - [ ] 完成 ≥3 条违规的 triage 闭环(含修复或规范 waiver 论证)。
- [ ] 完成
CDC_SIGNOFF_CHECKLIST.md自检并能口述 flow vs design signoff 差异。 - [ ] 提交项目复盘,可关联 LPWR 系统背景(双核/低功耗)说明 CDC 在整 SoC 中的位置。
与官网其他实践项目的关系
| 项目 | 关系 |
|---|---|
| LPWR 低功耗双核 | 同一 SoC RTL 平台;CDC 为静态签核专项,建议并行或接续学习 |
| UPF 功耗意图 | 低功耗「电压域/开关」与 CDC「时钟域/跨域」互补,简历可并列 |
| SoC V3.0 / yrun | V3.0 练系统验证广度;yrun 练回归自动化;CDC 练 signoff 方法论 |
| SOC_V1.1 | 入门后可跳至 LPWR+CDC 组合,不必严格线性 |
仓库内延伸阅读(母本路径)
| 文档 | 路径(相对 SOC_CDC_FLOW) |
|---|---|
| SpyGlass 快速上手 | spyglass_cdc/QUICKSTART.md |
| 签核检查表 | spyglass_cdc/CDC_SIGNOFF_CHECKLIST.md |
| 时钟树(SDC 事实来源) | spyglass_cdc/docs/clock_tree.md |
| 报告阅读指南 | spyglass_cdc/docs/reports_guide.md |
| 分层 CDC 方法论 | spyglass_cdc/docs/hierarchical_flow.md |
| CDC 知识补充 | spyglass_cdc/docs/cdc_knowledge_supplement.md |
| LPWR 仿真指南 | docs/处芯积律 低功耗双核 SoC 实践(LPWR…)仿真指南.md |
| SoC 架构 HTML | docs/soc_project_introduction.html |
答辩与简历表述提示
推荐叙事结构:背景(LPWR 异构双核 SoC)→ 时钟计划与约束治理 → SpyGlass 四 Goal 流程 → 典型违规案例(STAR)→ flow signoff vs 设计风险 → 与动态仿真/UPF 的边界。
可强调能力关键词:SpyGlass CDC、SDC 时钟约束、结构性/功能性 CDC、Gray/握手同步、RDC、waiver 治理、签核检查表、静态 signoff 报告 triage。
文档版本:2026-05-19 · 对应服务器母本 /project/SOC_CDC_FLOW。若母本目录或 SpyGlass 版本升级,请以仓库内 README_spyglass_cdc.txt 与 CDC_SIGNOFF_CHECKLIST.md 为准同步修订本文。