STUDENT_PROJECT_GUIDE.md

SOC3.0 学生实践项目指南

📚 项目概述

SOC3.0 是一个基于 RISC-V 的完整片上系统(System-on-Chip)设计项目,涵盖从 RTL 设计、验证、综合到软件开发的完整 IC 设计流程。本项目适合作为 IC 设计/验证方向的学生实践项目。


🎯 一、你能学到什么?(技能清单)

1.1 核心技能(必学)

🔹 RISC-V 处理器架构

  • ✅ RISC-V 指令集架构(ISA)理解
  • ✅ Ibex 处理器核心工作原理
  • ✅ 处理器流水线设计
  • ✅ 中断和异常处理机制
  • ✅ JTAG 调试接口原理

学习成果:理解现代处理器架构,掌握 RISC-V 生态

🔹 总线协议与系统集成

  • ✅ AMBA AHB 总线协议(Advanced High-performance Bus)
  • ✅ AMBA APB 总线协议(Advanced Peripheral Bus)
  • ✅ AHB2APB 桥接器设计
  • ✅ 总线仲裁与多主设备管理
  • ✅ 地址映射与解码

学习成果:掌握 ARM 标准总线协议,理解 SOC 系统集成方法

🔹 数字电路设计(RTL)

  • ✅ Verilog/SystemVerilog 硬件描述语言
  • ✅ 同步/异步设计方法
  • ✅ 状态机设计
  • ✅ 时钟域交叉(CDC)处理
  • ✅ 低功耗设计基础

学习成果:能够独立设计数字 IP 模块

🔹 外设接口设计

  • SPI/QSPI:串行外设接口,支持 Quad 模式
  • UART:通用异步收发器
  • I2C:两线制串行总线
  • PWM:脉宽调制控制器
  • DMA:直接内存访问控制器
  • Pinmux:引脚复用控制器

学习成果:掌握常见外设接口的设计与实现

🔹 高级 IP 模块

  • CNN 加速器:神经网络硬件加速
  • ISP:图像信号处理器
  • SRAM 控制器:存储器接口设计

学习成果:了解 AI 加速器和图像处理硬件设计

1.2 验证技能(必学)

🔹 验证方法学

  • UVM(Universal Verification Methodology):业界标准验证框架
  • ✅ 验证平台搭建(Testbench)
  • ✅ 激励生成与驱动(Driver/Sequencer)
  • ✅ 监控与检查(Monitor/Scoreboard)
  • ✅ 断言(Assertion)使用

学习成果:掌握工业级验证方法,达到企业要求

🔹 功能验证

  • ✅ 功能测试用例设计
  • ✅ 边界条件测试
  • ✅ 错误注入测试
  • ✅ 覆盖率分析(Code Coverage, Functional Coverage)
  • ✅ 回归测试

学习成果:能够独立完成模块级和系统级验证

1.3 综合与实现(选学)

🔹 逻辑综合

  • ✅ Design Compiler(DC)使用
  • ✅ 约束文件编写(SDC)
  • ✅ 时序分析基础
  • ✅ 面积优化
  • ✅ 功耗分析

学习成果:理解 RTL 到门级网表的转换过程

🔹 工艺库与 PDK

  • ✅ GF180MCU PDK 使用(180nm 工艺)
  • ✅ 标准单元库理解
  • ✅ 时序角(Corner)概念
  • ✅ 库文件转换

学习成果:了解实际流片流程

1.4 软件开发(选学)

🔹 嵌入式软件开发

  • ✅ RISC-V 汇编语言
  • ✅ 裸机 C 程序开发
  • ✅ 外设驱动开发
  • ✅ 中断服务程序(ISR)
  • ✅ 链接脚本(Linker Script)

学习成果:能够为 SOC 编写测试程序和驱动

1.5 工具使用

🔹 EDA 工具

  • 仿真工具:VCS/QuestaSim/Verilator
  • 综合工具:Design Compiler(DC)
  • 静态检查:SpyGlass
  • 波形查看:Verdi/DVE
  • 版本控制:Git

学习成果:熟练使用工业级 EDA 工具


📝 二、如何写到简历?

2.1 项目描述模板

模板一:IC 设计方向

项目名称:基于 RISC-V 的 SOC 系统设计与实现
项目时间:2024.XX - 2024.XX
项目角色:IC 设计工程师
项目描述:
  负责设计并实现一个完整的 RISC-V 片上系统(SOC),包含处理器核心、总线系统、
  外设接口和加速器模块。项目采用 AMBA AHB/APB 总线架构,集成 10+ 个 IP 模块。

主要职责:
  • 设计并实现 AHB2APB 桥接器,实现高性能总线到外设总线的协议转换
  • 设计 SPI/QSPI 控制器,支持标准模式和 Quad 模式,实现高速串行通信
  • 设计 DMA 控制器,实现高效的数据传输,提升系统性能
  • 完成系统级集成,包括地址映射、时钟域处理和复位管理
  • 使用 Verilog/SystemVerilog 完成 RTL 设计,代码量 5000+ 行

技术栈:Verilog, SystemVerilog, AMBA AHB/APB, RISC-V, Design Compiler
项目成果:
  • 成功集成 RISC-V Ibex 处理器核心,系统可正常运行
  • 所有外设模块通过功能验证,覆盖率 95%+
  • 完成逻辑综合,满足时序约束

模板二:IC 验证方向

项目名称:RISC-V SOC 系统级验证平台开发
项目时间:2024.XX - 2024.XX
项目角色:IC 验证工程师
项目描述:
  基于 UVM 方法学搭建完整的 SOC 验证平台,对包含 RISC-V 处理器、总线系统、
  外设接口和加速器的片上系统进行功能验证。

主要职责:
  • 搭建基于 UVM 的系统级验证平台,包括 Testbench、Agent、Scoreboard 等组件
  • 开发 AHB/APB 总线协议检查器,确保总线协议正确性
  • 编写功能测试用例 50+ 个,覆盖所有外设模块(SPI、UART、I2C、PWM、DMA 等)
  • 实现覆盖率驱动验证(CDV),功能覆盖率从 60% 提升至 95%+
  • 使用 SystemVerilog Assertion(SVA)编写协议检查断言
  • 完成回归测试,建立自动化验证流程

技术栈:SystemVerilog, UVM, VCS, Verdi, Python(自动化脚本)
项目成果:
  • 发现并修复设计缺陷 20+ 个,包括协议违规、边界条件错误等
  • 建立完整的验证文档和测试计划
  • 验证平台可复用,支持后续项目扩展

模板三:综合方向

项目名称:RISC-V SOC 逻辑综合与实现
项目时间:2024.XX - 2024.XX
项目角色:数字后端工程师(实习)
项目描述:
  负责 SOC3.0 项目的逻辑综合工作,将 RTL 代码转换为门级网表,并进行时序和面积优化。

主要职责:
  • 使用 Design Compiler 完成逻辑综合,目标工艺为 GF180MCU(180nm)
  • 编写综合约束文件(SDC),包括时钟定义、时序约束、面积约束
  • 分析时序报告,识别关键路径并进行优化
  • 完成多时序角(SS/TT/FF)的综合,确保设计鲁棒性
  • 进行面积和功耗分析,提供优化建议

技术栈:Design Compiler, SDC, TCL, GF180MCU PDK
项目成果:
  • 成功完成综合,满足时序约束(Setup/Hold Time)
  • 面积优化 15%,功耗分析完成
  • 生成可用于后仿真的网表文件

2.2 技能点关键词(用于简历技能栏)

硬件描述语言:
  • Verilog, SystemVerilog

验证方法学:
  • UVM, SystemVerilog Assertion (SVA), Coverage-driven Verification

总线协议:
  • AMBA AHB, AMBA APB, AXI(了解)

处理器架构:
  • RISC-V, ARM(了解)

EDA 工具:
  • VCS, QuestaSim, Verilator(仿真)
  • Design Compiler(综合)
  • Verdi, DVE(波形调试)
  • SpyGlass(静态检查)

脚本语言:
  • TCL, Python, Shell

工艺与 PDK:
  • GF180MCU PDK, 标准单元库

2.3 项目亮点提炼(STAR 法则)

Situation(情境)
- 需要设计/验证一个完整的 RISC-V SOC 系统
- 包含 10+ 个 IP 模块,需要系统级集成

Task(任务)
- 设计/验证特定模块(如 SPI、DMA 等)
- 确保功能正确性和协议合规性

Action(行动)
- 使用 UVM 搭建验证平台
- 编写测试用例 50+ 个
- 进行覆盖率分析并提升覆盖率

Result(结果)
- 功能覆盖率从 60% 提升至 95%+
- 发现并修复设计缺陷 20+ 个
- 系统成功运行,通过所有测试


🗺️ 三、如何学习?(学习路径)

3.1 学习路径规划(建议 3-6 个月)

阶段一:基础准备(1-2 周)

目标:熟悉项目环境和基础知识

任务清单
- [ ] 阅读项目 README 和架构文档
- [ ] 搭建开发环境(VCS/QuestaSim、Verdi 等)
- [ ] 学习 Git 基本操作
- [ ] 复习 Verilog/SystemVerilog 语法
- [ ] 了解 RISC-V 基础指令集

推荐资源
- 《数字设计和计算机体系结构》(RISC-V 版)
- RISC-V 官方文档:https://riscv.org/
- SystemVerilog 语法参考

验收标准
- 能够编译运行项目
- 能够查看波形并理解基本信号


阶段二:理解架构(2-3 周)

目标:深入理解 SOC 系统架构

任务清单
- [ ] 阅读 soc/sw/SOC_TESTPLAN.md,理解系统架构
- [ ] 分析顶层模块 soc/top/top.sv,理解模块连接
- [ ] 学习 AMBA AHB 协议规范
- [ ] 学习 AMBA APB 协议规范
- [ ] 理解地址映射关系

实践任务
- [ ] 绘制系统架构图(使用 Draw.io 或 Visio)
- [ ] 分析一个外设模块的 RTL 代码(建议从 UART 开始)
- [ ] 理解模块的接口信号和功能

推荐资源
- ARM AMBA 规范文档(AHB/APB)
- 《SOC 设计方法与实现》

验收标准
- 能够解释 SOC 的整体架构
- 能够说明 AHB 和 APB 的区别和联系
- 能够找到任意外设的地址范围


阶段三:模块级实践(4-6 周)

目标:选择一个模块进行深入学习和实践

推荐模块选择(按难度递增):
1. UART(最简单,适合入门)
2. PWM(简单,理解定时器)
3. SPI(中等,理解串行通信)
4. I2C(中等,理解两线制协议)
5. DMA(较难,理解数据传输)
6. CNN/ISP(最难,理解算法加速)

任务清单(以 UART 为例):
- [ ] 阅读 UART 模块的 RTL 代码
- [ ] 理解 UART 协议(波特率、数据帧格式)
- [ ] 分析状态机和数据流
- [ ] 阅读现有的测试用例 soc/sw/soc_test_c/uart_test/
- [ ] 运行仿真,观察波形
- [ ] 尝试修改测试用例,验证不同场景

进阶任务
- [ ] 为模块编写 UVM 验证平台(如果选择验证方向)
- [ ] 优化模块设计(如果选择设计方向)
- [ ] 添加新功能(如 FIFO 深度可配置)

验收标准
- 能够解释模块的工作原理
- 能够独立编写测试用例
- 能够定位并修复简单 bug


阶段四:系统级实践(3-4 周)

目标:理解系统集成和验证

任务清单
- [ ] 运行系统级测试用例
- [ ] 理解多模块协同工作流程
- [ ] 学习 UVM 验证平台架构(如果选择验证方向)
- [ ] 分析覆盖率报告
- [ ] 学习 JTAG 调试接口

实践任务
- [ ] 编写一个系统级测试用例(如:通过 UART 发送数据,DMA 传输到 SRAM)
- [ ] 分析系统性能瓶颈
- [ ] 完成一个模块的覆盖率提升任务

验收标准
- 能够运行完整的系统测试
- 能够分析系统级问题
- 覆盖率提升 10%+


阶段五:综合与实现(2-3 周,选学)

目标:学习逻辑综合流程

任务清单
- [ ] 阅读 dc/README_GF180.md
- [ ] 学习 Design Compiler 基本命令
- [ ] 理解 SDC 约束文件格式
- [ ] 完成一个简单模块的综合
- [ ] 分析时序报告

实践任务
- [ ] 完成 UART 模块的综合
- [ ] 优化时序,满足约束
- [ ] 进行面积和功耗分析

验收标准
- 能够独立完成模块综合
- 能够分析时序报告
- 理解 Setup/Hold Time 概念


3.2 学习方式建议

🔹 理论学习(30%)

  • 阅读技术文档和规范
  • 观看在线课程(如 Coursera、Bilibili)
  • 阅读经典教材

🔹 实践操作(60%)

  • 代码阅读:理解现有代码
  • 仿真调试:运行测试,观察波形
  • 修改实验:修改代码,验证理解
  • 独立开发:编写新功能或测试用例

🔹 总结输出(10%)

  • 写学习笔记
  • 绘制架构图
  • 准备技术分享
  • 撰写项目报告

3.3 常见问题与解决方案

Q1:我是零基础,能学这个项目吗?

A:建议先学习:
- Verilog 基础语法(1-2 周)
- 数字电路基础(组合逻辑、时序逻辑)
- 然后从最简单的模块(UART)开始

Q2:应该选择设计方向还是验证方向?

A
- 设计方向:适合对硬件实现感兴趣,喜欢写 RTL 代码
- 验证方向:适合对系统测试感兴趣,逻辑思维强
- 建议两个方向都了解,然后选择一个深入

Q3:没有 EDA 工具怎么办?

A
- 使用开源工具:Verilator(仿真)、Yosys(综合)
- 申请教育版 License
- 使用云端 EDA 平台

Q4:如何证明学习成果?

A
- 完成项目报告(包含架构分析、设计/验证方案、测试结果)
- 提交代码到 GitHub
- 准备技术面试(能够讲解项目)


📋 四、实践任务清单

4.1 入门级任务(适合初学者)

  • [ ] 任务 1:运行一个简单的测试用例(如 sram_test),观察波形
  • [ ] 任务 2:阅读 UART 模块代码,绘制状态机图
  • [ ] 任务 3:修改 UART 测试用例,测试不同的波特率
  • [ ] 任务 4:理解地址映射,找到所有外设的基地址

4.2 进阶级任务(适合有一定基础)

  • [ ] 任务 5:为 PWM 模块编写新的测试用例
  • [ ] 任务 6:分析 DMA 传输流程,优化传输效率
  • [ ] 任务 7:搭建一个简单模块的 UVM 验证平台
  • [ ] 任务 8:完成一个模块的逻辑综合

4.3 高级任务(适合深入学习)

  • [ ] 任务 9:设计并实现一个新的外设模块(如 Timer)
  • [ ] 任务 10:优化系统性能(如减少延迟、提升吞吐量)
  • [ ] 任务 11:完成系统级覆盖率分析,提升覆盖率至 98%+
  • [ ] 任务 12:编写完整的项目文档和技术报告

🎓 五、学习成果评估

5.1 知识掌握度自测

基础级(能够):
- [ ] 理解 SOC 系统架构
- [ ] 阅读并理解 RTL 代码
- [ ] 运行仿真并查看波形
- [ ] 理解基本的总线协议

进阶级(能够):
- [ ] 独立分析模块功能
- [ ] 编写功能测试用例
- [ ] 搭建简单的验证平台
- [ ] 定位并修复简单 bug

高级级(能够):
- [ ] 设计新的 IP 模块
- [ ] 完成系统级验证
- [ ] 进行逻辑综合和优化
- [ ] 撰写技术文档

5.2 项目作品集建议

完成项目后,建议整理以下材料:

  1. 项目报告(PDF)
  2. 项目概述
  3. 架构分析
  4. 设计/验证方案
  5. 测试结果
  6. 总结与展望

  7. 代码仓库(GitHub)

  8. 清晰的目录结构
  9. README 说明
  10. 代码注释

  11. 演示视频(可选)

  12. 系统功能演示
  13. 波形分析讲解

  14. 技术分享 PPT(可选)

  15. 用于面试展示

📚 六、推荐学习资源

6.1 书籍

  • 《数字设计和计算机体系结构》(RISC-V 版)
  • 《SystemVerilog for Verification》
  • 《UVM 实战》
  • 《SOC 设计方法与实现》

6.2 在线资源

  • RISC-V 官方文档:https://riscv.org/
  • ARM AMBA 规范:https://developer.arm.com/documentation
  • Verilator 文档:https://verilator.org/
  • EDA Playground:https://www.edaplayground.com/

6.3 社区

  • EETOP 论坛
  • 数字 IC 设计交流群
  • GitHub 相关项目

💡 七、面试准备建议

7.1 项目讲解要点

  1. 项目背景:为什么做这个项目?
  2. 技术选型:为什么选择 RISC-V?为什么用 AHB/APB?
  3. 个人贡献:你具体做了什么?
  4. 技术难点:遇到了什么问题?如何解决?
  5. 项目成果:取得了什么成果?有什么数据支撑?

7.2 常见面试问题

Q:请介绍一下这个项目。
- 准备 2-3 分钟的精简版本
- 突出技术亮点和个人贡献

Q:你在项目中遇到的最大困难是什么?
- 准备一个具体的技术问题
- 说明分析过程和解决方案

Q:如果让你重新设计,你会如何改进?
- 展示对项目的深入思考
- 提出可行的优化方案


✅ 八、学习检查清单

在开始学习前,请确认:

  • [ ] 已安装必要的 EDA 工具或找到替代方案
  • [ ] 已阅读项目 README 和架构文档
  • [ ] 已确定学习方向(设计/验证/综合)
  • [ ] 已制定学习计划和时间表
  • [ ] 已准备好学习笔记工具

📞 九、获取帮助

如果在学习过程中遇到问题:

  1. 查阅文档:先查看项目内的 README 和文档
  2. 搜索问题:在技术论坛搜索类似问题
  3. 提问技巧:描述清楚问题、错误信息、已尝试的方法
  4. 代码审查:请有经验的工程师 review 代码

祝学习顺利!通过这个项目,你将获得完整的 IC 设计/验证实践经验! 🚀