UVM——单向通信

本文介绍了UVM中的单向通信,包括PORT代表的三种端口类型(port、export、imp)及其命名规则。重点阐述了阻塞与非阻塞端口方法,如uvm_blocking_put_PORT的put()任务与uvm_nonblocking_put_PORT的try_put()函数。同时详细列举了阻塞与非阻塞传输的多种方法,如put、get、peek及其对应的try_xxx和can_xxx函数,解释了它们在数据传输过程中的不同行为。
摘要由CSDN通过智能技术生成

单向通信

单向通信(unidirection communication)指的是从initiator到target之间的数据流向是单一方向的或者说initiator和target只能扮演producer和consumer中的一个角色。

端口类型

PORT代表了三种端口名:port、export、imp
按照UVM端口名的命名规则,指出了通信的两个要素:是否阻塞(是否可以等待延时);何种通信方法。
在这里插入图片描述

端口方法

阻塞传输方式将blocking前缀作为函数名的一部分,而非阻塞方式则名为nonblocking。阻塞端口的方法类型为task,这保证了可以实现事件等待和延时;非阻塞端口的方式类型为function,这确保了方法调用可以立即返回。
从方法名可以发现,例如uvm_blocking_put_PORT提供的方法task put()会在数据传送完后返回,uvm_nonblocking_put_PORT对应的两个函数try_put()和can_put()是立刻返回的。
uvm_put_PORT则分别提供了blocking和nonblocking的方法,这为通讯方式提供了更多选择。blocking阻塞传输方法包含:
- put():initiator先生成数据T t,同时将该数据传送至target
- get():initiator从target获取数据T t,而target中的数据T t应被消耗
- peek():initiator从target获取数据T t,而target中的数据T t应被保留
与上述三种任务对应的nonblocking非阻塞方法是:
- try_put()
- can_put()
- try_get()
- can_get()
- try_peek()
- can_peek()
这六个非阻塞函数与对应阻塞任务的区别在于,它们必须立即返回,如果try_xxx函数可以发送或者获取数据,那么函数应该返回1,如果执行失败则应返回0。或者can_xxx先试探target是否可以接收数据,如果可以,在通过try_xxx函数发送,提高数据发送的成功率。
在这里插入图片描述

//实例
class itrans extends uvm_transaction;
	int id;
	int data;
	...
endclass

class otrans extends uvm_transaction;
	int id;
	int data;
	...
endclass

class comp1 extends uvm_component;
	uvm_blocking_put_port #(itrans) bp_port;		//组件一把数据给组件二
	uvm_nonblocking_get_port #(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值