SoC 系统实践 入门 2025 年已在星球发布

处芯积律 RISC-V SoC 基础版(SoC V1.1)

单核 RISC-V SoC 完整入门闭环:含顶层互连、存储与外设通路、TB 与脚本入口;配套概念框图与架构/设计/验证分域知识点,训练从「跑通」到「能讲清、能定位」的工程习惯。

服务器推荐只读路径: /project/SOC_V1.1/To_Customer

SoC V1.1 是单核 RISC-V SoC 的体系化入门项目,目标不是“只把仿真跑起来”,而是让学员真正建立 SoC 级工程认知:顶层如何组织、总线如何连接、外设如何挂接、仿真如何闭环。项目内容覆盖从目录理解、脚本入口、基础用例到问题定位的完整链路,强调“看懂系统 + 会做调试 + 能产出结论”。

适合人群 刚进入 IC 设计/验证方向、需要建立 SoC 全局视角的同学。
建议学习周期 1~2 周(每天 1~2 小时)可完成首轮闭环。
SoC V1.1 在线资料 项目导读、架构图、Spec/Testplan 与验证环境说明(站内 Markdown 渲染)

项目串讲视频

配套串讲录屏,帮助快速建立项目全局认知;仅支持在线观看。 访客与未开通实践权限用户每集可试看前 5 分钟。

0:00
0:00
试看 · 前 5 分钟

SOC V1.1 · 芯片验证技术介绍

选集 7 集

配套资料

串讲 PPT、PDF 等课件,与视频配套使用。 部分资料需开通 IC 仿真实践权限后可查看与下载。

PDF SoC 设计及验证资料 v1.1 开放
PDF 芯片验证技术介绍
需开通实践权限
PDF SOC V1.1 项目 SOC 验证环境介绍
需开通实践权限
PDF Coverage Report
需开通实践权限
PDF SoC 寄存器列表
需开通实践权限
PDF SOC V1.1 AHB 及 APB 协议解读
需开通实践权限
PDF SOC V1.1 UART 及 I2C 协议解读及代码介绍
需开通实践权限
PDF SOC V1.1 QSPI 协议及 Testplan
需开通实践权限
PDF SOC V1.1 QSPI 验证环境介绍
需开通实践权限
PDF QSPI Test Plan
需开通实践权限

导读:这是什么 · 能学什么 · 怎么学

一、这是什么项目?

本项目是面向入门的「单核 RISC-V SoC」完整仿真工程:在服务器上提供从 SoC 顶层、CPU、总线互联到外设与存储的一套可跑通 RTL 与仿真脚本组织。学员在 VNC 远程环境的个人目录下的工程副本中完成实践;官方源为只读,路径见本页「快速开练命令」,须先使用 cp -a 复制到你的家目录后再改。

它与「只写一个小模块的 testbench」不同:强调的是 SoC 级工程视角——顶层如何划分、总线与外设如何挂接、从编译到出波形的脚本入口在哪、出问题如何下钻到 RTL 或 TB。适合需要第一份可写进简历、能口头讲清主链路的 SoC 闭环经历的 IC 设计或验证入门者。

下文给出「验证平台 ↔ SoC DUT」的概念框图与典型功能块说明,便于先建立心理模型;具体实例化名与目录划分以你手上的工程 README、RTL 顶层与讲义为准。

二、能学到什么?

下面按架构、RTL 设计、验证三条线拆开,你可逐项自查是否「讲得出来、做得出来」。

架构与系统视角

  • 单核 SoC 常见划分:处理器子系统、系统互连(含地址译码或路由)、存储子系统或存储器接口、外设子系统(UART/Timer/GPIO 等)、可选的调试或中断聚合等。
  • 地址映射:同一总线主设备发起的读写如何经译码落到不同从设备;能结合简单框图口述一次取指、一次对外设寄存器的写、一次对 SRAM/ROM 区的读的大致路径。
  • 时钟与复位:复位释放顺序、外设缺省初值与「谁先就绪」对首条指令或首轮总线访问的影响(以本工程约束为准)。
  • 软件可见性:即便当前以 RTL+TB 仿真为主,也应能说出「第一条指令从哪里取」「某外设寄存器大致落在哪个地址区间」,为日后接固件打基础。

RTL / 设计向知识点

  • 层次化 RTL:从 SoC 顶层看清例化关系、接口位宽与主从方向;可向下定位 Core、互连桥、外设 IP,并核对时钟域与复位域(即使单同步域也需自行确认)。
  • 总线侧行为:主设备发起 transaction 的握手与反压、从设备响应;单次与突发(若协议支持)在本工程实现中的体现。
  • 常见可综合改动类型:寄存器默认值、参数化位宽、条件分支局部调整、打拍或门控(仅限课程允许范围),体会改动面与所需验证面的对应关系。
  • 编码习惯:命名、注释、端口列表、避免隐式 latch、复位策略等在本工程中的落点,为参与团队 RTL 评审做演练。

验证与平台知识点

  • Testbench:DUT 例化方式、时钟复位产生、激励加载、比对手段(参考模型、文件比对、断言等,以工程为准)。
  • 脚本分层:编译文件列表与 `+incdir`、仿真器调用、seed、批处理与波形调试两种入口的职责划分。
  • 日志调试:关键字检索、仿真时间与波形时间对齐;整理失败用例的时间轴与期望/实际对照表。
  • 波形方法:信号分组、总线事务展开、沿激励回溯至 RTL;能写明「观测了哪些信号、它们如何支撑结论」。
  • 最小回归:改动后跑与本次相关的用例子集,记录命令、结果与相对基线的差异,避免凭感觉过关。

三、怎么学?

建议按「环境 → 副本 → 零改动基线 → 读代码地图 → 受控实验 → 复盘」推进;首轮闭环约一至二周、每天一至二小时可完成。

  • 环境与权限:开通仿真实践与 VNC,登录实践桌面;核对 shell、EDA 版本与工程 README(若有 module/source 脚本须按说明加载)。
  • 个人副本:cp -a 只读路径到家目录;一切编辑与仿真仅在副本中进行,便于 diff 与回滚。
  • 零改动跑通:按 README/讲义找到默认仿真入口与用例,完整跑一轮;保存完整 log,必要时另存波形,标注为 baseline。
  • 绘制地图:手写或笔记中画出主数据路径与目录树;对照本页架构图,把 RTL 顶层真实模块名填入框图。
  • 三遍读代码:第一遍只看顶层与各子模块端口表;第二遍沿一条主线(取指→总线→外设寄存器)顺藤摸瓜;第三遍只看 TB 如何驱动出第一条有意义的事务。
  • 受控实验:每次只改一处(参数或少量 RTL),立即记录动机与预期;跑与改动强相关的最小用例集,对比 baseline。
  • 复盘交付:至少完成一份含「现象、假设、证据链、结论、回归记录」的调试复盘,可附关键波形说明或信号列表。

分周节奏(可按个人情况伸缩)

  • 第 1~2 天 环境打通、副本就位、默认用例零改动跑通并保存 baseline;浏览 README,列出三个最陌生的术语作为后续清单。
  • 第 3~5 天 对照框图精读顶层与子系统例化;画出地址与数据主路径;能向他人讲解从复位释放到第一条有效总线访问。
  • 第 6~8 天 理清 compile/run/wave 脚本链;练习日志与波形对照;在讲义允许范围内尝试切换参数或小用例。
  • 第 9~10 天(可选巩固) 完成一处最小 RTL 或参数改动并做最小回归;撰写复盘;对照本页「完成标准」自检。

系统架构示意(概念框图)

用于建立整体心理模型;工程内模块命名、时钟域划分、存储具体形态以实际 RTL 与讲义为准。

架构框图绘制中…

flowchart TB
  subgraph TBX["① 仿真验证平台"]
    TB_CLK["时钟 / 复位"]
    TB_LD["激励 · 装载 · 比对"]
    TB_WV["波形 / Log"]
  end
  subgraph DUT["② SoC DUT · 单核"]
    subgraph CPU["处理器子系统"]
      RV["RISC-V Core
IF·ID·EX·LSU"] DBG["Debug / IRQ"] end subgraph BUS["互连域"] DEC["译码 / 路由"] ARB["仲裁 / 桥"] end subgraph MEM["存储子系统"] IM["指令通路
ITCM/IROM"] DM["数据通路
DTCM/SRAM"] end subgraph PERI["片上外设 IP"] UART["UART"] TIM["Timer/PWM"] GP["GPIO/WDT"] end end TB_CLK --> RV TB_LD --> RV RV --> DEC DBG -.-> RV DEC --> ARB ARB --> IM ARB --> DM ARB --> UART ARB --> TIM ARB --> GP TB_WV -.-> RV

连线表示关注的主数据与控制关系,非某具体总线协议的时序细节;请在工程中结合协议与信号名核对。

片上 IP / 外设类型(教学归纳)

下列为单核 SoC 入门工程中常见的挂载类别;实例化名与地址映射以 RTL 与课程讲义为准。

通信与 IO

  • UART / SPI / I2C
  • GPIO / PWM
  • pad 或简单并行口控制

定时与系统服务

  • Timer / Watchdog
  • 中断聚合 / PIC
  • 事件捕获(若工程含)

存储接口

  • 片上 SRAM 控制器
  • ROM/Flash 或等效存储模型(ITCM/IROM、DTCM 等)

调试与系统控制

  • Debug 或 JTAG 侧接口
  • 复位/时钟分发、系统控制寄存器

典型功能块说明

下表按教学视角归纳常见职责与设计/验证关注点;具体层次名、信号名与协议细节以你手中的 RTL、顶层例化与课程讲义为准。

RISC-V Core 子系统

职责概要:完成取指、译码、执行、访存,是大多数总线事务的发起方。

设计侧:关注与互连的接口约定、流水停顿、异常/中断/调试(若已例化)对接口侧的影响。

验证侧:从复位后首次取指到首次访问存储或外设,在波形上标注阶段与对应总线事务。

系统互连 / 地址译码

职责概要:将 Core 访问路由到存储、外设等不同从设备,决定可访问空间与仲裁。

设计侧:译码规则、片选与多从设备并联;若存在协议桥,弄清主从端口与握手时序。

验证侧:据地址预判哪一路从端口应响应;可用波形验证边界或非法访问行为(若 TB 覆盖)。

存储与指令/数据通路

职责概要:承载启动镜像、常量与数据访问,可能为分立 ITIM/DTIM、ROM 或统一存储模型。

设计侧:数据宽度对齐、字节使能、与互连的拍对齐关系;弄清复位后 PC 与映射关系约束。

验证侧:对齐 log 中访存地址与波形通道上的读写 beat,确认与用例预期一致。

外设子系统

职责概要:UART、Timer、GPIO 等,多以寄存器映射挂于窄总线或 APB。

设计侧:寄存器位域与复位初值;中断合并或时钟门控(若有)对可见行为的影响。

验证侧:练习「写寄存器→内部状态或 TX→状态位/中断」闭环,并指出波形观测点。

Testbench 与仿真平台

职责概要:产生时钟复位、加载程序或向量、控制仿真结束;常含波形 dump 开关。

设计侧:明确 TB 与 DUT 边界;扩展用例前优先读懂现有 TB 结构。

验证侧:从 log 关键字跳到波形时间戳;会开关波形、调整仿真时长或断言(若允许)。

项目核心内容(完整范围)

  • SoC 顶层与模块层级:core、互连/译码、存储通路、外设、TB 边界与接口关系。
  • 系统地址映射与数据路径:能在纸上画一遍「读写落在哪儿」。
  • 仿真工程:编译列表、运行脚本、日志与波形、默认用例与常用开关。
  • 定向改动与小回归:参数与局部 RTL 变更的影响评估与验证闭环。
  • 目录与脚本组织:为进阶 SoC 工程建立统一导航习惯。

关键难点与常见卡点

  • 第一次接触 SoC 时,容易只看局部模块,忽略系统链路。
  • 波形和日志信息多,如何快速收敛定位点是关键。
  • 改动后回归不充分,容易出现“看似通过、实际埋雷”。

模块级深度讲解(做什么、看什么、怎么验)

SoC 顶层与总线主链路

重点:在 RTL 中找到 Core、互连、存储与外设的例化层级;对照地址映射表(讲义或头文件)理解一次读写的路由。

验收:不看讲义能在白纸或文档上画出主数据流,并向同伴口述「CPU 发起→译码→目标从设备」的一条完整路径。

存储与启动路径

重点:复位后 PC、第一条指令所在存储区域、与 TB 装载镜像(若有)之间的关系。

验收:能用波形标出首次取指对应的存储访问,并解释其与仿真 log 中打印一致。

外设寄存器路径

重点:选一个 UART 或 Timer 类外设,追到寄存器 RTL 与访问路径。

验收:完成一次「写寄存器→观测波形内部节点或输出→读状态寄存器」的可叙述闭环。

仿真入口与脚本层级

重点:Makefile 或脚本中 compile、elaborate、run、dump 的分工;环境变量与 `+define+` 对结果的影响。

验收:在不动功能代码的前提下切换默认用例或打开/关闭波形,且两次结果可解释、可复现。

波形与日志联合定位

重点:为关键总线或控制信号建组;用 log 时间戳在波形中打时间游标。

验收:任选一失败或异常结束用例,写出含时间、信号、根因假设的半页纸分析(可配截图)。

分阶段执行方案(讲义级节奏)

以下四阶段与上文「导读—三、怎么学」「分周节奏」一一挂钩:每阶段都要有可检查产出(日志、波形、框图、diff、对照表),避免只「感觉学过了」却没有物证。阅读时建议对照右侧「过关标准」,用勾选表自评进度。

阶段 1:环境与只读基线

本阶段目标:建立可复现的仿真入口与「跑通证明」,作为后续一切对比的唯一基准。

与导读的衔接:对应导读「副本 + 零改动跑通」。没有稳定的 baseline,谈不上回归与归因。

任务分解:

  • 完成 VNC/权限与 shell、EDA 环境对齐(module、PATH 等以 README 为准)。
  • 使用 cp -a 将只读工程复制到个人目录;此后所有操作仅在副本中进行。
  • 定位默认 compile/run 命令与基准用例名,一次性跑通并保存完整 log。
  • 若讲义要求波形:打开 dump,记录波形文件路径与生成命令(便于他人复现)。
  • 在笔记中绘制第一版系统框图:将本页示意图中的占位名替换为 RTL 顶层真实模块名。

建议产出(物证):

  • 标注日期的 baseline 日志(或校验摘要)
  • 可选 baseline 波形与生成命令
  • 含真实模块名的框图草稿

过关标准:从零开始在约一刻钟内可重复同一通过结果;能口头说出 sim 产物所在目录与主脚本入口。

阶段 2:读代码与对齐映射

本阶段目标:把「地址—数据—控制」与 RTL 层次、TB 激励对齐,形成可讲解、可验证的心智模型。

与导读的衔接:对应导读「三遍读代码」与模块功能表;本阶段结束应能回答「第一次总线事务谁发起、落到哪个从端口」。

任务分解:

  • 精读 SoC 顶层例化与子模块端口表,标注主设备与从设备方向。
  • 按讲义整理内存/外设地址区间表,并与 RTL 译码或参数化定义交叉核对。
  • 任选一条主线(建议:复位释放 → 首次取指 → 首次访存或外设访问)沿 RTL 跟完。
  • 对照 TB:从 `initial`/`task`/激励序列追踪到「第一条有效总线事务」出现的时刻与条件。
  • 记录三个「若被追问」问题:PC 初值、镜像装载方式、默认外设初态来源。

建议产出(物证):

  • 手写或电子地址映射表
  • 主线追踪笔记(模块路径 + 关键信号名)
  • TB 驱动路径摘要(可选贴代码行号)

过关标准:可连续口头讲解不少于 10 分钟的「架构与映射」,同伴能听懂且少追问基础概念。

阶段 3:受控改动与最小回归

本阶段目标:用一次最小可行改动验证你是否真理解影响面,并练习「改—证—比」的工程节奏。

与导读的衔接:对应导读「受控实验」;改动必须可描述、可 diff、可回归,否则无法写进简历。

任务分解:

  • 在课程允许范围内选择一处极小改动:寄存器默认值、参数化常量、或局部 RTL 的几行逻辑。
  • 列出「最小回归清单」:只包含与该路径相关的用例或子集,避免迷信全量。
  • 保存改动前后 diff、完整命令行、两次运行的 log 摘要(含 pass/fail 与关键打印)。
  • 若结果异常:写下假设 → 用波形/日志验证 → 通过则收敛,否则回到阶段 2 扩展观测点。

建议产出(物证):

  • git diff 或文件 diff
  • 回归命令与用例列表
  • 前后对照表(状态/打印/波形截图要点)

过关标准:任意同事可根据你的记录复现「改动 + 回归 + 结论」,无需口头补充关键命令。

阶段 4:复盘与交付

本阶段目标:把隐性经验显性化,形成可投递、可答辩、可迁移的文档资产。

与导读的衔接:对应导读「复盘交付」与下文「完成标准」;可选故障注入用于强化定位叙事。

任务分解:

  • 按「现象—假设—证据(日志时间戳与信号)—结论—回归是否通过」撰写结构化复盘。
  • 可选练习:在副本中故意引入一处轻微错误(随后恢复),练习从 log 到 RTL 的定位叙述。
  • 整理一页纸:框图 + 一条代表波形路径 + 一条改动案例,用作面试附录或星球打卡。
  • 自查:对照本页「完成标准」与「避坑手册」,勾选是否每一项都已覆盖。

建议产出(物证):

  • 复盘正文(建议 Markdown/PDF)
  • 一页纸答辩摘要
  • 可选故障注入的前后对比

过关标准:第三者阅读你的文档后,能大致复现实验命令并理解结论依据;你本人能脱稿讲述 STAR。

避坑手册

  • 只盯一个模块,不看总线链路,导致定位方向反复偏移。
  • 改动后没有基线回归,无法判断是新问题还是旧问题。
  • 只看 pass/fail,不看关键波形与日志细节,结论不可靠。

完成标准(你做到这些才算真正做完)

  • 默认用例可稳定运行,且可重复复现结果。
  • 至少完成 1 次可解释的改动验证闭环。
  • 提交 1 份结构化调试复盘(含信号与日志证据)。

答辩与简历:一页纸浓缩表述

上文已从「是什么、学什么、怎么学」分域展开;下列三条线与导读不是简单重复——侧重「对外叙事」:面试或简历里如何用有理有据的一句话证明你真的做过 SoC 闭环。

可复述的「能力证据」(STAR / 证据链)

  • Situation:说明工程规模——单核 RISC-V SoC,含 Core、互连译码、存储与外设通路,仿真在远程个人副本完成。
  • Task:说明你承担的任务——跑通基线、读懂顶层与映射、完成一次受控改动并最小回归。
  • Action:列出关键动作——指向具体产物:框图模块名来自真实 RTL、日志时间戳与波形对齐、留存 diff 与命令行。
  • Result:用结果说话——回归对比结论、定位到具体 RTL/TB 行或参数、他人可按你的记录复现实验。

相对「只做子模块 TB」的增量价值(面试官常问)

  • 你掌握的是跨 Core—互连—从端口的地址与数据路径,而不是单点波形通过。
  • 你习惯用基线—对比—最小回归论证改动,而不是「仿真结束就交差」。
  • 你能把脚本层(谁 compile、谁 run、产物在哪)与 RTL 行为串成一条故事,这正是企业 SoC 岗日常沟通方式。

与后续路线(V2.0 / V3.0 / 多核等)如何衔接

  • V1.1 提供统一「读目录—认顶层—跟脚本—做基线」的方法论;进阶项目主要换规模与专题,不换做事方式。
  • 把本项目的复盘文档与命令模板当作个人资产,进阶时只增量维护,不必从零摸索工程习惯。

建议产出(可用于复盘/求职)

  • 个人目录可复现运行的工程副本与关键命令记录。
  • 至少 1 份含日志—波形—RTL 指向的定位说明或结构化复盘。

典型实验任务清单(1-2-3 步)

  1. 复制基础版工程到个人目录并跑通默认仿真用例。
  2. 修改一个小模块或参数,观察日志与波形变化。
  3. 输出一次问题定位记录(现象、原因、修复、回归结果)。

快速开练命令

cd /home/USER/cxjl_practice cp -a /project/SOC_V1.1/To_Customer ./soc-v1-1_my cd ./soc-v1-1_my && ls -la

建议前置基础

Verilog/SystemVerilog 基础、数字电路基础、基本 shell 命令。

继续看其他项目

已复制