SystemVerilog: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Typo fixing
 
(18 versioni intermedie di 10 utenti non mostrate)
Riga 1:
 
{{Linguaggio di programmazione
|nome = SystemVerilog
Line 7 ⟶ 6:
|versione = IEEE 1800-2017
|utilizzo = [[Linguaggio di descrizione hardware]]
|paradigmi = Design: [[Programmazione strutturata | programmazione strutturata]], verifica: [[Programmazione orientata agli oggetti | programmazione orientata agli oggetti]]
|tipizzazione = Statico, debole
|influenzato_da = Design: [[Verilog]], [[VHDL]], [[C++]],
Verifica: [[OpenVera]], [[Java (programming language)|Java]]
|ha_influenzato =
Line 18 ⟶ 17:
}}
 
'''SystemVerilog''', standardizzato come '''IEEE 1800''', è un linguaggio [[Linguaggio di descrizione hardware|di descrizione]] e verifica dell'hardware utilizzato per modellare, progettare, simulare, testare e implementare sistemi elettronici. SystemVerilog è basato su [[Verilog]] ed è comunemente usato nell'industria dei [[Semiconduttore|semiconduttori]] e della progettazione [[elettronica]] come evoluzione di Verilog. Dal 2008 Verilog e SystemVerilog fanno parte dello stesso standard [[Institute of Electrical and Electronics Engineers|IEEE]].
 
== Storia ==
SystemVerilog nasce nel 2002, con la donazione del linguaggio Superlog ad Accellera nel 2002 da parte della startup Co-Design Automation.<ref>Rich, D. “The evolution of SystemVerilog” IEEE Design and Test of Computers, July/August 2003</ref> La maggior parte delle funzionalità di verifica si basa sul linguaggio OpenVera donato invece da Synopsys . Nel 2005, SystemVerilog è stato adottato come standard [[Institute of Electrical and Electronics Engineers|IEEE]] 1800-2005.<ref>[http://www.eetimes.com/news/design/showArticle.jhtml;?articleID=173601060 IEEE approves SystemVerilog, revision of Verilog]</ref> Nel 2009, lo standard è stato unito allo standard di base Verilog (IEEE 1364-2005), creando lo standard IEEE 1800-2009. La versione attuale è lo standard IEEE 1800-2017.<ref>[http://standards.ieee.org/findstds/standard/1800-2017.html 1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language]</ref>
 
Il set di funzionalità di SystemVerilog può essere suddiviso in due ruoliparti distintidistinte:
 
# SystemVerilog per la progettazione a [[Register transfer level|livello di trasferimento tra registri]] (RTL): è un'estensione di [[Verilog|Verilog-2005]] e tutte le funzionalità di quel linguaggio sono disponibili in SystemVerilog. Pertanto, Verilog èpuò essere considerato un sottoinsieme di SystemVerilog.
# SystemVerilog per la verifica: utilizza estesamente tecniche [[Programmazione orientata agli oggetti|di programmazione orientate agli oggetti]] ed è più strettamente correlato a [[Java (linguaggio di programmazione)|Java]] rispettopiuttosto che a Verilog. Questi costrutti generalmente non sono sintetizzabili.
 
Il resto di questo articolo discute le caratteristiche di SystemVerilog non presenti in [[Verilog|Verilog-2005]] .
 
== Caratteristiche a supporto della progettazione ==
 
=== Durata delle variabili ===
Esistono due tipi di durata delle variabili specificate in SystemVerilog: static e automatic . Le variabili automatiche vengono create nel momento in cui l'esecuzione del programma rientra nello scope della variabile. Le variabili statiche vengono create all'inizio dell'esecuzione del programma e mantengono lo stesso valore durante l'intero ciclo di vita del programma, a meno che non venga assegnato un nuovo valore durante l'esecuzione.
 
Qualsiasi variabile dichiarata all'interno di un task o di una funzione senza specificare il tipo verrà considerata automatica. Per specificare che una variabile è statica si utilizza la [[Parola riservata|parola chiave]] <code>static</code> nella dichiarazione del tipo, ad esempio <code>static int x;</code>. La parola chiave <code>automatic</code> " viene utilizzata allo stesso modo.
 
=== Nuovi tipi di dati ===
'''I tipi di variabili avanzati''' aggiungono nuove funzionalità al tipo "reg" di Verilog:<syntaxhighlight lang="systemverilog" line="1">
logic [31:0] my_var;
</syntaxhighlight>Verilog-1995 e Verilog-2001 limitano le variabili reg a dichiarazionistatement comportamentali come nel caso del [[Register transfer level|il codice RTL]]. SystemVerilog estende il tipo reg in modo che possa essere guidato da un singolo driver come un gate o un modulo. SystemVerilog chiama questo tipo "logic" per ricordare agli utenti che ha questa capacità extraulteriore e che non èsi tratta di un registro hardware. I nomi "logic" e "reg" sono intercambiabili. Un segnale con più di un driver (come un [[Three state|buffer a tre stati]] per [[General Purpose Input/Output|input/output generico]] ) deve essere dichiarato usando un tipo net come "wire" in modo che SystemVerilog possa risolvererisolverne il valore finale.
 
'''I Packed array multidimensionali''' unificano ed estendono la nozione di "registri" e "memorie" di Verilog:<syntaxhighlight lang="systemverilog" line="1">
logic [1:0][2:0] my_pack[32];
</syntaxhighlight>Il Verilog classico consente di dichiarare solo una dimensione a sinistra del nome della variabile. SystemVerilog consente qualsiasi numero di tali dimensioni "impacchettate". Una variabile di tipo array compressopacked mappa 1:1 su una quantità aritmetica intera. Nell'esempio precedente, ogni elemento di <code>my_pack</code> può essere utilizzato nelle espressioni come numero intero a sei bit. Le dimensioni a destra del nome (32 in questo caso) sono indicate come dimensioni "unpacked". Come in [[Verilog|Verilog-2001]], è consentito qualsiasi numero di dimensioni unpacked.
 
'''I tipi di dati enumerati''' ( <code>enums</code> ) consentono di assegnare nomi significativi a quantità numeriche. Le variabili dichiarate di tipo enumerato non possono essere assegnate a variabili di un diverso tipo enumerato senza [[Conversione di tipo|coversioneconversione di tipo]] . Questo non è vero per i parametri, la tecnica di implementazione preferita per le quantità enumerate in Verilog-2005:<syntaxhighlight lang="systemverilog" line="1">
typedef enum logic [2:0] {
RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW
Line 53 ⟶ 51:
color_t my_color = GREEN;
initial $display("The color is %s", my_color.name());
</syntaxhighlight>Come mostrato sopra, il progettista può specificare un tipo aritmetico sottostante ( <code>logic [2:0]</code> in questo caso) che viene utilizzato per rappresentare il valore di enumerazione. IPossono essere usati meta-valori X e Z possono essere usati qui, possibilmente per rappresentare stati illegali. La funzione <code>name()</code> restituisce una stringa ASCII per il valore enumerato corrente, utile per la convalida e il test.
 
'''Nuovi tipi interi''' : SystemVerilog definisce <code>byte</code>, <code>shortint</code>, <code>int</code> e <code>longint</code> come tipi interi con segno a due stati con rispettivamente 8, 16, 32 e 64 bit. Un tipo <code>bit</code> è un tipo a due stati a larghezza variabile che funziona in modo molto simile a <code>logic</code> . I tipi a due stati mancano dei metavalori [[Condizione di indifferenza|X]] e Z del Verilog classico; l'uso di questi tipi può consentire una simulazione più veloce.
 
'''Le [[Record (informatica)|Le strutture]]''' e '''le unioni''' funzionano in modo molto simile al [[C (linguaggio)|linguaggio di programmazione C.]] I miglioramenti di SystemVerilog includono l'attributo '''packedtagged''' e l'attributo '''taggedpacked''' . L'attributo <code>tagged</code> consente il monitoraggio in fase di esecuzione di quali membri di un'unione sono attualmente in uso. L'attributo <code>packed</code> fa sì che la struttura o l'unione venga mappata 1:1 su un packed array di bit. I contenuti dei tipi di dati <code>struct</code> occupano un blocco continuo di memoria senza interruzioni, simile ai [[Campo di bit|campi di bit]] in C e C++:<syntaxhighlight lang="systemverilog" line="1">
typedef struct packed {
bit [10:0] expo;
Line 68 ⟶ 66:
 
=== Blocchi procedurali ===
SystemVerilog introduce tre nuovi blocchi procedurali destinati a modellare l'hardware : <code>always_comb</code> (per modellare [[Circuito combinatorio|la logica combinatoria]] ), <code>always_ff</code> (per [[Flip-flop|i flip-flop]] ) e <code>always_latch</code> (per [[Flip-flop|i latch]] ). Mentre Verilog utilizza un unico blocco generico <code>always</code> per modellare diversi tipi di strutture hardware, ciascuno dei nuovi blocchi di SystemVerilog ha lo scopo di modellare un tipo specifico di hardware, imponendo restrizioni semantiche per garantire che l'hardware descritto dai blocchi corrisponda all'uso previsto del modello. Un compilatore HDL o un programma di verifica può eseguire passaggi aggiuntivi per garantire che si verifichi solo il tipo di comportamento previsto.
 
Un blocco <code>always_comb</code> modella [[Circuito combinatorio|lacircuiti logicalogici combinatoriacombinatori]]. Il simulatore deduce che la ''sensitivity list'' sia costituito da tutte le variabili dalle istruzioni contenute:<syntaxhighlight lang="systemverilog" line="1">
always_comb begin
tmp = b * b - 4 * a * c;
no_root = (tmp < 0);
end
</syntaxhighlight>Un blocco <code>always_latch</code> modella latch sensibili al livello . Ancora una volta, la sensitivity list è dedotta dal codice:<syntaxhighlight lang="systemverilog" line="1">
always_latch
if (en) q <= d;
</syntaxhighlight>Un blocco <code>always_ff</code> modella la logicacircuiti sincronasincroni (in particolare [[Circuito sequenziale|lacircuiti logicalogici sequenzialesequenziali]] [[Flip-flop|sensibilesensibili al fronte]]):<syntaxhighlight lang="systemverilog" line="1">
always_ff @(posedge clk)
count <= count + 1;
Line 108 ⟶ 106:
 
== Funzionalità di verifica ==
Le seguenti funzionalità di verifica in genere non sono sintetizzabili, il che significa che non possono essere implementate nell'in hardware basatosulla sulbase del relativo codice HDL. Invece,Esse aiutano invece nella creazione di [[test bench]] estensibili e flessibili.
 
=== Nuovi tipi di dati ===
Line 117 ⟶ 115:
string s3 = {s1, ", ", s2, p[2]}; // string concatenation
$display("[%d] %s", s3.len(), s3); // simulation will print: "[13] Hello, world!"
</syntaxhighlight>Oltre agli array statici utilizzati nella progettazione, SystemVerilog offre [[Array dinamico|array dinamici]], [[Array associativo|array associativi]] e [[Coda (informatica)|code]] :<syntaxhighlight lang="systemverilog" line="1">
int cmdline_elements; // # elements for dynamic array
int da[]; // dynamic array
Line 128 ⟶ 126:
da = new[ cmdline_elements ]; // Allocate array with 16 elements
end
</syntaxhighlight>Un array dinamico funziona in modo molto simile a un array unpacked, ma offre il vantaggio di essere [[Gestione della memoria|allocato dinamicamente]] in [[Run-time|fase di esecuzione]] (come mostrato sopra. ). Mentre la dimensione di un packed array deve essere nota in fase di compilazione (da una costante o espressione di costanti), la dimensione dell'array dinamico può essere inizializzata da un'altra variabile, consentendo all'array di essere dimensionato e ridimensionato arbitrariamente secondo necessità.
 
Un array associativo può essere considerato come un [[Albero binario di ricerca|albero di ricerca binario]] con un tipo della chiave e un tipo dei dati specificati dall'utente . La chiave implica un ordinamento. Gli elementi di un array associativo possono essere letti in ordine lessicografico.
 
Infine, una coda fornisce gran parte delle funzionalità del tipo [[deque]] della [[Standard Template Library|Standard Template Library C++]]: gli elementi possono essere aggiunti e rimossi da entrambe le estremità in modo efficiente. Queste primitive consentono la creazione di strutture di dati complesse, necessarie ad esempio per lo scoreboard di un progetto di grandi dimensioni.
 
=== Classi ===
SystemVerilog fornisce un modello di [[Programmazione orientata agli oggetti|programmazione orientato agli oggetti]] .
 
In SystemVerilog, le classi supportano un modello [[Ereditarietà multipla|di ereditarietà singola]], ma possono implementare funzionalità simili all'ereditarietà multipla attraverso l'uso delle cosiddette "classi di interfaccia" (identiche nel concetto alla funzionalità <code>interface</code> di Java). Le classi possono essere parametrizzate per tipo, fornendo la funzione di base dei template C++ . Tuttavia, la specializzazione dei template e le funzioni template non sono supportati.
 
Le funzionalità [[Polimorfismo (informatica)|di polimorfismo]] di SystemVerilog sono simili a quelle di C++: il programmatore può definire una funzione <code>virtual</code> per fare in modo che una classe derivata [[Funzione virtuale|ottenga il controllo della funzione]].
 
[[Incapsulamento (informatica)|L'incapsulamento]] e l'occultamento dell'informazione (''information hiding'') vengono eseguiti utilizzando le parole chiave <code>local</code> e <code>protected</code>, che devono essere applicate a qualsiasi elemento che deve essere nascosto. Per impostazione predefinita, tutte le proprietà della classe sono pubbliche.
 
Le istanze delle classi vengono create dinamicamente con laparola chiave <code>new</code>. È possibile definire un [[Costruttore (informatica)|costruttore]] denotandolo come <code>function new</code> . SystemVerilog implementa [[Garbage collection|la garbage collection]], quindi non c'è alcuna funzione del linguaggio per distruggere in modo esplicito le istanze create dall'operatore new.
 
Ad esempio:<syntaxhighlight lang="systemverilog" line="1">
Line 165 ⟶ 163:
 
=== Constrained random generation ===
Alle quantità intere, definite nella definizione di una classe o come variabili autonome in un certo scope lessicale, possono essere [[Generatore di numeri casuali|assegnati valori casuali]] sulla base di un insieme di vincoli. Questa funzionalità è utile per creare scenari randomizzati per la verifica .
 
Nella definizione di una classe, i modificatori <code>rand</code> e <code>randc</code> segnalano le variabili che devono essere randomizzate. <code>randc</code> specifica che la randomizzazione deve essere basata sulla [[permutazione]], in cui una variabile assumerà tutti i possibili valori almeno una volta prima che qualsiasi valore venga ripetuto. Le variabili senza modificatori non sono randomizzate.<syntaxhighlight lang="systemverilog" line="1">
Line 206 ⟶ 204:
endfunction
endclass
</syntaxhighlight>I metodi ''constraint_mode()'' e ''random_mode()'' sono usati per controllare la randomizzazione. constraint_mode() viene utilizzato per attivare e disattivare un vincolo specifico e random_mode viene utilizzato per attivare o disattivare una randomizzazione di una variabile specifica. Il codice seguente descrive e verifica proceduralmente un [[frame Ethernet]] :<syntaxhighlight lang="systemverilog" line="1">
class eth_frame;
rand bit [47:0] dest;
Line 241 ⟶ 239:
Le [[Asserzione (informatica)|asserzioni]] sono utili per verificare le proprietà di un progetto che si manifestano dopo che è stata raggiunta una condizione o uno stato specifico. SystemVerilog ha un proprio linguaggio di specifica delle asserzioni, simile al Property Specification Language. Il sottoinsieme dei costrutti del linguaggio SystemVerilog che supporta le asserzioni è comunemente chiamato SystemVerilog Assertion o SVA.<ref>[http://www.project-veripage.com/sva_1.php SystemVerilog Assertion: Introduction]</ref>
 
Le asserzioni SystemVerilog sono costruite da '''sequenze''' e '''proprietà''' . Le proprietà sono un superinsieme di sequenze; qualsiasi sequenza può essere utilizzata come se fosse una proprietà, sebbene ciò non sia tipicamente utile.
 
Le sequenze sono costituite da [[Espressione booleana|espressioni booleane]] aumentate con operatori temporali. L'operatore temporale più semplice è l'operatore <code>##</code> che esegue una concatenazione:  <syntaxhighlight lang="systemverilog" line="1">
sequence S1;
@(posedge clk) req ##1 gnt;
Line 257 ⟶ 255:
 
assert_req_gnt: assert property (req_gnt) else $error("req not followed by gnt.");
</syntaxhighlight>Questo esempio mostra un operatore '''di [[Implicazione logica|di implicazione]]''' <code>|=></code> . La proposizione a sinistra dell'implicazione si chiama '''antecedente''' e quella a destra si chiama '''conseguente''' . [[Interpretazione (logica)|La valutazione]] di un'implicazione inizia attraverso ripetuti tentativi di valutare l'antecedente. Quando la valutazione dell'antecedente ha successo, si tenta la valutazione del conseguente, e il successo dell'asserzione dipende dal successo del conseguente. In questo esempio, il conseguente non verrà tentato finché <code>req</code> non diventa alto, dopodiché la proprietà fallirà se <code>gnt</code> non è alto nel clock successivo.
 
Oltre alle asserzioni, SystemVerilog supporta [[Presupposizione (linguistica)|le ipotesi]] e la copertura delle proprietà. Un'assunzione stabilisce una condizione che uno [[Dimostrazione automatica di teoremi|strumento]] [[Logica|formale di dimostrazione logica]] deve [[Assioma (matematica)|deve assumere come vera]] . Un'asserzione specifica una proprietà che deve essere dimostrata vera. Nella [[simulazione]], sia le asserzioni che le ipotesi vengono verificate rispetto agli stimoli del test. La copertura della proprietà consente all'ingegnere di verifica di verificare che le asserzioni stiano monitorando accuratamente il progetto. 
 
=== Copertura ===
'''La copertura''' (''coverage'') applicata ai linguaggi di verifica hardware si riferisce alla raccolta di statistiche basate su eventi di campionamento all'interno della simulazione. La copertura viene utilizzata per determinare quando il dispositivo sottoposto a test (''Device Under Test'', DUT) è stato esposto a una varietà sufficiente di stimoli tale che vi sia un'elevata probabilità che il DUT funzioni correttamente. Si noti che questoquesta definizione differisce dalladal concetto di copertura del codice che(software), utilizzaorientata il codice del progetto pera garantire che tutte le righe del codice nel progetto siano state eseguite. La copertura funzionale assicura che tutti i casi corner e marginali desiderati all'interno dello spazio di progettazione siano stati esplorati .
 
Un gruppo di copertura SystemVerilog crea un database di "contenitori" (''bin'') che memorizzano un [[istogramma]] di valori di una variabile associata. È inoltre possibile definire la copertura incrociata, che crea un istogramma che rappresenta il [[prodotto cartesiano]] di più variabili.
Line 291 ⟶ 289:
 
=== Sincronizzazione ===
Un ambiente di test complesso è costituito da componenti di verifica riutilizzabili che devono comunicare tra loro. La primitiva "event" di Verilog consente a diversi blocchi di istruzioni procedurali di attivarsi a vicenda, ma l'applicazione della [[Sincronizzazione|della sincronizzazione]] dei thread]] dipende dall'uso (intelligente) da parte del programmatore. SystemVerilog offre due [[Sincronizzazione|primitive]] specifiche per la sincronizzazione tra thread: ''mailbox'' e ''[[Semaforo (informatica)|semaphore]]''. La mailbox è modellata come una coda di messaggi [[FIFO]] . Opzionalmente, una FIFO può essere parametrizzato dal tipo in modo che solo gli oggetti del tipo specificato possano essere passati attraverso di esso. Tipicamente, gli oggetti sono istanze di classi che rappresentano ''[[Transaction Processing System|transazioni]]'' : operazioni elementari (ad esempio, l'invio di un frame) che vengono eseguite dai componenti di verifica. Il semaforo è modellato come un [[Semaforo (informatica)|semaforo di conteggio]] .
 
== Miglioramenti generali al Verilog classico ==
Oltre alle nuove funzionalità di cui sopra, SystemVerilog migliora l'usabilità delle funzionalità linguistiche esistenti di Verilog. Di seguito sono riportati alcuni di questi miglioramenti:
 
* Gli [[Operatore di assegnamento|operatori di assegnazione]] procedurale (<=, =) ora possono operare direttamente sugli array .
* Le definizioni delle porte (inout, input, output) sono ora espanse per supportare una più ampia varietà di [[Tipo di dato|tipi di dati]] : sono supportati i tipi [[Record (informatica)|struct]], enum, real e multidimensionali.
* Il costrutto [[Ciclo for|del ciclo for]] ora consente la dichiarazione automatica delle variabili all'interno dell'istruzione for. [[Struttura di controllo|Il controllo del flusso]] del ciclo è migliorato dalle [[Struttura di controllo|istruzioni ''continue'' e ''break'']] .
* SystemVerilog aggiunge un <nowiki><i id="mwBhw">ciclo ''do</i></nowiki> /while'' al costrutto del ciclo <nowiki><i id="mwBh4"><u id="mwBh8">''while</u></nowiki><nowiki></i></nowiki> ''.
* [[Costante (informatica)|Le variabili costanti]], cioè quelle designate come non modificabili durante il runtime, possono essere designate mediante l'uso della parola chiave ''const'' .
* [[Inizializzazione|L'inizializzazione delle variabili]] può operare sugli array.
* Gli operatori di incremento e decremento ( <code>x++</code>, <code>++x</code>, <code>x--</code>, <code>--x</code> ) sono supportati in SystemVerilog, così come altri operatori di assegnazione composti ( <code>x += a</code>, <code>x -= a</code>, <code>x *= a</code>, <code>x /= a</code>, <code>x %= a</code>, <code>x <<= a</code>, <code>x >>= a</code>, <code>x &= a</code>, <code>x ^= a</code>, <code>x |= a</code> ) come nel linguaggio C e linguaggi discendenti .
* Il preprocessore ha migliorato le capacità di sostituzione [[Direttiva (programmazione)|di macro]] `define, in particolare la sostituzione all'interno di stringhe letterali (""), così come la concatenazione di più macro-token in una singola parola .
* Il costrutto fork/join è stato espanso con ''join_none'' e ''join_any'' .
* Le aggiunte alla direttiva `timescale consentono di controllare la scala temporale della simulazione in modo più prevedibile in un ambiente di simulazione di grandi dimensioni, con ogni [[Codice sorgente|file sorgente]] che utilizza una scala temporale locale.
* Ora le porte delle attività possono essere dichiarate ''rif'' . Un riferimento fornisce al corpo dell'attività l'accesso diretto agli argomenti di origine nell'ambito del chiamante, noto come "passaggio per riferimento". Poiché sta operando sulla variabile originale stessa, piuttosto che su una copia del valore dell'argomento, l'attività/funzione può modificare le variabili (ma non le net) nello scope del chiamante in [[Sistema real-time|tempo reale]] . Le dichiarazioni delle porte di tipo inout/output passano le variabili per valore e rinviano l'aggiornamento della variabile dello scope del chiamante fino al momento in cui l'attività termina.
* Le funzioni ora possono essere dichiarate ''[[Void (informatica)|void]]'', il che significa che non restituiscono alcun valore.
* [[Parametro (programmazione)|I parametri]] possono essere dichiarati di qualsiasi tipo, inclusi ''typedef'' definiti dall'utente.
Line 313 ⟶ 311:
 
== Software di verifica e sintesi ==
Nella progettazione di chip elettronici, SystemVerilog è ampiamente utilizzato nella verifica. I tre maggiori fornitori di strumenti EDA (Cadence Design Systems, [[Mentor Graphics]], Synopsys) hanno incorporato SystemVerilog nei loro simulatori HDL in linguaggio misto. Sebbene nessun simulatore possa ancora rivendicare il supporto completo del SystemVerilog Language Reference Manual, rendendo [[Interoperabilità|l'interoperabilità]] dei test bench una sfida, sono in corso sforzi per promuovere la compatibilità tra fornitori.  Nel 2008, Cadence e Mentor hanno rilasciato la Open Verification Methodology, una libreria di classi open source e un framework di utilizzo per facilitare lo sviluppo di test bench e IP di verifica riutilizzabili. Synopsys, che era stata la prima a pubblicare una libreria di classi SystemVerilog (VMM), ha successivamente risposto rendendo disponibile e ''open'' la propria VMM. Molti provider di terze parti hanno annunciato o già rilasciato IP di verifica SystemVerilog.
 
{{senza fonte|Nella sintesi del progetto (trasformazione di una descrizione del progetto hardware in una [[netlist]]), l'adozione di SystemVerilog è stata lenta. Molti team di progettazione utilizzano flussi di progettazione che coinvolgono più strumenti di fornitori diversi. La maggior parte dei team di progettazione non può migrare a progetti RTL basati su SystemVerilog fino a quando l'intera suite di strumenti front-end ([[Lint (software)|linter]], [[verifica formale]] e [[Generazione di programmi di prova automatici|generatori di strutture di test automatizzate]] ) non supporta un sottoinsieme linguistico comune}}.
 
== Voci correlateNote ==
<references />
 
== Bibliografia ==
* {{Cita libro|titolo=1800-2005 — IEEE Standard for System Verilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2005.97972|anno=2005| isbn = 978-0-7381-4810-6}}
* {{Cita libro|titolo=1800-2009 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2009.5354441|anno=2009| isbn = 978-0-7381-6130-3}}
* {{Cita libro|titolo=1800-2012 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2013.6469140|anno=2013| isbn = 978-0-7381-8110-3}}
* {{Cita libro|titolo=1800-2017 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2018.8299595|anno=2017| isbn = 978-1-5044-4509-2}}
* {{cita news|cognome=McGrath |nome=Dylan |url=http://www.eetimes.com/news/design/showArticle.jhtml;?articleID=173601060 |titolo=IEEE approves SystemVerilog, revision of Verilog |editore=EE Times |data=9 novembre 2005 |accesso=31 gennaio 2007}}
* {{Citacita news|cognome=Puneet Kumar |url=http://asicguru.com/System-Verilog-Tutorial/1/3 |titolo=System Verilog Tutorial |data=9 novembre 2005 }}
* {{cita news|cognome=Gopi Krishna |url=http://www.testbench.in |titolo=SystemVerilog ,SVA,SV DPI Tutorials |data=9 novembre 2005 }}
* {{Citacita news|cognome= HDVL |url=http://hdvl.wordpress.com/category/systemverilog/ |titolo=More SystemVerilog Weblinks }}
* Spear, Chris, [https://www.amazon.com/SystemVerilog-Verification-Learning-Testbench-Language/dp/0387765298/ref=sr_1_1?ie=UTF8&s=books&qid=1247578512&sr=8-1 "SystemVerilog for Verification"] Springer, New York City, NY. {{ISBN|0-387-76529-8}}[[ISBN (identifier)|ISBN]]&nbsp;[[Special:BookSources/0-387-76529-8|0-387-76529-8]]
* LtuartStuart Sutherland, Simon Davidmann, Peter Flake, [https://www.amazon.com/SystemVerilog-Design-Second-Hardware-Modeling/dp/0387333991/ref=sr_1_4?ie=UTF8&s=books&qid=1247578512&sr=8-4 "SystemVerilog for Design Second Edition: A Guide to Using SystemVerilog for Hardware Design and Modeling"] Springer, New York City, NY. {{ISBN|0-387-33399-1}}[[ISBN (identifier)|ISBN]]&nbsp;[[Special:BookSources/0-387-33399-1|0-387-33399-1]]
* Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari and Lisa Piper [http://SystemVerilog.us] SystemVerilog Assertions Handbook, 4th Edition, 2016- http://SystemVerilog.us
* Ben Cohen Srinivasan Venkataramanan and Ajeetha Kumari [http://SystemVerilog.us] A Pragmatic Approach to VMM Adoption, - http://SystemVerilog.us
* Erik Seligman and Tom Schubert [https://www.amazon.com/Formal-Verification-Essential-Toolkit-Modern-ebook/dp/B012VX1MW8/ref=sr_1_1?ie=UTF8&qid=1451183481&sr=8-1&keywords=erik+seligman+formal+verification] Formal Verification: An Essential Toolkit for Modern VLSI Design, Jul 24, 2015,
 
== Voci correlate ==
* [[Linguaggio di descrizione dell'hardware]]
* [[Verilog]]
* [[VHDL]]
* [[SystemC|System C]]
 
== RiferimentiCollegamenti esterni ==
;Standard IEEE
<references group="" responsive="1"></references>
Lo standard SystemVerilog più recente è accessibile gratuitamente tramite [https://ieeexplore.ieee.org/browse/standards/get-program/page/series?id=80 IEEExplore].
 
* [https://ieeexplore.ieee.org/document/8299595 1800-2017 - IEEE Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language]
* {{Cita libro|anno=2005|ISBN=978-0-7381-4810-6|DOI=10.1109/IEEESTD.2005.97972}}
 
* {{Cita libro|anno=2009|ISBN=978-0-7381-6130-3|DOI=10.1109/IEEESTD.2009.5354441}}
;Tutorial
* {{Cita libro|anno=2013|ISBN=978-0-7381-8110-3|DOI=10.1109/IEEESTD.2013.6469140}}
* [http://www.asic-world.com/systemverilog/tutorial.html SystemVerilog Tutorial]
* {{Cita libro|anno=2017|ISBN=978-1-5044-4509-2|DOI=10.1109/IEEESTD.2018.8299595}}
* [http://www.project-veripage.com/sv_front.php SystemVerilog Tutorial for Beginners]
* {{Cita news|url=http://www.eetimes.com/news/design/showArticle.jhtml;?articleID=173601060}}
 
* {{Cita news|url=http://asicguru.com/System-Verilog-Tutorial/1/3}}
;Definizione degli standard
* {{Cita news|url=http://www.testbench.in}}
* [http://www.eda.org/sv-ieee1800/ IEEE P1800] – Gruppo di lavoro per SystemVerilog
* {{Cita news|url=http://hdvl.wordpress.com/category/systemverilog/}}
* Siti utilizzati prima dell'IEEE 1800-2005
* Spear, Chris, [https://www.amazon.com/SystemVerilog-Verification-Learning-Testbench-Language/dp/0387765298/ref=sr_1_1?ie=UTF8&s=books&qid=1247578512&sr=8-1 "SystemVerilog for Verification"] Springer, New York City, NY. {{ISBN|0-387-76529-8}}[[ISBN (identifier)|ISBN]]&nbsp;[[Special:BookSources/0-387-76529-8|0-387-76529-8]]
** [http://www.systemverilog.org/ SystemVerilog official website]
* Ltuart Sutherland, Simon Davidmann, Peter Flake, [https://www.amazon.com/SystemVerilog-Design-Second-Hardware-Modeling/dp/0387333991/ref=sr_1_4?ie=UTF8&s=books&qid=1247578512&sr=8-4 "SystemVerilog for Design Second Edition: A Guide to Using SystemVerilog for Hardware Design and Modeling"] Springer, New York City, NY. {{ISBN|0-387-33399-1}}[[ISBN (identifier)|ISBN]]&nbsp;[[Special:BookSources/0-387-33399-1|0-387-33399-1]]
** [http://www.vhdl.org/sv/ SystemVerilog Technical Committees]
* Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari and Lisa Piper [http://SystemVerilog.us] SystemVerilog Assertions Handbook, 4th Edition, 2016- http://SystemVerilog.us
 
* Ben Cohen Srinivasan Venkataramanan and Ajeetha Kumari [http://SystemVerilog.us] A Pragmatic Approach to VMM Adoption, - http://SystemVerilog.us
;Estensioni del linguaggio
* Erik Seligman and Tom Schubert [https://www.amazon.com/Formal-Verification-Essential-Toolkit-Modern-ebook/dp/B012VX1MW8/ref=sr_1_1?ie=UTF8&qid=1451183481&sr=8-1&keywords=erik+seligman+formal+verification] Formal Verification: An Essential Toolkit for Modern VLSI Design, Jul 24, 2015,
* [http://www.veripool.org/verilog-mode Verilog AUTOs] – Sistema di meta-comment open-source per la manutenzione di codice Verilog
 
;Strumenti online
* [http://www.edaplayground.com EDA Playground] – Eseguire SystemVerilog da un web browser (online IDE)
* [http://www.svericl.com/sverule sverule] – SystemVerilog BNF Navigator
 
{{Controllo di autorità}}
== Link esterni ==
{{Norme IEEE}}
{{Logica programmabile}}
{{portale|elettrotecnica|informatica}}
 
<nowiki>[[Categoria:Linguaggi di descrizione hardware]]</nowiki>