« 今日の読書 | Main | loop loop loop »

2006.11.28

SystemCを使ったハードウェア設計 その2

SystemCを使ったハードウェア設計勉強中

ソース中で説明もなく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するような言語じゃない気がする・・。

|

« 今日の読書 | Main | loop loop loop »

Comments

> 同じ信号でも=で代入されていたり.write()関数を使っていたり

そりゃ変ですなあ。
普通は process の頭で read して
signal の皮を剥いでから普通に演算して、
最後に write で出すと思いますが...
あちきも随分コード書いて無いので...
読んでみるか...金無いなあ...

> classをtraceするとこんな感じでcore dump

自前の sc_trace は書いてるんですよねえ...
なんでやろ...

Posted by: noboshemon | 2006.11.28 at 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 at 10:51 AM

> 気になっているコードはp38のtb.cppです。

今本を注文しました。破産やあ...

> write()関数を呼んでも、
> = で代入してもどちらも動きは同です。

ですなあ...こいつは注意してないと駄目なんだ...
read は、結局使う破目になるんですけど。

> delayed()もサンプルで出てくるけど

こいつはどうせ廃止だったような。

Posted by: noboshemon | 2006.11.28 at 11:50 AM

>> delayed()もサンプルで出てくるけど
>
> こいつはどうせ廃止だったような。

やっぱり廃止っすね。
2.2 の release notes には deferred() と書いてあるけど
きっと delayed() の間違いっすね。
確かにコードから消えてます。

Posted by: noboshemon | 2006.11.28 at 12:00 PM

noboshemonさん、情報ありがとうございます。

今世の中にあるSystemCの本は、2.2に対応していないので、
いろいろと注意必要ですね。

# うぅ、ついていくのが大変だ。

Posted by: なつたん | 2006.11.29 at 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 at 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 at 08:39 PM

やっぱり明示的にread()/write()を使うべきでしょう!

でも、見た目には"="の方が記述としてはきれいだと思います。

Posted by: 原山みや | 2007.01.06 at 09:51 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/12853106

Listed below are links to weblogs that reference SystemCを使ったハードウェア設計 その2:

« 今日の読書 | Main | loop loop loop »