私はアサーション ベースの検証の初心者であり、それが適切に行われる方法を学ぼうとしています。systemverilog + assertions に関する構造と技術的な詳細に関する多くの情報を見つけましたが、現実の世界で物事が実際にどのように行われるかについてのある種の「クックブック」資料をまだ見つけていません。
質問と制約:
- デザインには、 data、valid、およびid入力を含むデータ入力バスがあります。
- 1データ「パッケージ」は3サンプル
- チャネルnの後には、チャネルn+1からのデータが常に存在します。
- チャネル ID は、最大の ID が送信された後にラップされます
- データ バイト間に任意の数の clk ティックを含めることができます
以下は、チャネル ID を使用した単純でうまくいけば正しいタイミング図です。
では、最小限のコードでこれを行うにはどうすればよいでしょうか。素敵できれい。以前は、データを駆動するダミーの Verilog モジュールを作成しました。しかし、仮定プロパティを使用してチャネル ID を制約することはできますが、それ以外の場合は、正式なツールが私の設計にブレーキをかけようとする自由な手は残しておいてください。
スターター向けのシンプルなテンプレートは次のとおりです。
data_in : assume property (
<data with some ID>[=3]
|=>
<data with the next id after any clk tick>
);
問題は、上記のような仮定/アサーションがすべてのデータサンプルでトリガーされ、時間的に重複する並列スレッドを作成する傾向があることだと思います。