決定性

Verylは決定論的シミュレーションを保証します:同一のソースコードと同一の刺激シーケンスが与えられた場合、準拠するシミュレータはすべてのシミュレーションステップで同一の信号値を生成します。

Verylが決定性を実現する方法

Verylの言語制約はSystemVerilogにおける一般的な非決定性の原因を排除します:

  1. Verylは単一の = 演算子を使用し、コンテキストに基づいて正しいセマンティクスを自動推論します。これにより、誤った代入タイプを誤って使用することが不可能になります。
  2. すべてのブロックが同じスナップショットから読み取り、独立した「next」スロットに書き込むため、always_ff ブロックの実行順序はシミュレーション結果に影響しません。
  3. 決定論的な組み合わせ評価 — ブロックは安定するまで伝播し、組み合わせループはコンパイル時に検出されます。
  4. 明示的なクロックドメインクロッシングunsafe (cdc) なしのクロスドメインアクセスはコンパイル時エラーとなり、意図しないレースを防止します。

保証の範囲

決定性の保証はシミュレーションステップ境界での観測可能な信号値(各FFコミット後)に適用されます。単一フェーズ内の内部評価順序(例:収束フェーズ内での組み合わせブロック再評価の順序)は実装定義ですが、観測可能な結果は実装間で同一です。

SystemVerilogとの関係

トランスパイルされたSystemVerilog出力は、IEEE 1800準拠のシミュレータが決定論的に処理する確立されたコーディングパターンに従います:

  • 順序ロジックには always_ff<=(ノンブロッキング)
  • 組み合わせロジックには always_comb=(ブロッキング)
  • 同一変数へのブロッキング/ノンブロッキング代入の混在なし