7

私は 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 でアサーション テストを行うためのより良い方法はありますか?

ありがとう!

4

2 に答える 2

10

SystemVerilog 2009 は、コンパイラ ディレクティブを提供します。仕様 IEEE Std 1800-2009、セクション 22.13 からの引用:

`__FILE__文字列リテラルの形式で、現在の入力ファイルの名前に展開されます。`includeこれは、またはツールの入力ファイル名引数として指定された短い名前ではなく、ツールがファイルを開いたときのパスです。このパス名の形式は、実装に依存する場合があります。

`__LINE__単純な 10 進数の形式で、現在の入力行番号に展開されます。
例えば:
$display("Internal error: null handle at %s, line %d.", `__FILE__, `__LINE__);

詳細については、完全な仕様を参照してください。

于 2012-10-18T11:28:28.793 に答える
4

これが手続き型のコンテキストである場合は、 $finish(1);その場所を出力する必要があるものを使用できます。

于 2012-10-13T20:43:33.537 に答える