loop loop loop
System Design With Systemc、6章まで読んだ。
C++の機能との組み合わせが、恐ろしく面白い。
便利とかすごいではなくただ単に「面白い」。
サンプルを打ち込んでみてちょっとはまる。
シミュレーションがすぐに終わってしまう。print文(cout)を入れて問題解析。
複数あるモジュールのうち、一つだけSC_CTHREADの処理に無限ループが無かった。
だから、1回実行し、そのSC_CTHREADが次のSC_CTHREADにデータを書き込まない
から全イベント終了でシミュレーションが終わってしまう。
サンプルのように、デストラクタでシミュレーション終了時のステータス
(実際に行った試験の実行回数とか)を表示するのはこのトラップに早く気がついて
良いと思う。が、どこのモジュールが止まったのかはわからない。
シミューレーションが終わった時に各プロセス(SC_CTHREAD)の状態を全部ダンプ
してくれるとうれしいと思う。sc_fifoのreadがブロックされているとか、ループ
を抜けて最後の}まで実行して終了したとか、処理の途中だけどsc_stopで無理矢理
終わったとか。
ちなみにこのループ忘れは自分自身のデストラクタでは検出できない。処理が
終わった時点(}を抜けた時点)では、デストラクタは呼ばれないから。
while(ture){}の後に、抜けたことを示すメッセージを入れたら良いかと思ったが、
そんなメッセージを入れるくらいならwhile(ture){}を忘れない。
とかとか、いろいろ考えていると面白い。
The comments to this entry are closed.


Comments