Gör UVM snabbare genom ett nytt konfigurationssystem - Semiwiki

Gör UVM snabbare genom ett nytt konfigurationssystem – Semiwiki

Källnod: 3036575

Universal Verification Methodology (UVM) är ett populärt sätt att hjälpa till att verifiera SystemVerilog-designer, och den inkluderar en konfigurationssystem som tyvärr har vissa hastighets- och användningsproblem. Rich Edelman från Siemens EDA skrev en detaljerad 20-sidig uppsats om hur man undviker dessa problem, och jag har gått igenom den för att sammanfatta höjdpunkterna för dig. Verifieringsingenjörer använder en UVM-konfigurationsdatabas för att ställa in värden, för att sedan hämta värdena senare i sitt UVM-test. Ett exempel på att ställa in och få ett värde 'T' är:

uvm_config#(T)::set(omfattning, instansnamn, fältnamn, värde); uvm_config#(T)::get(scope, instans_path_name, field_name, value);

Att ansluta UVM-testbänken till enheten som testas använder konfigurationsdatabasen för att skicka de virtuella gränssnitten. Det finns tre problem med att använda UVM-konfigurationen:

  • Stor kod, cirka 2,600 XNUMX rader kod
  • Kräver exakt typmatchning, så "int" och "bit" är inte samma sak
  • Långsam kod

Tänk på fallet med långsam kod, för med tusentals anrop till set() kan det ta upp till 30 minuter att använda namn med jokertecken att slutföra 'set'- och 'get'-fasen.

Förfluten tid min

Rich föreslår en ny lösning för UVM-konfigurationer som har mycket högre hastigheter, som bara tar några sekunder i jämförelse.

ny lösning min

Om din UVM-kod undviker att använda jokertecken och har få "set"-kommandon, kommer din kod att köras snabbare.

Möjliga lösningar på UVM-konfigurationsproblemen är:

  • Använd en global variabel istället
  • Använd UVM-konfiguration med en uppsättning()
  • Använd UVM-konfiguration med några set()
  • Använd ett konfigurationsträd
  • Prova något annat

Det sista tillvägagångssättet att prova något annat är den nya lösningen, och den fortsätter att använda set() och get() API, förenklas sedan genom att ta bort parametrering av konfigurationerna, tar bort prioritet och tar bort uppslagsalgoritmändringen. Resultatet av detta nya tillvägagångssätt är snabba hastigheter.

Ditt nya konfigurationsobjekt är definierat i den härledda klassen från 'config_item', och exemplet nedan visar 'int-värde' som egenskapen som ställs in. För felsökningsändamål lägger du till funktionen pretty-print.

class my_special_config_item utökar config_item; function new(strängnamn = "my_special_config_item"); super.new(namn); endfunction int värde; virtuell funktion sträng convert2string(); return $sformatf("%s - värde=%0d <%s>", get_name(), värde, super.convert2string()); endfunction endclass

'config_item' har ett namnattribut, och detta namn slås upp, plus instansnamnet. Konfigurationsobjektet har också en get_name() funktion för att returnera namnet. För att hitta något "instansnamn.fältnamn" använder konfigurationsdatabasen en associativ array för snabba uppslagnings- och skapahastigheter.
För spårbarhet kan du ta reda på vem som satte eller vem som anropade get, eftersom ett filnamn och radnummer är fält i funktionsanropen set() och get().

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

Accessor-kön kan skrivas ut under felsökning för att se vem som anropade set() och get().

För att stödja jokertecken krävs att man lägger till en uppslagsmekanism med hjälp av behållare. Tänk på instansnamnet 'top.abcd*_0'.

containerträd min
Behållarträd

Jokerteckendelen av instansnamnet hanteras genom att använda behållarträdet, istället för den associativa arrayen.

Sammanfattning

Dela data mellan modulen/instansen och den klassbaserade världen i en UVM-testbänk kan göras med hjälp av UVM-konfigurationsdatabasen, var bara medveten om hastighetsnedgångarna. Om din metod använder många konfigurationer, överväg att använda det nya tillvägagångssätt som introducerats som har ett paket som använder cirka 300 rader kod istället för de 2,600 XNUMX raderna kod i UVM-konfigurationsdatabasfilen.

Läs hela den 20-sidiga uppsatsen, Undvik konfigurationsgalenskap på det enkla sättet på Siemens EDA.

Relaterade bloggar

Dela det här inlägget via:

Tidsstämpel:

Mer från Semiwiki