UVM端口:put,get,export,analysis

时间:2016-01-22 01:48:19

标签: port uvm

我想在UVM中掌握,并在UVM端口完全丢失。请帮助更好地了解端口。

据我所知,有三种主要类型的端口

  1. Put-> get:producer put data和consumer获取数据。这是封锁声明。
  2. Put->导出 - >进出口
  3. 分析 - >订阅者:生产者传输数据,其他订阅者获取数据。这是非阻止声明。
  4. 还有TLM_FIFO允许缓冲事务以供以后使用。它有两种类型:var coverageStartDate = new DateTime(now.Year, 2, 3); var coverageEndDate = new DateTime(now.Year, 2, 10); uvm_tlm_fifo

    我的问题是:

    1. 我的理解是对的吗?
    2. get和export有什么区别?
    3. uvm_tlm_analysis_fifouvm_tlm_fifo之间的区别是什么?
    4. 感谢
      Hayk酒店

1 个答案:

答案 0 :(得分:1)

使用TLM接口可以隔离每个组件的变化 整个环境中的其他组件。

对于端口理解,有两种常见术语:生产者消费者。而不是生产者和消费者,考虑组件之间的发起者目标

  

发起人始终与端口连接。就像司机有seq_item_ 端口

一样      

目标始终具有导出。就像音序器havng seq_item_ export

一样

对于Put / Get端口:

Initiator/Producer:
port.put(tr);

Target/Consumer: (Note the Input in task)
task pet(input simple_trans t);
//...
endtask

投放端口中,发起人生产者,其中投放 交易对于消费者启动器/生产者阻止,直到目标/消费者解锁put任务。

Initiator/Consumer:
port.get(tr);

Target/Producer:(Note the Output in task)
task get(output simple_trans t);
//...
endtask

在get port中,启动器是消费者。 消费者请求/请求事务和生产者提供它。 发起人/消费者阻止,直到目标/制作人解锁获取任务。

put / get端口通常用于具有系统的操作行为。这些端口用于一对一通信

分析端口通常用于广播事务。 写入方法始终为非阻止。分析端口可能存在零或更多连接。同样,发起人和目标的规则保持不变。

Initiator:
port.write(tr);

Target:(Note the function, not task)
function void write(simple_trans tr);
//...
endfunction

所有端口都需要在用户类中实现方法。 uvm_*_imp用于此目的。虽然缓冲数据可以通过 FIFO 来完成。

对于分析端口,使用uvm_analysis_fifo,因为这些FIFO必须能够进一步广播事务。分析FIFO的默认大小为无界

使用put / get端口时使用uvm_tlm_fifo,即一对一通信。分析FIFO的默认大小为 1 ,可以更改为无界

同样,FIFO总是从组件中提取/获取请求数据,因此两端都有 export 类型的连接。

有关详细信息,请参阅UVM User Guide