UVM 构建环境的要素
一、前言
UVM带来的环境复用,相比于之前SV验证环境做到了下面的几个优势:
- 各个模块的验证环境是独立封装的,对外不需要保留数据端口,因此便于环境的进一步集成复用。
- 由于UVM自身的phase机制,在顶层协调各个子环境时,无需考虑由于子环境之间的例化顺序而导致的对象句柄引用悬空的问题。
- 由于子环境的测试序列是相对独立的,这使得顶层在复用子环境测试序列而构成virtual sequence时,不需要其它额外的迁移成本。
- UVM提供的config_db配置方式,使得整体环境的结构和运行模式都可以从树状的config对象中获取,这也使得顶层环境可以在不同uvm_test进行集中管理配置。
二、环境构建的核心要素
在发送测试序列之前,首先需要创建一个结构化的环境。如果我们将环境建立的核心要素拆解开来,它们可以分为四个部分:
- 单元组件的自闭性
自闭性指的是单元组员(例如uvm_agent或者uvm_env)自身可以成为独立行为、不依赖于其它并行的组件。举例来说,driver同sequencer之间,虽然driver需要获取sequencer的transaction item,但是它本身可以独立例化,而它们之间的通信也是基于TLM端对端的连接实现的。(如果按照SV的环境,只例化driver不例化generator,从环境运行的可靠性上来说不行。因为driver中的mailbox是空的。虽然从编译上来说它是独立的,但是从环境运行上来说它不是独立的。)
这种单元组件的自闭性为日后的组件复用提供了良好基础。各个