Q:激勵(lì)最初產(chǎn)生在driver中,后來產(chǎn)生在sequence中。為什么會(huì)有這個(gè)過程呢?
Q:當(dāng)一個(gè)激勵(lì)在driver中產(chǎn)生,當(dāng)要對(duì)DUT施加不同的激勵(lì)時(shí),那應(yīng)該怎么辦呢?
Q:如何在定義后啟動(dòng)一個(gè)sequence
//當(dāng)完成一個(gè)sequence的定義后,可以使用start任務(wù)將其啟動(dòng)
my_sequence my_seq;
my_seq = my_sequence::create("my_seq");
my_seq.start(sequencer);
//除了直接啟動(dòng)之外,還可以使用default_sequence啟動(dòng)
uvm_config_db#(uvm_object_wrapper)::set(this,"env.i_agt.sqr.main_phase","default_sequence",case0_sequence::get());
A:使用sequence機(jī)制之后,在不同的測(cè)試用例中,將不同的sequence設(shè)置成sequencer的main_phase的default_sequence。當(dāng)sequencer執(zhí)行到main_phase時(shí),發(fā)現(xiàn)有default_sequence,那么它就啟動(dòng)sequence。
A:當(dāng)一個(gè)sequence啟動(dòng)后會(huì)自動(dòng)執(zhí)行sequence的body任務(wù)。其實(shí),除了body外,還會(huì)自動(dòng)調(diào)用sequence的pre_body與post_body
文件:src/my_case0.sv3
class case0_sequence extends uvm_sequence #(my_transaction);
…
virtual task pre_body();
`uvm_info("sequence0", "pre_body is called!!!", UVM_LOW)
endtask
virtual task post_body();
`uvm_info("sequence0", "post_body is called!!!", UVM_LOW)
endtask
virtual task body();
…
#100;
`uvm_info("sequence0", "body is called!!!", UVM_LOW)
…
endtask
`uvm_object_utils(case0_sequence)
endclass
Q:UVM支持同一時(shí)刻在同一sequencer上啟動(dòng)多個(gè)sequence,那同時(shí)啟動(dòng)多個(gè)sequence時(shí),哪個(gè)先執(zhí)行呢?
Q:sequencer根據(jù)什么選擇使用哪個(gè)sequence的transaction呢?這是UVM的sequence機(jī)制中的仲裁問題
//例如如下啟動(dòng)了seq0和seq1
文件:src/no_pri/my_case0.sv
task my_case0::main_phase(uvm_phase phase);
sequence0 seq0;
sequence1 seq1;
seq0 = new("seq0");
seq0.starting_phase = phase;
seq1 = new("seq1");
seq1.starting_phase = phase;
fork
seq0.start(env.i_agt.sqr);
seq1.start(env.i_agt.sqr);
join
endtask
A:對(duì)于transaction來說,存在優(yōu)先級(jí)的概念,通常來說,優(yōu)先級(jí)越高越容易被選中。當(dāng)使用uvm_do或者uvm_do_with宏時(shí),產(chǎn)生的transaction的優(yōu)先級(jí)是默認(rèn)的優(yōu)先級(jí),即-1??梢酝ㄟ^uvm_do_pri及uvm_do_pri_with改變所產(chǎn)生的transaction的優(yōu)先級(jí)
文件:src/item_pri/my_case0.sv3
class sequence0 extends uvm_sequence #(my_transaction);
…
virtual task body();
…
repeat (5) begin
`uvm_do_pri(m_trans, 100)
`uvm_info("sequence0", "send one transaction", UVM_MEDIUM)
end
#100;
…
endtask
…
endclass
class sequence1 extends uvm_sequence #(my_transaction);
…
virtual task body();
…
repeat (5) begin
`uvm_do_pri_with(m_trans, 200, {m_trans.pload.size < 500;})
`uvm_info("sequence1", "send one transaction", UVM_MEDIUM)
end
…
endtask
…
endclass
uvm_do_pri與uvm_do_pri_with的第二個(gè)參數(shù)是優(yōu)先級(jí),這個(gè)數(shù)值必須是一個(gè)大于等于-1的整數(shù)。數(shù)字越大,優(yōu)先級(jí)越高。
A:除transaction有優(yōu)先級(jí)外,sequence也有優(yōu)先級(jí)的概念
文件:src/sequence_pri/my_case0.sv
task my_case0::main_phase(uvm_phase phase);
…
env.i_agt.sqr.set_arbitration(SEQ_ARB_STRICT_FIFO);
fork
seq0.start(env.i_agt.sqr, null, 100);
seq1.start(env.i_agt.sqr, null, 200);
join
endtask
-
driver
+關(guān)注
關(guān)注
0文章
526瀏覽量
66611 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19171 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
2848
原文標(biāo)題:UVM之sequence機(jī)制
文章出處:【微信號(hào):FPGA學(xué)姐,微信公眾號(hào):FPGA學(xué)姐】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論