在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...
uvm_sequence和uvm_sequence_item不是组件,所以无法通过config_db按照层次关系对其进行配置。因此要用一个trick:sequence一旦活动起来,它必须挂载到一个sequencer上(发送item),也就是sequence能够获取sequencer的句柄,通过句柄来访问sequencer中的成员变量或等信息,那么这样sequence可以依赖于sequencer的结构关系,间接通过sequence...
UVM中 test bench及其启动 uvm启动sequence的方法,start():sequence.strat(sequencer,parent_sequence,优先级),第一个参数是需要挂载的sequencer;第二个是parent_sequence,一般传入this或者不传入;第三个是优先级;第四个call_pre_post默认为1,则自动执行pre_body/
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。
2.2.sequence的嵌套启动 嵌套sequence的启动可以通过start(m_sequencer)来完成,也可以通过uvm_do()系列宏来完成; m_sequencer是base_sequencer启动时所使用的sequencer的指针,也就是说,嵌套的seq启动时所使用的sequencer同所在的sequence所使用的sequencer一致。
第一种: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"); ...
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, 那么必...
2.1 seqr.start_phase_sequence(phase)解析 start_phase_sequence(xxx)是定义在uvm_sequencer_base类...