The UVM Primer -- Chapter 13 UVM Environments

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函数即可,其他功能可以通过继承获得。
      在这里插入图片描述
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值