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