UVM schneller machen durch ein neues Konfigurationssystem – Semiwiki

UVM schneller machen durch ein neues Konfigurationssystem – Semiwiki

Quellknoten: 3036575

Die Universal Verification Methodology (UVM) ist eine beliebte Methode zur Überprüfung von SystemVerilog-Designs und umfasst Folgendes: Konfigurationssystem Das hat leider einige Geschwindigkeits- und Nutzungsprobleme. Rich Edelman von Siemens EDA hat einen detaillierten 20-seitigen Artikel zum Thema Vermeidung dieser Probleme geschrieben, und ich habe ihn durchgesehen, um die Highlights für Sie zusammenzufassen. Verifizierungsingenieure verwenden eine UVM-Konfigurationsdatenbank, um Werte festzulegen und die Werte später in ihrem UVM-Test abzurufen. Ein Beispiel für das Festlegen und Abrufen eines Werts „T“ ist:

uvm_config#(T)::set(scope, example_path_name, field_name, value); uvm_config#(T)::get(scope, example_path_name, field_name, value);

Beim Verbinden der UVM-Testbench mit dem zu testenden Gerät wird die Konfigurationsdatenbank zum Übergeben der virtuellen Schnittstellen verwendet. Bei der Verwendung der UVM-Konfiguration gibt es drei Probleme:

  • Großer Code, etwa 2,600 Codezeilen
  • Erfordert eine genaue Typübereinstimmung, daher sind „int“ und „bit“ nicht dasselbe
  • Langsamer Code

Stellen Sie sich den Fall von langsamem Code vor, da es bei Tausenden von Aufrufen von set() mit Namen mit Platzhaltern bis zu 30 Minuten dauern kann, bis die „Set“- und „Get“-Phase abgeschlossen ist.

Verstrichene Zeit min

Rich schlägt eine neue Lösung für UVM-Konfigurationen vor, die viel schnellere Geschwindigkeiten bietet und im Vergleich nur wenige Sekunden dauert.

neue Lösung min

Wenn Ihr UVM-Code die Verwendung von Platzhaltern vermeidet und nur wenige Set-Befehle enthält, wird Ihr Code schneller ausgeführt.

Mögliche Lösungen für die UVM-Konfigurationsprobleme sind:

  • Verwenden Sie stattdessen eine globale Variable
  • Verwenden Sie die UVM-Konfiguration mit einem set()
  • Verwenden Sie die UVM-Konfiguration mit ein paar set()
  • Verwenden Sie einen Konfigurationsbaum
  • Probieren Sie etwas anderes

Dieser letzte Ansatz, etwas anderes auszuprobieren, ist die neue Lösung. Sie verwendet weiterhin die APIs set() und get() und vereinfacht sie dann durch Entfernen der Parametrisierung der Konfigurationen, Entfernen der Priorität und Entfernen der Änderung des Suchalgorithmus. Das Ergebnis dieses neuen Ansatzes sind hohe Geschwindigkeiten.

Ihr neues Konfigurationselement wird in der abgeleiteten Klasse von „config_item“ definiert und im folgenden Beispiel wird „int value“ als festgelegte Eigenschaft angezeigt. Zu Debugzwecken fügen Sie die Pretty-Print-Funktion hinzu.

Klasse my_special_config_item erweitert config_item; function new(string name = "my_special_config_item"); super.new(name); Endfunktion int-Wert; virtueller Funktionsstring konvertieren2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); Endfunktion Endklasse

Das „config_item“ verfügt über ein Namensattribut, und dieser Name sowie der Instanzname werden nachgeschlagen. Das Konfigurationsobjekt verfügt außerdem über eine get_name()-Funktion, um den Namen zurückzugeben. Um „instance_name.field_name“ zu finden, verwendet die Konfigurationsdatenbank ein assoziatives Array für schnelle Such- und Erstellungsgeschwindigkeiten.
Zur Nachverfolgbarkeit können Sie herausfinden, wer get gesetzt oder aufgerufen hat, da ein Dateiname und eine Zeilennummer Felder in den Funktionsaufrufen set() und get() sind.

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

Die Zugriffswarteschlange kann während des Debuggens ausgedruckt werden, um zu sehen, wer set() und get() aufgerufen hat.

Um Platzhalter zu unterstützen, musste ein Suchmechanismus mithilfe von Containern hinzugefügt werden. Betrachten Sie den Instanznamen „top.abcd*_0“.

Containerbaum min
Containerbaum

Der Platzhalterteil des Instanznamens wird mithilfe des Containerbaums anstelle des assoziativen Arrays verarbeitet.

Zusammenfassung

Der Datenaustausch zwischen dem Modul/der Instanz und der klassenbasierten Welt in einer UVM-Testbench kann mithilfe der UVM-Konfigurationsdatenbank erfolgen. Beachten Sie jedoch die Geschwindigkeitseinbußen. Wenn Ihre Methodik viele Konfigurationen verwendet, sollten Sie die Verwendung des neu eingeführten Ansatzes in Betracht ziehen, bei dem ein Paket etwa 300 Codezeilen anstelle der 2,600 Codezeilen in der UVM-Konfigurationsdatenbankdatei verwendet.

Lesen Sie den vollständigen 20-seitigen Artikel, Konfigurationswahnsinn ganz einfach vermeiden bei Siemens EDA.

Verwandte Blogs

Teile diesen Beitrag über:

Zeitstempel:

Mehr von Semiwiki