seq中的grab()函数和UVM

时间:2017-08-01 11:01:10

标签: uvm

抓取功能可以在uvm_sequence_baseuvm_sequencer_base找到,解释让我对锁定和抓取感到困惑。

我认为序列就像流水一样,序列发生器就是阀门,只有序列发生器可以被阻挡或打开。

我是对的吗?请按顺序和音序器说明抓斗()的任何内容。

2 个答案:

答案 0 :(得分:1)

我已尝试在各种情况下使用这两种方法,这是我的观察强文本

让我们假设有4个序列流等待定序器授予访问权限 S1,S2,S3,S4(每个包含10个子序列)

1)如果只将grab / ungrab用于一个序列,请说S2。无论如何设置仲裁,S2都将首先获得访问权限。 S2的所有子序列都将被其他子序列传递。其他顺序将根据仲裁设置执行。

2)如果仅对一个序列使用锁定/解锁,请说S3。它将等待轮流访问定序器,并且所有子序列将一个接一个地执行。

到达顺序-> S1,S2,S3,S4

假定仲裁为SEQ_ARB_FIFO(默认)

执行-> S1.seq1-> S2.seq1-> S3.seq1-> S3.seq2-> .......-> S3.seq10-> S4.seq1-> S1.seq2-> S2.seq2-> ......-> S4.seq10

  1. 无论仲裁设置如何,都将按照FIFO的顺序赋予多个锁/抢夺优先权,并给已排队的抢劫/抢夺

eg1:到达顺序-> S1,S2,S3,S4

S1:锁定/解锁

S3:抢夺/放弃

假定仲裁为SEQ_ARB_FIFO(默认)

执行-> S1.seq1-> S1.seq2-> .... S3.seq1-> S3.seq2-> .......-> S3.seq10-> S2.seq1-> S4 .seq1-> S2.seq2-> ......-> S4.seq10

eg2:到达顺序-> S1,S2,S3,S4

S1:锁定/解锁

S3:锁定/解锁

假定仲裁为SEQ_ARB_FIFO(默认)

执行-> S1.seq1-> S1.seq2-> .... S3.seq1-> S3.seq2-> .......-> S3.seq10-> S2.seq1-> S4 .seq1-> S2.seq2-> ......-> S4.seq10

答案 1 :(得分:0)

grab()lock()非常相似。唯一的区别是grab()请求放在定序器仲裁队列的前面,lock()请求放在定序器仲裁队列的后面。

此博客提供了关于如何使用内置grablock函数的UVM音序器的最佳解释之一:

http://sagar5258.blogspot.com/2017/02/