如何停止sequence
在做reset测试的时候,先start一个sequence,在其body进行的途中复位,并把它终止。记录一下遇到一系列的问题。
干掉sequence的两种方式
本节简要介绍两种终止sequence的方法,用法都非常的简单,但采用这两种方法来结束sequence的时候,都有潜在的风险,这将在下节介绍。
另外,如果有其他更好的方法,欢迎大家补充。
1、process
process p1;//process为内建class,只需声明句柄,无需手动创建
fork
begin//开启线程
p1 = process::self();//将p1与此线程关联起来
v_seq = new();
v_seq.randomize();
v_seq.start(v_sqr);//virtual sequence创建与挂载运行,v_seq此时开始运行
end
join_none
wait(***);//此处为你Kill这个process的条件
p1.kill();//干掉上面的begin线程
关于process的使用非常简单,可参考:systemverilog的process类
2、stop_sequences
v_sqr.stop_sequences();
当sqr调用function stop_sequences()时,会kill掉此时sqr中运行的所有seq以及子seq,并删除当前排队中的所有request/lock/response。
stop_sequence用起来更为简单,也看似更为合理。但仍存在潜在风险。
关于stop_sequence,详见UVM sequencer
干掉sequence时,需要注意的事情
1、干掉seq时,seq、sqr、driver三者的关联,注意事项以及报错
2、一种解决方法
3、环境中其他需要注意的地方
环境配置信息的复位
driver、monitor、scoreboard复位
注意raise/drop_objection
其它组件复位
浙公网安备 33010602011771号