路科验证的个人空间 https://blog.eetop.cn/1561828 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

[彩虹糖带你入门UVM] 第2节 验证组件之Agent ——彩虹糖工厂的小车间 ...

已有 2240 次阅读| 2019-5-29 10:23 |个人分类:验证系统思想|系统分类:芯片设计| UVM

    这一篇主要会为大家介绍整个验证环境中一个小的子“环境”Agent,及构成这个小“环境”的Driver, Sequencer, Monitor等验证组件。Agent之于整个验证环境就相当于一个一个小车间之于整个工厂一样。

    上一篇短文(戳这里直达~)主要介绍了彩虹糖验证平台中的interfaceDUT。以下是上一篇短文中主要介绍的内容:

interface

interface jelly_bean_if(input bit clk);

clocking master_cb@(posedge clk);

modport master_mp(inputclk, taste, output flavor, color, sugar_free, sour);

DUT

module jelly_bean_taster(jelly_bean_if.slave_mp jb_slave_if);

 


·  正  ·  文  ·  来  ·  啦  ·



一、Sequencer

    之前提到的彩虹糖的Sequence也就是包含彩虹糖口味颜色以及数量的配方,在我们的验证环境中会首先发送给Sequencer,然后再由Sequencer将配方Sequence传送给Driver,由Driver生产出相应的彩虹糖。彩虹糖验证平台中的Sequencer直接使用的是UVM提供的uvm_sequener没有添加任何新的内容。在下面的代码中jelly_bean_transaction作为参数来创建我们的Sequencer的类型,表明我们定义的Sequencer只能收jelly_bean_transaction类型的配方。


图1. [Sequencer] jelly_bean_sequencer


二、Driver

    Driver通过内部例化的seq_item_port这样一种UVM内部通信的TLM端口,从Sequencer获取配方内容jelly_bean_transaction。然后通过虚拟的接口(virtual interface)来驱动DUT,即将彩虹糖的内容解析出来转换成interface上端口的信号值并输出给DUTvirtual interface的传递是通过一种类似于共享资源池的机制uvm_config_db来完成的。如下面的代码所示:

  • 第12-13行:使用uvm_config_db获取从TB顶层发送过来的virtual interface

  • 第22行:通过seq_item_port内置的[Taskget_next_itemSequencer处获得item

  • 第24-24行:将激励内容解析之后驱动到端口上。

图2. [uvm_driver] jelly_bean_driver

 

三、Monitor

    Driver的数据流向是从TB流向DUT,而Monitor的数据流向正好与此相反Monitor也是通过从uvm_config_db中获取virtual interface进而使得其能够监测DUT端口上的信号。Monitor会在每个时钟周期都检查接口jelly_bean_if上的信号值,当监测到我们生产出了一个无味(NO_FLAVOR)的有问题的彩虹糖时,就会立刻将此时interface上的信号值按彩虹糖配方的形式打包成jelly_bean_transaction。新创建的监测配方jelly_bean_transaction将通过另外一种TLM通信端口analysis_port经由Agent发送给客服中心的受理平台Subscriber来进行进一步的分析。如下面的代码所示:

  • 第23行:在每个时钟周期的上升沿,通过interface检测生产出来的彩虹是否是无味的。

  • 第24-28行:将采样到的信号打包成jelly_bean_transaction

  • 第16行:创建一个uvm_analysis_port用来和Agent中的相应的端口连接。

  • 第31行:将打包好的jelly_bean_transaction通过uvm_analysis_port[Task] write发送出去。


图3.[uvm_monitor] jelly_bean_monitor

 

四、Agent

    Sequencer, Driver, Monitor被封装在Agent里面,可以构成一个独立的小整体,完成DUT的驱动以及信号的监测。这些uvm_componentAgentbuild_phase中创建,在connect_phase中完成DriverSequencerTLM通信端口的连接。

  • 第18-20行:在build_phase中创建了Driver, Sequencer以及Monitor

  • 第25行:在connect_phase中完成了Driver中的seq_item_portSequencer中的seq_item_export端口的连接。

  • 第26行:完成了Monitoruvm_analysis_portAgentuvm_analysis_port的连接。


图4.[uvm_agent] jelly_bean_agent

 

五、总结 

    Sequence, Sequencer, Driver之间的数据流动


图5.Seqence, Sequencer以及Driver之间的数据传输


    在UVM环境中一个uvm_sequence_item基本上就代表了我们激励的最小单元,一个item的产生到被消耗是UVM中主要的数据流动。item的生命周期起始于Sequencebody()任务中。在Sequence中完成激励item的创建与发送。Sequencer主要完成Sequence发送过程中的仲裁,并完成与Driver的握手传输,起的是连接SequenceDriver的桥梁作用。Driver在接受到Sequencer传送过来的item之后会解析item中的内容,然后按照一定的时序将内容驱动到接口上进而驱动DUT。

    如上图所示one_jelly_bean_sequence在其[Task] body()任务中创建好一个item也就是jelly_bean_transaction。然后Sequence调用start_item()方法去向Sequencer申请仲裁并试图获取可以传输给Driver的授权。Sequnencer会查看Driver是否有需要Sequence的需求并且结合设定的仲裁模式授予某个Sequence可以通过的权限。Sequence在获得授权之后,将要发送的item进行随机化,继而调用finish_item()方法将随机好的item发送出去,然后等待Driver返回一些反馈信息。在Driver一侧,其通过与Sequencer相连接的TLM端口获取传送过来的item,完成item的驱动,最后产生一些反馈信息,重新通过TLM端口经有Sequencer返回给SequenceSequence在接受到反馈信息之后完成整个item的发送。一次完整的数据传输过程也就结束了。


彩虹糖系列文章

[彩虹糖带你入门UVM] 第0节 概述

[彩虹糖带你入门UVM] 第1节 验证组件之接口



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 253

    粉丝
  • 25

    好友
  • 33

    获赞
  • 45

    评论
  • 访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-16 15:43 , Processed in 0.016194 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部