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

サンプルコード

sample_seq.svh(Sequence)

今回使用するSequenceです。

クラス変数として、din1とdin2を持ちます。

class sample_seq extends uvm_sequence #(sample_sequence_item);
    `uvm_object_utils(sample_seq)

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

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

    virtual task body();
        `uvm_create(req)
            req.din1 <= din1;
            req.din2 <= din2;
        `uvm_send(req)
    endtask
endclass
sample_vseq.svh(Virtual Sequence)

Virtual Sequenceです。4種類の方法でSequenceを実行しています。

class sample_vseq extends uvm_sequence;
    `uvm_object_utils(sample_vseq)
    `uvm_declare_p_sequencer(sample_vsequencer)

    sample_seq seq;

    function new(string name="sample_vseq");
        super.new(name);
        set_automatic_phase_objection(1);
    endfunction

    virtual task body();
        seq = sample_seq::type_id::create("seq");

        seq.din1 = 1;
        seq.din2 = 2;
        seq.start(p_sequencer.seqr);

        `uvm_do_on(seq, p_sequencer.seqr)

        `uvm_create_on(seq, p_sequencer.seqr)
        seq.din1 = 3;
        seq.din2 = 4;
        `uvm_send(seq)

        `uvm_do_on_with(seq, p_sequencer.seqr, {
            din1 == 4;
            din2 == 5;
        })

        #10;
    endtask
endclass

解説

<Sequence>.start(<Sequencer>)

uvm_sequneceを継承したSequenceはbuilt-inでstartメソッドを持ちます。

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

seq.din1 = 1;
seq.din2 = 2;
seq.start(p_sequencer.seqr);
`uvm_do_on(<Sequence>, <Sequencer>)

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

`uvm_do_on(seq, p_sequencer.seqr)
`uvm_create_on(<Sequence>, <Sequencer>)
`uvm_send(<Sequence>)

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

`uvm_create_on(seq, p_sequencer.seqr)
 seq.din1 = 3;
 seq.din2 = 4;
`uvm_send(seq)
`uvm_do_on_with(<Sequence>, <Sequencer>, <constraint>)

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

`uvm_do_on_with(seq, p_sequencer.seqr, {
    din1 == 4;
    din2 == 5;
})

まとめ

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

コメント

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