SOC验证环境详解.md
SoC V2.0 — SOC 验证环境详解
对应母本:
/project/SOC2.0/soc
以下描述依据当期母本树中的read_me、Makefile、filelist/、top/、ip/、sw/整理;若目录有增补,以你副本内实际文件为准。
1. 工程角色一览
| 目录 / 文件 | 作用 |
|---|---|
Makefile |
编译 TB(comp)、按软件用例跑仿(run_<用例目录> / run_all) |
read_me |
最短上手:先 make comp,再 make run_all TEST=… |
filelist/ |
top.f 及 ibex_core.f、dma.f、isp.f、busmatrix_filelist.f 等 |
top/ |
芯片顶层(如 soc_top,含 pad、指令/数据总线与 SRAM 等连线) |
ip/ |
apb_subsystem、busmatrix、dma、isp、pad 等片上 IP |
ibex/ |
RISC-V Ibex 核及相关代码(第三方子树,实践时一般只读对照) |
sw/ |
嵌入式用例源码与构建:uart_test、spi_test、soc_dma_test*、isp_test、mem_test、led、simple_system、benchmarks 等 |
sw/common/ |
用例共用启动/链接脚本与 Makefile 片段 |
test/ |
SystemVerilog / UVM 测试台相关 |
model/ |
行为模型等(若存在) |
comp/ |
make comp 生成的编译工作区(勿当源码长期修改) |
2. 编译与仿真(母本 read_me + Makefile)
工程根目录 read_me 摘要:
- 编译 testbench:
make comp - 跑仿真:
make run_all TEST={ip_name} - 示例:
make run_all TEST=spi(对应寻找sw/spi_test/一类目录;请以你副本中真实目录名为准)
Makefile 中常见目标:
| 目标 | 含义(摘要) |
|---|---|
comp |
清理并重建 comp/,拷贝 filelist,调用 VCS + UVM 编译 top.f |
run_<name> |
以 sw/<name>/ 下软件用例生成镜像并启动 simv(如 make run_uart_test) |
run_all |
按 TEST 编译软件(sw/$(TEST)_test/)→ comp → run |
debug_<name> |
与 run_<name> 类似,便于调试流程 |
clean |
清理仿真产物 |
默认 TEST ?= spi1(UVM +UVM_TESTNAME);软件侧用例名与 UVM test 类名可能不同,需分别对照 sw/ 目录与 TB 中实际类名。
建议第一次在副本中:
cd /home/USER/cxjl_practice/SOC2.0_soc_my
cat read_me
ls sw
make comp
# 再按 read_me / Makefile 选择存在的软件用例跑一轮,保存 vcs.log
3. 顶层与互连(读代码入口)
- 顶层模块可见
soc_top(top/下),对外有pad等端口。 - 核侧常见指令/数据存储器接口信号(
instr_*、data_*)再接到总线矩阵 / SRAM / 外设。 ip/busmatrix、ip/apb_subsystem、ip/dma、ip/isp、ip/pad是画「增量架构图」的优先阅读对象。filelist/top.f决定编译进仿真的文件集合——改 filelist 等于改可验证边界。
验收自问:不看他人笔记,能否指出 Core、互连、至少一块存储、至少一个外设例化?
4. 软件用例(sw/)
当期母本中常见目录(以 ls sw 为准):
| 目录 | 典型用途(实践向) |
|---|---|
uart_test |
UART 通路冒烟 / 定向 |
spi_test |
SPI 通路 |
soc_dma_test / soc_dma_test1 / soc_dma_test2 |
DMA 相关场景 |
isp_test |
与 ISP 相关的片上软件激励 |
mem_test / led / simple_system |
存储 / 简单外设 / 最小系统 |
benchmarks |
基准程序(见其 README.md) |
common |
共用构建与启动代码 |
跑仿时 Makefile 会把对应 sw/<用例> 与 sw/common 拷入运行目录并生成 mem.data(或等价镜像),再启动 simv。
5. 波形与覆盖率
- Makefile 编译选项含
-cm line+cond+tgl等,可能生成覆盖率数据库;是否开启 dump 波形以 TB/+参数与 Verdi 流程为准。 - 建议基线阶段:先保证功能 log 可复现,再开大波形,避免磁盘占满。
- 官网 PDF「Coverage Report」等可在项目详情 配套资料 中对照阅读,不替代你在本机跑出的报告。
6. 与并列 IP 包的关系
- 片上已集成的 ISP / 总线 / DMA 等:优先在
soc/内读 RTL +sw/用例。 - 独立 IP 验证包(协议级 / Formal):见同级
/project/SOC2.0/QSPI、ISP、PINMUX,说明见 IP专项实践说明.md。 - 选题时建议「SoC 系统一条线 + 一个 IP 专项」,避免同时大改多处。
7. 常见问题
| 现象 | 排查 |
|---|---|
comp 失败 |
环境是否已 source EDA;filelist 路径是否被 sed 改乱(应在副本中操作) |
run_* 找不到软件 |
sw/ 下是否存在同名目录;TEST 与目录命名约定是否一致(spi vs spi_test) |
| UVM test 不存在 | +UVM_TESTNAME / TEST= 是否与 TB 中类名一致 |
| 与 V1.1 行为不一致 | 预期差异:核对 ip/、映射与启动路径后再定缺陷 |