微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > UVM virtual sequence 疑问

UVM virtual sequence 疑问

时间:10-02 整理:3721RD 点击:
大家好:请问,在张强UVM实战书中提到了virtual sequence机制,但是在写定义sequence或者sequencer时,并没有使用关键字virtual是怎么回事呢?谢谢啦!

这俩不是一概念。
virtual sequence 本质上就是sequence,只是他不发trans只是控制其他的seqence
virtutal关键字是跟多态相关的,想实现类的多态需要virtual关键字的虚函数来实现

virtual sequence 也可以发tran的,可以指定默认sequencer,这样的话,好像应该去掉 virtual(这个不确定)。

因为virtual sequence后面不带参数,所以叫virtual,virtual sequencer类似

virtual sequence是要和virtual sequencer配合使用的,是一种概念性的东西。
他和通常意义上的定义function或task的virtual是没有关系的。
一个sequence相当于一辆车,一个sequencer相当于一条路,virutal sequence就像是管理者,让不同的车跑在不同的路上,并控制他们的先后顺序和执行情况。
userguide里面不是有例子么。

您好,我写了一个virutal seuqnece,比如顺序执行sequence A,B,C 那我这个virtual seuqence怎么启动呢?其他sequence都是传transaction的,我要写一个配套的virtual sequencer,用default seuqence启动这个virtual sequence? 还有就是,需要建virtual driver和virtual agent吗?

那我virutal sequence是在virtual sequencer里用default的sequence启动了?那还需要写irtual driver和virtual agent吗?

不用了,但你得给virtual_sequencer里的sequencer handle赋值

哦,是在顶层的test里赋值吗?然后在顶层的test case里, 对virtual sequence raise objection和drop objection来启动这个virtual sequence吗,我直接用的start()函数启动sequence的,下面试我写的一个顶层的task启动virtual seuqence的代码,能够运行task main_phase(uvm_phase phase);
v_sequence v_seq1;
phase.raise_objection(.obj(this));
v_seq1 = v_sequence::type_id::create(.name("v_seq1"), .contxt(get_full_name()));
v_seq1.v_seqr_a = env_a.i_agent.seqr;
v_seq1.v_seqr_b = env_b.i_agent_b.seqr_b;
assert(v_seq1.randomize());
v_seq1.start(.sequencer(null));
#100 ;
phase.drop_objection(.obj(this));
endtask: main_phase

但我生成的结果的时候有一些问题, 前两个transaction的包不是在virtual seuqence里启动的,是在我build env_a, env_b启动的(因为我需要给virtual seuqencer的句柄赋值,所以build了这两个env),后面的就是在virtual sequence里启动的了。所以这点我比较奇怪,怎么才能把这前两个包给disable呢?
UVM_INFO @ 0.0ns: reporter [RNTST] Running test v_test_base1...
--------------------------------------------------------------------------------------------------------
NameTypeSizeValue
--------------------------------------------------------------------------------------------------------
reqpacket_b-@870
sa_bintegral2'h0
da_bintegral2'h0
parent sequence (name)string17packet_sequence_b
parent sequence (full name)string53uvm_test_top.env_b.i_agent_b.seqr_b.packet_sequence_b
sequencerstring35uvm_test_top.env_b.i_agent_b.seqr_b
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
NameTypeSizeValue
--------------------------------------------------------------------------------------------------
reqpacket-@866
saintegral4'h5
daintegral4'h1
parent sequence (name)string15packet_sequence
parent sequence (full name)string47uvm_test_top.env_a.i_agent.seqr.packet_sequence
sequencerstring31uvm_test_top.env_a.i_agent.seqr
--------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------
NameTypeSizeValue
----------------------------------------------------------------------------------
reqpacket-@874
saintegral4'hf
daintegral4'h7
parent sequence (name)string7v_seq_a
parent sequence (full name)string14v_seq1.v_seq_a
sequencerstring31uvm_test_top.env_a.i_agent.seqr
----------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
NameTypeSizeValue
--------------------------------------------------------------------------------------
reqpacket_b-@880
sa_bintegral2'h2
da_bintegral2'h1
parent sequence (name)string7v_seq_b
parent sequence (full name)string14v_seq1.v_seq_b
sequencerstring35uvm_test_top.env_b.i_agent_b.seqr_b

问题已解决,是因为我env_a和env_b里加了default_sequence,所以启动了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top