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!
'__LINE__ został wprowadzony w SystemVerilog. – toolic
SystemVerilog ma również natywną obsługę asercji. –
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