标签:get 端口 就够 imp uvm put analysis 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。
标签:get,端口,就够,imp,uvm,put,analysis,TLM 来源: https://blog.csdn.net/sodaic/article/details/106604268
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。