SystemVerilog: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m -sposta
m smistamento lavoro sporco e fix vari
Riga 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++]],
Riga 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 ==
Riga 39:
'''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 statement comportamentali come nel caso del [[Register transfer level|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 questa capacità ulteriore 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 risolverne 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 packed 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|coversione 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">
Line 55 ⟶ 53:
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. Possono essere usati meta-valori X e Z, 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)|strutture]]''' e '''le unioni''' funzionano in modo molto simile al [[C (linguaggio)|linguaggio di programmazione C.]] I miglioramenti di SystemVerilog includono l'attributo '''tagged''' e l'attributo '''packed'''. 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">
Line 133 ⟶ 129:
</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.
Line 142 ⟶ 138:
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.
Line 327 ⟶ 323:
* [[SystemC|System C]]
 
== RiferimentiNote ==
<references />
{{Reflist}}
* {{CiteCita booklibro| title titolo= 1800-2005 — IEEE Standard for System Verilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2005.97972| year anno= 2005| isbn = 978-0-7381-4810-6}}
* {{CiteCita booklibro| title titolo= 1800-2009 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2009.5354441| year anno= 2009| isbn = 978-0-7381-6130-3}}
* {{CiteCita booklibro| title titolo= 1800-2012 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2013.6469140| year anno= 2013| isbn = 978-0-7381-8110-3}}
* {{CiteCita booklibro| title titolo= 1800-2017 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language| doi = 10.1109/IEEESTD.2018.8299595| year anno= 2017| isbn = 978-1-5044-4509-2}}
* {{citecita news |lastcognome=McGrath |firstnome=Dylan |url=http://www.eetimes.com/news/design/showArticle.jhtml;?articleID=173601060 |titletitolo=IEEE approves SystemVerilog, revision of Verilog |publishereditore=EE Times |datedata=9 novembre 2005-11-09 |access-dateaccesso=2007-01-31 gennaio 2007}}
* {{citecita news |lastcognome=Puneet Kumar |url=http://asicguru.com/System-Verilog-Tutorial/1/3 |titletitolo=System Verilog Tutorial |data=9 novembre date=2005-11-09 }}
* {{citecita news |lastcognome=Gopi Krishna |url=http://www.testbench.in |titletitolo=SystemVerilog ,SVA,SV DPI Tutorials |datedata=9 novembre 2005-11-09 }}
* {{citecita news |lastcognome= HDVL |url=http://hdvl.wordpress.com/category/systemverilog/ |titletitolo=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}}
* Stuart 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}}
Line 366 ⟶ 362:
* [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à}}
{{Norme IEEE}}
{{Logica programmabile}}
{{portale|elettronicaelettrotecnica|informatica}}
 
[[Categoria:Circuiti elettronici configurabili]]