其他分享
首页 > 其他分享> > 5. UVM -- suquence机制

5. UVM -- suquence机制

作者:互联网

UVM -- suquence机制

1.1. sequence 机制的原理

1.2. sequence机制的使用


1.3. sequence 的启动 (2种方法)

1.3.1. 方法一:设置default_sequence

1.3.2. 方法二:手动启动sequence (更常用)

task my_base_test::run_phase(uvm_phase phase);
    my0_seq m_seq = my0_seq::type_id::create("m_seq");

    super.run_phase(phase);
    phase.raise_objection(this);
    `uvm_info(get_type_name(), "< 005 > : run_phase ", UVM_DEBUG)

    // seq start
    m_seq.start(m_env.m0_agent.m0_seqr);

    phase.get_objection().set_drain_time(this, 1000);
    phase.drop_objection(this);
endtask: run_phase


1.4. sequence do_item 方法

1.4.1. 方法一:start_item(req);

    repeat(100) begin
        @(posedge MY0.clk);
        req = my0_seq_item::type_id::create("req"); // 1. create item
        start_item(req); // 2. start item to sequencer
        assert(req.randomize() with {req.pwdata == 100;}); // 3. randomize()
        finish_item(req); // 4. send item to driver
        `uvm_info(get_type_name(), $sformatf("< SEQ-2-1 > : %h, %h", req.paddr, req.pwdata), UVM_DEBUG)
    end

1.4.2. 方法二:uvm_do_with()

    repeat(100) begin
        @(posedge MY0.clk);
        req = new("req"); // 1. create item
        `uvm_do_with(req, {req.paddr < 32'h40000000; req.pwdata == 32'h4444FFFF;})
        `uvm_info(get_type_name(), $sformatf("< SEQ-2-2 > : %h, %h", req.paddr, req.pwdata), UVM_DEBUG)
    end


1.5. sequence 的嵌套


1.6. sequence 的仲裁


1.7. sequence获取响应

1.8. UVM sequence library

1.8.1. 什么是UVM sequence library

本质是一个sequence, 相对于普通的sequence, sequence library有以下功能:

1.8.2. 向UVM sequence library注册sequence

1.8.2.1. 永久注册


1.8.2.2. 临时注册


1.8.3. sequence_library中添加sequence

1.8.4. UVM sequence library相关变量及配置类

1.8.4.1. 相关变量


1.8.4.2. 配置类

1.9. Virtual sequence

1.9.1. 什么是Virtual sequence 及 Virtual sequencer

1.9.2. Virtual sequence 与 Virtual sequencer 的使用方法

标签:sequence,--,req,1.8,item,UVM,suquence,phase
来源: https://www.cnblogs.com/thisway2014/p/16503021.html