uvm中run_test

9 篇文章 4 订阅

run_test是在uvm_globals.svh中定义的一个task,用于启动UVM。

获取到uvm_root的单个实例,然后调用top的run_test函数。传入test_name的名字。

在UVM-1.2中,获取uvm_root的单个实例,要通过uvm_coreservice_t的单个实例去获取。
在这里插入图片描述
定义了一些变量。
◾factory: 工厂类单例
◾testname_plusarg: cmdline是否有+UVM_TESTNAME参数
◾test_name_count: cmdline中,+UVM_TESTNAME参数的个数
◾test_names[$]: cmdline中,+UVM_TESTNAME的参数值
◾msg:  打印信息
◾uvm_test_top: 顶层
◾phase_runner_proc: 管理环境中的各个进程,保存各个进程号
在这里插入图片描述
初始化objection。
在这里插入图片描述
设置testcase的name,从cmdline获取+UVM_TESTNAME参数,如果有,将来使用第一个参数设置的值。如果cmdline没有设置UVM_TESTNAME,使用传入的testname。
在这里插入图片描述
根据test_name,调用工厂函数create_component_by_name,创建testcase的实例,并且赋值给uvm_test_top,因此对于UVM环境,顶层的testcase,将来都会变成uvm_test_top。

最后判断,创建的实例是否成功。
在这里插入图片描述
m_children是uvm_component中内建的变量,保存该类包含哪些子类。
在这里插入图片描述
当一个子类,通过UVM的工厂机制创建类实例后,会将给子类的父类中的m_children,加入该类对象,而testcase的父类,就是uvm_root,因此当之前的testcase被工厂机制创建实例之后,就会将uvm_root的m_children中,加入该testcase的类对象,因此此时m_children的个数就不为0。

将testname的名字打印出来。

通过process类,保存进程号,启动uvm phase。此处用fork join_none,父进程就不必等子进程结束,就可以退出。

#0,父进程休眠,其他进程得到调度,使其他phase的runner得到运行。

最后等待uvm的phase结束。
在这里插入图片描述
结束之后,将创建的所有子进程杀掉,调用report,打印,最后调用$finish,结束仿真。
如果你想要快速入门、转行做数字前端设计,不妨到移知官网学习这些课程,给自己一次蜕变的可能。芯片东西还是挺多的,要讲的也太多。慢慢学吧。祝好运!

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值