我正在学习UVM教程的基础知识。在我阅读的所有地方,事务对象总是从uvm_sequence_item
而不是uvm_transaction
扩展而来,因为uvm_sequence_item
具有诸如transaction id等附加特性。如果是这样,为什么uvm_transaction
类甚至在UVM类层次结构中?
除了从uvm_transaction
扩展的uvm_sequence_item
之外,还有谁在使用uvm_sequence_item
?
是因为遗产吗?
发布于 2016-07-09 01:20:30
UVM Class Reference就是这么说的:
“uvm_transaction类是UVM事务的根基类,继承了uvm_object的所有方法,uvm_transaction添加了一个定时和记录接口。
该类提供时间戳属性、通知事件和事务记录支持。
不推荐使用这个类作为用户定义事务的基础。它的子类型uvm_sequence_item将用作所有用户定义的事务类型的基类.“
发布于 2016-07-14 17:39:06
如果您引用uvm类层次结构(Link:[https://www.google.co.in/search?biw=1366&bih=620&tbm=isch&sa=1&btnG=Search&q=uvm+class+hierarchy#imgrc=Laxc9UWNpnGTpM%3A][1] ),那么您会发现uvm_transaction父类,而uvm_sequence是子类。
因此,子类可以访问父类的所有属性。但是父类不能访问子类属性。
uvm_sequence_item有自己的功能,如get_sequencer_id、set_sequencer_id、get_root_sequence。
这些方法由内部使用的排序器在层序列的情况下使用。
您可以通过start方法、uvm_do系列或config_db调用序列。
每个方法都调用start_item(req)和finish_item(req)。
task start_item(uvm_sequence_item item)
task finish_item(uvm_sequence_item item)
如果在第一个参数中观察到数据类型,则两个函数中的数据类型都是uvm_sequence_item。
总共有八个uvm类。
(1) uvm_driver.svh
(2) uvm_push_driver.svh
(3) uvm_sequencer.svh
(4) uvm_push_sequencer.svh
(5) uvm_sequencer_library.svh
(6) uvm_sequencer_analysis_fifo.svh
(7) uvm_sequence.svh
(8) uvm_sequencer_param_base.svh
这些类是用参数化的uvm_sequence_item而不是uvm_transaction。
如果您使用uvm_transaction而不是uvm_sequence_item,那么ti将从uvm_sequencer_param_base.svh发出一个错误(未找到set_sequence_id,这是uvm_sequence_item而不是uvm_transaction的属性)。
因此,顺序、排序器和驱动程序之间的通信没有完成。
在我观察到的大多数情况下,如果您有一个代码是,而不是,那么您可以使用uvm_transaction,它不会出现错误。
但是,如果您的代码包含uvm_sequener,并且使用了uvm_sequener,那么它会发出错误(无法找到成员'set_sequence_id')。
发布于 2017-12-25 09:55:12
注意,在uvm_transaction类中,uvm_sequence_item和uvm_objects都是继承的。因此,静态行为和非静态行为(可以说)类层次结构都是从uvm_transaction开始的。
现在,我可以将我想要的任何功能添加到uvm_sequence_item中,以便uvm_sequence_item的每个继承者都能得到这个功能。我可以在不修改uvm_transction_item的情况下做到这一点。否则,uvm_transaction中的任何更改都会导致组件类层次结构中不必要的功能(静态行为),甚至可能导致意外的副作用。
PS:其他OOPs语言和SV之间的区别之一是SV中不允许多重继承。例如,对于C++,我可以从一个新类中的两个类继承。这是不允许在SV。因此,获得uvm_transaction属性和uvm_sequence_item属性的唯一方法是从uvm_sequence_item继承。这可能是你困惑的根源。
https://stackoverflow.com/questions/38276720
复制相似问题