UVM通信篇之一:TLM通信概论

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

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

  • port:经常作为initiator的发起端,也凭借port,initiator才可以访问target中实现的TLM通信方法。

  • export:作为initiator和target中间层次的端口。

  • imp:只能是作为target接收request的末端,它无法作为中间层次的端口,所以imp的连接无法再次延伸。

首先来看看下面的例子中,关于TLM端口的类型、层次和对应的连接。可以从对应的连接关系中初步得出TLM端口连接的一般做法:

  • 在initiator端中例化port,在中间层次例化export,而在target端例化imp。

  • 多个port可以连接到同一个export或者imp;但是单个port或者export无法连接多个imp。这可以抽象为多个initiator可以对同一个target发起request,但是同一个initiator无法连接多个target。

  • port应为request起点,imp应为request终点,而中间可以穿越多个层次。基于单元组件的自闭性考虑,建议在这些穿越的中间层次中声明export,继而通过一级一级的连接实现数据最终的通路。

  • port可以连接port、export或者imp;export可以连接export或者imp;imp只能作为数据传送的终点,无法扩展连接。

UVM通信篇之二:单向、双向及多向通信(上)

UVM通信篇之四:通信管道应用

从该组件的内部实现来看,它内置了一个mailbox #(T)。该mailbox没有尺寸现在,用来存储类型T的数据。同时,uvm_tlm_fifo的多个端口对应的方法均是利用该mailbox实现了数据的读写。一个uvm_tlm_fifo内主要包含下面几个TLM端口,实际上还有例化其它的TLM端口名,但为了简化起见,我们只提供下面几个端口供用户选择使用:

  • put_export:用户可以通过该端口调用put()、try_put()、can_put()。

  • put_ap:调用了put方法写入的数据同时也会通过该端口的write()函数送出。

  • get_peek_export:用户可以通过该端口调用get()、try_get()、can_get()、peek()、try_peek()、can_peek()。

  • get_ap:调用了get和peek方法读出的数据也会通过该端口的write()函数送出。


在使用过程中,我们将以用户将uvm_tlm_fifo的功能类比于mailbox,而不同的地方在于uvm_tlm_fifo提供了各种端口供用户使用

Analysis Port

利用软件的设计模式之一观察者模式(observer pattern)来实现这一要求。observer pattern的核心在于用户需要记住,第一,这是从一个initiator端到多个target端的方式;第二,analysis port采取的是"push"模式,即从initiator端调用多个target端的write()函数来实现循环式的更新。

Analysis TLM FIFO

由于analysis端口的提出实现了一端到多端的传输,而一个新的数据缓存组件类uvm_tlm_analysis_fifo为用户们提供了可以搭配uvm_analysis_port的端口uvm_analysis_imp和write()函数。


UVM通信篇之六:同步通信元件(上)

在之前SV的章节中,我们为大家介绍了SV中用来做线程间同步的几种方法,它们分别是semaphore、event和mailbox。然而在UVM中,同步的不再只局限于同一个对象中的各个线程,而是还有各个组件之间的同步问题。一旦发生同步的要求发生在各个组件之间,这就要求组件之间通过某种可以同步的方法来实现。而考虑到UVM各个组件的封闭性原则,我们并不推荐通过层次索引的形式在组件中来索引公共的event或者semaphore。UVM为了解决封闭性的问题,定义了如下的类来满足组件之间的同步:

uvm_event,uvm_event_pool和uvm_event_callback

uvm_barrier, uvm_barrier_pool

如果用户无法确定在等待事件之前,uvm_event是否已经被trigger,那么用户还可以通过方法wait_ptrigger()和wait_ptrigger_data()来完成等待。这样即便在调用等待方法之前,事件已经被触发,方法仍然不会被阻塞,可以继续执行下去。

那在日常应用中,什么情况下会使用uvm_event呢?我们在之前的组件通信中已经提到过,组件之间的常规的数据流向是通过TLM通信方法实现的,比如sequencer与driver之间,或者monitor与scoreboard之间。然而有些时候,数据的传输的偶然触发的,并且需要立即响应,这个时候uvm_event就是得力的助手了。同时,uvm_event也解决了一个重要问题,那就是在一些uvm_object和uvm_component对象之间如果要发生同步,那么无法通过TLM传输,因为TLM传输必须是在组件(component)和组件之间进行的。譬如,在sequence与sequence之间要进行同步,或者sequence与driver之间要进行同步,都可以借助uvm_event来实现。

uvm_tlm通信篇总结相关推荐

  1. jsp给前端注入值失败_基于 qiankun 的微前端最佳实践(图文并茂) 应用间通信篇...

    引言 大家好~ 本文是基于 qiankun 的微前端最佳实践系列文章之 应用间通信篇,本文将分享在 qiankun 中如何进行应用间通信. 在开始介绍 qiankun 的应用通信之前,我们需要先了解微 ...

  2. 物联网通信篇 NBIOT_01

    NBiOT_01物联网通信篇 从今天开始懒博主开始更新了,目前先更新 物联网 通信方面 目前我所测试的通信模组有以下几种型号: NB 4G 5G 今天先来说下怎么用 使用移动 M5311模组 的MQT ...

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

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

  4. Autosar BSW开发必知的“术语”+“缩写”概念-1-诊断通信篇

    如何使用该博文? ==>您可以将该篇博文当做"字典",遇到疑惑的Autosar"关键字",使用组合键Ctrl+F,快速查找该关键字. 推荐Autosar培 ...

  5. Android 开发:通信篇-TCP客户端

    这节教给大家用Android写一个TCP客户端程序 官方文档 Socket - Android SDK | Android Developers 页面 编写连接程序 1.获取控件 EditText e ...

  6. ReactNative与iOS通信原理解析-通信篇

    文章首发个人博客: ReactNative与iOS通信原理解析-通信篇 导语:其实原本是想编写一篇  react-native (下文简称 rn) 在  iOS 中如何实现  jsbridge 的文章 ...

  7. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/10256379.html],谢谢! 只要是面试高级工程师岗位,Android跨进程通信就是最受面 ...

  8. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇...

    前言 原文:https://www.cnblogs.com/andy-songwei/p/10256379.html 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一. ...

  9. Hybrid框架之交互通信篇

    前言 虽然有些应用在使用React Native或Weex开发,但综合来看,业内还是以混合开发模式为主,从我们自家的App来看,H5业务所占比重越来越高,目前大概占到35%左右,因此一套好的Hybri ...

最新文章

  1. Linux中如何使用Htop监控工具?【网络安全】
  2. warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)
  3. dhcp是哪一层的协议_OSI各个分层分别负责哪些功能?有哪些主要协议?涉及到哪些设备?...
  4. linux shell 博客,【博客侠】Linux Shell脚本系列:开始上手(1)
  5. m1笔记本android开发,Apple M1设备开发Android小tips
  6. java filter 调用链_JavaWeb开发Servlet过滤器链执行顺序详解
  7. 给大家发一个DDOS防御包算法公式
  8. 腾讯会议开放API接口,为企业打造专属的“腾讯会议”
  9. postgresql表空间迁移
  10. 微信小程序demo、开发工具下载地址
  11. 二本软件工程学生的考研逆袭之路
  12. Dual Thrust 策略
  13. Activity焦点
  14. 两台 计算机如何建立共享,怎么建立两个电脑的共享
  15. 北京联通光猫WO-36(HG220GS-U)改为桥接模式
  16. [bzoj3939_Usaco2015 Feb]Cow Hopscotch(线段树维护DP)
  17. 京东后台模板导入SKU报格式错误
  18. 十年老程序员开始新事业
  19. 教育直播APP开发,在线教育系统开发(功能)
  20. Pythom爬虫之图虫小姐姐图片的爬取:

热门文章

  1. 7.3 Java(农夫果园【4】:一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果葡萄、草莓、苹果)
  2. 为什么出价策略会进入学习期,周期是多久。
  3. Jenkins-springcloud项目打包并上传docker仓库
  4. 【Pyhton 实战】---- 批量【端午节】海报下载
  5. 手机通讯录java首字母排序,Android联系人按拼音排序以及按汉字首字母或全拼搜索...
  6. 学生管理系统(web版)
  7. 2010 27寸 imac 升级固态_新iMac拆解证实 自行加装SSD难如登天
  8. Python全栈工程师(30:html)
  9. 闲着没事,自己做贪吃蛇耍耍?
  10. Java常用类——Java教案(六)