SCV:制約付ランダムデータ生成(その1)
今回は、SCVを使った制約付きランダム生成(その1)です。
今までの keep_only/keep_outの記述を
SCV_CONSTRANT を使って書くことができます。
- サンプルコード
#include <scv.h> // fast simple constraint. // Valid values for a are 10-20, 50-60, 90-100 class faster : public scv_constraint_base { public: scv_smart_ptr <int> a; SCV_CONSTRAINT_CTOR(faster) { a->keep_only(10, 100); a->keep_out(21, 49); a->keep_out(61, 89); } }; class slower : public scv_constraint_base { public: scv_smart_ptr <int> a; SCV_CONSTRAINT_CTOR(slower) { SCV_CONSTRAINT( (a() >= 10 && a() <= 100) && !(a() >= 21 && a() <= 49) && !(a() >= 61 && a() <= 89) ); } }; int sc_main( int argc, char* argv[] ) { faster f_hoge("faster"); slower s_hoge("slower"); for (int i=0; i<10; i++) { f_hoge.next(); printf( "[SCV] faster data = %d\n", f_hoge.a->read() ); } printf("\n"); for (int i=0; i<10; i++) { s_hoge.next(); printf( "[SCV] slower data = %d\n", s_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] faster data = 98 [SCV] faster data = 57 [SCV] faster data = 57 [SCV] faster data = 14 [SCV] faster data = 95 [SCV] faster data = 92 [SCV] faster data = 56 [SCV] faster data = 14 [SCV] faster data = 94 [SCV] faster data = 97 [SCV] slower data = 94 [SCV] slower data = 99 [SCV] slower data = 55 [SCV] slower data = 94 [SCV] slower data = 99 [SCV] slower data = 55 [SCV] slower data = 15 [SCV] slower data = 99 [SCV] slower data = 91 [SCV] slower data = 100
っといった感じになります。
SCVのマニュアルを見ると、クラス名どおり
keep_only/keep_outを使ったほうが処理速度は早いらしいです。