0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UVM sequence机制中response的简单使用

我快闭嘴 来源:小杜的芯片验证日记 作者:小杜的芯片验证日 2022-09-22 09:26 次阅读

sequence作为UVM几个核心机制之一,它有效地将transaction的产生从driver中剥离出来,并且通过和sequencer相互配合,成功地将driver的负担降低至仅聚焦于根据协议将transaction发送到接口上,而具体发送什么数据、数据有多少,则通通交给了sequence和sequencer解决。

对于发送数据,建立起了 sequence → sequencer → driver → interface → DUT 的单向数据传输通路。

但有时,sequence并不能着急产生数据,而需要根据driver对transaction的反应,或者说sequence需要接收到driver发出的”我准备好了,你可以根据我目前的情况决定下一笔发送什么数据了“的信号,再产生transaction发送给driver。此时就需要建立起 driver → sequencer → sequence的通路,通路中传输的信息即”rsp”。这是通过在driver中调用put_response( ),在sequencer中调用get_response( )实现的。同时,为了保证sequencer上有多个sequence时,rsp不会认错sequence,最好给rsp设置好id等信息。


下面是小杜今天遇到的场景:

通过SMBus转APB总线向DUT中发送read请求和address信息发送给DUT,DUT随后将目标地址的寄存器中的数据反向发送出来,并且当监测到rsp中某个关键信息满足特定条件时,即可停止仿真

停止仿真可以通过调用系统函数$finish( )实现,但如何监测rsp中具体某一位数据呢?

首先我们需要确定rsp 的数据类型,可以通过systemverilog的系统函数$typename( )来查看:

task body;  ...  get_response(rsp, req.get_transaction_id());  $display($typename(this.rsp));  ...endtask

打印结果:

class xxx.xxx_master_transaction

可以看到,返回的rsp是一个类,并且和我们发送的req是同一个类型。想一下也合理,req、rsp是建立在同一条数据通路上的,只是数据传输方向相反。即sequence sequencer driver interface DUT 是一条完整的双向数据通路。(这是小杜目前的理解,如有错误,还请批评指正)


下面是整个body( )代码:

task body;  //发送数据  `uvm_create_on(req, sequencer)    ...//对req进行处理  `uvm_send(req)    //获取返回值并打印  get_response(rsp, req.get_transaction_id());  $display("rsp = ", rsp);
  //监控并判断rsp的具体位,满足条件就停止仿真  if(rsp.data[x] == 'hxx) begin    $finish();  end
endtask: body

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50812

    浏览量

    423547
  • Response
    +关注

    关注

    0

    文章

    5

    浏览量

    7973
  • UVM
    UVM
    +关注

    关注

    0

    文章

    182

    浏览量

    19169
  • sequence
    +关注

    关注

    0

    文章

    23

    浏览量

    2846

原文标题:日常 - UVM sequence机制中response的简单使用

文章出处:【微信号:小杜的芯片验证日记,微信公众号:小杜的芯片验证日记】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    UVM的field automation机制有哪些用途

    不知道UVM的field automation机制怎么翻译,不管了,反正就是**机制,理解它能干啥就行了。
    的头像 发表于 07-19 09:45 2090次阅读

    IC验证“UVM验证平台加入objection机制和virtual interface机制“(七)

    机制来控制验证平台的关闭。细心的读者可能发现,在上节的例子,并没有如**《IC验证"一个简单UVM验证平台"是如何搭建的(五)》**所示显式地调用 finish语句来结束仿真
    发表于 12-09 18:28

    什么是UVM Report机制

    UVM Report机制概述
    发表于 12-21 06:55

    数字IC验证之“搭建一个可以运行的uvm测试平台”(5)连载...

    需要为它的类成员指定random属性。  代码是如何实现的?  首先,我们说事物类需要从uvm sequence item进行扩展,然后定义事物所具备的属性,那么这里使用一个简单的例子来说明。  假定
    发表于 01-26 10:05

    UVM sequence分层有哪几种方式呢

    种请求下可以使用第一种分层方式,在high-layer sequence依然使用low-layer sequencer进行驱动,同时对low-layer sequence进行更加精细化的控制
    发表于 04-11 16:37

    请问一下在UVM的UVMsequences是什么意思啊

    UVM方法学,UVMsequences 是寿命有限的对象。UVM sequences从uvm_sequence_item基类扩展得到,uvm_s
    发表于 04-11 16:43

    UVM sequence分层的几种体现

    种请求下可以使用第一种分层方式,在high-layer sequence依然使用low-layer sequencer进行驱动,同时对low-layer sequence进行更加精细化的控制。在上面
    发表于 04-14 11:08

    如何配置sequence的仲裁算法和优先级及中断sequence的执行

    01 Arbitrary在UVM,多个sequence可以同时被绑定到相同的sequencer并启动。这种测试场景在实际是存在的,比如在模拟同一个总线master口上的不同类型的数
    发表于 09-23 14:35

    介绍两种交互方法来完成Sequencer和Driver的握手机制

    get_response()去等待响应item,driver也不需要set_id_info()和put()返回响应item。坏处是,如果裁掉响应部分的握手,sequence也就不知道driver什么时候完成
    发表于 09-23 14:39

    sequence item实际应用应该包含哪些东西

    UVM sequence机制提供了生成和控制事务级(transaction level)测试激励的方式,这种方式来源于工程实践,让测试用例的开发更加高效,同时也提高了测试激励的可重用性。在UV
    发表于 09-23 14:42

    UVMseq.start()和default_sequence执行顺序

      1. 问题  假如用以下两种方式启动sequence,方法1用sequence的start()方法启动seq1,方法2用UVM的default_sequence
    发表于 04-04 17:15

    浅谈UVMsequence/item见解(上)

    item指的是uvm_sequence_item, Sequence Item具备UVM核心基类所必要的数据操作方法,对于激励的生成和场景控制,是由sequence来编织的,item应
    的头像 发表于 02-19 15:52 5040次阅读
    浅谈<b class='flag-5'>UVM</b>之<b class='flag-5'>sequence</b>/item见解(上)

    UVM response_handler和get_response机制

    很多UVM用户平时更多的使用get_response()方式去获得uvm_driver的response,但get_response有些缺点
    的头像 发表于 05-23 16:56 1786次阅读
    <b class='flag-5'>UVM</b> <b class='flag-5'>response</b>_handler和get_<b class='flag-5'>response</b><b class='flag-5'>机制</b>

    UVMsequence的那些事儿

    将 生成测试case的语句 从 main_phase 独立出来,使得使用不同测试用例时,只需要修改sequence部分即可,而不用关注 UVM剩余部分。
    的头像 发表于 05-26 15:17 1067次阅读
    <b class='flag-5'>UVM</b><b class='flag-5'>中</b><b class='flag-5'>sequence</b>的那些事儿

    UVM设计sequence启动方式有哪几种呢?

    本篇介绍UVMsequence,这是UVM中最基础的部分。对于前面介绍的uvm_callback,
    的头像 发表于 08-17 10:07 4324次阅读
    <b class='flag-5'>UVM</b>设计<b class='flag-5'>中</b>的<b class='flag-5'>sequence</b>启动方式有哪几种呢?