IC验证学习笔记(MCDF)UVM实验3-TLM单向、多向通信

自己实现方法、后面会有内置的TLM方法

作用:

        TLM端口是提高数据通信抽象级的必要条件,同时使得组件之间的通信频率下降,提高了整体的仿真效率。失去标准化的TLM通信,那么就算UVM环境构建好,也无法完成高效的仿真任务
        通信函数可以定制化,比如可以定制get()、peek()、put()的内容和参数,比mailbox通信更加灵活。
        降低组件之间的依赖性;降低组件和环境的耦合度。
        例子:只有端口类型为port(也就是initiator)的才需要通过端口宏声明去解决方法名的冲突问题,port端口则不需要如此操作。也就是initiator一端不用去关心谁会和它连接,和它连接的有几个端口,只需要正常声明、例化端口即可,方法名用put/get/peek就行,不需要加后缀。而这些需要修改的部分在target一端进行即可。(下文会提到)
        标准化的TLM通信为UVM和其他验证方法混合使用提供了统一对话的基础

在这里插入图片描述

2、何为单向、多向?
        单向:指从initiator到target的数据流向是单一方向的,或者说initiator和target只能扮演producer和consumer中的一个角色。

        多向:注意,多向通信仍是两个组件之间的通信,指如果initiator与target之间的相同TLM端口数目超过1个的情况。比如下图组件1和组件2分别有两个uvm_blocking_put_port和uvm_blocking_put_imp端口。虽然我们可以给端口例化不同的名字,连接也可以通过不同名字来索引,但是端口对应的task名都是put,会产生冲突。

        注意,只有端口类型为imp(也就是imp类型只能是target)的才需要通过端口宏声明来解决方法名冲突的问题,而port则不需要关注方法名字,直接还用put就行。这也体现了TLM通信的优势之一——降低组件之间的耦合度。也就是initiator一端不用去关心谁将会和它连接,有几个端口,只要正常地声明、例化端口即可,方法就用put\get\peek等就行,不用加后缀。而这些需要修改的部分只在target端进行即可。
        假设我们在initiator这边的端口也将方法名设置为put_p1等有后缀的,那么一来会报错,二来下次你连接的target只要一个端口,那么你到时又需要修改。这就是耦合度高了,不利于维护。

TLM通信步骤
        搞清楚控制流和数据流——分辨initiator(通信发起端)和target(通信接收方),producer(数据流出方)和consumer(数据流入方);
        在target中实现TLM通信方法,以方便initiator调用target中的通信方法实现数据传输;
        在两个对象中创建TLM端口;
        在更高层次中将两个对象的端口进行连接。一般做法及注意事项如下:
                声明port和export端口,只需要指定transaction参数类型。而声明imp端口,则需要同时指定transaction参数类型以及所在的component类型。因为端口只是作为通信的管道,最终的操作还是要落实到component上,所以需要指定所在的component类型;.
                在initiator端例化port,在中间层次例化export,在target端例化imp;


    uvm_blocking_put_port #(mon_data_t) mon_bp_port;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值