UVM:n nopeampi uusi konfigurointijärjestelmä - Semiwiki

UVM:n nopeampi uusi konfigurointijärjestelmä – Semiwiki

Lähdesolmu: 3036575

Universal Verification Methodology (UVM) on suosittu tapa vahvistaa SystemVerilog-suunnittelua, ja se sisältää konfigurointijärjestelmä jossa on valitettavasti joitain nopeus- ja käyttöongelmia. Rich Edelman Siemens EDA:sta kirjoitti yksityiskohtaisen 20-sivuisen artikkelin näiden ongelmien välttämisestä, ja olen käynyt sen läpi tehdäkseni sinulle yhteenvedon kohokohdista. Varmennusinsinöörit käyttävät UVM-määritystietokantaa arvojen asettamiseen, minkä jälkeen ne saavat arvot myöhemmin UVM-testissään. Yksi esimerkki arvon "T" asettamisesta ja saamisesta on:

uvm_config#(T)::set(scope, ilmentymän_polun_nimi, kentän_nimi, arvo);

uvm_config#(T)::get(scope, ilmentymän_polun_nimi, kentän_nimi, arvo);

UVM-testipenkin yhdistäminen testattavaan laitteeseen käyttää konfigurointitietokantaa virtuaalisten rajapintojen läpivientiin. UVM-kokoonpanon käytössä on kolme ongelmaa:

  • Suuri koodi, noin 2,600 koodiriviä
  • Vaatii tarkan tyyppivastaavuuden, joten "int" ja "bit" eivät ole sama asia
  • Hidas koodi

Harkitse hitaan koodin tapausta, koska tuhansien set()-kutsujen yhteydessä jokerimerkkejä sisältävien nimien käyttäminen voi kestää jopa 30 minuuttia 'set'- ja 'get'-vaiheiden suorittamiseen.

Kulunut aika min

Rich ehdottaa uutta ratkaisua UVM-kokoonpanoihin, joilla on paljon nopeammat nopeudet ja joka vie siihen verrattuna vain muutaman sekunnin.

uusi ratkaisu min

Jos UVM-koodisi välttää jokerimerkkien käyttöä ja siinä on vähän "set"-komentoja, koodisi toimii nopeammin.

Mahdollisia ratkaisuja UVM-kokoonpanoongelmiin ovat:

  • Käytä sen sijaan globaalia muuttujaa
  • Käytä UVM-kokoonpanoa yhdellä setillä()
  • Käytä UVM-kokoonpanoa muutamalla set()
  • Käytä määrityspuuta
  • Kokeile jotain erilaista

Viimeinen tapa kokeilla jotain erilaista on uusi ratkaisu, ja se jatkaa set()- ja get()-sovellusliittymän käyttöä, minkä jälkeen se yksinkertaistuu poistamalla konfiguraatioiden parametroinnin, poistaa ensisijaisuuden ja poistaa hakualgoritmin muutoksen. Tämän uuden lähestymistavan tulokset ovat suuret nopeudet.

Uusi määrityskohde on määritetty johdetussa luokassa osoitteesta "config_item", ja alla olevassa esimerkissä "int value" on asetettuna ominaisuutena. Viankorjaustarkoituksiin lisäät Pretty Print -toiminnon.

luokka my_special_config_item laajentaa config_item;
funktio new(merkkijonon nimi = "oma_erityinen_määrityksen_kohde");
super.uusi(nimi);
lopputoiminto

int arvo;

virtuaalifunktio merkkijono convert2string();
return $sformatf("%s - arvo=%0d ", get_name(), arvo, super.convert2string());
lopputoiminto
 loppuluokka

'config_item' sisältää name-attribuutin, ja tämä nimi sekä ilmentymän nimi etsitään. Konfigurointiobjektissa on myös funktio get_name() nimen palauttamiseksi. Löytääkseen minkä tahansa "instanssin_nimi.kentän_nimi" määritystietokanta käyttää assosiatiivista taulukkoa nopeaan haku- ja luontinopeuteen.
Jäljitettävyyden vuoksi voit selvittää, kuka asetti tai kuka kutsui get, koska tiedoston nimi ja rivinumero ovat kenttiä set()- ja get()-funktiokutsuissa.

set(null, "top.a.b.*", "SPEED", my_speed_config, `__FILE__, `__LINE__)
get(null, "top.a.b.c.d.monitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

Aksessorin jono voidaan tulostaa virheenkorjauksen aikana nähdäksesi, kuka kutsui set()- ja get()-komentoja.

Jokerimerkkien tukeminen edellytti hakumekanismin lisäämistä säilöillä. Harkitse ilmentymän nimeä "top.a.b.c.d.*_0".

konttipuu min
Konttipuu

Ilmentymän nimen yleismerkkiosa käsitellään konttipuun avulla assosiatiivisen taulukon sijaan.

Yhteenveto

Tietojen jakaminen moduulin/esiintymän ja luokkapohjaisen maailman välillä UVM-testipenkissä voidaan tehdä UVM-konfigurointitietokannan avulla, huomioi vain nopeuden hidastuminen. Jos menetelmäsi käyttää paljon kokoonpanoja, harkitse käyttöön otettua uutta lähestymistapaa, jossa paketissa on noin 300 koodiriviä UVM-määritystietokantatiedoston 2,600 XNUMX koodirivin sijaan.

Lue koko 20-sivuinen lehti, Vältä konfigurointihulluutta helposti Siemens EDA:ssa.

Liittyvät blogit

Jaa tämä viesti:

Aikaleima:

Lisää aiheesta Semiwiki