2012-10-13 8 views
5

Jestem nowy w Verilog, ale od lat jestem programistą C, co czyni mnie niebezpiecznym.Czy jest coś takiego jak __LINE__ w Verilog?

Robię Verilog dla klasy. Chciałbym użyć stylu C assert() w moim kodzie symulacji. https://en.wikipedia.org/wiki/Assert.h

Nie używamy System Verilog, więc nie ma standardowego potwierdzenia, które mogłem znaleźć. Skleiłem razem następujące makro.

`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) 

O ile mogę powiedzieć, nie ma sposobu na uzyskanie numeru wiersza. Więc jeśli twierdzenie nie powiedzie się, otrzymam tylko wiadomość, która nie ma możliwości połączenia z lokalizacją awarii.

assert failed 65535 != 65534 

Czy istnieje sposób na uzyskanie bieżącego numeru linii? Czy istnieje lepszy sposób na wykonanie testu asercji w Verilog?

Dzięki!

+1

'__LINE__ został wprowadzony w SystemVerilog. – toolic

+0

SystemVerilog ma również natywną obsługę asercji. –

+3

Icarus Verilog obsługuje makra "__LINE__" i "__FILE__" po wersji iverilog 1.0 zobacz przykład testowy [ivltests/fileline.v] (https://github.com/steveicarus/ivtest/blob/master/ivltests/fileline.v) dla użycie – shuckc

Odpowiedz

4

Jeśli jest to kontekst proceduralny, można użyć $finish(1);, który powinien wydrukować lokalizację.

+3

Testowane w Icarus Verilog. Ten parametr do $ finish() nie jest zaimplementowany. Jednak działa w Xilinx. Zobaczę, czy mogę przesłać poprawkę do Icarusa Veriloga. Dzięki! –

6

SystemVerilog 2009 oferuje dyrektywy kompilujące. Cytując ze specyfikacji IEEE Std 1800-2009, sekcja 22.13:

`__FILE__ rozwija się do nazwy bieżącego pliku wejściowego, w postaci ciągu literowego. Jest to ścieżka, w której narzędzie otworzyło plik, a nie krótką nazwę określoną w `include lub jako argument nazwy pliku wejściowego narzędzia. Format tej nazwy ścieżki może zależeć od implementacji.

`__LINE__ rozwija się do bieżącego numeru linii wejściowej, w postaci prostej liczby dziesiętnej.
Na przykład
$display("Internal error: null handle at %s, line %d.", `__FILE__, `__LINE__);

stanie pełnego opisu więcej szczegółów.

Powiązane problemy