首页 > 学院 > 开发设计 > 正文

UVM的各种port(六)

2019-11-06 06:56:26
字体:
来源:转载
供稿:网友

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里面的定义: 这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表