lock()与grab()的作用当一个sqr对应多个seq时,seq通过调用lock/grab来取得sqr的所有权,在unlock(), ungrab()之前一直发送这一个seq的xaction。
将uvm_sequence/sequencer example例子中的两个seq:seq0和seq1的body部分做修改:
seq0_lock.png seq1.png
都是发送15个xaction。其中seq0发送5个后,调用lock(),发送5个,调用unlock(), 再发送5个。
仿真log如下:
lock_compare.png
可以看到,seq0发送了5个xaction后(seq0发送偶数,seq1发送奇数),调用了lock,之后不再是seq0/1交替发送xaction,而是连续由seq0发送5个xaction之后,通过unlock释放之后,再seq0/1交替发送,最后几个xaction都是由seq1发送,是因为seq0的15个xaction相比seq1已经提前发送完了。
将seq0中的lock/unlock替换成grab/ungrab,仿真log如下:
grab_compare.png
在这种情况下(两个seq,只有一个seq调用了lock/grab), grab与lock的使用没有区别。
网友评论