uvm基础(2)TLM通信,看这一篇就够了

tlm通信概述

  • tlm通信的步骤:1.分辨出initiator和target,producer和consumer。
    2.在target中实现tlm通信方法。
    3.在俩个对象中创建tlm端口。
    4.在更高层次中将俩个对象进行连接。

-端口类型有三种:1.port,一般是initiator的发起端。
2.export,作为initiator和target的中间端口。
3.imp,只能作为target接受request的末端。
4.多个port可以连接同一个export或imp,但是单个port或export不能连接多个imp。

  • 端口的连接:通过connect函数进行连接,例如A(initiator)Y与B进行连接,可以使用A.port.connect(B.export)
  • uvm_*_imp#(T,IMP);IMP定义中第一个参数T是这个IMP传输的数据类型,第二个参数IMP是实现这个接口所在的component。

uvm的多向通信

  • uvm的analysis端口有俩种:analysis_port和analysis_export,他们与put,get系列端口类似。他们的主要区别是:1.默认情况下,analysis_port与imp之间的通信是一对多的通信。相当于广播的模式。而put,get与imp的通信是一对一的。
    2.put和get有阻塞和非阻塞之分,而analysis没有阻塞和非阻塞的概念。
    3.对于put系列的端口,有try_put,can_put等操作,get系列的端口也有try_get,can_get等操作,而analysis只有一种操作:write。

-当需要接受俩种及以上的数据,实现不用的imp端口时,uvm采用宏uvm_analysis_imp_decl来声明。例如:sb接收monitor和model的数据,可以使用下面的方法:uvm_analysis_imp_decl(_monitor);
`uvm_analysis_imp_decl(_model);
通过宏声明这俩个后缀之后,uvm会自动根据他来定义俩个新的imp类,并分别例化他们。

  • 此外,我们还可以使用tlm fifo 才实现这个功能。FIFO的本质就是一块缓存加上俩个IMP。
  • uvm_tlm_fifo包含多个tlm端口,常用的端口如下:put_export:可以通过这个端口调用put,try_put,can_put;
  •                                                                            ***put_ap:调用put方法写入数据的同时,也通过该端口的write函数送出。***
    
  •                                                                            get_peek_export:调用get,try_get,peek,try_peek等
    
  •                                                                              ***get_ap:调用get ,peek方法写入数据的同时,也通过该端口的write函数送出***
    

uvm_tlm_analysis_fifo提拱了uvm_analysis_port端口,uvm_analysis_imp端口和write函数。不需要自己实现write函数。需要注意的是这些export类型本质上都是imp

上一篇:Verdi UVM Debug Mode 简单使用


下一篇:基于UVM的UART验证环境