2013-08-23 11 views
6

Esistono funzionalità di SV che un blocco di programma offre che non può essere duplicato con altri metodi?Blocco del programma SystemVerilog rispetto al banco di prova tradizionale

La versione meno concreta di questa domanda è: dovrei preoccuparmi dei blocchi di programma per la verifica? Mi sto trasferendo da un ambiente in cui siamo stati vincolati a Verilog-95 in un ambiente in cui è supportato SV, e mi chiedo se sto creando un lavoro extra per me stesso non utilizzando i blocchi di programma.

risposta

9

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.

+0

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

1

Non è consigliabile utilizzare i blocchi di programma, utilizzare invece un modulo. Ho scritto uno detailed article su questo diversi anni fa.

Problemi correlati