2017-08-09 1 views
0

Aus irgendeinem Grund mein Objekt zum Zeitpunkt der Erstellung nicht die Konfiguration von Test bestanden. Ich sehe GET nicht, wenn ich die Verfolgung aktiviere, nur SET. Ich habe Objekt, wie folgend:uvm_object_utils_begin schlägt fehl Set-Feld nach dem Test Set-Feld

class top_env_cfg extends uvm_object; 
    int set_default_env = 1; 
    `uvm_object_utils_begin(top_env_cfg) 
     `uvm_field_int(set_default_env,UVM_DEFAULT); 
    `uvm_object_utils_end 
    function new(string name = "top_env_cfg"); 
    super.new(name); 
    endfunction 
endclass 

In meinem Test, in der build_phase ich tue folgendes:

uvm_config_db#(int)::set(this, "*", "set_default_env" ,0); 

In meiner Umgebung in build_phase Ich schaffe dieses Objekt als:

env_cfg = top_env_cfg::type_id::create("env_cfg", this); 

Nach dem Erstellen dieses Objekts die set_default_env noch 1. Was kann falsch sein, und wie kann ich dies debuggen. Vielen Dank im Voraus.

+0

Können Sie den Code hinzufügen, den Sie in der 'build_phase()' Ihrer Umgebung haben? Wo machst du eine 'uvm_config_db get()' für diese Ressource? – AndresM

+0

Zuerst danke für Fixierungscode für Lesbarkeit. –

+0

Ich möchte nicht verwenden uvm_config_db :: get ..., ich erwarte, dass utils Makro in der Seite die Objektklasse erhalten sollte, wenn Objekt erstellt. Dies geschieht für uvm_env. Als ich die Erweiterung der Klasse von uvm_object zu uvm_component änderte, funktioniert das explizite get gut, aber es wird zum Zeitpunkt der Erstellung nicht implizit erhalten. Hier ist mein erhalten: status = uvm_config_db # (int) :: get (this, "", "enb_env", enb_env); –

Antwort

1

Die wichtige Sache, die über den "automatisierten Abruf von config_db resources" zu verstehen ist, dass es nicht automatisch passiert. This Verilab paper erklärt, was unter der Haube passiert, und ich zitiere den entsprechenden Abschnitt hier:

[...] eine Frage, die oft in Bezug auf die Beschaffung von Daten gefragt wird, ist: haben Sie immer explizit die anrufen get() Funktion? Die kurze Antwort lautet: . Im UVM gibt es Mechanismen zu automatisieren das Abrufen von Daten aus der Konfigurationsdatenbank. In , um die Ressource zu haben, automatisch abgerufen zwei Dinge müssen passieren:

  • Erstens, dass Ressource mit der Fabrik unter Verwendung der Feldautomatisierung Makros registriert werden muss.
  • Zweitens muss super.build_phase (phase) in der Funktion build_phase() aufgerufen werden.

Die "automatisierte" retrieval wird passieren, wenn Sie super.build_phase() von einem uvm_component nennen. In dem Fall, auf den Sie sich in Ihrer Frage beziehen, haben Sie eine (Sie haben kein UVM build_phase), Sie müssten also explizit einen uvm_config get() Aufruf ausführen, um die Ressource aus der Datenbank abzurufen.

+0

Danke, ich habe das erwartet, konnte aber keinen Ort finden, der dies beschreibt. –

+0

Hallo - Genau wie @Greg in seinem [Kommentar] erwähnt (https://StackOverflow.com/questions/44876888/systemverilog-dynamically-accessing-Suarray#comment76882659_44889436), "Danke" ist am besten gegeben durch Up-Voting und tatsächlich zu akzeptieren eine Antwort, wenn Sie damit zufrieden sind. – AndresM

Verwandte Themen