UVM——TLM通信

TLM通信

TLM(Transaction-Level Modeling)是一种基于事务的通信方式,通常作为模块之间的通讯使用。TLM通信需要两个通信对象:initiator,target。initiator发起通信请求,target作为发起通信的响应方。而按照transaction的流向,可以将对象分为producer和consumer。producer是数据产生的地方,consumer是数据流向的地方。需要注意的是initiator不一定是producer,target不一定是consumer。
在这里插入图片描述
有了两个参与通信的对象后,用户需要将TLM通信方法在target一端中实现,以便于initiator将来作为发起方可以调用target的通信方法,实现数据传输。在发起端(initiator)的生产者(producer)可以将数据put()给目标端(target)的消费者(consumer),而目标端的生产者也可以将数据get()给发起端的消费者。

分类

TLM通信步骤分为:
- 分辨initiator和target,producer和consumer
- 在target中实现TLM通信方法
- 在两个对象中创建TLM端口
- 在更高层次中将两个对象的端口进行连接

从数据流向来看,传输方向可以分为单向(unidirection)和双向(bidirection):
- 单向传输:由initiator发起request transaction
- 双向传输:由initiator发起request transaction,传递至target;
以前面的组件为例,monitor和scoreboard,monitor是发起端,scoreboard是目标端(单向)。driver和generator,driver是发起端,从gen里get得到transaction,再put回去(双向)。

端口按照类型可以划分为三类:
- port:经常作为initiator的发起端,initiator凭借port才可以访问target的TLM通信方式
- export:作为initiator和target中间层次的端口
- imp:只能作为target接受request的末端,无法作为中间层次的端口,imp的连接无法再次延伸。

如果将传输方向和端口类型加以组合,可形成TLM端口的继承树,分为六类:
- uvm_UNDIR_port #(trans_t)
- uvm_UNDIR_export #(trans_t)
- uvm_UNDIR_imp #(trans_t, imp_parent_t)
- uvm_BIDIR_port #(req_trans_t, rsp_trans_t)
- uvm_BIDIR_export #(req_trans_t, rsp_trans_t)
- uvm_BIDIR_imp #(req_trans_t, rsp_trans_t, imp_parent_t)

端口的使用

端口不是组件类型,因此不能用type_id::create创建。
就单向端口而言,声明port和export作为request发起方,需要指定transaction类型参数,而声明imp作为request接收方,需要指定transaction类型,也要指定它所在的component类型
就双向端口而言,指定参数需要考虑双向传输的因素,将传输类型transaction拆分为request transaction和response transaction类型。
从对应连接关系得出TLM端口连接的一般做法:
- 在initiator端例化port,在中间层次例化export,在target端例化imp
- 多个port可以连接到同一个export或者imp;但是单个port或export无法连接到多个imp。这可以抽象为多个initiator可以对同一个target发起request,但是同一个initiator无法连接多个target
- port应为request起点,imp应为request终点,而中间可以穿越多个层次
- port可以连接port、export、imp;export可以连接export、imp;imp只能作为数据传输的终点,无法拓展连接
在这里插入图片描述

//实例
class request extends uvm_transaction;
	byte cmd;
	int  addr;
	int  req;
endclass

c
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值