新手总结:UVM的一些基础知识点

新手总结:UVM的一些基础知识点
最新回答
活给自己看

2026-10-22 23:53:41

UVM新手基础知识点总结

UVM(Universal Verification Methodology)是SystemVerilog的验证方法学标准,用于构建模块化、可重用的验证环境。以下是UVM的核心基础知识点总结:

一、Factory机制
  • 核心功能:UVM通过工厂模式实现对象的动态创建与替换,无需硬编码类名。

    使用uvm_component_utils或uvm_object_utils宏注册的类,可通过工厂机制实例化。

    调用run_test("class_name")时,UVM会根据类名自动创建实例并调用其main_phase。

  • 关键流程:

    测试用例传入:通过+UVM_TESTNAME=test_base命令行参数指定测试用例,UVM根节点(uvm_root)通过run_test()读取该参数,并利用工厂机制创建顶层实例uvm_test_top。

    代码触发:run_test()是传入测试用例名的关键代码,同时负责构建UVM树形结构的顶层。

    uvm_root::get()作用:作为全局单例,uvm_root管理整个UVM环境的层次结构,从顶层测试实例向下扩展子组件。

二、Objection机制
  • 仿真控制逻辑:

    每个phase执行前,UVM检查是否有objection被提起。若存在,则等待所有objection撤销后才结束当前phase;若无,则立即跳转。

    所有phase执行完毕后,调用$finish终止仿真。

  • 使用规则:

    raise_objection必须在main_phase中第一个消耗仿真时间的语句之前调用,否则无效。

    run_phase的特殊性:

    若其他动态phase(如12个并行phase)提起objection,run_phase无需手动提起即可自动执行,其运行时间由其他phase控制。

    若需主动控制run_phase运行时间,需在其中直接调用raise_objection。

    推荐实践:在sequence中控制objection,符合UVM“激励生成由sequence主导”的设计哲学。例如,sequence提起sequencer的objection,完成后撤销。

三、Interface与Virtual Interface
  • 核心作用:

    替代绝对路径,实现验证平台与DUT的解耦。

    类中声明:只能声明virtual interface,不可直接声明物理接口。

  • 连接方法:

    通过config_db机制传递接口句柄,分为set和get两步:

    set的第二个参数为目标组件在UVM树形结构中的路径。

    通常driver、input monitor(i_mon)、output monitor(o_mon)需要接口,且driver与i_mon共享同一接口。

四、Build_Phase与Config_DB
  • build_phase特性:

    自动执行,用于数据传递(如config_db)和成员变量实例化。

    是function类型,而main_phase是task类型。

    调用uvm_fatal宏会触发$finish终止仿真,其参数冗余度无意义(与uvm_info不同)。

  • config_db细节:

    无论run_test传入何参数,创建的实例名始终为uvm_test_top。

    使用双冒号(::)调用set/get,因其为静态函数。

五、Transaction与生命周期
  • 事务级建模:

    通过transaction实现从信号级到事务级的抽象,提升验证效率。

    生命周期差异:

    uvm_component_utils注册的组件(如driver)具有静态生命周期。

    uvm_object_utils注册的对象(如transaction)具有动态生命周期。

    随机化回调:调用transaction.randomize()后,会自动触发post_randomize()函数。

六、UVM树形结构
  • 层次管理:

    根节点为uvm_test_top,由run_test创建。

    构建顺序:build_phase自上而下执行(从根到叶),确保所有组件实例化完成后,再进入后续phase(如connect_phase、main_phase)。

总结:UVM通过工厂模式、objection机制、树形结构等核心特性,实现了验证环境的模块化与自动化控制。新手需重点掌握factory的动态创建、objection的仿真控制、interface的解耦方法,以及transaction的事务级建模,为构建高效验证平台奠定基础。