Table of Contents

1.TLM简介

2.UVM TLM基本概念

2.1 TLM 通信常用的的三种传输:Put/Get/Transport

2.2 TLM 通信中的三种端口:Port,Export,IMP

2.3  Put/Get/Transport等动作的实现

2.4 跨层次连接

3. 所有常用的一对一Port类型的总结

4. Analysis端口(一对多连接)

5. TLM FIFO

5.1两种TLM FIFO:

5.2TLM FIFO自带的方法



1.TLM简介

TLM:Transaction Level Modeling(事务级建模),它是一个独立于语言的一个标准,常用于系统建模,加速软硬件协同开发。在芯片开发中,常配合system C使用来进行系统设计。最新的标准是OCSI TLM 2.0。

2.UVM TLM基本概念

2.1 TLM 通信常用的的三种传输:Put/Get/Transport

  1. Put 操作

Port A是put动作发起者,Export B是动作接收者,数据流A->B. 实现A主动向B发送数据。

2.Get 操做

Port A是get动作发起者,Export B是动作接收者,数据流B->A. 实现A主动向B索取数据。

3.Transport 操做

Port A是transport动作发起者,Export B是动作接收者。transprot操作相当于一次put加一次get。A先发起put操作,相当于提交一个request,数据从A->B, 后通过get返回response,数据从B->A.

在示意图上常常用方框表示Port,圆圈表示Export。

其他TLM操作还有peek,get_peek两种,但实际应用较少。

2.2 TLM 通信中的三种端口:Port,Export,IMP

1. 控制流优先级:Port > Export > IMP

2. Port 始终是传输动作的发起者,Export和IMP只能作为动作的接受者。

3. 使用connect()建立连接关系时,只有优先级高的才能调用connect()做连接。

4. 三种端口均是uvm_component的子类,但应该使用new()函数在build_phase中创建。(注意:不能用create创建,端口  不属于UVM树的一部分)。

5. 在有Port,Export,IMP连接的data path中,只有且必须以IMP作为终点。

6. Port,Export相当于一道门,没用存储作用,因而必须以IMP(tlm implement port class)作为终点。

7. IMP 在声明时相较于Port/Export多了一个类型参数'IMP'

uvm_nonblocking_put_export#(T)

uvm_blocking_put_imp#(T, IMP); // 第一个参数T是这个IMP传输的数据类型。 第二个参数IMP为包含该IMP的component类型。

例如:

class B extends uvm_component;...uvm_blocking_put_export#(my_transaction) B_export;uvm_blocking_put_imp#(my_transaction, B) B_imp;...
endclass

2.3  Put/Get/Transport等动作的实现

发起者的动作实现,最终会落到终点IMP所在的component中,因此必须在IMP所在的component中定义名字为put/get/transport的函数或任务,完成最终的数据传输操作。在blocking的端口,可以将put/get/transport定义为function或task;而noblocking的端口,则只允许定义成function。

下面这个例子,路径是 A.port-->B.export-->B.imp, 当A.port调用put()时,这个任务会调用B.export的put(),B.export的put()又会调用B.imp的put(),而B.imp的put()最终会调用B.put(). 因此用户必须在B中定义put() 函数/任务。

2.4 跨层次连接

在复杂的UVM TB中常用到port跨多级component连接的情形,在一个path中,始终只会有一个imp作为连接的结尾。

在多层次连接中,connect要按控制流逐层进行连接。

3. 所有常用的一对一Port类型的总结

以上这些port默认都是一对一连接,除非在实例化时改变默认的连接数量设置参数,如使用new()创建时改变参数min/max_size的值

function new (string name,uvm_component parent,int min_size=1,int max_size=1)

4. Analysis端口(一对多连接)

  • analysis_port/export和analysis_imp的通信是一对多的通信,类似广播的形式。
  • analysis端口没有blocking/unblocking的概念,因为他管广播内容,不管接受的收到与否。
  • 只有一个操作:write()
  • analysis端口连接也必须以analysis_imp结尾。
  • 一个component中有多个analysis_imp时,因为需要实现多个同名但内容不同的write函数时,该怎么办?UVM定义了`uvm_analysis_imp_decl(xxx) 宏来处理这种复杂情况。

5. TLM FIFO

TLM FIFO相当于一个缓存两端加上IMP,input和output两端都能连接Port,所以两侧和它连接的component都能主动发送或索取数据。

5.1两种TLM FIFO:

  • uvm_tlm_fifo: 包含analysis 端口以外的多有端口,不支持write操作。
  • uvm_tlm_analysis_fifo: 含有下图中的所有端口,支持write操作。

  • peek()区别于get()的地方是,peek()不会使FIFO缓存里的transaction个数减少。
  • 连个特殊的analysis port:put_ap和get_ap, 有向第三方转发的作用.

  put_ap:即当往fifo的buffer写入一笔transaction,这个transaction同时会通过put_ap写到第三方component中.

        get_ap:即从fifo的buffer读出一笔transaction,这个transaction自然会发从fifo get export连接的component,但同时会通过put_ap写到第三方component中.

       就像fifo分了个叉,从这个叉上可以把fifo正在put/get的内容发给第三方,从而可以窥探fifo内部正在处理的transaction。

  • FIFO中的许多export虽然表面的名字是export,但实际的类型是IMP,UVM掩饰类IMP的存在。
  • FIFO的好处是不用手动再写write(),put(),get()这些component中要声明的同名函数。

5.2TLM FIFO自带的方法

used:查询fifo里存了多少transaction

is_empty: 判断当前fifo是否为空

is_full: 判断当前fifo是否满了

flush:清空fifo中缓存的数据,复位时可以用

TLM FIFO默认的深度是1,如果需要更改,可以在new()是更改参数size的值,如需要无限大小,就将传入的size参数设为0。

new函数原型为:

function new(string name, uvm_component parent=null, int size=1);


参考
UVM实战(卷1) (张强 著)

UVM学习笔记--TLM通信相关推荐

  1. 树莓派4B学习笔记——IO通信篇(UART)

    文章目录 UART简介 树莓派使用UART与串口屏通信 串口屏简介 硬件连接 配置串口接口 树莓派打开UART接口 树莓派安装串口调试助手 编程实现 wiringSerial.h Serial简介 C ...

  2. LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程

    LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程 一.SAL套接字抽象层 二.Socket套接字简介 Socket概述 Socket结构体 字节序转换函数 ip地址的转换 字节 ...

  3. UVM中的TLM通信

    UVM中的TLM通信 1.TLM简介 TLM:Transaction Level Modeling(事务级建模),它是一个独立于语言的一个标准,常用于系统建模,加速软硬件协同开发.在芯片开发中,常配合 ...

  4. UVM学习笔记—前门访问/后门访问

    目录 0.前言 1.前门访问 2.后门访问 2.1路径设置 2.2操作类型 0.前言 在UVM学习笔记-寄存器模型的搭建及使用中提到过前门访问和后门访问的概念,这篇文章将会详细的阐述一下这2种访问方式 ...

  5. LiteOS学习笔记-4通信模组之AT框架

    LiteOS学习笔记-4通信模组之AT框架 一.AT客户端简介 什么是AT客户端 AT客户端框架作用 二.串口驱动框架实现 2.1串口初始化 2.2读写缓冲区ring_buffer 2.3读写实现与注 ...

  6. uvm学习笔记----适合新手快速学习

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofH8i8OK-1635320932444)(C:\Users\lenovo\AppData\Roaming\Typor ...

  7. TCP IP学习笔记① 互联网通信过程

    文章目录 一.TCP/IP和OSI模型 二.协议分层 2.1 物理层 2.2 数据链路层 2.2.1 以太网协议 2.2.2 MAC地址 2.2.4 广播 2.3 网际层 2.3.1 IP地址     ...

  8. UVM学习笔记—快速入门篇

    UVM指的是验证方法学,是学习数字验证的入门课程.它是至关重要的,有不少人往IC验证方向发展的,多多少少都会去了解UVM.但UVM并不是简单的翻个书就可以学会的,还是要掌握学习方法或者跟着老师学习的. ...

  9. STM8学习笔记---串口通信中如何自己定义通信协议

    在单片机刚开始学习的时候,串口通信是经常要用到的,但是实际产品中串口通信是需要通信协议的.好多人不明白为什么要用通信协议,如何定义通信协议,带通信协议的程序要怎么写.今天就来说一下如何串口通信协议是如 ...

最新文章

  1. vanpopup 高度_解决VantUI popup 弹窗不弹出或无蒙层的问题
  2. 【 C 】队列 简记
  3. SAP 请求号单个传输方法
  4. markdown学习记录
  5. 七、有机硅柔软剂在不同发展阶段分子结构特征及主要解决的问题?
  6. go conn 读取byte数组后是否要_【技术推荐】正向角度看Go逆向
  7. 使用Elizabeth为您的应用程序生成随机数据
  8. 使用nosetests对webpy程序做单元测试
  9. 计算机程序CP电子文献,电子文献标识
  10. C# 利用ICSharpCode.SharpZipLib.dll 实现压缩和解压缩文件
  11. Maven仓库—Nexus环境搭建及使用
  12. Linux开机自动挂载Windows分区的两种方法
  13. 魔方机器人机械部分_通过强化学习解决第2部分的魔方
  14. 2021-7-19-OpenStack基础知识学习
  15. 解读:基于订单流、技术分析与神经网络的期货短期走势预测模型
  16. dpdk中文-dpdk简单介绍
  17. C和C++中的register变量和volatile变量理解
  18. 两个构件的重合点_两构件形成移动副,则两构件重合点的相对速度一定沿移动方向。...
  19. 移动通信各制式、调制的速率及频谱利用率(2G-4G)
  20. 【CVPR2020】3D目标检测论文汇总

热门文章

  1. 如何在Mac上编辑PDF?
  2. 算法设计与分析 实验五 算法综合实验
  3. 测试人高中低音的软件,【精】Q3原车音箱35TFS调试测试与高中低音设置,放音乐调试结果附最后...
  4. 海报创意|十月的节日热点:国庆、重阳和万圣节
  5. 8个优质jquery分页插件
  6. 微信小程序复制粘贴功能源码
  7. 戴尔台式计算机寿命,台式电脑一般能用几年 哪些品牌比较好
  8. 考研复习之数据结构(六)栈和队列(下)(包含队列的相关内容、栈和队列的对比以及总结)
  9. 计算机考研英语参考书,考研英语词汇参考书推荐
  10. 自定义starter为什么要加上spring.factories