(4)UVM TLM通信之FIFO上的端口及调试

TLM通信之FIFO上的端口及调试

FIFO上的端口及调试

在这里插入图片描述
上图中所有以圆圈表示的EXPORT虽然名字中有export,但是本质上都是IMP。这里面包含了12种IMP,用于分别和相应的PORT及EXPORT连接。

peek端口与get相似,其数据流、控制流都相似,唯一的区别在于当get任务被调用时,FIFO内部缓存中会少一个transaction,而peek被调用时,FIFO会把transaction复制一份发送出去,其内部缓存中的transaction数量并不会减少

除了这12个IMP外,上图中还有两个analysis_port:put_ap和get_ap。当FIFO上的blocking_put_export或者put_export被连接到一个blocking_put_port或者put_port上时,FIFO内部被定义的put任务被调用,这个put任务把传递过来的transaction放在FIFO内部的缓存里,同时,把这个transaction通过put_ap使用write函数发送出去。FIFO的put任务定义如下:

什么时候会触发FIFO中的这个get任务呢?一个blocking_get_port连接到了FIFO上,当它调用get任务获取transaction时就会调用FIFO的get任务。除此之外,FIFO的get_export、get_peek_export和blocking_get_peek_export被相应的PORT或者EXPORT连接时,也能会调用FIFO的get任务

FIFO的类型有两种,一种是上节介绍的uvm_tlm_analysis_fifo,另外一种是uvm_tlm_fifo。这两者的唯一差别在于前者有一个analysis_export端口,并且有一个write函数,而后者没有。除此之外,本节上面介绍的所有端口同时适用于这两者。

FIFO中的众多端口方便了用户的使用,同样的,UVM也提供了几个函数用于FIFO的调试。
used函数用于查询FIFO缓存中有多少transaction。is_empty函数用于判断当前FIFO缓存是否为空。与is_empty对应的是is_full,用于判断当前FIFO缓存是否已经满了。作为一个缓存来说,其能存储的transaction是有限的。那么这个最大值是在哪里定义的呢?FIFO的new函数原型如下:

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

FIFO在本质上是一个component,所以其前两个参数是uvm_component的new函数中的两个参数。第三个参数是size,用于设定FIFO缓存的上限,在默认的情况下为1。若要把缓存设置为无限大小,将传人的size参数设置为0即可。通过size函数可以返回这个上限值。

FIFO的复位函数,这个函数用于清空FIFO缓存中的所有数据:

virtual function void flush();

FIFO和IMP的取舍

在用FIFO通信的方法中,完全隐藏了IMP这个UVM中特有、而TLM中根本就没有的东西。用户可以完全不关心IMP。因此,对于用户来说,只需要知道analysis_port、blocking_get_port即可。简化了工作量。尤其是在scoreboard面临多个IMP,且需要为IMP声明一个后缀时,这种优势更加明显

FIFO连接的方式增加了env中代码的复杂度,满满的看上去似乎都是与FIFO相关的代码。尤其是当要连接的端口数量众多时,这个缺点更加明显。

对于使用端口数组的情况,FIFO要优于IMP。假如参考模型中有16个类似端口要和scoreboard中相应的端口相互通信,如此多数量的端口,在参考模型中可以使用端口数组来实现.

这篇笔记参考《UVM实战》、《芯片验证漫游指南》和某验证视频整理而成,仅作学习心得交流,如果涉及侵权烦请请告知,我将第一时间处理。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字ic攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值