« 【Windows】 VisualStudio 2010 でコンソールアプリの実行中断ができない | トップページ | 【ubuntu】 inspiron mini 9 に ubuntu 10.10 netbook edition をインストールしてみた »

【SystemC】 cannot have more than one driverエラー

SystemCでバスのモデルを書いてみました。Read/Write Enable信号とアドレスバスはバスマスター側からドライブするから良いのだけど、データバスは双方向からドライブする必要がある。そこでsc_inoutを使って入出力ポートを指定してみました。

SC_MODULE(MOD1) {
    sc_inout<sc_uint<32> > DATA;
};

SC_MODULE(MOD2) {
    sc_signal<sc_uint<32> > DATA;
};

こんな感じにモジュールを作成して、ポートを接続すると、MOD1とMOD2の両方から駆動する事になります。

すると...ラインタイムエラーが...正確なメッセージは忘れたけど

*** signal cannot have more than one driver.

つまり、sc_signalには単一のドライバしか接続できないっちゅー事です。
バスって事はRead/Write Enable信号で切り替えるわけやから同時ドライブする事はないのやけど、SystemCのシミュレーション環境では1回のシミュレーション内でシグナルを複数プロセスからドライブする事が許されていないらしい。しかもこれ、SytemC 2.1.0までは許可されていたそうな。つまりSystemC 2.2.0での現象らしいですわ。

さて、困ったぞ。本来はバスプロトコルを変更して対応すべきなんやけど、別に論理合成するわけでもないし、単にアーキテクチャの検討したいだけなんやけどなぁ。

結論から言うとなんと環境変数の設定で、このチェックを外せるらしい。
SystemC 2.2.0のnoteに書かれていました。

set SC_SIGNAL_WRITE_CHECK=DISABLE

とやってビルドしたバイナリを実行したら無事に動作しました。ちなみに大文字でなければダメでした。いやはや、まさか環境変数とはね。

« 【Windows】 VisualStudio 2010 でコンソールアプリの実行中断ができない | トップページ | 【ubuntu】 inspiron mini 9 に ubuntu 10.10 netbook edition をインストールしてみた »

SystemC」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 【SystemC】 cannot have more than one driverエラー:

« 【Windows】 VisualStudio 2010 でコンソールアプリの実行中断ができない | トップページ | 【ubuntu】 inspiron mini 9 に ubuntu 10.10 netbook edition をインストールしてみた »