专栏首页瓜大三哥UVM(十一)之各种port

UVM(十一)之各种port

UVM(十一)之各种port

UVM中内置了各种port,用于实现TLM级别的。

1. uvm_component之间的通信

如果要在两个uvm_component之间通信,如一个monitor和一个scoreboard之间通信:

最简单的方法就是使用全局变量,在monitor里对此全局变量进行赋值,在scoreboard里检测此全局变量值的改变。这种方法简单直接,不过就如前面一直强调的,要谨慎使用全局变量,要不然会造成灾难性的后果。

稍微复杂一点的方法,在scoreboard中有一个变量,这个变量设置为外部可以直接访问的,即非local类型的,然后在monitor中给这个变量赋值,如下图所示。要完成这个任务,那么要在monitor中有一个指向scoreboard的指针,否则虽然scoreboard把这个变量给设置为非local类型的,但是monitor依然无法该变。

这种方法的问题在于整个scoreboard里面的所有非local类型的变量都对monitor是可见的,而加入monitor的开发人员一不小心改变了scoreboard中的 一些变量,那么后果将会可能是致命的。

由于config机制的半全局变量的特性,我们可以相处第三种方法来。即专门的实例化一个config类,在此类中有monitor要传给scoreboard的变量。在base_test中,可以把这个config类set给scoreboard和monitor。当monitor要和scoreboard通信时,只要把此config类的相关变量的值改变既可。scoreboard中则检测变量值的改变,检测到之后做相应动作。这种方法比上面的两种方法都要好,但是仍然显得有些笨拙。一是要引入一个专门的config类,二是一定要有base_test这个第三方的参与。在大多数情况下,这个第三方是不会惹麻烦的。但是永远不能保证某一个从base_test派生而来的类会不会改变config类中某些变量的值。也就是说,依然存在一定的风险。而且,这种方法显得有些笨拙。

解决这个问题最好的方法就是在monitor和scoreboard之间专门建立一个通道,让信息只能在这个通道内流动,scoreboard也只能从这个通道中接收信息,这样几乎就可以保证scoreboard中信息只能从monitor中来,而不能从别的地方来。UVM中的各种port就可以实现这种功能。

2. TLM级别的通信

TLM是Transaction Level Modeling的缩写,所谓的transaction level是相对DUT中各个module之间信号线级别的通信来说的。TLM级别的通信中有几个常用的术语:

put操作:如下图所示,通信的发起者A把一个transaction发送给B。这个过程中,A称为“发起者”,而B称为“目标”。A具有的端口(用方框表示)称为端口PORT,而B的端口(用圆圈表示)称为EXPORT。这个过程中,数据流从A流向B。

get操作:如下图所示,A向B索取一个transaction,在这个过程中,A依然是“发起者”,B依然是“目标”,A上的端口依然是PORT,而B上的端口依然是EXPORT。这个过程中,数据流是从B流向A的。无论是get操作还是put操作,其发起者拥有的都是PORT端口,而不是EXPORT。

transport操作:如下图所示,transport操作相当于一次put操作加一次get操作,这两次操作的“发起者”都是A,目标都是B。A上的口依然是PORT,而B上的端口依然是EXPORT。在这个过程中,数据流先从A流向B,再从B流向A。在现实世界中,相当于是A传递给了B一个REQUEST,而B返回给A一个RESPONSE。所以这种transport操作也常常被称作request-response操作。

本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise),作者:xiguzaitortoise

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UVM(十)之config机制

    UVM(十)之config机制 1 验证平台中要配置的众多的参数 在一个验证平台中,有众多的参数需要配置。如在mac_driver中,按照以太网相关协议的规定,...

    瓜大三哥
  • yaffsfs.c

    1.int yaffs_write(int fd, const void *buf, unsigned int nbyte)如果一个需要写入文件大于一个chun...

    瓜大三哥
  • 基于CNN的人脸检测器——FacenessNet

    FacenessNet是专门针对人脸设计的一个检测器,其考虑了头发、眼睛、鼻子、嘴巴和胡子这五个脸部特征,简单地说,对于一个候选窗口,FacenessNet先分...

    瓜大三哥
  • Web渗透测试:使用Kali Linux

    Kali Linux是专业的渗透测试和安全审计工具,是世界上最流行的开源渗透工具包BackTrack的继任者。本书将教会读者怎样像真实的攻击者一样思考,以及理解...

    用户3157710
  • R语言从入门到精通:Day12

    从许多方面来看,回归分析都是统计学的核心。它其实是一个广义的概念,通指那些用一个或多个预测变量(也称自变量)来预测响应变量(也称因变量) 的方法。通常,回归分析...

    用户6317549
  • [一张图]中国药价普遍虚高,“制度成本”有多少?

    大数据文摘
  • 从CNI到OVN

    诸如calico flannel等CNI实现,通过牺牲一些功能让网络复杂度得以大幅度降低是我极其推崇的,在云原生时代应用不再关心基础设施的场景下是一个明智之举,...

    sealyun
  • 【一分钟知识】静态变量和实例变量、构造器

    1、静态变量和实例变量 静态变量 被static修饰符修饰的变量,也称为类变量 属于类,不属于类的任何一个对象 一个类不管创建多少个对象,静态变量在内存中有且仅...

    java思维导图
  • 浏览器-如何利用 Chrome 浏览器实现滚动截屏

    作为前端工程师,有时需要将做到一半的网页发送给 PM 和 Designer 来获得他们的反馈。Mac 自带的截屏功能只能截取显示在屏幕上的内容,但是网页长度常常...

    grain先森
  • 自己动手破解Z.EntityFramework.Extensions 4.0.11.0的方法

    因为项目中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免费开源)两个类库,但是Z.Enti...

    阿新

扫码关注云+社区

领取腾讯云代金券