[CU]6.5seqr&driver-m_sequencer
1.m_sequencer
(1) 所有的sequence都有一个m_sequencer句柄.
1 virtual class uvm_sequence #(type REQ=uvm_sequence_item, type RSP=REQ) extends uvm_sequence_base; 2 3 class uvm_sequence_base extends uvm_sequence_item; 4 5 class uvm_sequence_item extends uvm_transaction; 6 ... 7 protected uvm_sequencer_base m_sequencer; 8 ... 9 virtual function void set_sequencer(uvm_sequencer_base sequencer); 10 ... 11 m_sequencer=sequencer; 12 ... 13 endfunction 14 15 endclass
2.m_sequencer的赋值
(1)所有sequence都要在sequencer中启动,如tr_seq.start(env.vsqr). 当sequence启动的时候, 在sequence的task start内,会调用set_item_context函数; 在set_item_context函数内,会调用set_sequencer函数.
(2) set_sequencer函数会使m_sequencer句柄指向执行当前sequence的sequencer,即指向env.vsqr.
//src/seq/uvm_sequence_base.svh virtual task start(uvm_sequencer_base sequencer, uvm_sequence_base parent_sequence=null, int this_priority=-1, bit call_pre_post=1); ... set_sequencer(sequencer); ... endtask //src/seq/uvm_sequence_item.svh virtual function void set_sequencer(uvm_sequencer_base sequencer); m_sequence=sequencer; m_set_p_sequencer(); endfunction virtual function void m_seq_p_sequencer(); return; endfunction
浙公网安备 33010602011771号