2016-03-22 2 views
2

Wie kontrolliere ich die Ausführlichkeit bestimmter Komponenten, so dass ich nur wenigen Komponenten eine Ausführlichkeit geben kann?Einstellung der Ausführlichkeit nur für wenige/sequenzen/objects/interfaces in uvm?

Nehmen wir an, zum Beispiel in der Verifikation eines bestimmten Features, der Test, einige Komponenten/Sequenzen/Objekte/Schnittstellen usw. beteiligt sind. Ich möchte die Ausführlichkeit von nur diesen auf UVM_HIGH setzen. Ich möchte nicht festlegen, dass der globale Schweregrad auf UVM_HIGH gesetzt wird, da viele nicht zusammenhängende Debug-Nachrichten kommen könnten, die die Protokollgröße erhöhen könnten.

Was wäre ein sauberer Weg dies zu tun? Es ist in Ordnung, eine zusätzliche Kommandozeile-plusarg zu verwenden, um dies auszulösen. Grundsätzlich würde die Anforderung lauten, dass der Test/die Komponenten/Sequenzen/Objekte/Schnittstellen, der für eine bestimmte Merkmalverifizierung verwendet wird, den globalen Schweregrad oder den merkmalsspezifischen Schweregrad annehmen sollte, je nachdem, welcher höher ist.

Bitte beachten Sie, dass die eingebauten Berichtsmethoden von uvm_component nicht verwendet werden können, da die uvm_info Anweisungen innerhalb von uvm_object erweiterten Klassen sowie Schnittstellen sein können.

Antwort

4

Sie können die Ausführlichkeit einer Komponente über die Befehlszeile als Simulationsargument steuern. Es gibt zwei Möglichkeiten:

  • +uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase>
  • +uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<phase> Dieses Sie die Simulationszeit Sie die angelegte Ausführlichkeit

comp ist der Pfad der Komponente und Wildcard gestartet werden soll angeben können * unterstützt wird. Beispiel: uvm_test_top.env.agnt.*
id ist die Nachrichtenkennung. Sie können auf alle Nachrichten innerhalb des Komponentenbereichs anwenden, indem Sie die ID auf _ALL_ setzen verbosity ist Ausführlichkeit z. UVM_LOW, UVM_MEDIUM, UVM_HIGH usw. phase ist die Phase, auf die die Ausführlichkeit angewendet werden soll.

Weitere Einzelheiten Ich schlage vor, Lesung:

+1

gefunden werden Wenn Sie wie ich sind, und Sie haben ein Skript, das für Sie den Platzhalter auf der Ihr sims läuft Die Befehlszeile könnte ein Problem verursachen. Dies erfordert nur, dass Sie es mit einem umgekehrten Schrägstrich entkommen. \ * ' – nguthrie

+0

Dank Greg, , aber dies würde erfordern, dass Sie alle Komponenten, die an einer Feature-Verifizierung teilnehmen, verfolgen und das Plusarg für jede Komponente verwenden. Ich habe mich gefragt, ob es einen Weg gibt, das mit einem einzigen Plusarg zu lösen. Ich hätte nichts dagegen, zusätzliche Zeilen Code in meine TB –

+0

@VineethVS, Lesen 4.2. _Wenden Sie Ausführlichkeit mit Methode Calls_ von [UVM Message Display Befehle Fähigkeiten] (http://www.sunburst-design.com/papers/CummingsSNUG2014AUS_UVM_Messages.pdf), um zu sehen, wie die Ausführlichkeit aus dem Code gesetzt wird. Ich habe es nicht in meine ursprüngliche Antwort aufgenommen, weil es Wartungsmangel verursachen kann, wenn Sie nur eine Handvoll Situationen lösen. – Greg

2

Sie uvm_report_catcher dafür verwenden können. Es funktioniert mit und Schnittstelle. Sie können auch die API get_id(), get_message() usw. für die Zuordnung bestimmter Komponenten/Objekte verwenden und nur die Ausführlichkeit dieser Komponente/dieses Objekts festlegen.

prüfe mein einfaches Beispiel auf here on edaplaygroud

0

ich verschiedene Möglichkeiten ausprobiert und kam auch mit diesem Weg nach oben.

Nicht sicher, wie viel es für Leute hilfreich wäre.

simulieren dies mit der Laufzeit-Befehle +user_verb=UVM_LOW +UVM_VERBOSITY=UVM_MEDIUM

class user_class extends uvm_object; 

    string report_id = "user_class"; 
    string user_verb; 

    typedef uvm_enum_wrapper#(uvm_verbosity) uvm_verbosity_wrapper_e; 

    uvm_verbosity current_verb; 
    uvm_verbosity USER_VERBOSITY=UVM_HIGH; 

    function new (string name="my_class"); 
    super.new(name); 
    report_id = name; 
    //void'($value$plusargs("user_verb=%s",user_verb)); 
    //void'(uvm_verbosity_wrapper_e::from_name (user_verb,USER_VERBOSITY)); 
    if ($test$plusargs("user_verb")) begin 
     current_verb=uvm_top.get_report_verbosity_level(UVM_INFO,"current_verb");   USER_VERBOSITY=uvm_top.get_report_verbosity_level(UVM_INFO,"user_verb"); 
    end 

    $display("user_verb = %s",user_verb); 
    $display("current_verb = %s",current_verb); 
    endfunction : new 


    task display; 
    `uvm_info(report_id,"This is my message",USER_VERBOSITY)  
    endtask 

endclass: user_class 


module top; 
    string id; 
    string report_id = "top"; 
    user_class m_user_class; 

    initial begin 
    m_user_class = new("m_user_class"); 
    m_user_class.display; 
    `uvm_info(report_id,"This is my message",UVM_LOW) 
    end 
endmodule: top 

Ein Arbeitsbeispiel kann bei edaplayground here

Verwandte Themen