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_clockset_clock_groups 的基本含义(不要求会写完整 STA 约束)。
  • 实践环境需能使用 SpyGlass + CDC License(VNC 实践服务器已预装示例版本 U-2023.03-SP1)。

学完能带走什么(交付物)

交付物 说明
CDC 运行记录 至少一次完整四 Goal 运行的 logs/sg_cdc_*.logwork/ 目录快照说明
时钟树与 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_FLOWLPWR 低功耗双核 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.svedu_rdc_example.sv 与可选 Goal rdc/rdc_verify_struct

领域 B:SpyGlass CDC 工具链

  • 四类核心 Goal(默认批跑顺序):cdc/cdc_setup_checkcdc/clock_reset_integritycdc/cdc_verify_structcdc/cdc_verify
  • 扩展 Goalconstraints/sdc_checkrdc/rdc_verify_structcdc/cdc_abstract(分层抽象,见 hierarchical flow)。
  • 报告阅读顺序goals_summary.htmlmoresimple.rptCDC-report.rptadv_cdc.rpt(详见 docs/reports_guide.md)。
  • GUI 深潜:用 lpwr_soc_cdc.prj 在 SpyGlass GUI 中查看路径 schematic 与时钟传播。

领域 C:约束、签核与工程治理

  • 时钟树文档化:在 docs/clock_tree.md 维护时钟清单、异步关系矩阵、复位表与变更日志。
  • SDC 与 RTL 对齐constraints/cdc.sdccreate_clockset_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.htmlverification_environment_overview.md 等),便于对照系统边界。

三、怎么学?

推荐节奏:教学顶层 → 整芯片批跑 → 报告 triage → 签核文档 →(可选)分层方案

  1. 第 1 周:理论与教学 lab
  2. 阅读 spyglass_cdc/docs/cdc_knowledge_supplement.md
  3. CDC_MODE=training ./run_cdc.sh;再试 CDC_TRAINING_BAD=1 对比违规数量。
  4. 任选 2 个教学模块(如 Gray FIFO、REQ/ACK)在报告中找到对应路径。

  5. 第 2~3 周:整芯片 soc_top

  6. 确认 SPYGLASS_HOME、License、ibex/build 路径。
  7. 研读 docs/clock_tree.md,将 TODO 项替换为真实时钟参数并同步 cdc.sdc
  8. 执行 ./run_cdc.shmake cdc_all;按 reports_guide.md 完成首轮 triage。

  9. 第 4~5 周:签核与复盘

  10. 完成 CDC_SIGNOFF_CHECKLIST.md 自检。
  11. 整理 waiver 样例(即使是教学用 mock 条目,也按 README 规范书写)。
  12. 撰写项目复盘:区分 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.rptError 级违规 须修复或按规范 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 增量重跑

报告阅读顺序(必读)

  1. work/<run>/lpwr_soc_cdc/html_reports/goals_summary.html
  2. consolidated_reports/soc_top_cdc_<goal>/moresimple.rpt
  3. 同目录 CDC-report.rpt
  4. 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_cpuroot_pclkjtag_tck 等周期与 owner。
  • [ ] 同步修改 constraints/cdc.sdc 中对应 create_clock / set_clock_groups
  • [ ] 可选:CDC_INCLUDE_SDC_CHECK=1 ./run_cdc.shmake 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.shmake cdc_all,保留 logs/sg_cdc_<timestamp>.log
  • [ ] 按 reports_guide.md 打开 goals_summary.htmlmoresimple.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_practiceUSER 替换为你的 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.mdcdc.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.txtCDC_SIGNOFF_CHECKLIST.md 为准同步修订本文。