System Verilog

System Verilog
Kieliluokka rakenteellinen suunnittelu); oliosuuntautunut (vahvistus)
Esiintyi 2002
Tekijä Sähkö- ja elektroniikkainsinöörien instituutti
Tiedostotunniste _ .sv
Vapauta IEEE 1800-2009(2009-12-18)
Tyyppijärjestelmä staattinen, heikko
Vaikutettu Verilog , Vera

SystemVerilog  on laitteiston kuvaus- ja vahvistuskieli , joka on Verilog-kielen laajennus .

SystemVerilog rakennettiin Superlog-kielten päälle (Accellera, 2002). Suuri osa todentamiseen liittyvistä toiminnoista on otettu OpenVera- kielestä ( Synopsys ). [1] Vuonna 2005 SystemVerilog otettiin käyttöön IEEE 1800-2005 -standardina. [2]

Vuonna 2009 standardi 1800-2005 yhdistettiin Verilog-kielistandardiin (IEEE 1364-2005), ja SystemVerilogin nykyinen versio, IEEE 1800-2009 -standardi, otettiin käyttöön.

SystemVerilogia voidaan käyttää kuvaamaan RTL :ää Verilog-2005- kielen laajennuksena . Varmentamiseen käytetään olio-ohjelmointimallia .

Rakenteet laitteiston kuvaamiseen

Uudet tietotyypit

SystemVerilog tukee kaikkia Verilogissa saatavilla olevia tietotyyppejä ja lisää monia uusia tietotyyppejä.

Kokonaislukutietotyypit . SystemVerilog tarjoaa uusia tietotyyppejä:

Näillä tietotyypeillä on kaksi tilaa: 0 ja 1. Toisin kuin vastaavat Verilog-tyypit (esim . reg tai integer ), ne eivät voi ottaa arvoja "X" ja "Z", mikä mahdollistaa nopeamman simulaation.

Moniulotteinen pakattu taulukko on Verilogin muistin laajennus ja yleistys :

logiikka [ 1 : 0 ][ 2 : 0 ] pakettini [ 32 ];

Luettelotyypin avulla voit antaa nimiä numeerisille vakioille, esimerkiksi:

typedef enum logic [ 2 : 0 ] { PUNAINEN , VIHREÄ , SININEN , SYAANI , MAGENTA , KELTAINEN } väri_t ; color_t my_color = VIHREÄ ; ensimmäinen $näyttö ( "Väri on %s" , oma_väri . nimi ());

Tässä esimerkissä logiikka[2:0] on perustyyppi.

Rakenteita ja liitoksia käytetään samalla tavalla kuin C:ssä. Verilogin lisäksi SystemVerilog lisää kaksi uutta attribuuttia: packed ja tagged . Pakattu attribuuttitarkoittaa, että kaikki rakenteen jäsenet on tallennettu tiiviisti muistiin ilman aukkoja (eli kääntäjä ei voi tehdä niiden kohdistusta ):

typedef rakenne pakattu { bit [ 10 : 0 ] expo ; bittimerkki ; _ bitti [ 51 : 0 ] mant ; } FP ; FP nolla = 64'b0 ; _

Koodattu attribuutti mahdollistaa hallinnan, mitä liiton jäsentä käytetään milloin tahansa ohjelman suorittamisen aikana.

Prosessilohkot

Verilog tarjoaa aina estoprosessin, joka voi kontekstista riippuen kuvata erityyppisiä laitteita. SystemVerilog lisää 3 uutta prosessilohkoa laitteistotyypin kuvaamiseksi: always_comb , always_ff ja always_latch .

Always_comb - lohkon avulla voit mallintaa yhdistelmälogiikkaa . Lohkon herkkyysluettelo sisältää kaikki lohkossa käytetyt muuttujat.

aina_kampa alkaa tmp = b * b - 4 * a * c ; ei_juuri = ( tmp < 0 ); loppu

Always_ff -lohkon avulla voit kuvata synkronista peräkkäistä logiikkaa , kuten liipaimia :

aina_ff @( posedge clk ) q <= reset ? 0 : d ;

Staattisesti ohjatut yksivaiheiset varkut (salvat) kuvataan aina_latch- lohkoilla:

aina_salpa if ( salpaa ) q <= d ;

Liitännät

Pienissä järjestelmissä moduulin ulkoiset liitännät on kuvattu tiiviisti käyttämällä Verilog-portteja. Suuren järjestelmän suuret lohkot sisältävät kuitenkin tyypillisesti useita tuhansia portteja. SystemVerilog tarjoaa käyttöliittymämekanismin porttien ryhmittelyyn ja päällekkäisyyksien välttämiseksi portteja määritettäessä. Lisäksi liitännät voivat sisältää modport- rakenteen , joka määrittää yhteyksien suunnan. Esimerkiksi:

käyttöliittymä inf ; logiikka a ; logiikka b ; modport in ( input a , input b ); modport out ( lähtö a , lähtö b ); pääteliittymä moduulin yläosa ; intfi ( ); u_a m1 ( .i1 ( i )); u_b m2 ( .i2 ( i )); loppumoduuli moduuli u_a ( intf . in i1 ); määritä x = i1 . a ; määritä y = i1 . b ; loppumoduuli moduuli u_b ( intf . out i2 ); määritä i2 . a = 1_ _ määritä i2 . b = 0 _ loppumoduuli

Varmistuskonstruktit

Seuraavat konstruktit eivät ole syntetisoitavissa . Niitä käytetään testausympäristöjen toteuttamiseen, väitteisiin testattavassa koodissa ja koodin kattavuuden tarkistamiseen .

Vahvistustietotyypit

Merkkijonotyyppiä voidaan käyttää vaihtuvan pituisten merkkijonojen käsittelemiseen, esimerkiksi :

string s1 = "Hei" ; merkkijono s2 = "maailma" ; merkkijono p = ".?!" ; merkkijono s3 = { s1 , ", " , s2 , p [ 2 ]}; // merkkijonojen ketjutus $näyttö ( "[%d] %s" , s3 . len (), s3 ); // Tulostaa: "[13] Hei, maailma!"

Muistiinpanot

  1. Rich, D. "The evolution of SystemVerilog" IEEE Design and Test of Computers, heinä-elokuu 2003
  2. IEEE hyväksyy SystemVerilogin, Verilog-version (downlink) . Käyttöpäivä: 26. tammikuuta 2013. Arkistoitu alkuperäisestä 29. syyskuuta 2007. 

Kirjallisuus

Linkit