使用factory注册宏的时候,引入field automation机制,一般定义uvm_sequence_item类时,使用'uvm_object_utils_begin()和'uvm_object_utils_end实现factory注册,并使用'uvm_field注册所有字段,即可调用copy、compare、print等函数。 注意构建函数new()的声明方式,uvm_component相关类的new函数有string name(实例名字)和 uvm...
uvm 实例化item uvm_object_utils_begin 1 核心基类 UVM_object UVM世界中的类最初都是由一个uvm_void根类继承过来的,但实际上该类没有实际的成员变量和方法。uvm_void只是一个虚类(virtual class),里边的内容等待继承于它的子类去开垦,在继承与uvm_void的子类中,有两类,一类为uvm_object,另外一类为uvm_port...
由于item本身的数据属性,为了充分利用UVM域声明的特性,我们建议将必要的数据成员都通过`uvm_field_xxx宏来声明,以便日后的基本函数操作,例如上面的print()函数。 读者也注意到了一点,上面的例子中,t1没有随机化而t2随机化了,这种差别在item通往sequencer之前是很明显的。因为UVM要求item的创建和随机化都应该发生在sequ...
sequence或者item的随机化 sequence或者item的传送 区别于之前例码,这个例码通过`uvm_do_with宏帮助读者理解,所谓的sequence的复用也就是通过高层的sequence来嵌套底层的sequence/item,最后来创建期望的场景。上面的例子中,既有串行的激励关系,也有并行的激励关系,而在更复杂的场景中,用户还可以考虑加入事件同步(通过uvm...
在传输过程中我们可以用`uvm_do_prio_with来赋予优先级;uvm_sequencer除了优先级的判定,还有锁定功能,两个方法:lock(),grab();lock()是当某一个sequence中的item拿到sequencer的权限之后,必须等该sequence使用unlock()才将权限还回去,一般sequence用来限制住权限,等自己的所有item传输完毕再unlock();而grab()则是只...
这里的sequence值的是类uvm_sequence,而item指的是uvm_sequence_item,为了文章的简洁,我们称之为sequence和item。对于激励的生成和场景控制,是由sequence来编织的,而对于激励所需要的具体数据和控制要求,则是从item中的成员数据得来的。 Sequence Item 在上一节《新手上路》中,我们已经提出item是基于uvm_object,这...
这里的sequence值的是类uvm_sequence,而item指的是uvm_sequence_item,为了文章的简洁,我们称之为sequence和item。对于激励的生成和场景控制,是由sequence来编织的,而对于激励所需要的具体数据和控制要求,则是从item中的成员数据得来的。 Sequence Item 在上一节《新手上路》中,我们已经提出item是基于uvm_object,这...
uvm_component_item和uvm_sequence都是基于uvm_object,它们不同于uvm_component只应当在build阶段作为UVM环境进行创建和配置,而是可以在任何阶段创建。 由于无法判定环境在run阶段什么时间点会创建sequence和将其产生的sequence item 挂载(attach)到sequencer上面,所以无法通过UVM环境结构或者phase机制来识别sequence的运行阶段...
identification description get_sequence_id 私有 set_item_context 对sequence item设置sequence 和sequencer的执行上下文 set_use_sequence_info/get_use_sequence_info 这
uvm_sequence::start_item中第三个参数需要用户注意是否将item和parent sequence挂载到不同的sequencer上面去。 使用item挂载到sequencer上的方法,需要创建item,还需要完成item的随机化,创建的方法;uvm_object::create()或者uvm_sequence::creat_item() 2.3 发送序列相关宏 ...