スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SystemC:bool型を連結するのはやめましょう

SystemC Advent Calendar2012 の 11日目の記事です。
bool型でハマりそうな(私が勝手にハマっただけかも)記述について紹介。
ビット連結記述の際には注意が必要です。
※bool型の詳細(1bitではない)について、次回紹介する予定です。

  • サンプルコード
  •  1|#include <stdio.h>
     2|#include <systemc.h>
     3|
     4|int sc_main (int argc, char* argv[]) {
     5|
     6|  sc_uint<8> in;
     7|  in = 0xfa;
     8|
     9|  bool b7 = in[6] ^ in[5] ^ in[4];
    10|  bool b6 = in[7] ^ in[6] ^ in[4] ^ in[3];
    11|  bool b5 = in[6] ^ in[5] ^ in[3] ^ in[2];
    12|  bool b4 = in[5] ^ in[3] ^ in[2] ^ in[1];
    13|  bool b3 = in[6] ^ in[5] ^ in[2] ^ in[1] ^ in[0];
    14|  bool b2 = in[6] ^ in[1] ^ in[0];
    15|  bool b1 = in[5] ^ in[0];
    16|  bool b0 = in[7] ^ in[6] ^ in[5];
    17|
    18|  sc_uint<8> out = ( b7, b6, b5, b4, b3, b2, b1, b0 );
    19|
    20|  cout << " in  = " << in.to_string(SC_BIN) << endl;
    21|  cout << " out = " << out.to_string(SC_BIN) << endl;
    22|
    23|  sc_start();
    24|  return 0;
    25|}
  • 実行結果(NG)
  • $> ./main
     in  = 0b011111010
     out = 0b000000001
    

というような結果になってしまいます。
もちろん、Warningはしっかりでますのでチェックしていれば問題ないと思います。


一つの解決手段としては、

  sc_uint<1> b7 = in[6] ^ in[5] ^ in[4];
  sc_uint<1> b6 = in[7] ^ in[6] ^ in[4] ^ in[3];
  sc_uint<1> b5 = in[6] ^ in[5] ^ in[3] ^ in[2];
  sc_uint<1> b4 = in[5] ^ in[3] ^ in[2] ^ in[1];
  sc_uint<1> b3 = in[6] ^ in[5] ^ in[2] ^ in[1] ^ in[0];
  sc_uint<1> b2 = in[6] ^ in[1] ^ in[0];
  sc_uint<1> b1 = in[5] ^ in[0];
  sc_uint<1> b0 = in[7] ^ in[6] ^ in[5];

ですね。上記のようなサンプルコードなら、

  out[0] = in[6] ^ in[5] ^ in[4];
  out[1] = in[7] ^ in[6] ^ in[4] ^ in[3];
  out[2] = in[6] ^ in[5] ^ in[3] ^ in[2];
  out[3] = in[5] ^ in[3] ^ in[2] ^ in[1];
  out[4] = in[6] ^ in[5] ^ in[2] ^ in[1] ^ in[0];
  out[5] = in[6] ^ in[1] ^ in[0];
  out[6] = in[5] ^ in[0];
  out[7] = in[7] ^ in[6] ^ in[5];

って書けばいいじゃん!っていうツッコミもありますが。。。

  • 実行結果(OK)
  • $> ./main
     in  = 0b011111010
     out = 0b010111011
    

というように、結果が求めているもの違うので書かないようにしたほうがいいです。

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。