当前位置:   article > 正文

SV/UVM 学习笔记12(sequence机制、激励的产生与驱动)_sv里面driver的作用

sv里面driver的作用

简述:

为了贯彻单一职责性,在uvm里,将产生和发送激励这两件事拆分为三个部分:sequence,sequencer和driver,其中只有后两者存在于component组件中。sequence唯一的作用就是产生item和trans。

sequence是sequence_item的集合,sequence之所以不存在于组件中是因为其有生命周期,是一个动态的元素。当它内部所有元素全部发送完毕,该sequence的生命周期结束。

sequencer类似于一个管道,作为存在于sequence和driver的中间者,它的主要功能有仲裁和协调二者不同的处理速度,所以其内部必须存在一个fifo用于缓存。

driver唯一的职责在于发送sequencer传送过来的产生好的数据。

过程:

sequence可以主动询问sequencer请求发送trans,而driver也可以使用seq_item_port与seqr建立通道,建立完整通道后driver使用get_next_item向seuqencer索取trans。

sequence产生trans有四种方法1.使用`uvm_do宏 2.使用`uvm_rand_send宏 3.使用`uvm_create和`uvm_send宏 4.使用start_item和finish_item

以上三者我们需要在agent使用connect函数中将他们连接。

细节:

当sequencer发送给driver时,会自己留存一份,直到收到driver返回的item_done时才将其删除。

sequence的启动(挂载)方式:1.通过在env或者sequencer中调用自身的start函数。2.使用default_sequence(config_db)

driver方法:get_next_item,try_next_item,区别在于是否阻塞,get会一直等到获得一个trans才返回,而try在实际中使用的更多。

objection机制会在sequence中使用starting_phase执行。

一般来说一个sequencer只能发送单一类型的trans或者item,遇到多种类型需要$cast转换。

一般由顶层的vseq控制objection。

补充:

lock和grab操作:是seq对seqr发送的请求。两种操作都用来锁定seq的发送,将该seq发送结束才能解除锁定,lock是将该seq放在响应事件的最后,等该seqr所有事件全部结束之后才能锁定,而grab意为夺取,seqr会立刻结束当前进程来响应(但是grab会等待当前lock结束执行)。

下面是详细笔记

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/938547
推荐阅读
相关标签
  

闽ICP备14008679号