UVM是一种统一的验证方法,它是至关重要的,有不少人往IC验证方向发展的,多多少少都会去了解UVM。对于验证工程师来说,掌握UVM可以大大减轻验证工程师跨公司、跨项目工作的难度。
UVM
通用验证方法学(Universal Verification Methodology, UVM)是一个以 SystemVerilog 类库为主体的验证平台开发框架,验证工程师可以利用其可重用组件构建具有标准化层次结构和接口的功能验证环境。
UVM TEST
UVM TEST 是 UVM 的顶层 Component 组件,主要完成例化和配置顶层 env,并通过 env 调用 sequence 产生激励从而给到 DUT。
一般情况下,会有一个基本的 base_test 用于对 env 的例化以及其他共同的 UVM 元素组件的生成例化。然后其他的 test 则继承该 base_test 并有针对性地配置 env 或者选择不同的sequence 来测试。
UVM Environment
UVM env 主要用于将 UVM 组件进行有关联的分层。一般在 env 里例化 agent、scoreboard,设置是其他的 env,顶层的 env 用于封装用来对 DUT 测试的环境。
UVM Scoreboard
Scb 主要用于检查 DUT 的行为功能是不是符合预期。通过 agent 的 analysis port 来接收 DUT的输入和输出的 transaction。将输入 transaction 灌入到 reference model 来产生期望的结果,然后与 DUT 实际的输出结果作比较。
UVM Agent
agent 用于对一些 UVM 组件进行分层和连接,主要用于完成 DUT 的接口。
一个典型的 agent 包括一个用于管理激励序列的 sequencer,一个用于施加激励到 DUT 接口的 driver,以及一个用于监测 DUT 接口的 monitor,另外还可能包括一些如覆盖率收集、协议检查等。agent 可以工作在 active 和 passive 两种模式下,前一种用于产生激励,后一种则只是监测接口并不具备控制能力。
UVM Sequencer
sequencer 用于从 sequence 中选择控制 transaction 序列,类似一个仲裁器。简单说主要用于控制 transaction。
UVM Sequence
sequence 是用于产生激励的 object。
UVM Driver
driver 从 sequencer 中获取 transaction 的 sequence 并将其驱动到 DUT 的接口上,这里使用TLM 端口来完成。这里涉及到抽象层数据转换成具体的端口信号。
UVM Monitor
monitor 采样 DUT 接口信号并将其送到验证平台的其他组件来作分析。类似 driver,同样涉及到抽象数据和具体数据的转换。为了实现上述功能,通常 monitor 有用于访问 DUT 的接口并且通过 TLM analysis port 来广播产生的 transaction。monitor 可以在内部对产生的事务做一些处理,比如覆盖率收集、检查、日志记录等,也可以将这些事务的处理由一个专用的组件来完成。