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. 4岁学编程,19岁创办以太坊,4年十亿身家!
  2. flask+gunicorn+supervisor+nginx环境安装,裸Centos
  3. UTF-8笔记170330
  4. Linux 命令之 netstat -- 查看网络状态信息/显示网络状态
  5. 计算机显示器工作原理与维修,新型电脑显示器的原理与维修
  6. [预告]将要推出编程方式事务管理祥解!
  7. DB2数据库对象设计
  8. 点点滴滴——变量对象的产生
  9. Android设备读写NFC标签
  10. python爬取微信运动_用 Python 修改微信(支付宝)运动步数,轻松 TOP1
  11. FLUENT 流体计算应用教程
  12. VLookup函数和单元格引用
  13. 第二课——如何有逼格地打字
  14. Excel批量复制选中单元格的整行
  15. 朗道十卷《力学》笔记(更新中)
  16. Geek-10h-re-wp
  17. ISP PIPLINE(零) 知识综述预热
  18. 苹果ttc转ttf_ttf转ttc字体格式工具 ttctools
  19. 计算机网络知识全面讲解:使用Telnet命令发送电子邮件
  20. 使用Python编写一个渗透测试探测工具

热门文章

  1. 分享实录 | 阿里巴巴DevOps文化浅谈
  2. 计算机死机黑屏怎么办,电脑卡机后黑屏怎么办
  3. 电源管理芯片:LED驱动电源芯片的计划及面积
  4. 华中科技大计算机全国排名,2017华中科技大学全国排名第几
  5. 计算机与智能科学专业大学排名,智能科学与技术专业大学排名 2020全国排行榜...
  6. ccf170902-公共钥匙盒
  7. CSS3,JS制作网页动画(时空穿梭,魔方,坠落星星,全屏樱花特效)
  8. MY资源网址整合记录
  9. matlab app设计步骤_1.1数学建模与MATLAB–MATLAB入门
  10. 《重学Java设计模式》作者开始录视频了