スポンサーサイト

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

bool型と「!」と「~」演算子

SystemC Advent Calendar2012 の 13日目の記事です。
今回はbool型について、常識的なネタを。


まずは 以下のサンプルコードを見てください。

  • サンプルコード
  •  1|#include <systemc.h>
     2|
     3|SC_MODULE( hoge ){
     4|
     5|  sc_in  <bool >        clk;
     6|  sc_in  <bool >        xrst;
     7|  sc_in  <sc_uint<32> > indata1;
     8|  sc_in  <sc_uint<32> > indata2;
     9|  sc_out <sc_uint<64> > outdata;
    10|
    11|  void process();
    12|
    13|  SC_CTOR( hoge ):
    14|    indata1("indata1")
    15|    , indata2("indata2")
    16|    , outdata("outdata")
    17|  {
    18|    SC_METHOD( process );
    19|      sensitive << clk.pos();
    20|      sensitive << xrst.neg();
    21|  }
    22|};
    23|
    24|void hoge::process(){
    25|
    26|  if( ~xrst.read() ) {
    27|    outdata.write(0);
    28|  } else {
    29|    outdata.write(indata1.read() * indata2.read());
    30|  }
    31|}

このコードを実行した波形がこちらになります。

20121213_NG.png

outdata(出力データ)が「0」のままになっていると思います。
つまり、どういうことかと言うと「リセット状態」になっているとことです。
では、期待している動作は?というと以下の記述になると思います。

  if( ~xrst.read() ) {


  if( !xrst.read() ) {

修正した場合のシミュレーション結果

20121213_OK.png

ということになります。


解説


※bool型は、unsigned char あるいは charと同じデータ構造(8bit)を持つ


ビットごとに表示してみると、わかりやすいかもしれません。

7 6 5 4 3 2 1 0 結果
xrst 0 0 0 0 0 0 0 1 true
~xrst 1 1 1 1 1 1 1 0 true
!xrst 0 0 0 0 0 0 0 0 false

ということになります。
bool型には気をつけてくださいね。

関連記事

コメントの投稿

非公開コメント

No title

SystemC初心者なので不明な内容なのですが・・・。質問させてください。

チルダを使用した場合、"xrstの値がxrstの1の歩数か?(11111110なのか?)”をif文で判断しているのではなく"xrstを1の歩数にできるのか?"を判断されているのでテストベンチ上でxrstに0をいれても1を入れてもリセット状態が続いているという認識であっていますか?

~xrstが単純に11111110なのか?とif文で判断しているとなるとテストベンチで0を入れても1を入れてもリセットがかからない様な気がしてしまいます。
C言語の初歩なのかもしれませんが、教えて頂ければと思います。

No title

別の方に教えていただいて理解しました。
お騒がせしました。
プロフィール

Kocha

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

カレンダー
10 | 2017/11 | 12
- - - 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。