Rileva registri che non sono ripristinati


8

Quando scrivo Verilog, uso una varietà di "linters" che daranno errori e avvertimenti. Questi sono il mio simulatore (ModelSim), il mio compilatore (Quartus II), insieme a una linter (Verilator). Insieme, ho una buona copertura per insidie ​​comuni, come disallineamenti delle dimensioni del bus e fermi dedotti.

Sfortunatamente, nessuno dei tre strumenti rileva registri che non vengono ripristinati. Per vedere cosa intendo, considera quanto segue.

reg a;
reg b;

always @(posedge clk_i or posedge rst_i) begin
  if(rst_i) begin
    a <= 1'b0; // Reset a
    // Ooops, forgot to reset b
  end else begin
    // Do stuff with a and b
  end
end

Come posso fare in modo che i miei strumenti rilevino automaticamente i registri che non vengono ripristinati?


2
I "registri che non vengono ripristinati" non sono necessariamente una cosa negativa (almeno in un progetto di silicio), che potrebbe essere il motivo per cui non sono avvertimenti negli strumenti lanugine. In generale, si desidera ripristinare solo i registri che devono essere ripristinati, poiché l'aggiunta di ripristini alle infradito aumenta la loro area e il carico sulla rete di ripristino. Se si dispone di un bus dati a 256 bit e un segnale "valido" a un bit, non è necessario ripristinare i dati se si reimposta il valore valido.
Tim

Synplicity (strumento di sintesi) fornisce avvertimenti su tali cose. Fastidioso perché sono spesso intenzionali ... ma possono aiutarti con la tua situazione (supponendo che Synplicity faccia Verilog, non ci ho mai provato)
Brian Drummond

La domanda afferma che vengono utilizzate una varietà di linter, ModelSim, Quartus II e Verilator. Questi strumenti hanno capacità di lanugine limitate e i tipi di problemi che verificano sono abbastanza stretti.
travisbartley,

Risposte:


3

Nessuno degli strumenti che hai citato è un vero strumento per la lanugine. Questi strumenti non dovrebbero darti una buona copertura dei pelucchi.

Ho visto due strumenti commerciali per la lanugine ed entrambi avevano regole per rilevare flop non ripristinati.

Vedo tre opzioni:

  1. Se la risposta di David Kessner funziona per te, la strada da percorrere.
  2. Ottieni uno strumento di lanugine decente che farà il lavoro.
  3. Scrivi uno script che rileverà flop non ripristinati.

Ora, # 2 potrebbe non essere così semplice. Non so se ci siano buoni linter gratuiti là fuori, e quelli professionali sono costosi e ti impiegheranno molto tempo per l'installazione.

# 3 è l'approccio che vorrei usare. Se conosci qualche linguaggio di scripting (Perl, Python, ...) ti ci vorrà un giorno al massimo per scrivere uno script che cerchi flop non ripristinati. Se non conosci alcun linguaggio di scripting, c'è StackOverflow dove puoi chiedere aiuto - pochi giorni e il gioco è fatto. Questo aggiungerà anche un altro strumento nella tua cassetta degli attrezzi personale che è molto apprezzato dai designer front-end: scrivere script di elaborazione del testo.

In bocca al lupo!


4

Quando eseguo Modelsim sui miei progetti VHDL, mi dà avvisi a Time = 0ps sulla logica con segnali di input di tipo 'X' o 'U'. Ho dimenticato il messaggio di avvertimento esatto. L'esame di questi avvisi può dirmi cosa non ho inizializzato.


1

Per questo mi affido ai test funzionali piuttosto che agli strumenti di sfilacciatura, tendo a riavviare e riprodurre parti del banco di prova. Se il dispositivo funziona correttamente dopo il ripristino, hai ripristinato sufficientemente lo spazio degli stati o il tuo banco di prova non va bene!


0

A volte gli strumenti di progettazione generano una serie di report che forniscono informazioni interessanti di ogni genere. Ad esempio, Xilinx potrebbe chiamarlo un rapporto mappa, che indica quali componenti logici sono stati mappati su quali componenti fisici.

Nell'esempio sopra, reg a verrebbe mappato su un FDCE (Flip flop, D, con asincrono Clear e clock Enable), mentre reg b verrebbe mappato su un FDE (Flip flop, D e Enable Clock). Questo ti direbbe che reg b non ha reset.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.