项目资料.md
处芯积律 RISC-V SoC 基础版(SoC V1.1)— 项目资料
文档用途:面向学员与讲师的「一页总览 + 深度学习」说明;与官网 IC 仿真实践 · SoC V1.1 项目页 口径一致。
工程细节:顶层模块名、目录树、Makefile 目标名、默认用例名等,以服务器只读树内 README 与当期讲义为准;本文不替代工程内文档。
验证环境总览(架构 / IP / Makefile / Test):见同目录 SOC验证环境详解.md。
各 IP 独立验证包(环境 / Test / Makefile):见 IP验证环境资料.md。
各 IP 功能 Spec 与验证 Testplan(详细版):ISP · QSPI · PINMUX。
架构与验证环境框架图(HTML,含 SVG 详图):见 diagrams/index.html(官网资料页 「架构框架图 · HTML」 栏目可直达各页)。
在线阅读(与 SoC V3.0 资料同机制)
在官网打开 SoC V1.1 项目介绍页,点击 「SoC V1.1 资料」,或直接访问:
https://www.yueanic.com/projects/ic-practice/simulation/project/soc-v1-1/docs
该页会列出本仓库 SOC_V1.1/ 目录下全部 Markdown(含本子目录 docs/),并转为站内 HTML。部署侧可通过环境变量 SOC_V1_1_DOCUMENTATION_ROOT 指向资料根目录;需安装 Python 包 Markdown(见项目 requirements.txt)。
与 SoC V3.0「SOC3.0 资料」的差异(便于选型)
| 对比项 | SoC V1.1 资料 | SoC V3.0 资料 |
|---|---|---|
| 侧重点 | 入门叙事、IP 在片内上下文、SoC TB 闭环习惯 | 工程树内 practice_templates、soc/sw 等大量讲义式 Markdown |
| 工程母本路径 | /project/SOC_V1.1/To_Customer |
/project/SOC3.0/soc |
| 在线文档根 | 应用旁 SOC_V1.1/(可配置) |
应用旁 SOC3.0/(可配置) |
常见问题(FAQ)
Q:资料页空白?
A:检查服务器上是否存在 SOC_V1.1 目录及 .md 文件;或设置 SOC_V1_1_DOCUMENTATION_ROOT 后重启应用。
Q:仿真报错与本文描述不一致?
A:以 当期母本树 + 讲义 为准;本文不绑定某一版 EDA 或仿真器选项。
Q:和星球 / 付费权限有关吗?
A:官网项目介绍与公开资料页为产品说明;VNC 与工程母本访问权限以平台当期规则为准。
1. 项目定位
| 项 | 说明 |
|---|---|
| 正式名称 | 处芯积律 RISC-V SoC 基础版(SoC V1.1) |
| 难度 | 入门 |
| 实践形态 | VNC 远程 Linux 桌面;在个人可写目录下的工程副本中操作 |
| 服务器只读母本(定稿) | /project/SOC_V1.1/To_Customer |
| 目录名含义 | To_Customer:面向学员/客户交付的整包工程根(相对内部开发树,一般为可直接 cp -a 使用的定稿树) |
| 先决知识 | Verilog / SystemVerilog 基础、数字电路基础、常用 shell 命令 |
重要纪律:/project/... 为只读参考源;禁止在母本目录内直接修改。应复制到家目录后再编辑与仿真,例如:
cd /home/你的用户名/soc3_practice # 个人练习根目录以平台说明为准
cp -a /project/SOC_V1.1/To_Customer ./SOC_V1.1_To_Customer_my
cd ./SOC_V1.1_To_Customer_my
ls -la
后续所有 vim、make、仿真命令均在 *_my 副本中执行。
2. 这个项目「是什么」
SoC V1.1 是 单核 RISC-V SoC 的体系化入门工程,目标不是「把某条仿真命令跑通就结束」,而是建立 SoC 级工程认知:
- 顶层如何组织:SoC 顶层例化关系、Core / 互连 / 存储 / 外设的边界。
- 总线如何连接:主设备发起的访问如何经译码或路由落到不同从设备(存储、UART、Timer 等)。
- 外设如何挂接:典型 APB/AHB 类窄总线上的寄存器映射、复位初值、与中断/状态位的关系(以本工程实现为准)。
- 仿真如何闭环:从 编译列表 → 脚本入口 → 默认用例 → log → 波形 的一体化习惯,以及 基线(baseline)→ 受控改动 → 最小回归 的证据链。
与「只写一个小模块 + 独立 testbench」的区别:V1.1 强调 系统路径——你能口述并画出「取指 / 访存 / 写外设寄存器」在片上经过的模块与地址区间,并能用波形与日志 互证。
2.1 架构与验证环境框架图(HTML)
官网 SoC V1.1 资料 页中打开 「架构框架图 · HTML」,或从 diagrams/index.html 进入总索引。各页含 SVG 框图、图例与对照表,建议与 Markdown 讲义配合阅读。
| 页面 | 内容 |
|---|---|
| diagrams/index.html | 总索引 |
| diagrams/delivery_overview.html | To_Customer 交付树 |
| diagrams/soc_architecture.html | SoC 片内架构(Ibex、矩阵、外设) |
| diagrams/soc_verification_environment.html | SoC 验证环境(Makefile、sw、UVM) |
| diagrams/isp_ip_architecture.html | ISP IP 数据通路 |
| diagrams/isp_verification_environment.html | ISP UVM + C model |
| diagrams/qspi_ip_architecture.html | QSPI 寄存器与控制器 |
| diagrams/qspi_verification_environment.html | QSPI 8 类用例环境 |
| diagrams/pinmux_ip_architecture.html | PINMUX 复用编码 |
| diagrams/pinmux_verification_environment.html | PINMUX FPV 流程 |
3. 怎么学(推荐节奏)
3.1 总原则
按 「环境 → 个人副本 → 零改动基线 → 读代码地图 → 受控实验 → 复盘」 推进。
- 首轮闭环:约 1~2 周,每天 1~2 小时 可完成(与官网建议一致)。
- 每次只改一处:参数或少量 RTL;改完跑 最小相关用例集,并与 baseline 对比。
3.2 按日建议(可与官网「分周节奏」对照)
| 阶段 | 天数(参考) | 你在做什么 |
|---|---|---|
| 环境与基线 | 第 1~2 天 | 开通 VNC;cp -a;按 README/讲义跑通默认用例;保存完整 baseline log(及讲义要求的波形)。 |
| 读代码与映射 | 第 3~5 天 | 精读顶层例化;整理 地址映射表(讲义或头文件与 RTL 译码互核);跟一条主线:复位释放 → 首次取指 → 首次有意义总线事务。 |
| 脚本与调试 | 第 6~8 天 | 弄清 compile / run / wave 分层;练习 log 关键字 ↔ 波形时间对齐;在允许范围内切换参数或小用例。 |
| 巩固(可选) | 第 9~10 天 | 完成一处 最小 RTL 或参数改动 + 最小回归;写结构化复盘;对照下文「完成标准」自检。 |
3.3 四阶段工程法(与深度讲义对齐)
- 阶段 1:环境与只读基线 — 可复现的仿真入口 + 跑通证明;无稳定 baseline 不谈回归。
- 阶段 2:读代码与对齐映射 — 把地址—数据—控制与 RTL 层次、TB 激励对齐;能回答「第一次总线事务谁发起、落到哪个从端口」。
- 阶段 3:受控改动与最小回归 — 可描述、可 diff、可回归的「改—证—比」。
- 阶段 4:复盘与交付 — 现象 / 假设 / 证据(log 时间戳 + 信号)/ 结论 / 回归记录;可迁移到简历与面试 STAR。
4. 项目里「有哪些内容」(知识域与工程范围)
4.1 三条能力线(自检清单)
(1)架构与系统视角
- 单核 SoC 常见划分:处理器子系统、系统互连(译码/路由)、存储子系统、外设子系统(UART / Timer / GPIO 等)、可选调试或中断聚合。
- 地址映射:一次取指、一次对外设寄存器的写、一次对 SRAM/ROM 区的读,各自经译码落到何处。
- 时钟与复位:释放顺序、外设初值、对「首条指令 / 首轮总线」的影响(以工程约束为准)。
- 软件可见性:即便当前以 RTL+TB 为主,也应能说出「第一条指令从哪取」「某外设寄存器落在哪个地址区间」,为后续接固件打基础。
(2)RTL / 设计向
- 层次化 RTL:顶层例化树、接口位宽、主从方向;定位 Core、互连桥、外设 IP;核对时钟域/复位域。
- 总线侧行为:握手、反压、单次/突发(若协议与实现支持)在波形上的体现。
- 可综合改动(课程允许范围内):寄存器默认值、参数化位宽、小范围逻辑;体会「改动面 ↔ 验证面」。
(3)验证与平台向
- Testbench:DUT 例化、时钟复位、激励加载、比对手段(以工程为准:自比对、文件比对、断言等)。
- 脚本分层:filelist、
+incdir+、仿真器调用、seed、批处理入口 vs 交互波形入口的职责划分。 - log + 波形:时间对齐、信号分组、沿总线事务回溯 RTL。
- 最小回归:改动后只跑强相关子集,并记录命令与结论。
4.2 技术范围(工程应覆盖的块)
- SoC 顶层与模块层级:core、互连/译码、存储通路、外设、TB 边界。
- 系统地址映射与主数据路径(可手绘)。
- 仿真工程:编译列表、运行脚本、日志与波形、默认用例与常用开关。
- 定向改动与小回归。
- 目录与脚本组织习惯(为 V2.0 / V3.0 进阶铺垫)。
4.3 典型子系统(做什么 / 验证看什么)
| 子系统 | 职责概要 | 设计关注点 | 验证关注点 |
|---|---|---|---|
| RISC-V Core | 取指、译码、执行、访存;总线事务主要发起方 | 与互连接口约定、流水停顿、异常/中断/调试对接 | 复位后首次取指到首次访存或外设的波形阶段标注 |
| 互连 / 译码 | 路由到存储与各从外设 | 译码规则、片选、多从并联、协议桥(若有) | 由地址预判响应从端口;边界与非法访问(若 TB 覆盖) |
| 存储通路 | ITCM/IROM、DTCM/SRAM 等(以工程为准) | 位宽对齐、字节使能、与互连 beat 对齐 | log 中地址与波形通道读写 beat 一致 |
| 外设子系统 | UART、Timer、GPIO 等,多为寄存器映射 | 位域、复位初值、中断合并(若有) | 「写寄存器 → 内部状态/TX → 读状态」闭环与观测点 |
| TB / 平台 | 时钟复位、装载、结束条件、波形开关 | TB 与 DUT 边界、扩展用例前读懂结构 | log 关键字 ↔ 波形时间戳;开关 dump 可复现 |
4.4 片上外设类型(教学归纳)
以下类别在入门 SoC 中常见;具体实例名与地址以 RTL 与讲义为准。
- 通信与 IO:UART / SPI / I2C;GPIO / PWM 等。
- 定时与系统服务:Timer / WDT;中断聚合(PIC)等。
- 存储接口:SRAM 控制器;ROM/Flash 或 ITCM/IROM、DTCM 等模型。
- 调试与系统控制:Debug 或 JTAG 侧;复位/时钟分发、系统控制寄存器。
4.5 深度拆解(模块级「焦点 / 如何验」)
- SoC 顶层与总线主链路:在 RTL 中找到 Core、互连、存储与外设层级;对照映射表理解一次读写路由;自证:能口述「CPU 发起 → 译码 → 目标从设备」完整路径。
- 存储与启动路径:复位后 PC、第一条指令所在区域、与 TB 装载镜像(若有)的关系;自证:波形标出首次取指对应存储访问,与 log 一致。
- 外设寄存器路径:任选一 UART 或 Timer,追到寄存器 RTL 与访问路径;自证:写寄存器 → 波形观测 → 读状态的叙述闭环。
- 仿真入口与脚本层级:Makefile/脚本中 compile、elaborate、run、dump 分工;自证:在不动功能代码前提下切换默认用例或开关波形,结果可解释。
- 波形与日志联合定位:总线/控制信号分组;log 时间戳打游标;自证:半页纸分析(时间、信号、根因假设)。
5. IP 验证环境(在 SoC V1.1 中的含义)
在 V1.1 里,「IP」主要指 挂在系统互连上的各外设控制器与存储接口 RTL,它们不是脱离芯片的独立 IP 核验证台,而是 SoC 中的一个从设备(slave)。
5.1 与「独立 IP UVM 环境」的差别
| 维度 | 独立 IP 验证(常见课程形态) | SoC V1.1 中的 IP 相关验证 |
|---|---|---|
| DUT 边界 | 单个 UART/Timer 等,带专用 UVM agent | DUT 为 整颗 SoC;外设在片内 |
| 激励 | 面向总线协议的 directed / 约束随机 | 由 Core 取指/访存 或 TB 辅助激励驱动真实系统路径 |
| 关注点 | 协议完备性、覆盖率闭环 | 映射是否正确、与 Core/TB 协同下的寄存器行为、中断/状态位是否在系统上下文中正确 |
5.2 你在 V1.1 里如何练「IP 向」能力
- 选一条外设主线(建议 UART 或 Timer):从顶层找到其总线接口与地址区间。
- 对照寄存器说明(讲义或 spec):逐位理解复位值、读写属性、清置位关系。
- 用波形验证寄存器访问路径:总线写 beat → 外设内部寄存器更新 → 状态/TX 可见变化 → 读回验证。
- 刻意做小改动(在课程允许范围内):例如某控制位默认值、分频参数;跑 只针对该外设相关场景 的最小回归,并对比 baseline。
5.3 常见观测点(通用,具体信号名以工程为准)
- 总线:地址、写数据、读数据、选通、就绪/反压类信号。
- 外设内部:寄存器块输出、FIFO 级(若有)、波特率/计数器中间量。
- TB:发起访问的时刻、与
uvm/initial任务(若工程使用)的对应关系。
6. SoC 验证环境(整芯片仿真视角)
6.1 概念结构:验证平台(TB)↔ SoC DUT
从系统角度,仿真里可粗分为两层:
- ① 仿真验证平台(Testbench)
- 产生 时钟 / 复位。
- 激励:如装载存储镜像、施加外部引脚激励、或通过总线主模型发起访问(以本工程 TB 结构为准)。
- 比对与结束:自检查、文件比对、断言、$finish 条件等。
-
波形 / Log:dump 开关、日志分级与关键字。
-
② SoC DUT(单核芯片网表级 RTL 集合)
- 处理器子系统:RISC-V Core(IF/ID/EX/LSU 等划分以 RTL 为准)。
- 互连域:译码/路由、仲裁/桥。
- 存储子系统:指令/数据通路相关存储或控制器。
- 外设域:UART、Timer/PWM、GPIO/WDT 等。
主数据流(概念上):TB 提供环境与部分激励 → Core 发起总线事务 → 互连译码与仲裁 → 存储或各外设从端口响应;调试与中断(若实现)可反馈影响 Core 行为。具体连线以工程内框图与 RTL 为准。
6.2 SoC 级验证要掌握的「工程动作」
| 动作 | 说明 |
|---|---|
| 建立 baseline | 零改动完整跑一轮默认用例;留存完整 log(及讲义要求的波形路径)。 |
| 脚本链 | 能说明「谁负责 compile、谁负责 run、产物默认落在哪个目录」。 |
| 定位三角 | Log 时间戳 ↔ 波形同一时刻 ↔ RTL/TB 行号或参数;禁止无证据猜。 |
| 最小回归 | 改动后只跑与改动拓扑相关的用例;记录命令与 pass/fail 摘要。 |
| 可讲述 | 能连续 10 分钟以上讲解「架构 + 映射 + 一条主路径波形」,同伴少追问基础概念即达标。 |
6.3 与后续项目的关系
- V2.0 / V3.0:在 V1.1 同一套「读目录—认顶层—跟脚本—基线—受控改动—最小回归」方法上,换 规模、增量模块与专题深度。
- yrun 专项:偏自动化与回归编排,建议在至少跑通一个 SoC 手工流后再学,衔接更顺。
7. 推荐产出(交付物)
满足下列即视为 V1.1 首轮合格(与官网「完成标准」一致):
- 默认用例可 稳定、可重复 跑通。
- 至少完成 1 次 可解释的受控改动 + 最小回归 闭环。
- 提交 1 份结构化调试复盘:现象、假设、证据(log + 波形要点)、结论、回归记录。
可选加分:一页纸(框图真实模块名 + 一条代表波形路径 + 一条改动案例)用于面试附录。
8. 避坑
- 只盯局部模块、不看总线链路 → 定位反复摇摆。
- 无 baseline 或改动后不回归 → 无法判断新旧问题。
- 只看 pass/fail、不保存关键波形与 log 细节 → 结论不可复审。
9. 参考链接与路径速查
| 用途 | 位置 |
|---|---|
| 官网项目介绍(导读、框图、分阶段等) | https://www.yueanic.com/projects/ic-practice/simulation/project/soc-v1-1 |
| 仿真实践总入口 | https://www.yueanic.com/projects/ic-practice/simulation |
| 服务器只读工程根 | /project/SOC_V1.1/To_Customer |
| VNC 桌面说明(七大项目路径摘要) | 桌面 处芯积律_README_项目使用说明.txt 或站内 VNC 指南 |
文档版本:与仓库 routes/projects.py 中 soc-v1-1 的 IC_PRACTICE_PROJECTS、IC_PRACTICE_DETAILED_CONTENT、IC_PRACTICE_DEEP_DIVE 描述对齐整理;工程内文件名与用例名以当期服务器树为准。