在sequence中显示调用strat()函数,第一个参数是需要挂载的sequencer;第二个是parent_sequence,一般传入this或者不传入;第三个是优先级;第四个call_pre_post默认为1,则自动执行pre_body/ post_body()函数 执行pre_start,body等函数。此时就完成了sequence的启动过程。 在start()函数中,首先调用了函数set_item_conte...
2.1 start() 使用场景:将sequence挂载到sequencer上的应用。 这个方法中,应该首先指明sequencer的句柄,如果这个sequence是顶部的sequence(没有上层嵌套他),那么可以省略对第二个parent_sequence的指定。 第三个参数的系统默认值是-1,会使得这个sequence会继承parent_sequence的优先值级,如果是顶部的sequence,会自动设置为1...
这个宏的本质是声明了一个SEQUENCER类型的成员变量,如在定义sequence时,使用此宏声明sequencer的类型:`uvm_declare_p_sequencer(my_sequencer)则相当于声明了如下的成员变量:my_sequencer p_sequencer;UVM之后会自动将m_sequencer通过cast转换成p_sequencer,因此在sequence中可以直接使用成员变量p_sequencer来引用dmac和smac...
当完成一个sequence的定义后,就可以使用start任务将其启动,即在my_case的main_phase中创建自定义的sequence对应的实例,然后调用sequence.start(sequencer)来启动。除了直接启动之外,还可以使用default_sequence启动。一种是通过在my_case的build_phase使用uvm_config_db设置default_sequence给sequencer,另一种方式是先实例化...
sequencer是uvm组件,一个sequencer可以调用多个sequence uvm_squence class普通成员 sequence执行流程 sequencer和driver是在agent中进行例化的 sequencer中可以设置默认的sequence,设置完成之后,会自动执行sequence中的body(),另外会自动执行driver中的get_next_item() sequencer中的start()函数会调用sequence中的body()函数,...
uvm_component_item和uvm_sequence都是基于uvm_object,它们不同于uvm_component只应当在build阶段作为UVM环境进行创建和配置,而是可以在任何阶段创建。 由于无法判定环境在run阶段什么时间点会创建sequence和将其产生的sequence item 挂载(attach)到sequencer上面,所以无法通过UVM环境结构或者phase机制来识别sequence的运行阶段...
3)每一个sequence都有一个body 任务(main_phase 是属于components之类的),当一个sequence 启动之后,会自动执行body 的代码。 4)uvm_do 宏:1)创建一个my_transaction 的实例m_trans;2)将其随机化;3)最终送给sequencer。 5)如果不使用uvm_do 宏,可以直接使用start_item 与finish_item 产生transaction。
start方法是“uvm_seuquence_base”类中的一个task。 原型为:virtual task start (uvm_sequencer_base sequencer, uvm_sequence_base parent_sequence = null, int this_priority = -1, bit call_pre_post = 1); 参数解释: sequencer: 如果被启动的sequence(调用start方法的sequence)中要产生transaction, 那么必...
sequence启动后,会根据参数设置情况,自动执行pre_start(), pre_body(), parent_seq.pre_do(),parent_seq.mid_do(), body(), parent_seq.post_do(), post_body, post_start()等函数/任务。 seq.start(m_sequencer,null,,1);// The following methods will be called in start()seq.pre_start();(...
第一种:start启动 最简单粗暴的一种方式,只需要在某个component,如my_sequencer、my_env甚至base_test的main_phase中启动。 task fish_env::main_phase(uvm_phase phase); fish_sequence seq;//创建seq实例phase.raise_objection(this); seq = fish_sequence::type_id::create("seq"); ...