数字IC验证23905--TLM通信入门

TLM通信

  • TLM是一种基于事务(transaction)的通信方式,通常在高抽象级语言例如SystemC或者SV/UVM中作为模块之间的通讯方式。
  • TLM成功地将模块内的计算和模块之间的通信从时间跨度方面剥离开了。
  • 在抽象语言建模体系中,各个模块通过一系列并行的进程实现,并通过通信和计算来模拟出正确的行为。
  • 如果要提高系统模型的仿真性能,需要考虑两个方面
    ·一个是建模自身的运算优化,另外一个是模型之间的通信优化。
    ·前者需要依靠开发者的经验还有性能分析工具来逐步优化模型。
    ·后者则可以通过将通信频率降低、内容体积增大的方式,来减少由不同进程之间同步带来的资源损耗。
    ·TLM正是从通信优化角度提出的—种抽象通信方式。
    我们可以将TLM通信步骤分为:
  • 分辨出initiator和target,producer和consumero·在target中实现TLM通信方法。
  • 在两个对象中创建TLM端口。
  • 在更高层次中将两个对象的端口进行连接。
    从数据流向来看,传输方向可以分为单向(unidirection)和双向(bidirection) 。
  • 单向传输:由initiator发起request transaction。
  • 双向传输:由initiator发起request transaction,传送至target;而target在消化了request transaction后,会发起response transaction,继而返回给initiator。

端口的按照类型可以划分为三种:

  • port:经常作为initiator的发起端,initiator凭借port才可以访问target的TLM通信方法。
  • export:作为initiator和target中间层次的端口。
  • imp:只能作为target接收request的末端,它无法作为中间层次的端口,所以imp的连接无法再次延伸

如果将传输方向和端口类型加以组合,可帮助理解TLM端口的继承树。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)
    在这里插入图片描述
  • 注意:端口不是object类型的子类,它不能用一些特殊的创建方法

端口的使用

在这里插入图片描述

  • 这地方port连接到port也是合理的
    +在这里插入图片描述

建立TLM通信的常规步骤

建立TLM通信的常规步骤:

  • 定义TLM传输中的数据类型,上面分别定义了request类和response类。
  • 分别在各个层次的component中声明和创建TLM端口对象。
  • 通过connect()函数完成端口之间的连接。
  • 在imp端口类中要实现需要提供给initiator的可调用方法。例如,在comp2中由于有一个uvm_nonblocking put_imp #(request,comp2) nbp_imp,因此需要实现两个方法try_put()和can_put();而comp4中有一个uvm_blocking get_imp #(request, comp4)bg_imp,则需要实现对应的方法get()。
  • 需要注意的是,必须在imp端口类中实现对应方法,否则端口即使连接也无法实现数据传输。对于更多imp端口类型与其对应方法,读者可以在下一节有更详细的参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值