目录
Q1:前面说到UVM提供了一套标准的类库和方法,有哪些类库?
Q2:Component和Data items有什么区别呢?
Q1:前面说到UVM提供了一套标准的类库和方法,有哪些类库?
UVM提供了一整套类库,用于创建灵活、高效、可重用的验证环境。这些类库涵盖了从基本的对象管理、序列化、随机化到高级的验证组件和功能,如代理、驱动器、监视器、覆盖率和报告机制等。
UVM提供的类库大致可以分为两类,组成验证环境的基本单元是components和用于它们之间通信的transactions(data items)。
Q2:Component和Data items有什么区别呢?
Component使用聚合类来构成验证环境,继承自uvm_component。UVM也为UVCs (UVM Component) 提供了许多子类,如:uvm_sequencer, uvm_driver, uvm_monitor等。Component有component utility macros和构造函数。
Data items被用来定义激励,通常继承自uvm_sequence_item,有object utility macros 和构造函数。此外,在大型验证环境中,有许多用于配置的变量,也可以定义在一个data item的类中,通常继承自uvm_object。在验证过程中,可以随机化这些变量来覆盖多种测试情况,通时可以对变量添加约束,覆盖率检测。
前面提到构成UVC的验证组件(Component)有driver, monitor, sequencer等。UVM为这些验证组件提供了相应的类,它们继承自uvm_component。
- uvm_sequencer:sequencer负责从uvm_sequence中获取事务(transaction)并将其提供给uvm_driver。(uvm_sequence_item中定义了需要产生的激励信号,uvm_sequence中则是顺序指示了一组激励。)uvm_sequencer的主要功能是调度和管理事务序列,从而协调测试生成和驱动器(driver)的操作。
- uvm_driver: driver将事务从uvm_sequencer中提取出来,按照正确的时序,将激励驱动到DUT的接口上。
- uvm_monitor:monitor收集来自DUT的信号。
- uvm_agent:agent包含sequencer, driver, monitor的实例。is_active用来配置agent是active还是passive。Active agent构造driver, sequencer和monitor。Passive agent值构造monitor.
- uvm_env: 用于构建testbench,testbench中包含DUT和UVCs。