写在前面:TLM有1.0和2.0,本书只讲述1.0
目录
2.控制流(initiator和target)和数据流(productor和consumer)
1.除了port/export/imp之外,另外还有端口analysis_port和analysis_export有什么特点(观察者模式/广播模式)?
2.在agent中声明一个句柄但是不实例化,只指向其中已例化的comp的成员变量
3.uvm_analysis_imp_decl在comp中帮助实现多个imp
4.fifo.analysis_export本质不是export而是imp
4.1 TLM1.0
1.TLM通信解决的三个需求
1.transaction级数据在comp之间的传输
2.comp数据传输存在的阻塞和非阻塞问题
3.接收数据部件如何向发送数据部件请求数据
2.控制流(initiator和target)和数据流(productor和consumer)
在最开始的第一章,作者就提及了控制流和数据流,在TLM这章可以有具象的认识.
数据流顾名思义就是数据的流动,从productor到consumer
而控制流是命令或请求的发起与接收,从initiator到target
3.端口的分类
看似纷繁复杂的端口,理清思路即可.
以uvm_blocking_put_port为例说明其各个位置代表的意义:uvm_"是否阻塞"_"通讯方法"_"端口名".
各个元素与以下分类(排列组合可得所有结果):
是否阻塞:blocking/nonblocking
通讯方法:put/get/peek/get_peek/transport/master/slave
端口名:port/export/imp
4.2 UVM中各种端口的互连
1.建立comp间通信三部曲
1.定义端口
2.实现对应方法
3.在上层环境连接端口
2.端口与端口谁可以连接谁呢?
如下图,各个颜色的箭头代表同颜色端口可以连接的端口,相关代码见原书.
3.关于IMP需要知道的两个点
书中4.2.1末尾和4.2.2全篇基本上谈的都是IMP,初学者容易读到头晕,其实主要讲的就是IMP的两个点:
1.只有imp这个最低级的端口才可以作为,port/export/imp这三者形成的连接的重点
2.imp需要在对应的comp中例化,并且要实现port中调用的函数方法,例如put等
4.3 UVM中的通信方式
1.除了port/export/imp之外,另外还有端口analysis_port和analysis_export有什么特点(观察者模式/广播模式)?
1.analysis_*可以连接多个imp,实现一对多通信
2.相比之前三个端口的参数"uvm_"是否阻塞"_"通讯方法"_"端口名"",analysis_*不讲是否阻塞,且通讯方法只有write.
2.在agent中声明一个句柄但是不实例化,只指向其中已例化的comp的成员变量
类似方法在2.3.5中也出现过,由于agent封装mon和drv,但是两个comp需要和其他comp频繁传输data,在agent声明一个对应的句柄,可以使数据传输更加层次清晰.
3.uvm_analysis_imp_decl在comp中帮助实现多个imp
4.fifo.analysis_export本质不是export而是imp
这点很具有迷惑性,可以参考代码4-40理解记忆
5.引入fifo后的变化
1.例化imp的comp中不用实现write函数,毕竟看起来是export
2.替代上边第三点提到的"uvm_analysis_imp_decl"
6.对比fifo和imp
1.fifo本质上是个仍然使用tlm的通信管道,但是隐藏了imp
2.由于fifo是个管道,自然要与两边的comp连接,给上层环境env增添了不少代码量
3.在端口众多以端口数组的形式出现的时候,fifo要简单很多