UVM——通信管道

本文详细介绍了UVM中的通信管道,包括TLM_FIFO、analysis port、analysis TLM FIFO以及request&response通信管道。重点讨论了它们在数据传输、缓存和多目标通信中的应用,如uvm_tlm_analysis_fifo和uvm_tlm_transport_channel的使用,以及如何通过transport()方法实现双向通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通信管道

可以通过以下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端口发出到达不同的组件ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值