处芯积律 三核同构 Ibex SMP SoC 实践(tri_core_smp_soc)
三颗同构 Ibex(RISC-V)共享内存 SMP 演示 SoC:单份固件镜像、smp_sync v3 与 IPI/锁/邮箱等协同机制,配套 VCS 冒烟与 8 用例回归。训练从 make triple_sim 跑通到多核规约、中断与 ISP/DMA 冒烟的系统级验证习惯。
/project/tri_core_smp_soc
tri_core_smp_soc 聚焦同构三核 Ibex(RISC-V)SMP:三颗核共享一份固件镜像,通过 mhartid 分角色,配合 smp_sync v3 硬件同步块与 scratch 区 PASS/FAIL 戳完成可审计验收。实践入口在工程根下的 soc/sim:Bash 下 source setup_env.sh 后 make triple_sim / sim_only / regression。
项目串讲视频
配套串讲录屏,帮助快速建立项目全局认知;仅支持在线观看。 访客与未开通实践权限用户每集可试看前 15 分钟。
串讲视频筹备中,上线后将在此播放。
其他配套资料
与整课相关、未按集对应的 PPT / PDF。各集课件已列在上方选集中。 部分资料需开通 IC 仿真实践权限后可查看与下载。
导读:这是什么 · 能学什么 · 怎么学
一、这是什么项目?
服务器只读母本为整目录 `/project/tri_core_smp_soc`;请复制到个人 cxjl_practice 后再改,勿直接写 /project。
与异构双核不同,本工程强调「同镜像多核」:启动、屏障、自旋锁、IPI/邮箱与共享内存规约在同一套软件叙事下验证。
docs/ 含地址映射、用例表与快速上手指南;仿真 Makefile 在 soc/sim,固件在 soc/sw/riscv_test_c/。
二、能学到什么?
按 SMP 架构 / 固件与同步原语 / Makefile 回归三维拆解。
同构 SMP 与地址映射
- 三核启动戳 0x3100 系列与 scratch PASS(0x3110 = 0x50415353)判据。
- 共享 SRAM 视图、smp_sync 寄存器语义(SEM、IPI pending、邮箱等,见 address_map)。
- mhartid 分角色:Hart0 协调、Hart1/2 协作任务分工(依用例而定)。
固件与协同机制
- crt0 分栈、BSS ready、硬件 barrier 与 UART 锁等最小闭环(triple_hello_test)。
- 自旋锁 + 共享计数、轮询式 IPI/邮箱(smp_demo)与真 MSIP 中断路径(ipi_irq)。
- 生产者-消费者分阶段 barrier 与分段求和(prodcons);可选 sync_ext / timer / ISP 冒烟。
验证工程化
- triple_sim 全流程 vs sim_only 只换固件迭代;regression 8/8 作为阶段门禁。
- 日志关键字 TEST PASSED/FAILED 与 FAIL 码 0xDEADxxxx 解读。
- 失败时先确认 Bash + setup_env.sh,勿在 Bash 里 source .csh 环境脚本。
三、怎么学?
推荐顺序:冒烟 → smp_demo / ipi / prodcons 分用例 → 全回归;每步保留 log。
- cd 个人副本 tri-core-smp-soc_my/soc/sim && source ./setup_env.sh。
- make triple_sim 确认 scratch PASS 与 TB 打印 *** TEST PASSED ***。
- make sim_only TEST=triple_smp_demo 等用例快速迭代,再 make regression。
- 对照 docs/test_commands.md 理解 8 项回归覆盖与 Hart 分工表。
- 若计数或 IPI 失败,查共享计数是否达 300、邮箱值与 pending 清序是否一致。
分周节奏(可按个人情况伸缩)
- 第 1 周 复制工程、环境打通、triple_sim + hello/smp_demo 理解与笔记。
- 第 2 周 ipi_irq、prodcons 与 sync_ext;完成 regression 8/8 并归档 log。
- 第 3 周(可选) 择一用例做 RTL/固件侧小改动 + 回归对照,写答辩摘要。
三核同构 Ibex SMP 概念框图
三核经矩阵互连访问共享存储与外设;smp_sync 提供锁、IPI、邮箱等;细节以 top.v 与 RTL 为准。
架构框图绘制中…
flowchart TB
subgraph TBX["Testbench"]
FW["单镜像固件装载"]
MON["PASS/FAIL scratch 监视"]
end
subgraph SOC["tri_core SMP SoC"]
H0["Ibex Hart0"]
H1["Ibex Hart1"]
H2["Ibex Hart2"]
IC["矩阵互连 / DMA mux"]
SYNC["smp_sync v3"]
MEM["共享 SRAM 视图"]
PERI["UART / CLINT / PLIC 等"]
end
FW --> H0
FW --> H1
FW --> H2
MON -.-> MEM
H0 --> IC
H1 --> IC
H2 --> IC
IC --> MEM
IC --> PERI
H0 --> SYNC
H1 --> SYNC
H2 --> SYNC
同镜像叙事下,屏障与锁失效往往表现为全回归连锁失败;优先保证 triple_hello 地基稳定。
片上 IP · SMP 协同相关
在单核 SoC 外设基础上,突出三核矩阵、smp_sync 与可选 ISP 冒烟路径;详见 docs/address_map.md。
典型功能块说明
下表按实践视角归纳常见职责与设计/验证关注点;具体层次名、信号名与协议细节以你手中的 RTL、顶层例化与工程 README 为准。
三核 Ibex 与启动
职责概要:同一份镜像、分 hart 栈与角色;启动戳与 barrier 汇合。
设计侧:crt0、BSS ready、mhartid 分支。
验证侧:triple_hello_test 三戳齐全且 PASS。
smp_sync 硬件同步
职责概要:自旋锁、IPI、邮箱、SEM/AMO 等扩展寄存器。
设计侧:APB 访问时序、pending 清序、与固件 smp.h API 对齐。
验证侧:smp_demo 计数=300;ipi_irq ISR 路径;sync_ext 寄存器读写。
共享内存与规约
职责概要:多核可见 scratch 与数据缓冲区。
设计侧:prodcons 分阶段 barrier 与分段和校验。
验证侧:prodcons 前后半和与 Hart0 校验一致。
Makefile 回归层
职责概要:triple_sim、sim_only、regression 与快捷别名目标。
设计侧:RTL 编一次、固件增量替换 simv。
验证侧:make regression 8/8 PASS,日志可复现。
项目核心内容(完整范围)
- 同构 SMP 启动、屏障与 scratch 验收口径。
- IPI/邮箱/自旋锁与共享内存规约用例。
- Makefile 分层命令与 8 用例回归工程习惯。
关键难点与常见卡点
- 环境 shell 类型(Bash vs csh)导致 setup 失败易被误判为 RTL 问题。
- 锁或 IPI 清序错误表现为计数或邮箱偶发偏差,需对照 FAIL 码。
- 从单核/双核思维切换到「同镜像三角色」的并行叙事。
模块级深度讲解(做什么、看什么、怎么验)
环境与 soc/sim 入口
重点:Bash、setup_env.sh、VCS 与 riscv32 工具链。
验收:make help 可执行且 PRJ_ROOT 指向个人副本 soc/sim。
triple_hello 地基
重点:启动戳、barrier、PASS scratch。
验收:能口述 0x3100/0x3110 判据与日志关键字。
smp_sync 与分用例
重点:锁/IPI/邮箱/prodcons/sync_ext 等 TEST 名与 Hart 分工。
验收:sim_only 至少跑通 3 个非 hello 用例。
regression 门禁
重点:make regression 8/8 与失败 triage(FAIL 码、环境)。
验收:保存一份全绿 log 与命令清单。
分阶段执行方案(建议节奏)
三段节奏:环境与 hello 地基 → 分用例深入(smp/ipi/prodcons)→ regression 门禁与复盘。PASS 戳与 8/8 回归是硬验收;日志比波形更常作为日常迭代依据。
本阶段目标:个人目录可写副本就绪,Bash 下环境一键恢复,triple_sim 出现 TEST PASSED。
与导读的衔接:与 hub 页「先复制再练习」一致;地基不过不进入分用例。
建议节奏:建议 3~5 天。
任务分解:
- cp -a /project/tri_core_smp_soc 到 cxjl_practice,进入 soc/sim。
- source ./setup_env.sh(确认当前为 Bash)。
- make triple_sim,核对 scratch PASS=50415353 与三核启动戳。
- 阅读 docs/test_commands.md 与 address_map.md 各一节,建立用例索引。
建议产出(物证):
- 冒烟 log
- 个人路径与工具链版本备忘
过关标准:triple_sim 连续 2 次 PASS;能独立写出最短三条命令。
本阶段目标:理解同镜像三角色协作,至少深入 3 个代表性 TEST。
与导读的衔接:快速上手指南 §1.4 推荐顺序。
建议节奏:建议 5~10 天。
任务分解:
- make sim_only TEST=triple_smp_demo,确认共享计数=300。
- make sim_only TEST=triple_ipi_irq_test,区分轮询 IPI 与 MSIP ISR 路径。
- make sim_only TEST=triple_prodcons_test,记录分段和与 barrier 阶段。
- 可选:sync_ext、timer_irq、isp_smoke 各跑一遍并记 PASS/FAIL 差异。
建议产出(物证):
- 分用例 log 集
- Hart 分工笔记(可抄手册表再改写成自己的话)
过关标准:上述 3 个主用例均 PASS;能解释一个 FAIL 码含义。
本阶段目标:make regression 8/8 PASS,形成可答辩的一页摘要。
与导读的衔接:closing_summary 与 TASK_STEPS 门禁。
建议节奏:建议 3~7 天。
任务分解:
- make regression,归档全绿 log 与耗时。
- 一页纸:框图 + 三个最熟用例 + 环境与命令入口。
- 可选:对固件或 TB 做最小改动并证明回归仍绿(需在个人副本)。
建议产出(物证):
- regression log
- 一页答辩摘要
过关标准:8/8 PASS;口述 SMP 与异构双核差异不超过 2 分钟。
避坑手册
- 在 Bash 中 source setup_env.csh 导致莫名语法错误。
- 未 cd 到 soc/sim 就 make,或复制后路径仍指向 /project。
- 只看波形不看 scratch/FAIL 码,迭代效率低。
完成标准(你做到这些才算真正做完)
- 个人副本下 make regression 8/8 PASS。
- 能解释 scratch PASS 与至少两个 TEST 的协作分工。
- 保留可复现的命令与 log 路径说明。
答辩与简历:同构 SMP 叙事
突出「同镜像 + 硬件同步 IP + Makefile 回归」,而非仅「跑过 VCS」。
能力证据
- regression 8/8 截图或 log 摘要;能解释 scratch 地址含义。
- 至少一个用例(如 ipi_irq 或 prodcons)的 Hart 分工与 FAIL 码解读。
差异化价值
- 衔接单核 SoC 与异构双核:同构 SMP 是更可控的多核台阶。
- 体现 DV 日常:sim_only 迭代 + 全回归门禁。
衔接方向
- 可组合 LPWR/CDC 等专项形成「多核 + 低功耗/CDC」叙事。
- 与 yrun/Agent 类自动化主题形成「能跑回归 + 能工程化批量」组合。
建议产出(可用于复盘/求职)
- 个人目录可跑的工程副本与 triple_sim、regression 命令记录。
- 至少 1 份多核用例(IPI / prodcons / smp_demo 等)定位或复盘笔记。
典型实验任务清单(1-2-3 步)
- 复制 /project/tri_core_smp_soc 到个人目录,在 soc/sim 下 source setup_env.sh。
- make triple_sim 冒烟通过后,用 sim_only 逐个跑 smp_demo / IPI / prodcons 等用例。
- make regression 全回归 8/8 PASS,并记录 scratch 区 PASS 戳与关键 log。
快速开练命令
cd /home/USER/cxjl_practice
cp -a /project/tri_core_smp_soc ./tri-core-smp-soc_my
cd ./tri-core-smp-soc_my && ls -la
建议前置基础
建议已完成 SoC V2.0/V3.0 或双核项目之一;熟悉基本 make 与 RISC-V 工具链。