1.UVM中各个组件之间的关
其中各组件的关系:
1.sequence,transaction,sequencer之间的关系
Sequence像是一个弹夹,里面的子弹是transaction(激励),而sequencer是一把枪。弹夹只有放入枪中才有意义,枪只有在放入弹夹后才能发挥威力。
Sequencer与driver通过interface进行数据传输,sequence通过挂载到sequencer进行连接。
2.uvm_object,uvm_component,sequence,sequence_item以及config之间的关系
uvm_object是分子,用这个分子可以搭建成许许多多的东西,如既可以搭建成动物,还可以搭建成植物,更加可以搭建成没有生命意识的岩石,空气等。
uvm_component就是由uvm_object搭建成的一种高级有生命体或者无生命体(框架),而sequence_item则是由其搭建成的血液或者其他,它流通在各个(uvm_component)之间。
sequence则是众多sequence_item的组合,config则是由其搭建的用于规范生命体或者无生命体(uvm_component)行为方式的准则。
3. uvm_component 和uvm_object及相关子类之间的关系
- UVM验证平台所有的组件都要派生自UVM的类。( uvm_component和uvm_object以及他俩的“孩子”)。uvm_component继承与uvm_object。
- SV中“固定资产”(test、environment、agent等)派生自uvm_component。SV中的“非固定资产”(比如数据包transaction等的产生)派生自uvm_object。
- 只有uvm_component派生的类,才有节点(每个结点是一个class实例)。
- uvm_component和uvm_object的主要区别:uvm_object是有生命周期的;uvm_component没有生命周期。也就是说仿真过程中,uvm_object在启动后可以finish;uvm_component是伴随仿真过程一直要存在的。
- uvm_component及派生的类是uvm树的骨架,需要标明parent表明继承关系,uvm_object不用说明parent。每一个派生自uvm_component或其派生类的类在其new函数中要指明两个参数:name和parent,这是uvm_component类的一大特征(如果parent设定为null,那它将作为uvm_top的“孩子”;parent设定为this,那它的parent为当前的类)。
- 所有派生自uvm_component及其派生类的类都应该使用uvm_component_utils宏注册。