码迷,mamicode.com
首页 > 其他好文 > 详细

tlm源码分析——interface class和port_base

时间:2017-10-19 17:41:21      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:transport   end   lis   abr   重要   list   遍历   相同   自动   

uvm官方提供的两种interface有:uvm_sqr_ifs和uvm_tlm_ifs;

两种interface都是定义了各个TLM API function的原型;都是单独的class,并没有进行extend;

uvm_tlm_if,包含两个参数化的type定义;

      put类函数,一个task,两个function:

       can_put只是返回值,并不会将trans写出去;

       技术分享

       get类函数,一个task,两个function;

       技术分享

       peek类函数,一个task,两个function;

       技术分享

       transport类函数,有两个参数,一个input,一个output;

       transport 是一个block的task,nb_transport是一个non block的function;

       技术分享

       write类函数,进行broadcast;

       技术分享

uvm_sqr_if,包含两个参数化的type定义;主要定义在driver和sequencer之间;进行item和resp的传递;

      get_next_item。block的peek函数,只有在item_done返回之后,才重新get出fifo中的值;

       技术分享

      try_next_item,只是try_peek函数,没有available的情况下,返回null;

       技术分享

      item_done,sequencer收到之后,删除其中fifo中的值;

       技术分享

      sequencer中的两个function;等待sequence item ready;

       技术分享

      纯粹tlm的function,不涉及sequencer以及driver之间的item沟通,

       技术分享

      两个item_recording的function;

       技术分享

 

virtual class uvm_port_component_base,定义function原型,从component继承过来;

       技术分享

继承类;参数化的类,uvm_port_component,其中的参数化type,为uvm_port_base类型;

      主要是为了包含一个该type类型的变量;执行变量中的其他操作;

uvm_port_base,参数化的类,type指tlm_ifs,sqr_ifs;

      内部包含一个uvm_port_component #(this_type) m_comp的变量,从而实现comp和port_base的绑定;

    内部变量,有一个m_if,主要为了实现具体的ifs的操作,

          m_imp_list,保存该port或export连接到的m_imp_list,

          m_port_type,表示该port的类型,为extend class使用, 

 

其中最重要的一个function;connect函数

      首先connect这个函数不能再elabration的phase执行;必须在build或者connect phase执行,由于build中执行先后顺序的问题

      一般放在connect phase;参数名为provider,也就是只有主动的一方才能调用;

      技术分享

      技术分享

      provider为null或this时,也会报error,接着检查m_If_mask的值是否相同,不同的port在new时,mask都是不同的;

      技术分享

      如果调用该方法的对象是imp,直接报错;imp不允许使用connect;

      技术分享

      检查relationship的级联关系,在将两个对象中的m_provided_by以及m_provided_to进行初始化;

        主要功能只是实现内部provider和provided的赋值;

      技术分享

 

check_relationship的函数,主要检查port与port的连接,且最开始是一个port;且时child的port连接parent的port;否则报warning;

      技术分享

        port连接到export和imp,必须是同一env下的不同comp之间;

      技术分享

        export连接到export或者imp,必须是parent到child的;

      技术分享

resolve_bindings函数,在end_of_elabration的phase进行自动的递归调用,实现imp和port的组装;

      uvm_root从uvm_component继承而来;重载了phase_started的function,在end_of_elaboration,自动调用

      do_resolve_bindings;

      技术分享

      uvm_component中,对child进行遍历;

      技术分享

      port_base中的实现,更新class中的imp_list哈希,如果本身是imp,里边只有自己;

        否则根据connect函数,赋值的provided_by哈希,在imp_list中添加对象;

        m_resolved,防止一个port被反复添加imp;

      技术分享

        接着判断imp的个数问题,之后更新内部的m_imp,指向第一个imp_list中的第一个;

      技术分享

m_add_list function,在provider中拿到他的imp_if;所以port,port,export之间可以级联;指向的imp都是同一个imp;

      技术分享

tlm源码分析——interface class和port_base

标签:transport   end   lis   abr   重要   list   遍历   相同   自动   

原文地址:http://www.cnblogs.com/-9-8/p/7610721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!