我试图掌握UVM,并在UVM端口中完全丢失。请帮助更好地理解港口。
因此,据我所知,有三种主要类型的端口
还有TLM_FIFOs,它允许缓冲事务以供以后使用。它有两种类型:uvm_tlm_fifo和uvm_tlm_analysis_fifo。
我的问题是:
uvm_tlm_fifo和uvm_tlm_analysis_fifo有什么区别?谢谢
哈克
发布于 2016-01-22 05:06:07
TLM接口的使用将每个组件与整个环境中其他组件的更改隔离开来。
为了理解端口,有两个常见的术语:Producer和Consumer。而不是生产者和消费者,考虑从启动器和目标组件之间的通信。
启动器总是有一个端口连接到它。就像驱动程序有seq_item_port. 目标总是有一个导出。就像测序器有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端口中,启动器是producer,它为使用者E 232放置事务。启动器/生产者阻止,直到目标/使用者解除了put任务的阻塞。
Initiator/Consumer:
port.get(tr);
Target/Producer:(Note the Output in task)
task get(output simple_trans t);
//...
endtask在get端口中,发起者是使用者。使用者请求/请求事务,而生产者提供它。Initiator/Consumer阻塞,直到get任务被目标/生产者解除阻塞为止。
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总是在从组件请求时将/获取数据,从此以后,两端都有导出类型的连接。
有关更多信息,请参见UVM用户指南。
https://stackoverflow.com/questions/34937677
复制相似问题