2017-09-04 4 views
0

J'essaie de comprendre quel est le but d'un UVM Virtual Sequencer.Quel est le but de UVM Virtual Sequencers

Si vous regardez ce que l'académie de vérification en dit. C'est fondamentalement une classe de conteneur pour d'autres séquenceurs. On fait juste une référence hérétique à m_seq_a ou à m_seq_b lorsqu'on fait un début sur leur séquence. Pourquoi un séquenceur virtuel n'est-il pas juste un uvm_component? Y a-t-il quelque chose qu'un uvm_virtual_sequencer peut faire? On ne peut pas démarrer sur le séquenceur virtuel.

Répondre

1

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