Partenza IEEE Std 1800-2012 § 3,4 & § 24. Per la descrizione completa circa program
blocchi.
In breve, sintesi incompleta, un blocco program
:
- non può può non contenere
always
procedure, primitive
casi, module
casi, interface
istanze (virtual interface
e la porta interface
è consentito), o altri program
istanze.
- specifica la pianificazione nell'area reattiva. Questo impedisce condizioni di gara.
- ha un task di sistema aggiuntivo
$exit
, che termina le istanze program
che lo chiama.
- La simulazione termina quando tutte le istanze
program
sono terminate.
- è principalmente come un blocco
module
eccetto come indicato sopra.
L'idea di un blocco program
consiste nel creare una netta separazione tra test e progettazione. Nelle versioni precedenti di SystemVerilog (pre IEEE 1800), l'istanziazione di un class
era spesso limitata ai blocchi program
. Questo ha sottolineato la divisione del test e del design. Inoltre ha reso i blocchi program
fondamentali per i tecnici di verifica che volevano utilizzare la programmazione orientata agli oggetti nel loro flusso. Dal momento che IEEE 1800, un class
può essere definito e istanziato quasi ovunque. Di conseguenza, i blocchi program
sono diventati meno sufficienti.
Oggi il parere sull'utilità di un blocco program
è diviso. Dalle ultime convenzioni in cui sono stato, la tendenza sembra essere favorevole all'abbandono dei blocchi program
. Questo perché i vantaggi possono essere raggiunti con altri metodi. La pianificazione nell'area reattiva può essere eseguita con i blocchi clocking
. A mailbox
, coda ([$]
) o array associativo ([*]
) può essere utilizzato per gestire in modo intelligente la simulazione terminare eseguendo più test. Personalmente, mi piace ancora usare i blocchi program
e utilizzare initial forever
come equivalente always
quando necessario. Se hai intenzione di utilizzare UVM, un banco di prova per blocchi non program
potrebbe funzionare meglio per te.
Alla fine, si tratta in realtà di una preferenza metodologica. È meglio valutare e provare da solo.
Grazie!Ho giocato con i blocchi di programma, ho scoperto che, mentre i blocchi di programma di base funzionano, alcune funzioni non sono supportate dal mio simulatore (errore in fase di compilazione di "SystemVerilog construct non ancora implementato"). Non sembra che valga la pena provare a capire quali caratteristiche dei blocchi di programma funzionano e quali no, dal momento che sembra che io possa ottenere tutti i benefici dei blocchi di programma usando altri mezzi. – dan