完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
加入factory机制 上一节《IC验证"一个简单的UVM验证平台"是如何搭建的(五)》给出了一个只有driver、使用UVM搭建的验证平台。严格来说这根本就不算是UVM验证平台,因为UVM的特性几乎一 点都没有用到。像上节中my_driver的实例化及drv.main_phase的显式调用,即使不使用UVM,只使用简单的SystemVerilog也可以完 成。本节将会为读者展示在初学者看来感觉最神奇的一点:自动创建一个类的实例并调用其中的函数(function)和任务 (task)。
要使用这个功能,需要引入UVM的factory机制:
factory机制的实现被集成在了一个宏中:uvm_component_utils。这个宏所做的事情非常多,其中之一就是将my_driver登记在 UVM内部的一张表中,这张表是factory功能实现的基础。只要在定义一个新的类时使用这个宏,就相当于把这个类注册到了这张 表中。 那么factory机制到底是什么? 这个宏还做了哪些事情呢? 在给driver中加入factory机制后,还需要对top_tb做一些改动:
这里使用一个run_test语句替换掉了代码清单2-6中第23到28行的my_driver实例化及main_phase的显式调用。运行这个新的验证 平台,会输出如下语句:
一个run_test语句会创建一个my_driver的实例,并且会自动调用my_driver的main_phase。仔细观察run_test语句,会发现传递给 它的是一个字符串。UVM根据这个字符串创建了其所代表类的一个实例。如果没有UVM,读者自己能够实现同样的功能吗? 根据类名创建一个类的实例,这是uvm_component_utils宏所带来的效果,同时也是factory机制给读者的最初印象。只有在类 定义时声明了这个宏,才能使用这个功能。所以从某种程度上来说,这个宏起到了注册的作用。只有经过注册的类,才能使用这 个功能,否则根本不能使用。请记住一点:所有派生自uvm_component及其派生类的类都应该使用uvm_component_utils宏注册。 除了根据一个字符串创建类的实例外,上述代码中另外一个神奇的地方是main_phase被自动调用了。在UVM验证平台中,只 要一个类使用uvm_component_utils注册且此类被实例化了,那么这个类的main_phase就会自动被调用。这也就是为什么上一节中 会强调实现一个driver等于实现其main_phase。所以,在driver中,最重要的就是实现main_phase。 上面的例子中,只输出到“main_phase is called”。令人沮丧的是,根本没有输出“data is drived”,而按照预期,它应该输出256 次。 关于这个问题,牵涉UVM的objection机制。 通知: 本章更新后将持续更新更新… 如果有任何疑问请在下方评论… |
|
相关推荐
1 个讨论
|
|
路过学习,谢谢分享。
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
824 浏览 0 评论
923 浏览 0 评论
544 浏览 0 评论
AG32软件包SDK更新:加入新例程(可实现至少15个UART串口)
1226 浏览 0 评论
从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析
3954 浏览 0 评论
6582 浏览 114 评论
2669 浏览 58 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-17 11:42 , Processed in 0.422363 second(s), Total 34, Slave 28 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191