SystemVerilog: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: codifica, sostituzione o rimozione di caratteri unicode per spazi tipografici particolari
 
(7 versioni intermedie di 6 utenti non mostrate)
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 38:
'''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">
Riga 44:
</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|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
Riga 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|circuiti logici combinatori]]. Il simulatore deduce che la ''sensitivity list'' sia costituito da tutte le variabili dalle istruzioni contenute:<syntaxhighlight lang="systemverilog" line="1">
Riga 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 [[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 ==
Riga 314:
 
{{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 correlate ==
* [[Linguaggio di descrizione dell'hardware]]
* [[Verilog]]
* [[VHDL]]
* [[SystemC|System C]]
 
== Note ==
<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}}
Line 336 ⟶ 332:
* 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]]
 
== Collegamenti esterni ==
Line 365 ⟶ 367:
{{portale|elettrotecnica|informatica}}
 
[[Categoria:Circuiti elettronici configurabili]]
[[Categoria:Linguaggi di descrizione hardware]]
[[Categoria:Elettronica digitale]]
[[Categoria:Linguaggi di programmazione strutturati]]