プロが教えるわが家の防犯対策術!

SystemC言語の文法について質問です。

ある雑誌で、ビット宣言変数のアドレスを関数に渡しており、
私も真似て作ってみたのですが、エラーが発生してしまいます。

---
(例) 引数にポインタを入れる処理

// 引数 sc_uint<32> *s の関数
void test::Calc_func( sc_uint<32> *s )
{
cout << "s[0] = " << s[0]; // 32bitのデータ出力?
}

// これがmain文の代わりです
void test::A_func(void)
{
sc_biguint<2048> a;
sc_uint<12> i;

for( i = 0; i < 2048; i++ ) {
a[i] = 0;
}
Calc_func( &a[0] ); // ←問題!
}

// Error内容
Calc_funcの引数の入れ方が駄目!
---

色々、Calc_funcへの型を変えてやってみたのですが、
全くびくともしません。

雑誌が間違っている可能性は低いと思いまして、
今回、このような質問をさせていただきました。

インターネット上の情報でも、このような処理を
見つけることができませんでした。

どうぞよろしくお願いいたします。

A 回答 (2件)

SystemCに関してよく理解できている訳ではないので、以下は間違っているかも知れませんが、一応、ご参考までに。




sc_biguint<2048> a;

これは2048ビット符号無し整数の型宣言なのでaは2048ビットとなりますが、

sc_uint<32> *s

では、sは32ビット符号無し整数のポインタです。

&a[0]は上記より2048ビットの数値のポインタなので、32ビットの数値のポインタであるsとは、元々合わないのではないでしょうか?

型変換とは具体的にどの様な事をされたかは分かりませんが、SystemCはハードウエアを記述していますので、ハードウエア、例えば2048ビットのレジスタと32ビットのレジスタが同じ扱いにはならないという意味ではないかなと思います。

この回答への補足

無事に32bitずつ入力することで、
引数にアドレスを渡すことができました。

補足日時:2011/09/20 09:38
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
PCトラブルで確認するのが遅くなってしまいました。

なるほど・・・型違いのエラーであることは承知していたのですが、
2048bit型の"整数の型宣言”というところを改めてご指摘をもらい、
何か道筋が見えたような気がします。

雑誌では、このポインタ関数に関する入力ソースがなかったので、
普通に入れてしまえばよいのかと思いましたが、確かにおかしいです。

結局のところ、この32bit引数の関数にアドレスを入れるためには、
2048bitを32bitに分割しながら代入しなければならないような気がしてきました。

一度試してます。
bit宣言というのに違和感があり、従来のCやC++の考え方ができなくなっていました。
貴重な助言、ありがとうございました。

お礼日時:2011/09/05 13:58

SystemCって勝手にC++を拡張しているみたいなんで若干自信がないんですが



Cで
ポインタ

配列

配列の0番目

&演算子

というのはどういうことかをもう一度確認したほうがよいと思います。
ほぼCプログラマが最初につまづくところでなおかつCの一番基本なのでしっかり確認してプログラミングに望んでください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
PCトラブルで確認するのが遅くなってしまいました。

C言語であれば理解しているのですが、
bit宣言におけるポインタ渡しなんて初めてみたもので。。。

お礼日時:2011/09/05 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!