The UVM Primer -- Chapter 13 UVM Environments

本文详细介绍了如何在UVM中构建适应性强的测试环境,通过将架构和激励分离,使用uvm_env类封装测试平台的结构。探讨了三种实现方式,包括使用虚类base_tester实现代码复用,以及如何通过工厂方法重载来灵活替换组件类型。通过这些方法,实现了uvm_test和uvm_env之间的明确分工,提高了测试平台的可维护性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

The UVM Primer – Chapter 13 UVM Environments

  • 前面两节介绍了使用factory机制创建顶层对象uvm_test,并在uvm_test中例化uvm_componnets;UVM会自动的调用uvm_components中的各个phase,并且自为每个componnet的run_phase开启独立的进程.这样的方式易于理解,却难以复用。
  • 采用以上方式,每次定义新的uvm_test都需要声明对应类型的tester;每个uvm_test类都会例化所有的uvm_components;
  • UVM通过uvm_env将测试平台的组件和行为分离,uvm_env专注于构造测试平台的框架。

13.1 Architecting Adaptable Code

  • 对于tester而言,我们希望tester可以实现的功能:
    • random_tester:发送1000个随机operation with different oprands;
    • add_tester: 发送1000次add operation with different oprands;
      (1) 实现方式-A
      rando_tester和add_tester都分别扩展自uvm_component,每个tester都需要定义get_op,get_data,run_phase方法;无论是random operation还是add operation,在run_phase都以同样的方式送往DUT,这样run_phase就难以维护。一旦我们需要对run_phase做出修改,就需要同时修改各个tester中的run_phase函数。
      在这里插入图片描述
      (2) 实现方式-B
      首先从uvm_component中扩展一个类,base_tester,在其中定义虚函数virtual get_op(),get_data()和非虚函数run_phase,在此类中定义run_phase的行为。random_tester和add_tester均扩展自base_tester,此时如果需要对run_phase中的行为进行修改,就只需要修改base_tester中的方法即可。(PS:为了防止声明base_tester的变量,导致仿真报错,可以将base_tester定义为虚类,将get_op和get_data定义为纯虚方法) 这样base_tester就变成了,我们可以使用的资源,便于扩展。
      在这里插入图片描述
      (3) 实现方式-C
      将random_tester也变成可使用资源,继承关系:uvm_component -> base_tester -> random_tester -> add_tester; 因为get_data()在random_tester和add_tester中的机制是一致的,因此add_tester可以继承random_tester中的get_data函数,类似的mul_tester,xor_tester都可以扩展自random_tester,并且只需要重构get_op函数即可,其他功能可以通过继承获得。
      在这里插入图片描述

13.2 Separating Structure from stimulus

  • base_tester时测试平台架构中关键的一环,通过base_tester可以派生出一系列的tester,然后我么可以像前两节所述,在uvm_test中例化这些tester开始仿真,这样可以正常工作但是却不利于代码维护。
  • 原因: testbench中的stimulus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值