如何在定义后启动一个sequence

q:激励最初产生在driver中,后来产生在sequence中。为什么会有这个过程呢?
q:当一个激励在driver中产生,当要对dut施加不同的激励时,那应该怎么办呢?
q:如何在定义后启动一个sequence
            //当完成一个sequence的定义后,可以使用start任务将其启动my_sequence my_seq;my_seq = my_sequence::create(my_seq);my_seq.start(sequencer);//除了直接启动之外,还可以使用default_sequence启动uvm_config_db#(uvm_object_wrapper)::set(this,env.i_agt.sqr.main_phase,default_sequence, case0_sequence::get()); a:使用sequence机制之后,在不同的测试用例中,将不同的sequence设置成sequencer的main_phase的default_sequence。当sequencer执行到main_phase时,发现有default_sequence,那么它就启动sequence。
a:当一个sequence启动后会自动执行sequence的body任务。其实,除了body外,还会自动调用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)endtaskvirtual task post_body();`uvm_info(sequence0, post_body is called!!!, uvm_low)endtaskvirtual task body();…#100;`uvm_info(sequence0, body is called!!!, uvm_low)… endtask `uvm_object_utils(case0_sequence)endclass  
q:uvm支持同一时刻在同一sequencer上启动多个sequence,那同时启动多个sequence时,哪个先执行呢?
q:sequencer根据什么选择使用哪个sequence的transaction呢?这是uvm的sequence机制中的仲裁问题
                            //例如如下启动了seq0和seq1文件:src/no_pri/my_case0.svtask 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);joinendtask a:对于transaction来说,存在优先级的概念,通常来说,优先级越高越容易被选中。当使用uvm_do或者uvm_do_with宏时,产生的transaction的优先级是默认的优先级,即-1。可以通过uvm_do_pri及uvm_do_pri_with改变所产生的transaction的优先级
                                                    文件: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…endclassclass 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的第二个参数是优先级,这个数值必须是一个大于等于-1的整数。数字越大,优先级越高。
a:除transaction有优先级外,sequence也有优先级的概念
                  文件:src/sequence_pri/my_case0.svtask 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);joinendtask


虹科荣获国家级专精特新“小巨人”称号
建立一个属于自己的AVR的RTOS
固高科技推出 GTSD13系列网络型智能伺服驱动器
电位差的计算案例
RT-Thread开源作品运动手表展示
如何在定义后启动一个sequence
电源滤波器安装注意事项
QNAP推出第二代Guardian PoE管理型交换机
开关电源的基本选择依据
如何才能提高iPhone的充电效率
“HEED-HARP”技术或用于内窥镜摄像头,大幅提高性能
追频固态特斯拉线圈详细制作图解
电冰箱高低压保护电路_电冰箱保护器控制电路
怎么区分锰锌磁环电感和镍锌磁环电感
探讨华为战略布局AI芯片的背后
如何做好水库大坝实时安全监测
TXGA SIM卡座,满足用户的多种插卡方式需求
SaberRD导入FMU的步骤概述
区块链游戏《块西游》让你真正拥有虚拟世界
如何对SpinalEnum类型进行操作