美文网首页UVM实战(张强)
第四章 UVM中的TLM1.0通信

第四章 UVM中的TLM1.0通信

作者: Shankssss | 来源:发表于2020-03-11 15:36 被阅读0次

    (1)PORT 和 EXPORT 体现的是一种控制流,在这种控制流中,PORT 具有高优先级,而EXPORT 具有低优先级,只有高优先级的端口才能向低优先级的端口发起三种操作:put, get, transport。

    (2)在UVM中,只有 IMP 才能作为连接关系的终点。如果是 PORT 或者 EXPORT 作为终点, 则会报错。

    (3)UVM还有两种特殊的端口:analysis_port 和 analysis_export。

                    (a) 默认情况下,一个analysis_port (analysis_export) 可以连接多个IMP。

                    (b) put和get系列端口都有阻塞和非阻塞的区分,但是analysis_port和analysis_export没有阻塞和非阻塞的概念,因为它本身就是广播,不必等待与其相连的其他端口的相应,所以不存在阻塞和非阻塞。

                    (c) 一个analysis_port相连的IMP的类型必须是uvm_analysis_imp,否则会报错。

                    (d) 对于analysis_port和analysis_export来说,只有一种操作:write。

    (4)宏 uvm_analysis_imp_decl 用来解决一个component内有多个IMP的问题:

                    `uvm_analysis_imp_decl(_monitor)

                    `uvm_analysis_imp_decl(_model)

    (5)使用FIFO通信

                    uvm_tlm_analysis_fifo #(my_transaction) agt_mdl_fifo;

                    i_agt.ap.connect(agt_mdl_fifo.analysis_export);

                    mdl.port.connect(agt_mdl_fifo.blocking_get_export);

                    FIFO中有两个 IMP 和一块缓存。FIFO中的 analysis_export 和 blocking_get_export 虽然名字中有关键字 export,但是其类型却是 IMP。UVM为了掩饰 IMP 的存在,在它们的命名中加入了 export 关键字。

    FIFO上的端口

                    上图所有以圆圈表示的EXPORT本质上都是IMP。

                    used 函数用于查询FIFO缓存中有多少transaction。

                    is_empty 函数用于判断当前FIFO缓存是否为空。与is_empty对应的是is_full。

                    flush 函数用于清空FIFO缓存中的所有数据。

    相关文章

      网友评论

        本文标题:第四章 UVM中的TLM1.0通信

        本文链接:https://www.haomeiwen.com/subject/gyjcjhtx.html