SCV_SOFT_SONSTRAINTを書いてみた。
SystemVerilog 2012より追加された soft constraintが
どんなものか分からなかったので SCVで書いてみました。
SystemVerilog 2012 : soft constraint
- サンプルコード
#include <scv.h> //Valid values for a are 10 or 30 class slower : public scv_constraint_base { public: scv_smart_ptr <int> a; SCV_CONSTRAINT_CTOR(slower) { SCV_SOFT_CONSTRAINT( (a() == 10 || a() == 30) ); } }; //Valid values for a are 20 or 50 class new_slower : public slower { SCV_CONSTRAINT_CTOR(new_slower) { SCV_BASE_CONSTRAINT(slower); SCV_CONSTRAINT( (a() == 20 || a() == 50) ); } }; int sc_main( int argc, char* argv[] ) { slower s_hoge("slower"); new_slower n_hoge("new_slower"); for (int i=0; i<5; i++) { s_hoge.next(); printf( "[SCV] slower data = %d\n", s_hoge.a->read() ); } printf("\n"); for (int i=0; i<5; i++) { n_hoge.next(); printf( "[SCV] new slower data = %d\n", n_hoge.a->read() ); } return 0; }
- 実行結果
$> ./main SystemC 2.2.0 --- Jan 15 2012 14:19:56 Copyright (c) 1996-2006 by all Contributors ALL RIGHTS RESERVED *** SCV_WARNING: CONSTRAINT_WARNING_IGNORE_SOFT_CONSTRAINT at time 0 s in process Soft constraints for over-constrained object 'new_slower' will be ignored. [SCV] slower data = 30 [SCV] slower data = 10 [SCV] slower data = 30 [SCV] slower data = 30 [SCV] slower data = 10 [SCV] new slower data = 20 [SCV] new slower data = 20 [SCV] new slower data = 20 [SCV] new slower data = 50 [SCV] new slower data = 20
確かに、制約が上書きされていることが分かります。
でも、SCVの場合 SCV_BASE_CONSTRAINT書かなければ。。。(ry
ちなみに、相反する制約かけると暴走?します。
ぜひお試しください。