您的位置:首页 > 其它

UVM的各种port(六)

2017-03-06 00:19 288 查看
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里面的定义:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uvm