目录
3.2.4分析端口——Analysis port(一对多传输、最常用)
三、UVM通信(component类)
UVM验证平台的特点是验证环境整体基于面向对象的开发方式,组件之间的通信也是基于TLM通信方式,但在driver与硬件的接口之间,需要将TLM抽象事务降解到基于时钟的信号驱动级别。
3.1UVM TLM基本概念
TLM是一个基于事务(transaction)的通信方式,TLM通信两个对象根据通信动作分为initiator object(通信请求动作发起方)和target object(通信的响应方);根据事务传输方向分为producer(数据产生方)和consumer(数据接收方)。TLM通信端口按照类型可以划分为port(常作为initiator的发起端,凭借port,initiator才可以访问target中实现的TLM通信方法)、export(作为initiator和target中间层次的端口)、imp(只能作为target接收request的末端)。
initiator与target的关系同producer与consumer的关系,不是固定的。但是TLM的通信方法是在target一端中实现,initiator将来作为发起方可调用target内的通信方法,实现数据传输。
TLM通信的步骤可以分解为:
1)分辨出initiator和target,producer和consumer。
2)在target中实现TLM通信方法。
3)在两个对象中创建TLM端口。
4)在更高的层次中将两个对象的端口进行连接。
TLM通信中的三种端口:Port,Export,IMP
1.控制流优先级:Port > Export > IMP
2.Port始终是传输动作的发起者,Export和IMP只能作为动作的接受者。
3.使用connect()建立连接关系时,只有优先级高的才能调用connect()做连接。
4.三种端口使用new()函数在build_phase中创建。(注意:不能用create创建,端口不属于UVM树的一部分)。
5.在有Port,Export,IMP连接的data path中,只能且必须以IMP作为终点。
6.Port,Export相当于一道门,没用存储作用,因而必须以IMP(tlm implement port class)作为终点。
7.IMP在声明时相较于Port/Export多了一个类型参数IMP:
uvm_blocking_put_export#(T)
uvm_blocking_put_imp#(T, IMP);//第一个参数T是这个IMP传输的数据类型。第二个参数IMP为实现该IMP的componen