其实,当在sequence中使用uvm_do宏时,其默认的sequencer就是此sequence启动时为其指定的sequencer(my_sequence.start(my_sequencer), 括号里的my_sequencer),sequence会将这个sequencer的指针my_sequencer放在其成员变量m_sequencer中,换句话说就是m_sequencer此时指向的就是my_sequencer。这里要注意,虽然m_sequencer句柄具...
p_sequencer是由`uvm_decalre_p_sequencer宏,定义在用户指定的sequence(例如类库中的your_sequence)中的,用户指定的类型的句柄(例如类库中的your_sequencer),也就是说 p_sequencer是由uvm_decalre_p_sequencer宏产生的 p_sequencer是用户指定的sequence的成员变量(这里是your_sequence的成员变量,因为`uvm_decalre_p_...
在图1中,我们看到,sequence里会调用sequencer.wait_for_grant(),sequencer.send_request()和sequencer.wait_for_item_done()这几个task。这几个task其实就是在uvm_sequencer_base中实现的,wait_for_grant()的作用是让特定的sequence获得sequencer的授权,send_request()的作用是将获得授权的sequence的item发送给sequence...
transaction,那么它的参数需要改成uvm_sequence_item,同时,driver里面也要有相应的处理。p_sequencer的使用 前文有讲到一个m_sequencer,这个指针是在sequence启动后,所在sequencer的指针。它的类型是uvm_sequencer_base(uvm_sequencer的基类) 而不是my_sequencer类型的。 当存在这么一个情况,我在 ...
`uvm_declare_p_sequencer,使得virtualsequence可以使用声明后的p_sequencer(类型为mcdf_virtual_sequencer),来进一步回溯到其内部的各个sequencer句柄。在这里,使用`uvm_declare_p_sequencer是较为方便的,因为这个宏在后台,可以新创建一个p_sequencer变量,而将m_sequencer的默认变量 ...
sequence属于object,sequencer属于component。 正常来说,sequence无法与sequencer进行交互,也不可能通过component的结构层次获得顶层配置及其他信息。因此需要一个能沟通sequence和sequencer的桥梁,m_sequencer就是这个桥梁。 3、怎么使用m_sequencer 通常调用uvm_do系列宏时,uvm能够自动根据传入的sequence或sequence_item调用对应...