sequencer/sequence实验

本实验的目的是将generator重构成sequencer和sequence,其中,sequence是用来生成相应的sequence_item,sequencer用于发送sequence_item。
首先修改的是driver和generator之间的通信mailbox,我们不再使用mailbox进行transaction的传输。采用tlm端口进行,即在agent的connect_phase()方法中将agent的seq_item_port与sequencer的seq_item_export进行连接(由于chnl_package,reg_package以及fmt_package中generator是一致的,所以采用reg_package举例)。

driver.seq_item_port.connect(sequencer.seq_item_export);

这里之前报错,后来发现是因为参数化的类这个问题,我给driver声明的时候添加了#(reg_trans),但是sequener并没有添加#(reg_trans),这导致接口的类型不同,因此报错。
driver在run_phase()阶段调用get_next_item()方法获取sequencer上挂载的sequence产生的sequence_item。

seq_item_port.get_next_item(req);

driver在接收到sequence_item之后,对其进行克隆,调用核心基类的核心方法,产生的对象类型是uvm_object,需要通过cast将其转化为reg_trans这种sequence_item类型。之后通过调用item_done返回,在此之前,我们需要获得该Item所述的sequence的id,保证传输给相应的sequence。

rsp.set_sequence_id(req.get_sequence_id());
seq_item_port.item_done(rsp);

之后是对generator实现到sequence/sequencer的转化。首先是sequencer的声明,比较简单,就是利用`uvm_component_utils()完成sequencer的注册,并且声明new()函数。

class reg_sequencer extends uvm_sequencer #(reg_trans);
    `uvm_component_utils(reg_sequencer)
    function new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值