谈谈UVM中事务级建模(TLM)的uvm_tlm_fifo

在前面文章的producer和consumer示例中,只存在一个进程。producer调用put时执行了consumer中的put方法,consumer调用get时执行了producer中的get方法。

 

在实际验证环境中你会遇到需要将进程1中的producer_1连接到进程2中的consumer_2的情况,因为TLM组件需要在自己的进程中工作(解耦合)。 

连接producer_1组件和consumer_2组件的一种非常常见的方法是使用uvm_tlm_fifo组件。uvm_tlm_fifo是参数化的FIFO以指定存储在fifo中的对象类型,具有put export和get exports。uvm_tlm_fifo的构造函数具有一个用于指示fifo的最大深度(默认为1)的参数。

class producer_1_consumer_2 extends uvm_component;
 producer_1 producer1_inst;
 consumer_2 consumer2_inst;
 uvm_tlm_fifo#(simple_packet) fifo_inst; // fifo stores simple_packets
 function new(string name, uvm_component parent);
 producer1_inst= new("producer1_inst", this);
 consumer2_inst= new("consumer2_inst", this);
 fifo_inst= new("fifo_inst", this, 16); // set fifo depth to 16
 endfunction

 virtual function void connect();
 producer1_inst.put_port.connect(fifo_inst.put_export);
 consumer2_inst.get_port.connect(fifo_inst.get_export);
 endfunction
 endclass

运行此代码时,producer_1组件中将创建的数据包存储到fifo中,consumer_2组件调用get方法从fifo中取出数据。

 

由于存在FIFO,producer_1组件进程和consumer_2组件进程之间的同步现在已经解耦。任何一个进程都可以添加任意延迟, fifo和阻塞put/get调用的使用可确保不会丢失任何数据包,这也使得验证平台的搭建更加容易。

 

往期精彩

谈谈UVM中事务级建模(TLM)的Port和Export

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值