UVM——sequence机制(五)

本文详细介绍了UVM中的sequence机制,包括sequence的执行流程、sequence与item、Sequence和Driver的关系。sequence负责控制和产生激励,通过sequencer传递给driver。sequence item作为数据桥梁,由sequence产生并通过sequencer到达driver,driver再将数据解析并写入DUT。此外,还讨论了sequence item的生命周期、sequence的分类以及driver与sequence间的通信方式,如get、put和response机制。
摘要由CSDN通过智能技术生成

一、sequence的执行流程

控制和产生一系列的激励,并通过sequencer将激励发送给driver的机制。如果按照交通道路的车流来打比方,sequence就是道路,sequence item是道路上行驶的货车,sequencer是目的地的关卡,而driver便是最终目的地卸货的地方。从软件实施的层面来讲,这里的货车是从sequence一端出发的,再经过了sequencer,最终抵达了driver,经过driver的卸货,每一辆的货车也就完成了它的使命。而driver对每一件到站的货物,经过它的扫面处理,将它分解为更小的信息量,提供给DUT。

在这里插入图片描述

Sequence是一个产生和发送数据的过程,会消耗仿真时间。只有在task_phase中才会启动。 sequence item是每一次driver与DUT互动的最小粒度内容,在sequence与driver之间起到桥梁作用的是sequencer,sequencer与driver均是component组件,sequence item和sequence是基于uvm_object,可以在任何阶段建立。uvm_object独立于build阶段之外。且基类具备核心方法,copy(),clone(),compare()等。

  • uvm_sequence_item包装数据):只能对数据进行封装,不存在自动执行的函数;
  • uvm_sequence生产数据):具有可自动执行的函数,可通过body()函数进行可执行操作,产生数据激励;
  • uvm_sequencer发送数据):将数据发送给driver

在这里插入图片描述

  1. sequence对象自身会产生目标数量的sequence item对象。借助于SV的随机化和sequence item对随机化的支持,使得产生的每个sequence item对象中的数据内容都不相同。
  2. 产生的sequence item会经过sequencer再流向driver
  3. driver得到了每一个sequence item,经过数据解析,再将数据按照与DUT的物理接口协议写入到接口上,对DUT形成有效激励
  4. 必要时,driver在每解析并且消化完一个sequence item,也会将最后的状态信息同sequence item对象本身再度返回给sequencer,最终抵达sequence对象一侧。这么做的目的在于,有的时候sequence需要得知driver与DUT互动的状态,这就需要driver仍然有一个回路再将处理了的sequence item对象和状态信息写回到sequence一侧。

在这里插入图片描述
1、Sequencer: 当sequencer启动时,首先会检查自身的default_sequence是否配置,如果配置了就会创建实体,设置该sequence的starting_phase并随机化该sequence。最后调用sequence的start()函数启动该sequence。
2、Sequence:当sequence的start的函数启动,sequence会执行body方法,产生事物,并将事物发送给sequencer放入FIFO中储存。Sequence会等待一个driver的完成响应,得到之后会退出该次事物的产生。
3、Driver:首先向sequencer发送一个事物请求,然后等待事物,sequencer会将产生好的事物发送给driver,driver在处理完该事物后,返回一个完成响应。

二、sequence和item

看下面一个完整的sequence item例子(我们注意到sequence item不需要使用宏在工厂中注册):

class mem_seq_item extends uvm_sequence_item;//sequence item不需要在factory中注册
  //Control Information
  rand bit [3:0] addr;
  rand bit       wr_en;
  rand bit       rd_en;
   
  //Payload Information
  rand bit [7:0] wdata;
   
  //Analysis Information
       bit [7:0] rdata;
     
  //Utility and Field macros,
  `uvm_object_utils_begin(mem_seq_item)//这也是一种注册宏
    `uvm_field_int(addr,UVM_ALL_ON)
    `uvm_field_int(wr_en,UVM_ALL_ON)
    `uvm_field_int(rd_en,UVM_ALL_ON)
    `uvm_field_int(wdata,UVM_ALL_ON)
  `uvm_object_utils_end
   
  //Constructor
  function new(string name = "mem_seq_item");
    super.new(name);
  endfunction
   
  //constaint, t
  • 12
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值