抓取功能可以在uvm_sequence_base
和uvm_sequencer_base
找到,解释让我对锁定和抓取感到困惑。
我认为序列就像流水一样,序列发生器就是阀门,只有序列发生器可以被阻挡或打开。
我是对的吗?请按顺序和音序器说明抓斗()的任何内容。
答案 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
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()
请求放在定序器仲裁队列的后面。
此博客提供了关于如何使用内置grab
和lock
函数的UVM音序器的最佳解释之一: