IP / 方法与专项 中等(工具向) 2025 年已在星球发布

处芯积律 SoC 仿真与验证自动化 yrun 基础版(yrun V1.0)

聚焦仿真流程自动化,把“手工命令”升级为可复用、可扩展的验证流。

服务器推荐只读路径: /project/multi_core_gui/soc/sim

yrun V1.0 聚焦验证自动化工程能力:把零散手工命令升级为可维护、可扩展的团队入口。围绕 env、yrun 参数、用例组织与批量回归、结果解读展开;通常在 sim 目录 source env.csh 后调用 yrun。

适合人群 希望从初级走向工程化验证流程的同学。
建议学习周期 1~2 周可形成首版自动化模板。

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

一、这是什么项目?

本主题不是「又一个 RTL 项目」,而是仿真执行流与回归资产:目标是让你写出他人可复跑的命令矩阵与产出规范。

路径一般为 `/project/multi_core_gui/soc/sim` 的个人副本;具体以讲义与环境脚本为准。

框图采用「工具链 / 配置 / 用例 / 结果」四层,帮助区分「环境问题」与「RTL 行为问题」。

二、能学到什么?

按自动化架构 / yrun 使用 / 团队协作三条线自检。

自动化分层架构

  • 区分 env(编译与运行前置)、yrun CLI(单次任务)、批量层(case list / Makefile 封装)、报告层(汇总与归档)。
  • 理解单次命令与 nightly 的差异:参数、超时、并行度。
  • 目录规范:何人何时写入哪一级 log,避免互相覆盖。

yrun 与仿真器接口

  • 常用子命令或参数语义:编译、elab、仿真、波形、seed、筛选用例。
  • 错误码与 log 前缀:如何从 stderr 回溯到配置或 RTL。
  • 与 makefile 变量的关系:谁在覆盖谁。

回归工程化

  • 用例分组:冒烟、功能、边界、长尾;准入准出策略。
  • 批量失败 triage:先分类再分配,而非逐个点波形。
  • 度量:通过率、耗时、不稳定用例榜单。

三、怎么学?

路径:环境打通 → 单命令模板 → 小批量 → 归档规范 → 文档。

  • 进入副本后第一件事:source env.csh(或等价)并打印关键环境变量自检。
  • 固化「一条金牌命令」作为团队参照,再在其上参数化。
  • 先手工跑通 3 个代表用例,再编写批处理。
  • 为 nightly 预留独立输出目录与时间戳。
  • 每次工具升级做回归对照表并保留旧日志一周。

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

  • 第 1~3 天 env + 单命令矩阵;整理参数 cheat sheet。
  • 第 4~7 天 批量脚本与汇总;做一次失败注入演练。
  • 第 2 周(可选) 产出团队 README 与归档规范;复盘一次真实失败批量。

验证自动化流水线(概念)

区分配置、执行、工件与汇总;与实际脚本命名可能不完全一致。

%%{init:{"theme":"base","themeVariables":{"primaryColor":"#dbeafe","secondaryColor":"#ecfdf5","tertiaryColor":"#fffbeb","primaryTextColor":"#0c4a6e","secondaryTextColor":"#155e75","lineColor":"#0369a1","clusterBkg":"#e0f2fe","clusterBorder":"#38bdf8","fontSize":"13px"}}}%% flowchart LR subgraph ENV["环境与配置"] E1["env.csh"] E2["编译宏 / PLUSARGS"] end subgraph RUN["yrun 门面"] Y["yrun CLI"] MK["Makefile / recipe"] end subgraph SIM["仿真执行"] P["仿真器进程"] DUT["DUT + TB"] end subgraph OUT["产出与度量"] L["日志 / FSDB·VCD"] R["通过率 · diff · triage"] N["nightly 归档"] end E1 --> Y E2 --> Y MK --> Y Y --> P P --> DUT P --> L L --> R R --> N

定位问题时先判断卡在 ENV / yrun / SIM 哪一层,再决定是否下钻 RTL。

典型功能块说明

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

环境脚本 env.csh

职责概要:编译器、仿真器、路径、宏开关的统一入口。

设计侧:与 shell 登录脚本差异;避免污染源环境。

验证侧:新开终端按 README 一步步可复现同一环境。

yrun 命令门面

职责概要:将长命令行折叠为参数化接口。

设计侧:默认值与覆盖规则;向后兼容。

验证侧:帮助信息与 dry-run(若有)可读、可审计。

用例清单与分组

职责概要:case list、tag、目录约定。

设计侧:排序与超时;跳过规则。

验证侧:筛选子集仍能解释覆盖意图。

结果归档与报告

职责概要:日志聚合、diff、失败归类。

设计侧:命名含日期、分支与参数摘要。

验证侧:任意失败可在归档中找到输入命令与 stderr。

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

  • yrun 基础命令与参数矩阵;env 初始化。
  • 单用例到批量回归与汇总;失败 triage 流程。
  • 团队可复用模板与文档规范。

关键难点与常见卡点

  • 参数多导致命令混乱。
  • 自动化失败时定位层级不清。
  • 只追求跑通而忽略结果解读与归档。

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

env 与环境指纹

重点:toolchain、PATH、宏;可复现声明。

验收:新 shell 按 README 一步恢复指纹。

yrun 命令门面

重点:参数模板、默认值、帮助信息。

验收:三人用同一模板跑出一致命令展开。

批量与调度

重点:case list、并行度、超时、重试。

验收:批量失败可分类统计而非一团乱麻。

归档与 triage

重点:目录结构、命名、汇总报表。

验收:任意失败可追溯命令与 stderr。

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

四段:金牌单命令 → 用例矩阵与批量失败分类 → 归档与故障演练 → 可选 CI/无人值守接口。本实践的核心物证是「cheat sheet、case list、汇总表、README」四件套;阶段 2 的 triage 能力直接对应企业 DV 日常。

阶段 1:环境与「金牌命令」—— 单路径可审计

本阶段目标:沉淀一条经反复校验的 **compile + elaborate + sim**(或等价)最短命令链,任何人按 README `source env` 后在 **30 分钟内**可复现同一 Pass。

与导读的衔接:导读「固定入口」;没有金牌命令,批量只能放大混乱。

讲义节奏(参考):建议 3~6 天:Day1 环境与路径;Day2~3 固化命令;Day4 他人盲测。

任务分解:

  • 严格遵守讲义顺序:`source env.csh`(或等价)并立即执行 **自检四连**:仿真器路径、许可证(若打印)、默认工作目录、Makefile/yrun 是否在 PATH。
  • 禁用「口述依赖」:把所有隐式前置(例如要先 `cd` 到哪)写入 cheat sheet 的第 0 步。
  • 选一个**最小代表用例**:固定 seed(若随机仿真)、关闭无关 dump 以缩短迭代;跑出第一次「干净的全绿 log」。
  • 用 `history` 或脚本工具展开 yrun/Makefile 的实际子命令,贴到备忘里(方便后来 diff 工具升级)。
  • 标注「单次预期耗时」与「产物目录结构」,便于以后估算农场并发。
  • 做一次 **冷终端重放**:新开 shell,只凭 cheat sheet 输入,要求自己录屏或逐步打勾。
  • 门禁:不能把「有时要 export 某某」留在脑子里;必须写入文档。

建议产出(物证):

  • cheat sheet v1.x(一页 PDF/Markdown 为宜)
  • 金牌命令展开记录
  • 盲测或通过录像

过关标准:第二人在无口头提示下重现 Pass;环境与版本号可查。

阶段 2:用例矩阵 — 冒烟子集、批量回归与失败分类

本阶段目标:从「能跑」升级到「能批量跑且能解释失败」:建立 case list、冒烟集、night 集三级概念与命名规范。

与导读的衔接:导读「回归工程化」「triage」;企业 DV 日常的主战场。

讲义节奏(参考):建议 5~10 天:前半搭清单与冒烟,后半跑第一轮 batch 并分类;预留一天专门做「误报清除」。

任务分解:

  • 维护 **case list**(CSV/Markdown):列 case 名、所属设计层级、预估耗时、标签(smoke/reg/nightly)。
  • 定义冒烟子集:默认 PR 前必跑;条数与时间上限写死(例如 ≤15 分钟)。
  • 编写或改造 batch 脚本:统一日志目录结构 `logs/YYYYMMDD_runid_case/`。
  • 首轮批量跑完后,对每一个失败执行 **五类分类**:①环境/许可证 ②编译/语法 ③ RTL 功能 ④ TB/断言 ⑤随机/种子敏感。
  • 对「随机敏感」类必须记录 seed 与缩小用例;禁止只写「flaky」了事。
  • 生成 **汇总表**:通过率、总耗时、失败 case 列表、下一步责任人(可先写自己)。
  • 可选:对接 Makefile `make smoke` / `make nightly` 命名,与团队习惯对齐。

建议产出(物证):

  • case list
  • batch 脚本或调用说明
  • 首轮汇总表
  • 分类统计(饼图可选)

过关标准:≥80% 失败可归入五类之一或登记为已知工具限制;每条失败有日志路径。

阶段 3:归档、README 与故障演练

本阶段目标:形成可交接的 **流程资产**:新人不看私聊记录也能接着维护;并通过一次故意失败验证 triage 熟练度。

与导读的衔接:答辩「我提升了回归效率」时的物证来源。

讲义节奏(参考):建议 4~7 天:文档与目录规范占一半,演练占一半。

任务分解:

  • README 章节建议:仓库地图、环境、金牌命令、批量命令、日志规范、升级回滚策略(仿真器小版本变更怎么办)。
  • 定义归档命名:`run_id = 分支名_日期_序号`,避免覆盖他人结果。
  • 故意注入一类可控失败(例如错 seed、临时改 TB 期待),完整走一遍 triage 记录。
  • 总结「最常见三类 cmdline 错误」与对应关键词搜索方式,附到 FAQ。
  • 若有 nightly:约定保留周期与磁盘配额提醒。
  • 交付检查:随机抽取三天前的失败日志,你是否仍能定位到命令与 stderr?

建议产出(物证):

  • README 定稿
  • 归档规范一节
  • 故障演练报告
  • FAQ 附录

过关标准:新同学 30 分钟跑通金牌路径;故意失败可在 15 分钟内走到根因层级分类。

阶段 4(可选):向 CI / 农场扩展的接口预留

本阶段目标:若团队有 Jenkins/农场:预留「非交互运行」「退出码约定」「邮件/飞书通知字段」;没有也可作为简历延伸话题。

与导读的衔接:从个人脚本走向小团队流程。

讲义节奏(参考):2~4 天。

任务分解:

  • 给批量脚本增加 `--dry-run` 或等同开关,打印将执行命令但不跑仿真。
  • 约定 exit code:0 全过、非 0 分类(可选)。
  • 写一段「若接入 CI」的检查清单(artifact 上传路径、超时策略)。

建议产出(物证):

  • 可选 CI checklist

过关标准:脚本能无人值守跑完冒烟并返回一致退出码。

避坑手册

  • 命令分散无规范,导致维护成本高。
  • 回归结果只看最终状态,不看失败分布与模式。
  • 没有统一归档,历史问题无法追踪。

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

  • 形成标准化 yrun 命令模板。
  • 完成至少 1 次批量回归与失败分类。
  • 交付可复用文档与结果归档规范。

答辩与简历:验证自动化叙事

强调「流程资产」而非个人手感。

能力证据

  • 一页参数矩阵与典型场景截图。
  • 一次批量回归报告:通过率、耗时、失败分类。
  • 故障演练记录:如何从 stderr 回到根因层级。

差异化价值

  • 岗位匹配度高:企业验证岗大量时间花在回归与 triage。
  • 可量化成果:节省人时、缩短反馈周期。

衔接

  • 与 SoC/DV 项目结合:同一套 yrun 入口驱动不同设计。
  • 为 CI、农场调度等更大规模自动化打底。

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

  • 可直接复用的 yrun 命令模板与参数说明。
  • 至少 1 组批量回归结果与问题清单。

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

  1. 进入 sim 目录后加载环境并跑通基础 yrun 命令。
  2. 增加参数或用例组,验证自动化回归流程。
  3. 形成“常用命令 + 回归策略 + 结果解读”模板。

快速开练命令

cd /home/USER/soc3_practice cp -a /project/multi_core_gui/soc/sim ./yrun-v1-0_my cd ./yrun-v1-0_my && source env.csh && yrun -h

建议前置基础

建议已完成至少一个 SoC 项目的手工仿真流程。

继续看其他项目

已复制