私はユニットフィールドを持っていますevents:
events:uint;
の値はevents、設定されたビットの量ほど興味深いものではありません。の設定ビット量の範囲を制限したいと思いますevents。それを行う方法はありますか?ご協力ありがとうございました。
私はユニットフィールドを持っていますevents:
events:uint;
の値はevents、設定されたビットの量ほど興味深いものではありません。の設定ビット量の範囲を制限したいと思いますevents。それを行う方法はありますか?ご協力ありがとうございました。
もっと簡単な方法があるかもしれませんが、ビット スライスを使用して uint のリストを変数のビットと等しくなるように制約し、 を使用sumしてそれらの量を制約することができます。
次の例は、必要なことを行います (簡潔にするために 4 ビット変数に制限されています)。
<'
extend sys {
events : uint(bits:4);
b: list of uint(bits:1);
keep b.size() == 4;
keep b[0] == events[0:0];
keep b[1] == events[1:1];
keep b[2] == events[2:2];
keep b[3] == events[3:3];
keep (b.sum(it) == 2);
};
'>
すべての制約を記述するのはおそらく少し見苦しいですが、define as computedマクロを使用して簡単に行うことができます。