zoukankan      html  css  js  c++  java
  • uvm_do系列宏浅析

     

    uvm_do系列宏浅析

    外表篇:

    uvm_do系列宏包括:

    • `uvm_do
    • `uvm_do_pri
    • `uvm_do_with
    • `uvm_do_pri_with
    • `uvm_do_on
    • `uvm_do_on_pri
    • `uvm_do_on_with
    • `uvm_do_on_pri_with

    宏的形式记忆:

      细心的读者,从上面的排列总就能发现一个简答的规律,帮组记忆。金字塔记忆方法。

      总共8个,分两组:一组带on,一组不带on。每组都是由 pri,with的有无来组合,所以每组有四个。

    宏的参数记忆:

      其实可以从宏的形式来知道,其到底传了什么参数。并且能方便记忆参数的位置。

      首先,所有宏都有参数:“SEQ_OR_ITEM",该参数可以使sequence或者transaction。与do对应。

      其次,带有on的宏,其要传一个”SEQR“的参数,该参数是sequencer,用来指定在要将后面产生的transaction发给哪一个sequencer。与on对应。

      然后,带有pri的宏,都要给其传一个“PRIORITY"的参数,该参数是大于-1的整数,表示产生的transaction的优先级。与pri对应。

      最后,带有with的宏,都有传一个”CONSTRAINT“的参数,该参数是由{ }包括的约束,表示对SEQ_OR_ITEM的一个约束。与with对应。 

      所以,`uvm_do_on_pri_with的具体形式为:`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINT)。   

     

    内在篇:

    代码解析:

      虽然说uvm_do系列宏有八个,但是每一个宏最终的落脚点都是在`uvm_do_on_pri_with,这8个是统一的。具体源码里面怎么实现的呢?

    • 宏中没有on的,其实是`uvm_do_on_pri_with( SEQ_OR_ITEM , m_sequencer, PRIORITY, CONSTRAINT)
    • 宏中没有pri的,其实是`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, -1, CONSTRAINT)
    • 宏中没有with的,其实是`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, {}) 

      一句话总结:就是SEQR的默认参数是m_sequencer, PRIORITY的默认参数是-1, with的默认参数是{},不指明参数的将用默认参数代替。  

      下面来具体分析`uvm_do_on_pri_with。

      源码如下:

    里面有个uvm_create_on函数,其定义如下:

    这里面又调用ceate_item函数,创建一个SEQ_OR_ITEM。create_item函数是uvm_sequence_base类的一个函数,为此,这就说明了uvm_do系列宏只能在sequence类里面用

    create_item宏定义如下:

    最终调用factory.create_object_by_type来实例化SEQ_OR_ITEM。并且指定SEQ_OR_ITEM的m_sequencer(SEQR),和parent_sequence(this)。位start_item做准备。

    下面回到`uvm_do_on_pri_with中。

    SEQ_OR_ITEM被返回后,后面要先判断SEQ_OR_ITEM是SEQ还是ITEM,从而为执行不同的动作。

    1. 如果是ITEM,则start_item(SEQ_OR_ITEM, PRIORITY) , randomize, finish_item(SEQ_OR_ITEM, PRIORITY)。
    2. 如果是SEQ,则调用start(SEQR,this,PRIORITY, 0)。

    后面分两次分析start方法,以及start_item和finish_item。

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/htaozy/p/8051849.html
Copyright © 2011-2022 走看看