第四章 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 关键字。

FIFO上的端口

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容