SV/UVM 学习笔记12(sequence机制、激励的产生与驱动)

简述:

为了贯彻单一职责性,在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结束执行)。

下面是详细笔记

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值