SystemCを使ったハードウェア設計 その2
ソース中で説明もなくesc.hがincludeされている。Cynthesizer辺りのヘッダーと
にらんで先に進む。
sc_outへの書き込みが、同じ信号でも=で代入されていたり.write()関数を使っていたり
してやや混乱。初期化は=、ループの中はwrite()かと思ったがそうでもなく、ここも
気にせず先に進む。この辺りが、若干初心者に厳しい気がする。
BCAモデルを打ち込んでみるが、sc_traceが上手く動かない。
rgb8_tというユーザー定義のclassをtraceするとこんな感じでcore dump。
SystemC 2.1.v1 --- Nov 24 2006 08:14:49
Copyright (c) 1996-2005 by all Contributors
ALL RIGHTS RESERVED
WARNING: Default time step is used for VCD tracing.
VCD Trace ERROR:
Traced object "rgb_r" has 0 Bits, cannot be traced.
VCD Trace ERROR:
Traced object "rgb_b" has 0 Bits, cannot be traced.
19 [main] run 4540 _cygtls::handle_exceptions: Error while dumping state (p
robably corrupted stack)
Segmentation fault (core dumped)
他のsc_signalは上手くvcdに落とせているので、オーバーライドした部分がおかしい。
つーか、C++ってこんな頻繁にcoredumpするような言語じゃない気がする・・。
The comments to this entry are closed.


Comments
> 同じ信号でも=で代入されていたり.write()関数を使っていたり
そりゃ変ですなあ。
普通は process の頭で read して
signal の皮を剥いでから普通に演算して、
最後に write で出すと思いますが...
あちきも随分コード書いて無いので...
読んでみるか...金無いなあ...
> classをtraceするとこんな感じでcore dump
自前の sc_trace は書いてるんですよねえ...
なんでやろ...
Posted by: noboshemon | 2006.11.28 09:34 AM
noboshemon さん、こんにちは。
sc_traceの件は解決しました。関数の宣言がおかしかったようです。
ちなみに気になっているコードはp38のtb.cppです。
out_valid = 0と、out_valid.write(0) が混在していたり、次のsink()関数では全部=で代入しています。
sc_signal_port.hでこんな風に宣言されているので、write()関数を呼んでも、 = で代入してもどちらも動きは同です。
// write the new value
void write( const data_type& value_ )
{ (*this)->write( value_ ); }
this_type& operator = ( const data_type& value_ )
{ (*this)->write( value_ ); return *this; }
勉強の本としてはwrite()に統一して欲しかったなぁと思います。
この本はそういう細かいところの説明がはしょってあるので、一冊目には厳しいです。
delayed()もサンプルで出てくるけどどこにも説明がないですし。
Posted by: なつたん | 2006.11.28 10:51 AM
> 気になっているコードはp38のtb.cppです。
今本を注文しました。破産やあ...
> write()関数を呼んでも、
> = で代入してもどちらも動きは同です。
ですなあ...こいつは注意してないと駄目なんだ...
read は、結局使う破目になるんですけど。
> delayed()もサンプルで出てくるけど
こいつはどうせ廃止だったような。
Posted by: noboshemon | 2006.11.28 11:50 AM
>> delayed()もサンプルで出てくるけど
>
> こいつはどうせ廃止だったような。
やっぱり廃止っすね。
2.2 の release notes には deferred() と書いてあるけど
きっと delayed() の間違いっすね。
確かにコードから消えてます。
Posted by: noboshemon | 2006.11.28 12:00 PM
noboshemonさん、情報ありがとうございます。
今世の中にあるSystemCの本は、2.2に対応していないので、
いろいろと注意必要ですね。
# うぅ、ついていくのが大変だ。
Posted by: なつたん | 2006.11.29 07:42 PM
単なる雑音かもですが、こんなもん作ってみました。
以下、sc_module の例。
http://www.ne.jp/asahi/noboshemon/memo/sc-2.2-doxygen/classsc__core_1_1sc__module.html
top は、ここ。
http://www.ne.jp/asahi/noboshemon/memo/sc-2.2-doxygen/index.html
-- doxygen の使い方、今一わーらんっすわ...
本日、osci から TLM_2_0_Nov29_2006 がリリースされました。
もう見る気が...
Posted by: noboshemon | 2006.12.04 03:41 PM
おおっ、すばらしい。
http://www.ne.jp/asahi/noboshemon/memo/sc-2.2-doxygen/classsc__core_1_1sc__fifo.html
こういうのがあると助かりますよ。
ありがとうございます。
Posted by: なつたん | 2006.12.04 08:39 PM
やっぱり明示的にread()/write()を使うべきでしょう!
でも、見た目には"="の方が記述としてはきれいだと思います。
Posted by: 原山みや | 2007.01.06 09:51 PM