UVM sneller maken via een nieuw configuratiesysteem - Semiwiki

UVM sneller maken via een nieuw configuratiesysteem – Semiwiki

Bronknooppunt: 3036575

De Universal Verification Methodology (UVM) is een populaire manier om SystemVerilog-ontwerpen te helpen verifiëren, en omvat: configuratie systeem dat heeft helaas enkele snelheids- en gebruiksproblemen. Rich Edelman van Siemens EDA schreef een gedetailleerd artikel van twintig pagina's over hoe je deze problemen kunt vermijden, en ik heb het doorgenomen om de hoogtepunten voor je samen te vatten. Verificatie-ingenieurs gebruiken een UVM-configuratiedatabase om waarden in te stellen en deze waarden later in hun UVM-test te verkrijgen. Een voorbeeld van het instellen en verkrijgen van een waarde 'T' is:

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

Het verbinden van de UVM-testbank met het te testen apparaat maakt gebruik van de configuratiedatabase om de virtuele interfaces door te geven. Er zijn drie problemen bij het gebruik van de UVM-configuratie:

  • Grote code, zo'n 2,600 regels code
  • Vereist exacte typematching, dus 'int' en 'bit' zijn niet hetzelfde
  • Langzame code

Neem het geval van langzame code, omdat met duizenden aanroepen van set() het gebruik van namen met jokertekens wel 30 minuten kan duren om de 'set'- en 'get'-fase te voltooien.

Verstreken tijd min

Rich stelt een nieuwe oplossing voor UVM-configuraties voor die veel hogere snelheden biedt, die in vergelijking slechts een paar seconden in beslag nemen.

nieuwe oplossing min

Als uw UVM-code het gebruik van jokertekens vermijdt en weinig 'set'-opdrachten bevat, wordt uw code sneller uitgevoerd.

Mogelijke oplossingen voor de UVM-configuratieproblemen zijn:

  • Gebruik in plaats daarvan een globale variabele
  • Gebruik UVM-configuratie met één set()
  • Gebruik UVM-configuratie met een paar set()
  • Gebruik een configuratieboom
  • Probeer iets anders

Die laatste benadering om iets anders te proberen is de nieuwe oplossing, en deze blijft de API set() en get() gebruiken, en vereenvoudigt vervolgens door de parameterisering van de configuraties te verwijderen, de voorrang te verwijderen en de wijziging van het opzoekalgoritme te verwijderen. De resultaten van deze nieuwe aanpak zijn hoge snelheden.

Uw nieuwe configuratie-item is gedefinieerd in de afgeleide klasse van 'config_item', en het onderstaande voorbeeld toont 'int value' als de eigenschap die wordt ingesteld. Voor foutopsporingsdoeleinden voegt u de functie Pretty-Print toe.

klasse my_special_config_item breidt config_item uit; function new(stringnaam = "my_special_config_item"); super.nieuw(naam); eindfunctie int waarde; virtuele functie string convert2string(); return $sformatf("%s - waarde=%0d <%s>", get_name(), waarde, super.convert2string()); eindfunctie eindklasse

Het 'config_item' heeft een naamattribuut, en deze naam wordt opgezocht, plus de instantienaam. Het configuratieobject heeft ook een get_name() functie om de naam te retourneren. Om een ​​“instance_name.field_name” te vinden, gebruikt de configuratiedatabase een associatieve array voor snelle opzoek- en aanmaaksnelheden.
Voor traceerbaarheid kunt u achterhalen wie get heeft ingesteld of heeft aangeroepen, omdat een bestandsnaam en regelnummer velden zijn in de functieaanroepen set() en get().

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

De toegangswachtrij kan tijdens het debuggen worden afgedrukt om te zien wie set() en get() heeft aangeroepen.

Ter ondersteuning van jokertekens was het toevoegen van een opzoekmechanisme met behulp van containers vereist. Beschouw de instantienaam 'top.abcd*_0'.

containerboom min
Containerboom

Het jokertekengedeelte van de instantienaam wordt afgehandeld door gebruik te maken van de containerboom, in plaats van de associatieve array.

Samengevat

Het delen van gegevens tussen de module/instantie en de op klassen gebaseerde wereld in een UVM-testbank kan worden gedaan met behulp van de UVM-configuratiedatabase, maar houd rekening met de snelheidsvertragingen. Als uw methodologie veel configuraties gebruikt, overweeg dan om de nieuwe aanpak te gebruiken die een pakket bevat dat ongeveer 300 regels code gebruikt in plaats van de 2,600 regels code in het UVM-configuratiedatabasebestand.

Lees het volledige artikel van 20 pagina's, Configuratiegekte vermijden op de gemakkelijke manier bij Siemens EDA.

Gerelateerde blogs

Deel dit bericht via:

Tijdstempel:

Meer van semi-wiki