本文共 668 字,大约阅读时间需要 2 分钟。
1.在my_sequencer 上同时启动两个sequence。
1)my_case0:
2)sequence0:
3)sequence1:
4)结果:
4.1)sequencer 选择哪个sequence 的transaction是sequence 机制中的仲裁问题。
4.2)对于transaction 来说,存在优先级概念,越高越容易被选中。
4.3)使用uvm_do 或者uvm_do_with 是,产生的transaction 优先级默认是 -1。
4.4)通过uvm_do_pri 和uvm_do_pri_with 改变transaction 的优先级:
2.transaction 优先级
1)my_case0:
1.1)第二个参数是优先级,必须大于-1,数字越大,优先级越高。
1.2)应该sequence1 全部完成后,在开始sequence0。
1.3)运行后,不是这样的。。。因为sequencer 的算法有很多种:
默认是SEQ_ARB_FIFO。
1.4)若要有效,应该设置 SEQ_ARB_STRICT_FIFO 或者 SEQ_ARB_STRICT_RNADOM
1.5)结果:
3.sequence 也可以设置优先级:
1)第二个参数是parent sequence,可以设为null。
2)第三个是优先级,如果不指定为-1,同样不能为一个小于-1 的数字。
3)sequence1 发完才发送sequence0。
4)对sequence 设置优先级的本质即设置其内产生的transaction 的优先级。