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。

  • 相关阅读:
    为当前用户创建cron服务
    PHP程序员的简单运维
    mysql事件学习
    ubantu16.04服务器错误提示没有安装php_fileinfo扩展
    XAMPP配置vhosts多站点/绝对正确
    yii2框架获取刚插入数据库的id (原创)
    ajax详解
    Git密钥生成步骤SSH Key
    jquery禁用select和取消禁用
    a标签实现不跳转点击
  • 原文地址:https://www.cnblogs.com/htaozy/p/8051849.html
Copyright © 2011-2022 走看看