私はこのSVコードを持っています:
module m1 (input int a);
always begin #1; force a=a+1; end
endmodule
module m ();
int a;
m1 m1(a);
endmodule
上記のコードのこのステートメントは有効ですforce a=a+1;
か?
私はこのSVコードを持っています:
module m1 (input int a);
always begin #1; force a=a+1; end
endmodule
module m ();
int a;
m1 m1(a);
endmodule
上記のコードのこのステートメントは有効ですforce a=a+1;
か?
シミュレーターで動作する可能性がありますが、お勧めしません。
IEEE std 1800-2009 セクション 10.6 では、force ステートメントを「手続き型の連続代入」と定義しています。LRM には、式の右側の値が変更されると、新しい値が右側の変数に強制的に適用されるという例があります。この場合a=a+1
、技術的には無限ループが発生するはずですが、スケジュール ルールにより発生しない可能性があります。
一般force
に、控えめに使用し、テスト ベンチおよびビヘイビア モデリングで使用する必要があります。関数式は強制的に使用できますが、循環依存は避ける必要があります。定数式を割り当てるのが最善force
です。
はい、この場合の動作は明確に定義されていると思います。モジュール m1 には強制された値が表示されますが、囲んでいるモジュールには表示されません。