Il existe 2 façons de démarrer des séquences virtuelles (qui à leur tour lancent différentes séquences sur différents séquenceurs). Conserver les poignées des séquenceurs cibles dans les séquences virtuelles, puis affecter ces poignées avant de commencer la séquence.
Comme ceci.
vir_seq vira = vir_seq::type_id::create("virtual_sequence");
vira.sequencer_1 = .... ; // sequencer 1 hierarchical path
vira.sequencer_2 = .... ; // sequencer 2 hierarchical path
vira.start(null); // Start the virtual sequence using null
- Maintenir les poignées des séquenceurs cibles dans un autre séquenceur (séquenceur virtuel) et démarrer la séquence virtuelle sur ce séquenceur virtuel. Cependant, l'approche
Virtual Sequencer
n'est pas recommandée, car elle ajoute simplement une autre couche de hiérarchie et est compliquée à réutiliser. Un autre point est que, uvm_virtual_sequencer
est seulement uvm_sequencer
seulement, et il ne peut pas être un uvm_component
, comme la séquence virtuelle sera démarrée sur elle.
Voici le code correspondant du code source d'UVM 1.2.
typedef uvm_sequencer #(uvm_sequence_item) uvm_virtual_sequencer