2017-04-21 10 views
1

私のテストベンチで制約をオーバーライドするのに問題があります。私のシーケンスで は私がやっている次: 制約をオーバーライド

`uvm_do_with(req, {trans_kind == WRITE ; 
         address == 40'hc0_0000_0000; 
         mask_mismatch_error == 1; 
         bus_error_type == SCB_BUS_ERR_NONE; 
         }) //this line sends the transaction 

そして、私のシーケンス項目で

NCSIM:* W、SVRNDFログファイルには、この警告を与えている

constraint c_mask_mismatch_error_disable_map8 { (cfg_h.is_map8 == 1) -> (mask_mismatch_error == 0); } 

(送信元ロケーション/ライン):ランダム化メソッドコール が失敗しました。 79492842 PS + 14

NCSIM:* W、RNDOCS:これらの制約は 矛盾する制約のセットに貢献:})//この失敗したランダマイズコールの一意のIDは86

観測シミュレーション時間でありますラインは、トランザクションを送信 ( (mask_mismatch_error == 0);}(ソース位置/ライン)

NCSIM:* W、RNDOCS:

状態変数:これらの変数は、競合 制約のセットに寄与する。 cfg_h.is_ma P8(1)ソース位置/行]

ランド変数:mask_mismatch_error [ソース位置/ライン]

オーバーライドこのタイプのが不可能である理由を私は理解していません。シーケンスから制約をオーバーライドできるようにするにはどうすればよいですか?

答えて

1

randomizeの呼び出しの句は、制約を追加するためにのみ使用されます。それらを無効にすることはできません。制約をオーバーライドする適切なOOP方法は、トランザクションクラスを拡張し、拡張クラスの同じ名前の制約を宣言することです。

あなたがいることをすればあなたの他のオプションは

req.c_mask_mismatch_error_disable_map8.constraint_mode(0); 

を使用して制約をオフにすることで、あなたは、もはや多くの人々は、とにかく使用しないことをお勧めしている、 `umm_do_withマクロを使用することはできません。

+0

ありがとう、私はあなたの解決策を実装します – Pete

+0

もう一つの選択肢は、シーケンス項目の一部として持つ制約を 'ソフト制約 'として宣言することです。 – AndresM