Gør UVM hurtigere gennem et nyt konfigurationssystem - Semiwiki

Gør UVM hurtigere gennem et nyt konfigurationssystem – Semiwiki

Kildeknude: 3036575

Universal Verification Methodology (UVM) er en populær måde at hjælpe med at verificere SystemVerilog-design, og den inkluderer en konfigurationssystem der desværre har nogle hastigheds- og brugsproblemer. Rich Edelman fra Siemens EDA skrev et detaljeret 20-siders papir om emnet, hvordan man undgår disse problemer, og jeg har gennemgået det for at opsummere højdepunkterne for dig. Verifikationsingeniører bruger en UVM-konfigurationsdatabase til at indstille værdier og derefter for at få værdierne senere i deres UVM-test. Et eksempel på at indstille og få en værdi 'T' er:

uvm_config#(T)::set(omfang, instansstinavn, feltnavn, værdi); uvm_config#(T)::get(omfang, instansstinavn, feltnavn, værdi);

Tilslutning af UVM-testbænken til enheden under test bruger konfigurationsdatabasen til at videregive de virtuelle grænseflader. Der er tre problemer med at bruge UVM-konfigurationen:

  • Stor kode, omkring 2,600 linjer kode
  • Kræver nøjagtig typematchning, så 'int' og 'bit' er ikke det samme
  • Langsom kode

Overvej tilfældet med langsom kode, for med tusindvis af kald til set() kan det tage op til 30 minutter at bruge navne med jokertegn at fuldføre 'set' og 'get'-fasen.

Forløbet tid min

Rich foreslår en ny løsning til UVM-konfigurationer, der har meget hurtigere hastigheder, hvilket kun tager et par sekunder i sammenligning.

ny løsning min

Hvis din UVM-kode undgår at bruge jokertegn og har få 'set'-kommandoer, så vil din kode køre hurtigere.

Mulige løsninger på UVM-konfigurationsproblemerne er:

  • Brug i stedet en global variabel
  • Brug UVM-konfiguration med ét sæt()
  • Brug UVM-konfiguration med et par sæt()
  • Brug et konfigurationstræ
  • Prøv noget andet

Den sidste tilgang til at prøve noget andet er den nye løsning, og den fortsætter med at bruge set() og get() API'en, og forenkler derefter ved at fjerne parameterisering af konfigurationerne, fjerner forrang og fjerner ændringen af ​​opslagsalgoritmen. Resultaterne af denne nye tilgang er høje hastigheder.

Dit nye konfigurationselement er defineret i den afledte klasse fra 'config_item', og eksemplet nedenfor viser 'int value' som egenskaben, der indstilles. Til debug-formål tilføjer du pretty-print-funktionen.

klasse my_special_config_item udvider config_item; funktion ny(strengnavn = "my_special_config_item"); super.ny(navn); slutfunktion int værdi; virtuel funktionsstreng convert2string(); return $sformatf("%s - værdi=%0d <%s>", get_name(), værdi, super.convert2string()); slutfunktion slutklasse

'config_item' har en navneattribut, og dette navn slås op, plus instansnavnet. Konfigurationsobjektet har også en get_name() funktion til at returnere navnet. For at finde et hvilket som helst "instansnavn.feltnavn" bruger konfigurationsdatabasen et associativt array til hurtig opslag og oprettelseshastigheder.
For sporbarhed kan du finde ud af, hvem der satte eller hvem der kaldte get, fordi et filnavn og linjenummer er felter i funktionskaldene set() og get().

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

Accessor-køen kan udskrives under debug for at se, hvem der kaldte set() og get().

For at understøtte jokertegn krævede tilføjelse af en opslagsmekanisme ved hjælp af containere. Overvej instansnavnet 'top.abcd*_0'.

containertræ min
Container træ

Jokertegndelen af ​​instansnavnet håndteres ved at bruge containertræet i stedet for det associative array.

Resumé

Deling af data mellem modulet/instansen og den klassebaserede verden i en UVM-testbænk kan gøres ved hjælp af UVM-konfigurationsdatabasen, bare vær opmærksom på hastighedsnedgangen. Hvis din metode bruger masser af konfigurationer, så overvej at bruge den nye introducerede tilgang, som har en pakke, der bruger omkring 300 linjer kode i stedet for de 2,600 linjer kode i UVM-konfigurationsdatabasefilen.

Læs hele avisen på 20 sider, Undgå konfigurationsvanvid på den nemme måde hos Siemens EDA.

Relaterede blogs

Del dette opslag via:

Tidsstempel:

Mere fra Semiwiki