Есть ли что-то вроде __LINE__ в Verilog?

Я новичок в Verilog, но много лет был программистом на C, что делает меня опасным.

Я делаю Verilog для класса. Я хотел бы использовать тестирование стиля C assert() в моем коде моделирования. https://en.wikipedia.org/wiki/Assert.h

Мы не используем System Verilog, поэтому стандартного утверждения я не нашел. Я собрал следующий макрос.

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

Насколько я могу судить, нет никакого способа получить номер строки. Поэтому, если утверждение терпит неудачу, я получаю только сообщение без возможности вернуться к местоположению сбоя.

assert failed 65535 != 65534

Есть ли способ получить текущий номер строки? Или есть лучший способ выполнить проверку утверждений в Verilog?

Спасибо!


person David Poole    schedule 13.10.2012    source источник
comment
SystemVerilog также имеет встроенную поддержку утверждений.   -  person    schedule 14.10.2012
comment
Icarus Verilog поддерживает макросы __LINE__ и __FILE__ после версии iverilog 1.0, см. тестовый пример ivltests/ fileline.v для использования   -  person shuckc    schedule 04.04.2013


Ответы (2)


Если это процедурный контекст, вы можете использовать $finish(1);, который должен печатать местоположение.

person Community    schedule 13.10.2012
comment
Протестировано в Icarus Verilog. Этот параметр для $finish() не реализован. Однако работает в Xilinx. Я посмотрю, смогу ли я представить исправление для Icarus Verilog. Спасибо! - person David Poole; 14.10.2012

SystemVerilog 2009 предлагает директивы компилятора. Цитата из спецификации IEEE Std 1800-2009, раздел 22.13:

`__FILE__ expands to the name of the current input file, in the form of a string literal. This is the path by which a tool opened the file, not the short name specified in `include or as a tool’s input file name argument. The format of this path name may be implementation dependent.

`__LINE__ expands to the current input line number, in the form of a simple decimal number.
For example:
$display("Internal error: null handle at %s, line %d.", `__FILE__, `__LINE__);

Для получения более подробной информации см. полную спецификацию.

person Hackonteur    schedule 18.10.2012