-1

###として記述された遅延を持つSystemVerilogコードを合成したいが、シンセサイザは遅延が合成不可能であるためシンタックスエラーを返す。私は合成される遅れを与えることができる方法はあるのか知りたいですか? たとえば、これは遅延のあるコードのSystemVerilogアサーションですVerilogで合成可能な遅延

アサーションプロパティ(req1 == 0)## 1(req1 == 1)## 1!(req2 == 1)||(gnt1 == 0));

どのようにして動作を失うことなく合成できますか?

答えて

1

プロパティはVerilogの一部ではなく、SystemVerilogの一部です。さらに重要な点として、プロパティ自体は合成できません。プロパティは、シミュレーション環境のcoverまたはassertステートメントで使用されます。

遅延に関しては、フリップフロップを使用して信号を遅延させることだけが選択肢です。あなたのプロパティでは、##1は、あなたのプロパティがそれに関連したクロッキングを持っていると仮定して、 "次のエッジで"を意味します(cover/assertステートメントの中か、クロッキングブロック内です)。それ以外の場合は合成可能なコードで論理合成サイクルの遅延を作成するには

[email protected](posedge ck or posedge arst) begin 
    if(arst) 
    data_delayed <= '0; 
    else 
    data_delayed <= data; 
end 
+0

です。はい、コード内のプロパティはSystemVerilogアサーションを使用して指定されています。私は実際にハードウェア記述コードを正式に検証可能なコードに変換しようとしています。そのため、アサーションを使用してプロパティを指定し、シンセサイザに渡して検証のために変換します。シンセサイザは、使用される遅延シンタックス、すなわち、## 1のプロパティを受け入れないだけである。上記は、シンセサイザーの遅延をモデル化する唯一の方法ですか? – mii9

+0

プロパティを合成することはできません。正式な検証がどのように機能するかはわかりません。私の(限定的な)正式な検証では、正式なツールはインプリメンテーションを1つの入力として、HDLのプロパティを別のものとして取り込みます。したがって、特性は合成されず、通常の方法で書き込むことができます。おそらく、使用しているツールとそれをどのように使用しようとしているかについて、より多くの情報を提供する別の質問をする必要があります。 – Hida

1

あなたが書いたプロパティは、任意の意味をなさない。ブール式の途中で遅延を追加することはできません。代わりに一連の式を書くことを意味しましたか?正しい構文は

sequence s1; 
((req1 == 0) ##1(req1 == 1) ##1 !(req2 == 1) || (gnt1 == 0)); 
endsequence 
+0

はい、そうです。それは正しい方法です、申し訳ありません私の間違い。どうもありがとう。しかし、まだ遅延構文が指定された振る舞いに使用され、シンセサイザはそのために構文エラーを出します。遅延構文のないプロパティに対しては正常に動作します。 – mii9

関連する問題