다음과 같이 내가 가상 순서에 대한 몇 가지 코드를 쓰고 있어요 :가상 시퀀스 클래스는 계획
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
를 시작하고 때 포함 된 task body
메소드를 호출하는 것입니다이 start_item()
seq1
입니다 또한 start_item()
을 가짐; 실제 시퀀스에있는 start_item
에 문제가 있습니까? v_seq1
과 seq1
사이에서 데이터 전송은 어떻게 이루어 집니까? 그리고 또 다른 질문은 "seq1.start (seqr1);"입니다. 필수?
마지막 질문에 start start_item (seq1.w_transh)을 호출하지 않을 수도 있습니다. 이것은 클래스의 캡슐화를 위반합니다. seq1.start (seqr1)를 호출하고 seq1의 본문에서 start_item을 수행하면됩니다. –