第四章 UVM中的TLM1.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 关键字。

第四章 UVM中的TLM1.0通信_第1张图片
FIFO上的端口

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

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

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

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

你可能感兴趣的:(第四章 UVM中的TLM1.0通信)