In caso di rimuovere tutte le avvertenze presenti nel disegno Verilog o VHDL? Perché o perché no?

StackOverflow https://stackoverflow.com/questions/2722299

Domanda

In (regolare) il software ho lavorato in aziende in cui l'opzione di gcc -Wall viene utilizzato per visualizzare tutte le avvertenze. Quindi hanno bisogno di essere affrontate. Con non banale progettazione FPGA / ASIC in Verilog o VHDL ci sono spesso molti molti avvertimenti. Dovrei preoccuparsi di tutti loro? Avete delle tecniche specifiche per suggerire? Il mio flusso è principalmente per FPGA (Altera e Xilinx in particolare), ma suppongo le stesse regole si applicano alla progettazione ASIC, forse più così a causa della impossibilità di modificare la struttura dopo che è stato costruito.

Aggiornamento 2010/04/29:. Mi è stato originariamente pensato di sintesi e di P & R avvertimenti (luogo e del percorso), ma gli avvertimenti di simulazione sono validi anche

È stato utile?

Soluzione

Ecco il mio punto di vista dal mondo ASIC (99% Verilog, 1% VHDL).

Facciamo uno sforzo per eliminare tutte le avvertenze dei nostri file di log, perché in generale, interpretiamo gli avvisi come lo strumento che ci dice che non dobbiamo aspettarci risultati prevedibili.

Dal momento che ci sono molti tipi di strumenti che possono generare allarmi (simulazione / debugger / linter / sintesi / equivalenza controllo, ecc), mi concentrerò questa discussione sulla simulatore di compilatore le avvertenze.

Analizziamo le avvertenze e di classificarli in due gruppi principali: quelli che riteniamo non influenzerà i risultati della nostra simulazione, e altri che possono influenzare i risultati. In primo luogo, utilizzare le opzioni di uno strumento per consentire esplicitamente come molti avvertimenti possibili. Per il primo gruppo, abbiamo poi utilizzare le opzioni di uno strumento per disattivare in modo selettivo i messaggi di avviso. Per il secondo gruppo, fissiamo il codice sorgente Verilog per eliminare gli avvertimenti, poi promuovere gli avvertimenti ad errori. Se eventuali avvisi vengono poi introdotti in quelle categorie, ci costringiamo a correggerli prima c'è permesso di simulare.

Un'eccezione alla metodologia di cui sopra è per terze parti IP, il cui codice Verilog non c'è permesso di modificare.

Questo metodo funziona abbastanza bene per le simulazioni RTL, ma diventa molto più difficile quando si corre simulazioni cancello utilizzando SDF back-annotato. Non c'è semplicemente abbastanza tempo per analizzare ed eliminare le letteralmente milioni di avvertimenti. Il meglio che possiamo fare è di utilizzare degli script (Perl) per analizzare i file di log e categorizzare le avvertenze.

In sintesi, cerchiamo il nostro meglio per eliminare gli avvertimenti, ma non è sempre pratico per farlo.

Altri suggerimenti

Ecco quello che faccio, per riferimento. Ho ispezionare tutti i file di log dal tool (s).

Per Altera Quartus II che include i rapporti della mappa, in forma e di unione. Mi rivolgo anche sull'opzione Design Rule Check (DRC) e verificare che il file. Per alcuni messaggi che sono facili da riparare, ad esempio porta manca l'istanza o la larghezza costante non corretta, li posso risolvere. Altri quelli approfondire. Per quelli che sono i nuclei, ad esempio una mancata corrispondenza di larghezza, perché non sto usando l'output completo deliberato, li ho marchio a essere soppressa nel file .srf. Ho solo sopprimere i messaggi specifici, non tutti i "messaggi simili", in quanto ci possono essere altri, né ora né in futuro, quali sono i problemi.

Ho scritto uno script che applica una serie di espressioni regolari per il file di log di buttare via le linee che ho "conosco sono OK". Esso aiuta, ma devi essere un po 'attenti con le espressioni regolari - che cosa ha fatto jwz dire su di loro:)

La ragione più importante che mi viene in mente è la simulazione-sintesi mancata corrispondenza. strumenti di sintesi fanno un sacco di ottimizzazioni (come giustamente dovrebbe) e se si lascia lacune nel vostro progetto si cerca di guai. Per i dettagli circa gli standard di sintesi, fare riferimento alla IEEE 1.364,1-2002.

Non v'è alcuna necessità di rimuovere tutti gli avvertimenti, ma tutto dovrebbe essere rivisto. Per rendere questo possibile per i grandi disegni, alcuni avvisi possono essere soppressi per il suo tipo o id.

Per esempio, alcuni strumenti di sintesi danno un avviso se un parameter Verilog è definito e nessun valore assegnato durante la creazione di istanze del modulo. Per me, questo avvertimento è solo un consiglio per l'uso localparam. E 'una buona idea di sopprimerlo per la sua identificazione (per esempio LINT-01).

In alcuni casi, voglio vedere le avvertenze e non li sopprimono. Per esempio, il mio strumento fornisce un avviso ogni volta che io definisco un orologio virtuale da vincoli. L'avviso non significa che c'è un problema, ma posso prendere un source mancante di un orologio che non era destinato ad essere virtuale.

A volte non esistenza di avvertimenti punti su un problema. Ad esempio, se cambio una variabile di applicazione, ci dovrebbe essere un avvertimento.

Ci sono troppi casi. A volte l'avviso è inevitabile. A volte è bello avere avvertimenti per essere in grado di rivedere alcune cose critica. Se il progettista sa quello che lui / lei lo fa, non c'è nessun problema.

Alcune avvertenze sono attesi e non v'è un problema se non si ottiene un messaggio di avviso.

Ad esempio, se davvero vuole veramente un fermo, ma non v'è alcun avviso circa dedurre un fermo allora la vostra sintesi potrebbe non aver fatto quello che intendeva.

quindi no, non si sempre voglia di 'trattare' con tutte le avvertenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top