1

ツールについては、SystemVerilog アサーションを正しく解析しようとしていますが、特定の式の正しい優先順位について混乱しています。SystemVerilog 標準には、優先順位としてnot> until>と記載されている優れた表がありますalways。しかし、これが単項演算子の代替でどのように機能するかはよくわかりません。

たとえば、notは よりも優先順位が高いためuntil、明らかに次のようにする必要があります。

    not r1 until r2   ---->   (not r1) until r2

untilは よりも優先順位が高いため、always明らかに次のようにする必要があります。

    always r1 until r2   ---->  always (r1 until r2)

しかし、以下を解釈する適切な方法は何ですか?

    not always r1 until r2

2 つの解釈が正しいと想像できます。

  • not always (r1 until r2)untilよりも強く結合するためalways、または
  • (not always r1) until r2notよりも強く結合するためuntil

NCVerilog 15.10-p001 は最初の解釈を使用しているようです。私が見逃したかもしれないこれが正しいかどうかを議論する標準のどこかにありますか? NCVerilog の優先順位規則を適切な文法にエンコードするのは難しいようです...

4

1 に答える 1

0

通常、プログラミング言語は、単項演算子を常に二項演算子よりも優先度が高いものとして定義します。この場合alwaysは、二項演算子よりも優先順位の低い単項演算until子です。

Perl にも同様の状況があり、not演算子 (単項) は&&(バイナリ) よりも優先順位が低くなります。概念的には、式は次の Perl 式に似ています。

! not $r1 && $r2

r1およびのすべての値についてこれを評価しようとするとr1、Perl が次のように解釈することがわかります。

! not ($r1 && $r2)

これは、概念的にはシミュレーターと同じ解釈です。どうしてこうなるのか、一概には言えません。until解釈 2 がの優先順位に違反するためだと思いalwaysます。

于 2015-10-17T11:58:45.207 に答える