4

メモリ コントローラーの SystemVerilog モデルを SystemC に移植しようとしてrun()いますが、fork と join で生成された型の関数 (つまり、連続処理を行う永久ループ) を SystemC に変換する最良の方法は何か疑問に思っています。これらのrun()関数は通常、シミュレーションの開始時に生成されます。私の混乱は、SystemC がスポーン スレッド、フォーク、ジョインをサポートしていることですが、この言語の意図はSC_THREADこの種の機能を提供することだと思います。コメントするのに十分な両方の言語の経験がある人はいますか?

注:この質問は、技術的に正しいか間違っているかという解決策よりも、慣例に関係していると思います。おそらく、複数の方法で実行できます。

4

1 に答える 1

0

sc_thread は、SystemVerilog の fork/join の類似物です。どちらの言語も、同じ非プリエンプティブ マルチスレッド セマンティクスを使用してスレッドを実装します。つまり、スレッドは何かを待つまで実行されます。その時点で、スレッドは、同時に実行するようにスケジュールされている他のスレッドに制御を渡します。どちらの言語も決定論的であり、制限があります。明らかにシードは同じでなければなりませんが、コードを変更すると、ランダム化が変更される可能性があります。これにはスレッドが実行される順序も含まれると思いますが、間違っている可能性があります。

上で指摘したように、SystemC で posix fork/join を使用しないでください。これは、ライブラリがスレッド セーフではなく、ライブラリの前提が崩れ、非決定性が導入されるためです。

そのため、SV コードに SC にない機能がない限り、移植は簡単です。

于 2015-02-18T16:05:18.083 に答える