1、UVM_TLM 1.0
TLM通信中的术语:
1、put操作:发起者发送数据至目标。
2、get操作:发起者从目标获取数据。
3、transport操作:一次put操作 + 一次get操作,A向B发起一个req,B返回给A应答rsp。
4、peek操作:发起者从目标获取数据(同get一样)。但是目标中的数据还存在(与get的区别)。
5、port、export:发起者的端口为port,目标的端口为export,port/export体现的是控制流。
2、port与export:
1、port、export、transport的类型:
有blocking和nonblocking之分;
有put、get、peek之分;
blocking:用于阻塞端口,在事件等待的情况下用。
nonblocking:用于非阻塞端口,数据传输。
2、port、export、imp连接及使用:
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
总结:port-export-imp的使用时,端口类型固定,端口数目为1对1.
3、analysis_port的使用:
analysis_port(analysis_export)可以连接多个analysis_imp,以广播的形式。
总结:analysis_port一般用在数据包分发到不同的component的情况,如driver中通过ap的方式把pkt发送至ref_model,和scb。
4、tlm_fifo的使用:
uvm_tlm_fifo是uvm_component类型的,它里面内置了多个端口。
在agent和scoreboard之间添加一个uvm_analysis_fifo。FIFO的本质是一块缓存加两个IMP。在monitor与FIFO的连接关系中,monitor中依然是analysis_port,FIFO中是uvm_analysis_imp,数据流和控制流的方向相同。在scoreboard与FIFO的连接关系中,scoreboard中使用blocking_get_port端口,FIFO中使用的是一个get端口的IMP 。使用fifo的好处是可以通过for循环进行多个端口的连接。使用fifo的多个端口通信例子如下:
---------------------------------------------------------------------------------------------------------------
//uvm_blocking_get_port就是图b 中scoreboard的get_port端。
---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
// 高亮第一部分为mdl通过fifo将16个exp_port采集的ref_model参考数据连接到scb的代码;
// 高亮第二部分为o_agt通过fifo将act_port采集的dut输出数据连接到scb的代码;
//注意FIFO中的analysis_export和blocking_get_export虽然名字中有关键字export,但是其类型却是IMP 。
---------------------------------------------------------------------------------------------------------------