UVM工厂揭露,第1部分
简介
当您第一次学习UVM时,大多数概念都是有意义的,即使您是面向对象编程的新手。除了UVM Factory。为什么你需要那么多额外的代码,class:: type_id: create ()
,只是为了制造一个物体?只是打电话有什么错新()
?答案是团队合作!
小问题
假设您正在尝试使用X总线协议验证设计。您编写使用该协议的UVM测试台组件,包括代理、驱动程序和监视器。下面是构造驱动程序的代理代码。
类x_agent扩展了uvm_agent;x_driver drv;函数void build_phase(…)DRV = new(" DRV ", this);//构造X总线驱动
在构建阶段调用新()
.SystemVerilog说它基于左侧句柄的类型构造对象,因此您最终得到x_driver
对象。工作完成了,你不需要打那么多type_id: create ()
的东西。
但是在项目进行到一半的时候,你的经理说这个设计必须与称为Xplus总线的下一代协议一起工作。她甚至给了你xplus_driver
扩展的类x_driver
.
没问题,只需添加一个标志变量和一些代码,您的代理就可以构造这两种类型。由于新类扩展了原始类,所以可以重用drv
句柄。您甚至可以使用类型化构造函数。
类x_agent扩展了uvm_agent;x_driver drv;位use_xbus;// True:使用X总线,False: xplus总线函数void build_phase(…);If (use_xbus) DRV = new(…);//构造X总线驱动else drv = xplus_driver::new(…);//类型构造函数构建xplus_driver对象
使用这个新的代理和驱动程序,您编写一个Xplus测试,设置标志use_xbus
,它就过去了。当你可以如此轻松地做出改变时,谁还需要工厂呢?是时候提交更改并将其发布给团队了。
当你第二天早上来上班时,你的小隔间外面有好几个愤怒的人。的默认值中有一个错误use_xbus
是0,所以代理总是构造xplus_driver
.每个尝试使用您修改后的代理的人都得到了错误的驱动程序,现在他们所有的测试都失败了。
大问题
这里的问题不是代码错误。你在一个团队中工作,所以你所做的改变会影响到每个人。每次你改变共享代码,添加更多的控制变量,如果
- - -情况下
-statement的所有新变量,你可能会导致错误。您的测试如何注入新的内容xplus_driver
类,而不更改x_agent
课吗?
解决方案
许多UVM技术都涉及多态性。听起来有点棘手,但这只是意味着用虚方法定义基类。它们成为注入新行为的“钩子”。怎么做?定义一个派生类并用派生类替换基对象。当你打电话的时候handle.action ()
,根据对象类型,可以获取基操作或派生操作。
工厂模式更微妙一些。把工厂想象成一台印刷机。如果你用基本图像加载一个鼓,它将打印基本文本。如果你加载一个带有派生图像的程序,它会打印派生文本。
UVM Factory打印对象。在基地x_driver
和派生xplus_driver
,使用“uvm_component_utils (x_driver)
宏来定义type_id
.这是一个“代理类”,这意味着它是这些类的“助手”,构建它们的对象。每一个type_id
是一个独特的类,它们一起构成了UVM Factory。关键是所有这些代理类共享一个静态数组,该数组是基本类型和派生类型的查找表。默认情况下,下面的调用构建一个x_driver
对象。
DRV = x_driver::type_id::create(" DRV ", this);
关键的概念是,您可以从测试类中决定由代理构建哪个对象,而不必修改代理的代码。在测试中build_phase ()
,添加以下呼叫。
x_driver: type_id:: set_type_override (xplus_driver: get_type ());
你可以这样读。告诉x_driver
类中定义的类型,当要求它创建对象时,使用xplus_driver
类,get_type ()
返回类型xplus_driver: type_id
.
这里注入新行为的OOP钩子是虚方法create ()
.细微的区别在于方法是在type_id
代理类,不在任何驱动类中。
结论
如果您使用工厂创建模式编写UVM测试平台,而不是直接调用new()构造函数,您可以通过使用派生类重写基类来注入新的行为。您不仅可以重写组件,还可以扩展序列项类,重写基类型,现在所有的序列都将获得这种新行为,而无需更改它们的代码。工厂模式实现了这一切,再加上稳定的代码库,因此您可以在不影响团队的情况下注入新特性。
寻找更多UVM工厂的技术职位下个星期。
了解更多
您可以了解更多关于这些主题的内容,包括使用Siemens SystemVerilog进行验证的面向编程课程。开云体育平台登录在教练领导格式由我们的行业专家指导,或在一个自定节奏随需应变格式。还可以对其进行定制,以满足您的特定设计目标,并向您展示如何设置用于其他设计的重用环境。此外,您现在可以通过参加我们的数字徽章/ 1级证书高级科目徽章考试.这将使您能够通过在社交媒体和电子邮件签名中显示徽章来展示您对该主题的了解。