同一 IP 在不同层级的角色切换
在 IP 级验证中,一个 UART、SPI 或 DMA 模块通常是完整的 DUT,验证环境需要为其提供激励(由 driver 驱动总线),同时也要监测其输出(monitor 采样),因此环境中的 agent 必须主动驱动——包含 driver 和 sequencer。
但在 SOC 级验证中,该 IP 只是整个芯片的一个子模块,大多数情况下它不需要被主动激励,只需要监测其接口行为即可(例如观察 CPU 发出的配置命令、或模块产生的数据流)。此时,如果每个 IP 的 agent 都还包含 driver/sequencer,不仅浪费资源,还可能导致多重驱动冲突。
解决方案就是让 agent 支持 active/passive 模式:通过一个配置变量 is_active 控制是否创建 driver 和 sequencer。这样,同一个 agent 类可以在 IP 级作为主动激励源,在 SOC 级变为被动观察者,实现“一次编写,到处复用”。
重点:agent 是验证平台中最基本的复用单元,active/passive 切换是它适应不同层级验证的核心机制。
Env 与 Agent 的职责划分
uvm_env —— 大容器,装“大件”
uvm_env 是环境容器,用于组织和管理验证平台中的主要组件,如 agent、scoreboard、reference model、coverage collector、virtual sequencer 等。它不直接与 DUT 接口交互,而是通过内部的 agent 来完成。
典型 env 结构:
- 一个或多个 agent(例如一个 AHB master agent,一个 UART agent)
- 一个 scoreboard
- 一个 reference model
- 覆盖率和协议检查组件
env 本身不产生或检查数据,它的职责是“组装和连接”。
uvm_agent —— 小容器,装“小件”
uvm_agent 是一个更细粒度的容器,专门用于封装与某个特定接口相关的组件。一个标准的 agent 通常包含:
- monitor:被动采样接口信号,广播事务(分析端口)。无论 active 还是 passive 模式,monitor 通常都需要。
- driver:主动驱动接口,将事务转换为信号级波形。仅在 active 模式下创建。
- sequencer:调度 sequence 产生的事务给 driver。仅在 active 模式下创建。
此外,agent 还可以包含 coverage collector、


403

被折叠的 条评论
为什么被折叠?



