[转]TLM通信

一、概述

  • 在芯片开发流程中,系统原型和芯片验证对项目的助推起到了关键作用。
  • 系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖于时钟周期的模型,该模型通常基于SystemC语言,而系统原型中各个模块通过TLM可以实现宽松时间范围内的数据包传输。
  • 芯片验证是在RTL模型初步建立之后,通过验证语言和方法学来构建验证平台。该平台的特点是验证环境整体基于面向对象开发,组件之间的通信基于TLM,而在driver与硬件接口之间需要将TLM抽象事务降解到基于时钟的信号级别。
  • 系统原型阶段和芯片验证阶段都使用了TLM通信方式,前者是为了更快地实现硬件原型之间的数据通信,后者是为了更快地实现验证组件之间的数据通信。仿真速度是TLM对项目进度的最大贡献,同时TLM传输中的事务又可以保证足够大的信息量和准确性。
  • TLM并不是某一种语言的产物,而是作为一种提高数据传输抽象级的标准存在的。高抽象级的数据通信,可以用来表示宽松时间跨度内的硬件通信数据,而通过将低颗粒硬件周期内的数据打包为一个大数据,非常有利于整体环境的仿真速度。
  • TLM的运用也越来越广泛,包括emulator同硬件仿真器的协同仿真框架中,也建议使用这种方式来降低混合环境之间的通信频率,以便提高整体的运算效率。

在这里插入图片描述

  • TLM是一种基于事务的通信方式,通常高抽象级语言例如SystemC或者SV/UVM中作为模块之间的通信方式。
  • TLM成功将模块内的计算模块之间的通信从时间跨度方面剥离开。在抽象语言建模体系中,各个模块通过一系列并行的进程实现,并通过通信和计算来模拟出正确的行为。
  • 如果要提高系统原型的仿真性能,需要考虑建模自身的运算优化模型之间的通信优化。前者需要依靠开发者的经验还有性能分析工具来逐步优化模型,而后者则可以通过将通信频率降低、内容体积增大的方式,来减少由不同进程之间同步带来的资源损耗。TLM正是从通信优化角度提出的一种抽象通信方式。

二、基本概念

  • TLM是一种基于事务的通信方式,通常高抽象级语言例如SystemC或者SV/UVM中作为模块之间的通信方式。
  • TLM通信需要两个通信对象,这两个对象分别称为initiator(发起方)和target(响应方)。通信发起方并不代表了Transaction的流向起点,即不一定数据是从initiator流向target,也可能是从target流向了initiator。因此按照Transaction的流向,又可以将对象分为producerconsumer,数据从哪里产生,它就属于producer,而数据流向了哪里,它就属于consumer。

initiator与target的关系同producer与consumer的关系不是固定的,有了两个参数通信的对象之后,需要将TLM通信方法在target一端中实现,以便于initiator将来作为发起方可以调用target的通信方法,实现数据传输。在target实现了必要的通信方法之后,还需要将两个对象进行连接,这需要在两个对象中创建TLM端口,继而在更高层次中将这两个对象进行连接。

在这里插入图片描述

三、分类

可以将TLM通信步骤分为:

  • 分辨出initiator和target,producer和consumer。
  • 在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,imp_parent_t)

在这里插入图片描述

四、端口的使用

在这里插入图片描述

  • 单向端口而言,声明portexport作为request发起方,需要指定transaction类型参数,而声明imp作为request接收方,不但需要指定transaction类型,也需要指定它所在的component类型。
  • 就声明双向端口而言,指定参数需要考虑双向传输的因素,将传输类型transaction拆分为request transaction类型和response transaction类型。

从对应连接关系得出TLM端口连接的一般做法:

  • 在initiator端例化port,在中间层次例化export,在target端例化imp。
  • 多个port可以连接到同一个export或者imp,但是单个port或者export无法连接多个imp。
  • port应为request起点,imp应为request终点,而中间可以穿越多个层次。基于单元组件的自闭性考虑,在穿越的中间层次声明export,继而通过层次连接实现数据通路。
  • port可以连接port、export或者imp,export可以连接export或者imp,imp只能作为数据传送的终点,无法扩展连接。

代码实现

class request extends uvm_transaction;byte cmd;int addr;int req;
endclassclass response extends uvm_transaction;byte cmd;int addr;int rsp;int status;
endclassclass comp1 extends uvm_agent;uvm_blocking_get_port #(request) bg_port;`uvm_component_utils(comp1)...
endclassclass comp2 extends uvm_agent;uvm_blocking_get_port #(request) bg_port;uvm_noblocking_put_imp #(request, comp2) nbp_imp;`uvm_component_utils(comp2)...function bit try_put(request req);function bit can_put();
endclassclass comp3 extends uvm_agent;uvm_blocking_transport_port #(request, response) bt_port;`uvm_component_utils(comp3)...
endclassclass comp4 extends uvm_agent;uvm_blocking_get_imp #(request, comp4) bg_imp;uvm_noblocking_put_port #(request) nbp_port;`uvm_component_utils(comp4)...task get(output request req);
endclassclass comp5 extends uvm_agent;uvm_blocking_transport_imp #(request ,response, comp5) bt_imp;`uvm_component_utils(comp5)...task transport(request req, output response rsp);
endclassclass agent1 extends uvm_agent;uvm_blocking_get_port #(request) bg_port;uvm_noblocking_put_export #(request) nbp_exp;uvm_blocking_transport_port #(request, response) bt_port;comp1 c1;comp2 c2;comp3 c3;`uvm_component_utils(agent1)...function void build_phase(uvm_phase phase);super.build_phase(phase);c1 = comp1::type_id::create("c1", this);c2 = comp2::type_id::create("c2", this);c3 = comp3::type_id::create("c3", this);endfunctionfunction void connect_phase(uvm_phase phase);super.connect_phase(phase);c1.bg_port.connect(this.bg_port);		//connect左侧可以是initiator、export	,右侧是target	c2.bg_port.connect(this.bg_port);this.nbp_exp.connect(c2.nbp_imp);		//连接方向从agent的export到c2的importc3.bt_port.connect(this.bt_port);endfunctionclass env1 extends uvm_env;agent1 a1;comp4 c4;comp5 c5;`uvm_component_utils(env1)...function void build_phase(uvm_phase phase);super.build_phase(phase);a1 = agent1::type_id::create("a1", this);c4 = comp4::type_id::create("c4", this);c5 = comp5::type_id::create("c5", this);endfunctionfunction void connect_phase(uvm_phase phase);super.connect_phase(phase);a1.bg_port.connect(c4.bg_imp);c4.nbp_port.connect(a1.nbp_exp);a1.bt_port.connect(c5.bt_imp);endfunction
endclass

从代码可以得出建立TLM通信的常规步骤:

  • 定义TLM传输中的数据类型,上面分别定义了request类和response类。
  • 分别在各个层次的component中声明和创建TLM端口对象。
  • 通过connect()函数完成端口之间的连接。
  • imp端口类中要实现需要提供给initiator的可调用方法,例如在comp2中由于有一个uvm_noblocking_put_imp #(request, comp2) nbp_imp,因此需要实现两个方法try_put()can_put(),而comp4中有一个uvm_blocking_get_imp #(request, comp4) bg_imp,则需要实现对应的方法get()
  • 需要注意的是,必须在imp端口类中实现对应方法,否则端口即使连接也无法实现数据传输。

---------------------
作者:煎丶包
来源:CSDN
原文:https://blog.csdn.net/qq_39794062/article/details/114172372
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383366.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

TLM通信(transaction level modle)

一、概述 在芯片开发流程中,系统原型和芯片验证对项目的助推起到了关键作用。系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖于时钟周期的模型&#xff…

TLM通信

一、概述 在芯片开发流程中,系统原型和芯片验证对项目的助推起到了关键作用。系统原型一般是通过硬件功能描述文档来模拟硬件行为,而行为要求不同于RTL模型。系统原型可以提供一个准确到硬件比特级别、按照地址段访问、不依赖于时钟周期的模型&#xff…

Typora如何把图片上传到图床smms.app

Typora 下载地址:百度云 官方下载 PicGo 下载地址:百度云 官方下载 免费图床 smms.app 访问地址:https://smms.app/ 用Typora平时做笔记挺好用,但是插入图片后,在公司保存好的md文件拿到家里的电脑打开的时候&a…

HM和VTM的下载与安装

一、HM安装及使用 1.下载HM 需要手动cmake: jvet / HM GitLab (fraunhofer.de) (建议)直接下载包含解决方案的代码(用SVN下载) svn_HEVCSoftware - Revision 4998: /tags (fraunhofer.de) SVN下载界面如下图&…

【雕爷学编程】Arduino动手做(09)---火焰传感器模块3

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

mybatis-plus逻辑删除的坑

一旦在逻辑字段上加了TableLogic逻辑删除的配置,并且使用mybatis-plus自带的方法时(如果自己用xml写SQL不会出现下面的情况) 查询、修改时会自动排除逻辑删除的数据 当使用mybatis-plus自带的查询方法时,就不用每次查询的时候跟…

在Linux,误删磁盘分区怎么恢复呢【转】

在我们运维工作中,频繁的操作,可能命令写入错误,造成磁盘分区的删除,那么应该怎么办呢?怎么恢复磁盘分区呢? 一不小心删除了磁盘分区。如下图,删除了sda磁盘的第一个分区,为系统boot…

一、磁盘数据恢复实验报告

目录 “磁盘数据恢复”实验报告 一、【实验目的】 二、【实验设备】 三、【实验要求】 四、【实验步骤】 1.先创建虚拟磁盘 2.破坏磁盘数据文件。 3.进行恢复。 五、【实验总结】 “磁盘数据恢复”实验报告 一、【实验目的】 学习运用winhex的使用方法,掌…

服务器Raid5磁盘阵列数据恢复步骤和数据恢复方法

[磁盘阵列数据恢复故障描述] 客户的一台HP DL380 G4服务器,服务器使用hp smart array控制器挂载了一台国产磁盘阵列,磁盘阵列由14块146G SCSI硬盘组成一组RAID5。操作系统为LINUX,构建了NFSFTP,作为公司内部文件服务器使用。 由…

FIO入门到删盘 -- 恢复磁盘数据

FIO命令一般用于测裸盘的IO速度,有数据的硬盘不能用!!! 一、背景 由于任务需要测试硬盘的IO随机读取和写入速度,因此上网找到了FIO命令,搜出来都是怎么用这个命令去测试硬盘,而并没有人强调这个…

虚拟机占用磁盘的恢复方式。

VMware虚拟机安装LINUX系统分盘后, 如果使用物理磁盘分盘会出现ext格式。 当移除虚拟机时,磁盘不会恢复,Windows系统不会识别此格式,分完的磁盘不能使用。 此图片是恢复后的,类似红框内的状态,鼠标右击磁盘…

恢复磁盘I:时出错,在此驱动器上找不到恢复密钥。无法解锁此驱动器。

BitLocker 概述 BitLocker 驱动器加密是一项数据保护功能,它与操作系统集成,用于解决来自丢失、被盗或销毁不当的计算机的数据被盗或泄露的威胁。 工具/软件/环境 Bitlocker加密程序(windows自带) 要恢复数据的故障介质 windows7(及以上)系统 加密时…

恢复磁盘原始空间大小

前情提要:使用树莓派烧录系统镜像文件时,不小心烧录错地方了,烧进了我的移动硬盘。 通常磁盘损坏恢复的都是数据,但是今天我遇到的问题是磁盘的空间大小由1T变成了43M,而且可见部分只有43M,格式化也不行。…

[ubuntu]创建root权限的用户 该用户登录后自动切换为root用户

一、创建新用户 1、创建新用户 sudo useradd -r -m -s /bin/bash 用户名 # -r:建立系统账号 -m:自动建立用户的登入目录 -s:指定用户登入后所使用的shell2、手动为用户设置密码 passwd 用户名 二、为用户增加root权限 1、添加写权限 ch…

关于file zilla连接服务器超时和无法列出目录的解决办法

这几天做项目,可是工作室的服务器一直连接不上,最开始是无法列出目录,找了好久找不到原因;以为是客户端的问题。又升级了file zilla,结果竟然更严重了,连接超时,连不上服务器了。 把它放了几天,…

File zilla远程连接服务器报错:服务器发回了不可路由的地址,使用服务器地址代替...

百度的答案都是:更改Filezilla设置,编辑-设置-连接-FTP-被动模式,将“使用服务器的外部ip地址来代替”改为“回到主动模式”即可。但问题没有解决!!! 由于使用的是阿里云的服务器。安全组里面默认的端口都是…

FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”

FTP的主动模式(PORT Mode)及被动模式(Passive Mode) FTP的特殊性: 大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连…

扫盲:-zilla的来源

如果你上过网,你应该知道mozilla。代表作为mozilla firefox。如果你开发过比较大的系统,应该知道bugzilla 诸如此类,很多软件以zilla结尾。你知道这个东东是哪里来的吗? 其实这是起源于电影。1954年,日本第一部哥斯拉&…

在Windows服务器的命令窗口中用ftp方式与使用了File Zilla Sever软件共享了文件的另一个Windows服务器进行文件传输

知识点: 1、 File Zilla Sever软件 2、 ftp 3、 Windows窗口常用命令 步骤: 1、在在对方window服务器中使用File Zilla Sever软件共享一个文件 注意: 一、两个windows服务器必须处于同一个局域网内 二、对方服务器的防火墙必须全部关闭 …

手机端通过Es文件浏览器访问windows服务器用File Zilla Sever软件 分享的文件

知识点: 1、 Es文件浏览器 2、 File Zilla Sever软件 注意: 1、 手机端和windows服务器必须处于同一个局域网内 2、 服务器的防火墙必须全部关闭 步骤: 1、在window服务器中使用File Zilla Sever软件共享一个文件 (1&…