UVM的各种port(六)

来源:互联网 发布:算法流程图 编辑:程序博客网 时间:2024/06/03 15:16

TLM:transaction Level Modeling
UVM中常见的port:
这里写图片描述
前6个定义参数就是port中的数据流类型,而后3个定义中参数则表示(request-response)中发起请求时传输的数据类型和返回的数据类型。

Export:
这里写图片描述
前6个定义参数就是port中的数据流类型,而后3个定义中参数则表示(request-response)中发起请求时传输的数据类型和返回的数据类型。

IMP:
这里写图片描述
在前6个IMP传输的数据类型中,第一个T表示IMP传输的数据类型。

传输表示方法:
这里写图片描述

UVM中各种port的连接
1、 使用connect建立连接关系
A.connect(B);
2、port与IMP连接
在这三种端口中,port是最高优先级,IMP是最低优先级。
现在要把A中的PORT和B中的IMP连接起来,如图:
这里写图片描述
则在A中需要这样定义:
这里写图片描述
则在B中的定义为:
这里写图片描述
B中的IMP中有两个参数,第一个参数是将要传输的transaction,第二个参数是实现接口的uvm_component。
当A和B中定义好后,则需要在C中将A_port和B_port连接起来。
这里写图片描述

Export与IMP的连接和port与IMP连接完全一样。

UVM中的analysis port和analysis export
他们与port和export的区别:
1、 默认情况下,analysis port(analysis export)可以连接多个IMP,也就是说analysis port(analysis export)是一对多的通信,而port和export是一对一通信。
2、 Port和export对应于有三种操作(get、put、transport_port),而analysis port(analysis export)则对应于一种操作write。Write的意思是广播一下,剩下的事情就与其他无关。
3、 Port和export都有阻塞和非阻塞的区分。对于analysis port(analysis export)来说没有相应的概念。

用analysis port实现monitor和scoreboard的通信
在monitor中,我们定义如下:
Class monitor extends uvm_monitor;
Uvm_analysis_port#(mac_transaction) ap;
Task main_phase(uvm_phase phase);
Super.main_phase(phase);
Mac_transaction tr;
……
Ap.write(tr);
….
Endtask
Endclass

在scoreboard中,我们需要定义write的task,
Class scoreboard extends uvm_scoreboard;
Uvm_analysis_imp#(mac_transaction,scoreboard) scb_imp;
Task write (mac_transaction tr);
//do something on tr
Endtask
Endclass

在agent中,定义analysis port,并把其指向monitor的ap;
Class agent extends uvm_agent;
Uvm_analysis_port#(mac_transaction) ap;
……
Function void connect_phase(uvm_phase phase);
Super.connect(phase);
This.ap = monitor.ap;
Endfunction
Endclass

在env中的定于:
Function void env::connect_phase(uvm_phase);
Super.connect(phase);
Agent.ap.connect(scoreboard.scb_imp);
Endfunction

当存在多个uvm_analysis_imp的情况
Scoreboard要接收monitor和model的数据,则需要如下定义:
uvm_analysis_imp_decl(_monitor)
uvm_analysis_imp_decl(_model)
Class scoreboard extends uvm_scoreboard;
Uvm_analysis_imp_monitor#(mac_transaction,scoreboard) monitor_imp;
Task write_monitor(mac_transaction tr);
//do something on tr
Endtask
Task write_model(mac_transaction tr);
//do something on tr
Endtask
Endclass
通过宏uvm_analysis_imp_decl,声明了两个后缀_monitor和_model,uvm会根据这两个后缀内建两个新的imp

用fifo实现monitor和scoreboard的通信
在scoreboard中定义:
这里写图片描述

在env里面的定义:
这里写图片描述

2 0
原创粉丝点击