TLM中常见操作
以下都以A为“发起者”,B为“接收方”阐述
1.put
A将Transaction发送给B
2.get
A向B索取一个Transaction
3.transport
A先向B发送一个Transaction,再向B索取一个Transaction
put、get和transport都有阻塞和非阻塞之分。
UVM中的端口
注意是UVM中的端口,实际上在TLM中没有定义IMP
1.port
通信发起方具有的端口称为port
2.export
通信的接收方具有端口称为export
3.imp
与port和export进行通信的被动承担者
IMP定义时的两个参数(T,IMP)
前者指的传输的数据类型,后者指的是实现这个接口的一个component
详解:A.A_port.put(T)实际上调用的是B.B_export.put(T),而B.B_export.put(T)调用的是B.B_imp.put(T),所以实现接口的操作最终需要B这个component中写入的put实现。
三种端口的优先级顺序:port>export>import,只有优先级高的端口才能主动连接到优先级低的,但是只有IMP才能作为连接关系的终点。
UVM中的通信方式
1.analysis端口
UVM中有两个特殊的端口,analysis_port和analysis_export。
与常见端口的区别:
1.一个analysis_port(analysis_export)可以连接多个IMP,类似于广播;
2.analysis_port和analysis_export没有阻塞和非阻塞之分;
3.对于put系列端口,有put、try_put、can_put等操作,对于广播只有write操作。
2.uvm_analysis_imp_decl
同一个component中有多个analysis_imp时,避免其write函数重名。
使用宏定义声明后缀
3.fifo通信
fifo的本质是一块缓存加两个imp
FIFO中有两个IMP,但关键字命名为export,是为了掩饰在TLM中不存在的IMP
1.分类
uvm_tlm_analysis_fifo
uvm_tlm_fifo
前者有一个analysis_export和自带write函数,后者没有。
2.put_ap和get_ap
除了12个IMP(tlm_fifo)之外,fifo中还有2个port。
当put_export连接到一个put_port时,会自动调用fifo内的put将Transaction传递到fifo缓存并通过put_ap使用write函数发送出去。