通信管道
可以通过以下TLM组件和端口实现端对端的数据传输:
- TLM FIFO
- analysis port
- analysis TLM FIFO
- request&response 通信管道
TLM_FIFO
在一般TLM传输过程中,无论是initiator给target发起一个transaction,还是initiator从target获取一个transaction,transaction最终都会流向consumer中(initiator和target都可以是consumer)。consumer在没有分析transaction时,我们希望将该对象先存储到本地FIFO中供稍后使用。
用户需要分别在两个组件中例化端口,同时在target中实现相应的传输方法。多数情况下,需要实现的传输方法都是类似的,方法的主要内容即是为了实现一个数据缓存功能。
TLM FIFO uvm_tlm_fifo类是一个新组件,它继承于uvm_component类,而且已经预先内置了多个端口以及实现了多个对应方法供用户使用。
uvm_tlm_fifo的功能类似于mailbox,不同的地方在于uvm_tlm_fifo提供了各种端口供用户使用,推荐在initiator端例化put_port或者get_peek_port,来匹配uvm_tlm_fifo的端口类型。此外,uvm_tlm_fifo还提供put、get以及peek对应的端口:
uvm_put_imp #(T,this_type) blocking_put_export
uvm_put_imp #(T,this_type) nonblocking_put_export
uvm_get_peek_imp #(T,this_type) blocking_get_export
uvm_get_peek_imp #(T,this_type) nonblocking_get_export
uvm_get_peek_imp #(T,this_type) get_export
uvm_get_peek_imp #(T,this_type) blocking_peek_export
uvm_get_peek_imp #(T,this_type) nonblocking_peek_export
uvm_get_peek_imp #(T,this_type) peek_export
uvm_get_peek_imp #(T,this_type) blocking_get_peek_export
uvm_get_peek_imp #(T,this_type) nonblocking_get_peek_export
Analysis port
除了端对端的传输,在一些情况下还有多个组件对同一个数据进行运算处理。如果这个数据是从同一个源的TLM端口发出到达不同的组件ÿ