协议/总线接口验证通用方法
更新时间:2026-10-01。与其记每种总线怎么验,不如掌握一套“从协议规范产出可复用 interface agent”的通用配方,换协议照做即可。
本文要回答的问题
- 拿到一份总线规范,第一步提取什么?
- 一个能在项目间复用的 interface agent 应包含哪些件?
- 除了数据对,还要覆盖哪些协议行为?
一、从规范提取规则
把规范拆成三类:时序规则(何时采样/驱动、setup/hold)、合法/非法组合(哪些信号搭配允许/禁止,如 valid/ready 不能过早撤销)、事务语义(突发、地址、响应、顺序)。这些分别落到 clocking、SVA 断言和事务字段。
二、通用 agent 配方
- SVA 协议断言放在 monitor,任何违规立即抓(valid/ready、响应码、 outstanding 上限)。
- monitor 把引脚流还原成事务,供覆盖和比较。
- 覆盖率:握手机率、突发长度、idle/背靠背、 outstanding 数、地址边界。
- scoreboard:多 master/slave 下保证端到端数据与路由正确。
三、检查清单与异常注入
复用清单:active/passive 可切、参数化位宽/id、错误注入(坏响应、反压、协议违例)、可独立工作。验证背靠背、满反压、多 id 乱序返回。
四、常见坑
- 只比数据不查协议,时序违例漏网。
- 协议规则散在 test 里而非 agent,无法复用。
- 漏覆盖反压/背靠背,实际最易出问题。
- 多 master 路由/顺序假设过强导致误报。
- agent 不能切 passive,无法在系统级复用。
小结
把规范拆成时序/规则/语义,收敛进带 SVA、coverage、可切 passive 的 agent,外部只见事务。下一篇 模块、子系统、SoC 三级验证差异。
总结
与其记每种总线怎么验,不如掌握一套“从协议规范产出可复用 interface agent”的通用配方、换协议照做:先把规范拆成三类——时序规则(何时采样/驱动)落到 clocking block、合法/非法组合(如 valid/ready 不能过早撤销)落到 monitor 里的 SVA 断言、事务语义(突发/地址/响应/顺序)落到事务字段;agent 内部由 sequencer+driver 发激励、monitor 还原事务并跑协议断言、coverage 收握手/突发/outstanding/地址边界、scoreboard 保证多 master/slave 端到端数据与路由正确。可复用的关键是协议知识只收敛在 agent 内部、外部只见事务,且能切 passive、参数化位宽/id、支持错误注入——别把规则散在 test 里,也别漏了实际最易出问题的反压和背靠背。