首页 > 学院 > 开发设计 > 正文

UVM的sequence机制(四)

2019-11-06 07:25:14
字体:
来源:转载
供稿:网友

Sequence机制: 在整个UVM验证平台中,sequence负责transaction的产生,并通过sequencer发送给driver。要产生不同的transaction,那么就要在sequence中下功夫。不同的case的差异主要体现在sequence的不同上。

复杂的同步:virtual sequence 为了使用virtual sequence,一般需要一个virtual sequencer。 Class vsequencer extends uvm_se quencher; Cpu_sequencer cpu_sqr; Mac_sequencer mac_sqr; `uvm_component_utils(vsequencer); Endclass

在test中,可以例化vsqr,并把相应的sequencer赋值给vsqr的sequencer的指针。 Class base_test extends uvm_test; Env env_inst; Vsequencer vsqr; Function build_phase(uvm_phase phase); …… Vsqr = vsequencer::type_id::create(“vsqr”,this); …… Endfunction Function connect_phase(uvm_phase phase); ……… Vsqr.cpu_sqr = env_inst.cpu_agent.cpu_sqr; Vsqr.mac_sqr = env_inst.mac_agent.mac_sqr; …….. Endfunction Endclass

在virtual sequence 里面可以使用uvm_do系列宏来发送transaction Class vseq extends uvm_sequence; Task body(); Cpu_seq cseq; Mac_seq mseq; uvm_do_on(cseq.p_sequencer.cpu_sqr) uvm_do_on(mseq.p_sequencer.mac_sqr) Endtask uvm_object_utils(vseq) uvm_declare_p_sequencer(vsequencer) Endclass uvm_do_on控制其他的sequence为想要的sequencer产生transaction。 控制该平台的关闭:通过在最顶层的sequence,最顶层的sequence肯定不会做为uvm_do宏的参数。就是说,一般的可以在virtual sequence中是使用starting_phase.drop_objection来控制验证平台关闭。

慎用fork……join_none


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表