SoC 系统实践 高 2026 年 9 月上线

处芯积律 三核同构 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。

适合人群 已完成 SoC V2/V3 或双核项目、希望补强同构多核与软件同步验证的学员。
建议学习周期 2~3 周(冒烟 + 分用例 + 全回归与可选小改)。

项目串讲视频

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

串讲视频筹备中,上线后将在此播放。

其他配套资料

与整课相关、未按集对应的 PPT / PDF。各集课件已列在上方选集中。 部分资料需开通 IC 仿真实践权限后可查看与下载。

PDF tri_core_smp_soc · 快速上手指南
需开通实践权限
PDF tri_core_smp_soc · 三核同构项目介绍
需开通实践权限

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

一、这是什么项目?

服务器只读母本为整目录 `/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。

处理器

  • Ibex ×3(同构)
  • 共享中断与 CLINT/PLIC 接线(依用例)

同步

  • smp_sync v3
  • 硬件 barrier、UART 锁

验证入口

  • soc/sim Makefile
  • VCS simv + riscv32 工具链

典型功能块说明

下表按实践视角归纳常见职责与设计/验证关注点;具体层次名、信号名与协议细节以你手中的 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 回归是硬验收;日志比波形更常作为日常迭代依据。

阶段 1:复制、环境与 triple_sim 冒烟

本阶段目标:个人目录可写副本就绪,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;能独立写出最短三条命令。

阶段 2:sim_only 分用例 — smp / IPI / prodcons

本阶段目标:理解同镜像三角色协作,至少深入 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 码含义。

阶段 3:全回归与复盘

本阶段目标: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 步)

  1. 复制 /project/tri_core_smp_soc 到个人目录,在 soc/sim 下 source setup_env.sh。
  2. make triple_sim 冒烟通过后,用 sim_only 逐个跑 smp_demo / IPI / prodcons 等用例。
  3. 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 工具链。

继续看其他项目

已复制