我想在UVM中掌握,并在UVM端口完全丢失。请帮助更好地了解端口。
据我所知,有三种主要类型的端口
还有TLM_FIFO允许缓冲事务以供以后使用。它有两种类型:var coverageStartDate = new DateTime(now.Year, 2, 3);
var coverageEndDate = new DateTime(now.Year, 2, 10);
和uvm_tlm_fifo
。
我的问题是:
uvm_tlm_analysis_fifo
和uvm_tlm_fifo
之间的区别是什么?感谢
Hayk酒店
答案 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。