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を使ったほうが処理速度は早いらしいです。