System Verilog

System Verilog
Nyelvóra szerkezeti (tervezés); objektum-orientált (ellenőrzés)
Megjelent 2002
Szerző Villamos és Elektronikai Mérnöki Intézet
Fájlkiterjesztés _ .sv
Kiadás IEEE 1800-2009 (2009-12-18)
Típusrendszer statikus, gyenge
Befolyásolt Verilog , Vera

A SystemVerilog  egy hardverleíró és ellenőrző nyelv, amely a Verilog nyelv kiterjesztése .

A SystemVerilog a Superlog nyelvekre épült (Accellera, 2002). Az ellenőrzéssel kapcsolatos funkciók nagy részét az OpenVera nyelvből ( Synopsys ) vettük át. [1] 2005-ben a SystemVerilogot IEEE 1800-2005 szabványként fogadták el. [2]

2009-ben az 1800-2005 szabványt egyesítették a Verilog nyelvi szabvánnyal (IEEE 1364-2005), és elfogadták a SystemVerilog jelenlegi verzióját, az IEEE 1800-2009 szabványt.

A SystemVerilog használható az RTL leírására , mint a Verilog-2005 nyelv kiterjesztésére . Az ellenőrzéshez objektum-orientált programozási modellt használnak .

Konstrukciók a hardver leírásához

Új adattípusok

A SystemVerilog támogatja a Verilogban elérhető összes adattípust, és számos új adattípust ad hozzá.

Egész számú adattípusok . A SystemVerilog új adattípusokat kínál:

Ezeknek az adattípusoknak két állapota van: 0 és 1. A megfelelő Verilog típusokkal ellentétben (pl . reg vagy integer ) nem vehetik fel az „X” és „Z” értékeket, ami gyorsabb szimulációt tesz lehetővé.

A többdimenziós csomagolt tömb a memória kiterjesztése és általánosítása a Verilogban:

logika [ 1 : 0 ][ 2 : 0 ] csomagom [ 32 ];

A felsorolt ​​típus lehetővé teszi, hogy numerikus konstansokat nevezzen el, például:

typedef enum logic [ 2 : 0 ] { PIROS , ZÖLD , KÉK , CIÁN , MAGENTA , SÁRGA } color_t ; color_t my_color = ZÖLD ; kezdeti $display ( "A szín %s" , my_color . name ());

Ez a példa a logic[2:0] -t használja alaptípusként.

A struktúrák és az uniók ugyanúgy használatosak, mint a C-ben. A Verilog mellett a SystemVerilog két új attribútumot ad hozzá: packed és tagged . A packed attribútumazt jelenti, hogy a struktúra minden tagja kompaktan, hézagok nélkül tárolódik a memóriában (vagyis a fordító nem tudja elvégezni az igazítást ):

typedef struct packed { bit [ 10 : 0 ] expo ; bit jel ; bit [ 51 : 0 ] mant ; } FP ; FP nulla = 64 'b0 ;

A címkézett attribútum lehetővé teszi annak szabályozását, hogy melyik szakszervezeti tag legyen használatban a program végrehajtása során.

Folyamatblokkok

A Verilog mindig blokkoló folyamatot biztosít, amely a kontextustól függően különböző típusú hardvereket írhat le. A hardvertípus pontos leírása érdekében a SystemVerilog 3 új folyamatblokkot ad hozzá: always_comb , always_ff és always_latch .

Az always_comb blokk lehetővé teszi a kombinációs logika modellezését . A blokkérzékenységi lista tartalmazza a blokkon belül használt összes változót.

always_comb begin tmp = b * b - 4 * a * c ; nincs_gyökér = ( tmp < 0 ); vége

Az always_ff blokk lehetővé teszi a szinkron szekvenciális logika leírását , például triggereket :

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

A statikusan vezérelt egyfokozatú flip-flopokat (reteszeket) az always_latch blokkok segítségével írjuk le:

always_latch if ( engedélyezés ) q <= d ;

Interfészek

Kis rendszerek esetén a modul külső csatlakozásait a Verilog portok segítségével tömören írják le. Egy nagy rendszeren belüli nagy blokkok azonban jellemzően több ezer portot tartalmaznak. A SystemVerilog interfész-mechanizmust biztosít a portok csoportosításához, és elkerüli a párhuzamosságokat a portok meghatározásakor. Ezenkívül az interfészek tartalmazhatnak egy modport konstrukciót , amely meghatározza a kapcsolatok irányát. Például:

interfész intf ; logika a ; logika b ; modport in ( input a , input b ); modport out ( output a , output b ); végfelület modul teteje ; intfi ( ); u_a m1 ( .i1 ( i )); u_b m2 ( .i2 ( i )); végmodul modul u_a ( intf . in i1 ); x = i1 hozzárendelése . a ; y = i1 hozzárendelése . b ; végmodul modul u_b ( intf . out i2 ); i2 hozzárendelése . a = 1_ _ i2 hozzárendelése . b = 0_ _ végmodul

Ellenőrző konstrukciók

A következő konstrukciók nem szintetizálhatók . Tesztkörnyezetek megvalósítására, a tesztelés alatt álló kódban lévő állítások megvalósítására és a kódlefedettség ellenőrzésére szolgálnak .

Ellenőrző adattípusok

A karakterlánctípus változó hosszúságú karakterláncok kezelésére használható, például:

string s1 = "Hello" ; string s2 = "világ" ; string p = ".?!" ; string s3 = { s1 , ", " , s2 , p [ 2 ]}; // string összefűzés $display ( "[%d] %s" , s3 . len (), s3 ); // Kinyomtatja: "[13] Hello, world!"

Jegyzetek

  1. Rich, D. "The evolution of SystemVerilog" IEEE Design and Test of Computers, 2003. július/augusztus
  2. Az IEEE jóváhagyja a SystemVerilog-ot, a Verilog (lefelé irányuló kapcsolat) verzióját . Hozzáférés dátuma: 2013. január 26. Az eredetiből archiválva : 2007. szeptember 29. 

Irodalom

Linkek