次のように私は、仮想シーケンスのためにいくつかのコードを書いています:仮想列クラス計画
class base_v_seq extends uvm_sequence #(uvm_sequence_item);
seqr1 seqr1h;
seqr2 seqr2h;
//function new......
endclass
class v_seq1 extends base_v_seq #(uvm_sequence_item);
//...
task body();
seq1 seq1h;
seq2 seq2h;
seq1h=seq1::type_id::create("seq1");
start_item(seq1.w_transh);--------------(1)
assert(se1.w_trans.randomize);
finish_item(seq1.w_transh);
seq1.start(seqr1);
endclass
class test extends uvm_test();
//...
task run_phase();
v_seq1.start(null);
endtask
endclass
class seq1 extends uvm_sequence#(uvm_sequence_item);
//...
wr_trans wr_transh;
endclass
私の疑問は、私がtest
でv_seq1
を始めていたときに、それはそれはseq1
があるstart_item()
含まtask body
メソッドを呼び出すということですまた、start_item()
を有する。物理的なシーケンスに存在するstart_item
は問題を引き起こしますか? v_seq1
とseq1
の間でデータ転送はどのように行われますか? と私のもう一つの質問は、 "seq1.start(seqr1);"です必須?
最後の質問ではstart_item(seq1.w_transh)を呼び出すことはできません。これはクラスのカプセル化に違反します。 seq1.start(seqr1)を呼び出し、seq1の本体でstart_itemを実行するだけです。 –