【IC验证】UVM实验lab04

1. driver和sequencer之间的通信

task do_drive()
    chnl_trans req, rsp;
    @(posedge intf.rstn);
    forever begin
        seq_item_port.get_next_item(req);
        this.chnl_write(req);
        'void($cast(rsp, req.clone()));
        rsp.rsp = 1;
        
        rsp.set_sequence_id(req.get_sequence_id());
        set_sequence.item_done(rsp);
    end
endtask

一般在driver中利用get方法来得到req。

seq_item_port.get_next_item(req);

如果需要发送返回值,则通过以下语句实现:

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

注意第一个语句是为了确保当有多个sequence通过sequencer向driver时,driver返回的rsp必须与其sequence一一对应

此时在sequence语句里面应该要有对应的接受rsp的语句,get_response(rsp)

2. virtual sequencer/sequence

将原来存在于test中的序列的顺序和组织等内容移植到virtual_sequence中来。而在test里面的run_phase里面只需要run top virtual sequence;

在上层的env里面将agent的sequencer赋值到virtual sequencer,防止句柄悬空

在virtual sequence里面记得创建p_sequencer.方便在body里面将sequence挂载到对应的sequencer上面去

'uvm_declare_p_sequencer(mcdf_virtual_sequencer)

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值