2016-05-26 3 views
1

Ich habe eine Frage zu UVM-Phasen. Wie ich die UVM-Phasen z.B. build_phase, connect_phases, sind nur für uvm_component gültig und sind abgeleitete Klassen.UVM-Phasen für Transaktionsobjekte

Das bedeutet, dass alle Klassen, die von uvm_transaction abgeleitet sind, d. H. Uvm_sequence, uvm_sequence_item, diese Phasen nicht unterstützen. Und in dem Code, wenn wir schreiben die folgenden

class setupSeq extends uvm_sequence #(seqItem); 
     `uvm_object_utils(setupSeq ) 

    function build_phase (uvm_phase phase); 
     req = seqItem::type_id::create("req"); 
    endfunction 

    task body(); 
     start_item(req); 
      … 
     finish_item(req); 
    endtask 
… 

endclass 

Dies wird Simulation Fehler geben, da die build_phase nie und Körper Task aufgerufen werden kann das „req“ Objekt nicht erkannt.

Also meine Frage ist - warum die Phasen nicht für uvm_transaction d. H. Uvm_sequence-Klassen unterstützt werden?

Antwort

4

Weil Sie sie nicht brauchen. Wenn Sie mit der Konstruktion von Sequenzen fertig sind, befinden Sie sich bereits in der run_phase. Die Lebensdauer aller Sequenzen ist während der run_phase, so dass andere Phasen in einer Sequenz nicht sinnvoll sind. Der Grund für separate Build/Connect/Run-Phasen besteht darin, die Testbench geordnet zu starten, sodass Sie Verbindungen von einer Komponente zur anderen herstellen können, ohne sich Gedanken darüber machen zu müssen, ob diese andere Komponente bereits existiert.

Also setzen Sie Ihre REQ-Konstruktion in den Konstruktor der Sequenz.

+0

Sehr gute Erklärung! Vielen Dank Dave – haykp

Verwandte Themen