나는 가상 시퀀서를 가지고 있는데,이 가상 시퀀서에서 3 개의 트랜잭션을 각각 해당 시퀀서에서 병렬로 실행한다. 그래서 이런 일이 :임의 화없이 uvm_do_on을 수행하는 방법은 무엇입니까?
class top_vseqr extends uvm_seqr extends uvm_sequencer;
type_a_seqr seqr_a;
type_b_seqr seqr_b;
type_c_seqr seqr_c;
...
endclass: top_vseqr
class simple_vseq extends uvm_sequence;
`uvm_declare_p_sequencer(top_vseqr)
type_a_seq seq_a;
type_b_seq seq_b;
type_c_seq seq_c;
...
virtual task body();
fork
`uvm_do_on(seq_a, p_sequencer.seqr_a)
`uvm_do_on(seq_b, p_sequencer.seqr_b)
`uvm_do_on(seq_c, p_sequencer.seqr_c)
join
endtask: body
endclass: simple_vseq
을하지만 지금은 내가 실행하고 테스트에 따라, 가상 시퀀서에 특정 트랜잭션을 구동 할 수 있어야합니다. 그렇게하기 위해, 나는 모니터가 인터페이스에서 트랜잭션을 볼 때마다 업데이트되는 분석 가져 오기 클래스와, 구동 될 다음 트랜잭션을 반환하는 함수를 가진다. 그래서 지금은 다음과 같이 수행 할 : 나는 'uvm_send 매크로가 있다고 본 것 UVM 문서를 통해 파고
class test extends uvm_test;
model model_a;
simple_vseq seq;
top_vseqr virt_seqr;
...
task run_phase(uvm_phase phase);
...
seq = simple_vseq::type_id::create("seq", this);
seq.seq_a = model_a.get_sequence();
seq.start(virt_seqr);
...
endtask: run_phase
을하지만, 당신이 순서를 실행하는 시퀀서를 선택하는 것을 허용하지 않습니다 (즉, 나는 'uvm_send_on'또는 이와 비슷한 것을 보지 못했다). 내가 무엇을 할 수 있을지?
감사합니다.