UVM Sequenceを実行する方法まとめ

サンプルコード

sample_sequence_item.svh

Sequenceで使用するSequence_itemです。

class sample_sequence_item extends uvm_sequence_item;
    `uvm_object_utils(sample_sequence_item)

    rand bit [2:0] din1;
    rand bit [2:0] din2;

    function new(string name="sample_sequence_item");
        super.new(name);
    endfunction
endclass
sample_seq.svh
class sample_seq extends uvm_sequence #(sample_sequence_item);
    `uvm_object_utils(sample_seq)
    `uvm_declare_p_sequencer(sample_sequencer)

    function new(string name="sample_seq");
        super.new(name);
        set_automatic_phase_objection(1);  // おまじない
    endfunction

    virtual task body();
        `uvm_create(req)
            req.din1 <= 1;
            req.din2 <= 2;
        `uvm_send(req)

        `uvm_create_on(req, p_sequencer)
            req.din1 <= 2;
            req.din2 <= 3;
        `uvm_send(req)

        `uvm_do(req)

        `uvm_do_with(req, {
            din1 == 3;
            din2 == 4;
        })

        `uvm_do_on(req, p_sequencer)

        `uvm_do_on_with(req, p_sequencer, {
            din1 == 4;
            din2 == 5;
        })

        #10;
    endtask
endclass

解説

`uvm_create(<sequence_item>)
`uvm_send(<sequence_item>)

`uvm_createでSequenceを生成して`uvm_sendでSequenceを実行します。

`uvm_create(req)
    req.din1 <= 1;
    req.din2 <= 2;
`uvm_send(req)
`uvm_create_on(<sequence_item>, <Sequencer>)
`uvm_send(<sequence_item>)

`uvm_create_onでSequenceを生成して`uvm_sendでSequenceを実行します。

`uvm_create_on(req, p_sequencer)
    req.din1 <= 2;
    req.din2 <= 3;
`uvm_send(req)
`uvm_do(<sequence_item>)

引数にSequence_itemを与えることでSequenceを実行できます。

`uvm_do(req)
`uvm_do_with(<sequence_item>, <Constraint>)

引数にSequence_item, constraintを与えることでSequenceを実行できます。

`uvm_do_with(req, {
    din1 == 3;
    din2 == 4;
})
`uvm_do_on(<sequence_item>, <Sequencer>)

引数にSequence_item, Sequencerを与えることでSequenceを実行できます。

`uvm_do_on(req, p_sequencer)
`uvm_do_on_with(<sequence_item>, <Sequencer>, <Constraint>)

引数にSequence_item, Sequencer, constraintを与えることでSequenceを実行できます。

`uvm_do_on_with(req, p_sequencer, {
    din1 == 4;
    din2 == 5;
})

まとめ

Sequenceを実行する方法をまとめました。

コメント

タイトルとURLをコピーしました