2011-09-09 8 views
2

私はLEON2(SparcV8)プロセッサを使用するプロジェクトに取り組んでおり、他のFPGAとプロセッサを接続するPCIバスがあります。この上で実行プロセッサ並行PCIリード

我々は今、私は、プロセッサと、私は啓発のために君たちに来る理由のPCIアーキテクチャに全く慣れていないよRTEMSを使用してマルチタスクアプリケーションを持っているとC.

で書かれました。

問題は次のとおりです。PCIバス上のメモリの読み取りを実行する1つのRTEMSタスクがあるとします。私たちのボードでは、PCIアクセスはほぼ2usです。今私の同僚が問題を提起しました。そのPCIの中でRTEMSのタスクスケジューラが別のタスクが起動する時間になったと判断した場合、そしてこのタスクジョブがPCI読み取りも実行するのはどうでしょうか。 タスクの切り替え前に実行された最初のPCI読み取りは、最初のPCI読み取りが実行される前に2番目のタスクによって実行される2回目のPCI読み取りによって破損する可能性があります。

この場合は起こりますか?

私の見解では、私のためにPCI読み取りは他のメモリ読み取りと同様であるため、このような問題は起こりません。たとえば、アドレス0x4000'0000のローカルRAMを読み取るのではなく、アドレス0xA020'0000の場合、プロセッサはこれをPCIバス上のアドレスとして変換し、バスを介してこの読み出しを実行します。 この読み込みはローカルメモリの読み込みよりも長いですが、このプロセスは途中で中断できません。 私の理解は非常によく完全にオフかもしれません、その場合は私を修正する自由を感じてください!

答えて

2

注:私はPCI Express(PCIe)を指しています。 PCIは多少異なるかもしれません - 私はそれに精通していません。

これは、読み取りを実行するPCIeコア(モジュール)によって異なります。

基本的にメモリリードを実行するために、PCIeコアは、タグ付けされたバス上にMemRdパケットを送信します。データそのものは、同じタグを持つCompletionパケットに到着します。したがって、読み込みは「破損していません」。

PCIeコアは、Completionパケットが受信されるまでCPUをブロックしたり、MemRdパケットが送信された直後にCPUを解放する可能性があります。そのような場合、PCIeコアはいくつかの並行ペンディング読み出しを処理できる必要があります。

関連する問題