Sistem Verilog

Sistem Verilog
Clasa de limba Design structural); orientat pe obiecte (verificare)
Aparut in 2002
Autor Institutul de Ingineri Electrici și Electronici
Extensie de fișier .sv
Eliberare IEEE 1800-2009 (2009-12-18)
Tip sistem static, slab
A fost influențat Verilog , Vera

SystemVerilog  este un limbaj de descriere și verificare hardware care este o extensie a limbajului Verilog .

SystemVerilog a fost construit pe deasupra limbilor Superlog (Accellera, 2002). O mare parte din funcționalitățile legate de verificare au fost preluate din limbajul OpenVera ( Synopsis ). [1] În 2005, SystemVerilog a fost adoptat ca standard IEEE 1800-2005. [2]

În 2009, standardul 1800-2005 a fost fuzionat cu standardul de limbaj Verilog (IEEE 1364-2005), iar versiunea actuală a SystemVerilog, standardul IEEE 1800-2009, a fost adoptată.

SystemVerilog poate fi folosit pentru a descrie RTL ca o extensie a limbajului Verilog-2005 . Pentru verificare, se folosește un model de programare orientat pe obiecte .

Construcții pentru descrierea hardware -ului

Noi tipuri de date

SystemVerilog acceptă toate tipurile de date disponibile în Verilog și adaugă multe tipuri de date noi.

Tipuri de date întregi . SystemVerilog oferă noi tipuri de date:

Aceste tipuri de date au două stări: 0 și 1. Spre deosebire de tipurile Verilog corespunzătoare (de exemplu , reg sau întreg ), ele nu pot lua valorile „X” și „Z”, ceea ce permite o simulare mai rapidă.

O matrice multidimensională împachetată este o extensie și o generalizare a memoriei în Verilog:

logica [ 1 : 0 ][ 2 : 0 ] my_pack [ 32 ];

Un tip enumerat vă permite să dați nume constantelor numerice, de exemplu:

typedef enum logic [ 2 : 0 ] { RED , VERDE , ALBASTRU , CYAN , MAGENTA , GALBEN } color_t ; culoare_t culoarea_mea = VERDE ; initial $display ( "Culoarea este %s" , culoarea_mea . nume ());

Acest exemplu folosește logic[2:0] ca tip de bază.

Structurile și uniunile sunt utilizate în același mod ca în C. Pe lângă Verilog, SystemVerilog adaugă două atribute noi: packed și tagged . Atributul packed înseamnă că toți membrii structurii sunt stocați compact în memorie, fără goluri (adică compilatorul nu își poate face alinierea ):

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

Atributul etichetat permite controlul asupra cărui membru al uniunii este utilizat la un moment dat în timpul execuției programului.

Blocuri de proces

Verilog oferă un proces de blocare întotdeauna care, în funcție de context, poate descrie diferite tipuri de hardware. Pentru a descrie în mod explicit tipul de hardware, SystemVerilog adaugă 3 noi blocuri de proces: always_comb , always_ff și always_latch .

Blocul always_comb vă permite să modelați logica combinațională . Lista de sensibilitate bloc conține toate variabilele utilizate în bloc.

always_comb begin tmp = b * b - 4 * a * c ; no_root = ( tmp < 0 ); Sfârşit

Blocul always_ff vă permite să descrieți logica secvențială sincronă , cum ar fi declanșatoarele :

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

Bistabilele cu o singură etapă controlate static (zăvoare) sunt descrise folosind blocurile always_latch :

always_latch if ( activare ) q <= d ;

Interfețe

Pentru sistemele mici, conexiunile externe ale modulului sunt descrise în mod compact folosind porturile Verilog. Cu toate acestea, blocurile mari dintr-un sistem mare conțin de obicei câteva mii de porturi. SystemVerilog oferă un mecanism de interfață pentru a grupa porturile și pentru a evita dublarea la definirea porturilor. În plus, interfețele pot conține o construcție modport care specifică direcția conexiunilor. De exemplu:

interfață intf ; logic a ; logica b ; modport in ( input a , input b ); modport out ( ieșire a , ieșire b ); interfață finală partea de sus a modulului ; intfi ( ); u_a m1 ( .i1 ( i )); u_b m2 ( .i2 ( i )); modul final modul u_a ( intf . in i1 ); atribuiți x = i1 . a ; atribuiți y = i1 . b ; modul final modul u_b ( intf . out i2 ); atribui i2 . a = 1 _ atribui i2 . b = 0 _ modul final

Construcții de verificare

Următoarele construcții nu sunt sintetizabile . Acestea sunt folosite pentru a implementa medii de testare, aserțiuni în codul testat și pentru a verifica acoperirea codului .

Tipuri de date de verificare

Tipul șirului poate fi utilizat pentru a gestiona șiruri de lungime variabilă, de exemplu:

șir s1 = „Bună ziua” ; șir s2 = „lume” ; șir p = ".?!" ; șir s3 = { s1 , ", " , s2 , p [ 2 ]}; // concatenare șiruri $display ( "[%d] %s" , s3 . len (), s3 ); // Se va imprima: „[13] Bună, lume!”

Note

  1. Rich, D. „The evolution of SystemVerilog” IEEE Design and Test of Computers, iulie/august 2003
  2. IEEE aprobă SystemVerilog, revizuirea Verilog (downlink) . Data accesului: 26 ianuarie 2013. Arhivat din original la 29 septembrie 2007. 

Literatură

Link -uri