2012-10-13 11 views
5

Sono nuovo di Verilog ma sono stato un programmatore C per anni che mi rende pericoloso.C'è qualcosa come __LINE__ in Verilog?

Sto facendo un po 'di Verilog per una lezione. Mi piacerebbe usare il test di stile C assert() nel mio codice di simulazione. https://en.wikipedia.org/wiki/Assert.h

Non stiamo utilizzando System Verilog in modo che non ci sia un asserzione standard che potrei trovare. Ho messo insieme la seguente macro.

`define ASSERT_EQUALS(x,y) \ 
    repeat(1)\ 
    begin\ 
     if((x) != (y)) \ 
     begin\ 
      $write("assert failed %d != %d\n", (x), (y));\ 
      $finish;\ 
     end\ 
    end 

    // test the assert(should fail) 
    `ASSERT_EQUALS(t_data_in,16'hfffe) 

Per quanto posso dire, non c'è modo di ottenere un numero di linea. Quindi, se l'asserzione fallisce, ricevo solo un messaggio senza alcun modo per ricollegarlo al luogo dell'errore.

assert failed 65535 != 65534 

C'è un modo per ottenere il numero di linea corrente? O c'è un modo migliore per fare un test di asserzione in Verilog?

Grazie!

+1

'__LINE__ è stato introdotto in SystemVerilog. – toolic

+0

SystemVerilog ha anche il supporto nativo per le asserzioni. –

+3

Icarus Verilog supporta le macro '__LINE__' e' __FILE__' dopo iverilog versione 1.0 vedere il caso di test [ivltests/fileline.v] (https://github.com/steveicarus/ivtest/blob/master/ivltests/fileline.v) per utilizzo – shuckc

risposta

4

Se si tratta di un contesto procedurale, è possibile utilizzare $finish(1); che dovrebbe stampare la posizione.

+3

Testato in Icarus Verilog. Quel parametro su $ finish() non è implementato. Tuttavia funziona in Xilinx. Vedrò se posso presentare una correzione per Icarus Verilog. Grazie! –

6

SystemVerilog 2009 offre direttive del compilatore. Citando la specifica IEEE Std 1800-2009, Sezione 22.13:

`__FILE__ si espande al nome del file di input corrente, sotto forma di stringa letterale. Questo è il percorso attraverso il quale uno strumento ha aperto il file, non il nome breve specificato in `include o come argomento del nome file di input dello strumento. Il formato di questo nome percorso può essere dipendente dall'implementazione.

`__LINE__ si espande al numero di riga di input corrente, sotto forma di un numero decimale semplice.
Ad esempio:
$display("Internal error: null handle at %s, line %d.", `__FILE__, `__LINE__);

Fare riferimento alla specifica completa per maggiori dettagli.

Problemi correlati