如何建立有效的验证文档体系?

解读

面试官抛出此题,并非想听“写个Testplan就完事”的教科书答案,而是考察候选人是否真正经历过“流片前夜被老板追问覆盖率”的生死时刻。国内芯片项目普遍节奏紧、人力少、版本迭代快,验证文档常陷入“写完没人看、缺了被追责”的尴尬。因此,有效体系必须同时解决三大痛点:

  1. 信息同源:设计/验证/后端/软件共用同一数据源,杜绝Word/Excel多头维护。
  2. 可追溯:从需求到用例到覆盖率,任何一条缺口能在5分钟内定位到责任人。
  3. 自动化:文档随代码/脚本每日自动生成,评审前不再“通宵补作业”。
    回答时务必结合国内实际(GitLab+Gitee私有部署、飞书/钉钉审批流、国产EDA混合环境),给出可落地的轻量级方案,体现“质量守门员”对流程的掌控力。

知识点

  1. 验证文档分层模型:REQ(需求)→ TC(测试用例)→ COV(覆盖率)→ BUG→ SIGN-OFF报告,五层单向可追溯。
  2. 同源数据机制:使用YAML/JSON/TOML描述需求与用例,嵌入SystemVerilog/UVM代码注释,通过Python脚本一键生成Markdown/HTML,供飞书/Confluence直接渲染。
  3. 版本基线与变更单:Git tag对应RTL tag,验证文档commit必须关联Redmine/Gitee Issue,强制Pull Request模板填写“需求ID、影响用例、覆盖率增量”。
  4. 度量看板:每日CI调用covered/IMC/VC Formal API,自动更新“代码/功能/断言/时钟门控”四维覆盖率,钉钉群机器人推送红黄绿灯。
  5. 轻量级评审:采用“飞书多维表+在线评审”替代传统线下评审,评审意见@责任人,状态自动回写GitLab Issue,48小时内闭环。
  6. 归档与复用:项目结项时,用Sphinx把Markdown打包成静态网站,存至公司NAS,并打标签进IP仓库,下一项目可git submodule直接拉取。

答案

“我在XX SoC项目中把验证文档拆成‘三层两线一库’,跑通后把验证后期返工时间从三周压到三天。
第一层是需求层:系统架构师在飞书多维表维护Feature List,导出YAML到验证仓库的docs/spec目录,每条需求自动生成32位UUID。
第二层是测试层:我在UVM testbench里写了一个Python脚本,扫描uvm_component_utils宏里的类名与注释,若注释带@req`字段等于UUID,则自动把类名、场景描述、预期结果写回YAML,保证用例与需求双向链接。
第三层是覆盖率层:CI每晚跑regression,调用VCS covered与Formal工具API,把assertion、covergroup、时钟门控结果推到InfluxDB,Grafana生成红黄绿灯看板;覆盖率<90%的条目自动在Gitee提Issue并@模块owner。
两线中的“质量线”指Sign-Off Checklist,我把它做成Markdown模板,嵌入CI,只有28项指标全部打钩才允许打Tag;另一条“变更线”要求任何需求变更必须走Redmine流程,脚本校验对应UUID的用例和覆盖率是否同步更新,否则PR拒绝合并。
一库是验证IP库:公共的UVC、脚本、文档模板全部放Git子模块,新项目git submodule update就能复用,平均节省40%文档搭建时间。
最终该体系一次性通过客户ISO26262审核,流片后零缺陷,文档也被公司评为可复用A级资产。”

拓展思考

  1. 云端协同:如果团队分布在沪、深、成都三地,可将GitLab Pages与飞书文档双向同步,实现“代码合并即文档发布”,避免VPN卡顿导致版本分叉。
  2. AI辅助:利用国产大模型在本地私有化部署,对每日失败的用例日志自动摘要,生成“可能根因”段落插入Markdown,减少工程师写failure analysis时间。
  3. 安全合规:对于车规/金融芯片,需把需求-用例-覆盖率数据写进只读CDR(Chip Data Repository),使用国产商用密码芯片做哈希锚定,满足国密审计要求。
  4. 敏捷验证:在D2D Chiplet项目中,可把文档粒度拆到Tile级别,每个Tile独立Git仓库,验证文档作为子模块集成到顶层,实现“边设计边验证边归档”,支撑两周一次迭代。