UVM中相关概念区分

1、uvm_analysis_fifo的peek和get区别:

    peek端口和get端口类似,数据流和控制流都一样,唯一区别是: 当get任务被调用时,fifo内部缓存中会少一个transaction,而peek被调用时,fifo会把transaction复制一份发出去,内部transaction数量不会减少。

  普通的peek和get 端口差异是什么?

fifo有两种类型,一种是uvm_tlm_analysis_fifo,一种是uvm_tlm_fifo,差别是:前者有一个analysis-export的端口,并且有一个write函数,后者没有。

fifo 缓存操作: used函数:用于查询fifo缓存有多少transaction, 

                       is_empty:用于判断当前fifo是否为空;

                      is_full:用于判断当前fifo缓存是否已经满了。     内部存储大小是在new时决定的,如下:

        function new(string name,uvm_component parent=null, int size =1),size 用于设定fifo缓存上限,默认1.  size=0,表示fifo缓存设置为无限大小。

                    flush 函数:用于清空fifo缓存中的数据,一般用于复位操作。

 

2\uvm phase 执行顺序

  1)build_phase 执行顺序为:从上而下。 对于uvm树形结构,build_phase主要用于构建类的实例,如果下面的先执行,上面的后执行,即下面的先构建,上面的后构建,导致的结果就是空指针,例如agent 下有drv和mon,在agent实例化之前,不能进行drv和mon的实例化。

   2)connect_phase执行顺序: 从下而上,即先执行drv和mon的connect,再执行agent的connect_phase;

  3)对于同一层次中有兄弟关系的componet,执行顺序按照字典序,即按照new时name的字母排序。

  4)对于兄弟关系的字典序外,uvm采用深度优先的原则,来处理叔侄关系的component,例如对于兄弟i_agt和scb,按照字典序,会先执行i_agt的build_phase,然后按照深度优先原则,再执行其中的drv,mon,sequencer的build_phase,最后再执行scb的build_phase。

   那么,对于兄弟关系的component,到底是按照字典序还是深度优先原则呢? 猜测:如果兄弟节点无儿子节点,那么采用字典序,如果有儿子节点,需要先按照字典序决定执行那个父节点,再按照深度优先原则,将深度方向执行完。

3、phase 的跳转

   比较典型的例子是reset_phase,如下:

   

  一个线程一直开着来监测rst_n是否为低电平,一旦为低电平,立刻跳转到reset_phase中运行。

4、sequence  uvm_do 系列宏

 1)    `uvm_do(tr)://创建一个transaction实例, 随机化, 然后送给sequencer;

  2)uvm_do_with()  //在1)的基础上,在随机化时对某些字段进行约束

  3)uvm_do_pri(tr, priority)--指定transaction的优先级

   4)uvm_do_pri_with(tr,priority) --指定transaction的优先级

   5)uvm_do_on(tr, this.m_sequencer):显示指定在哪个sequencer发送次transaction;

    6)uvm_do_on_pri(tr, sequencer, 100);  //最后一个参数是优先级

   7)uvm_do_on_with(tr, this, {tr.size ==16;})  // 最后一个是约束

   8)uvm_do_on_pri_with(tr,this,100,{tr.size==10;})  //第三个是优先级,第四个是约束

     1)~7)宏都是通过uvm_do_on_pri_with来实现的。

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值