2

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

これを実行すると、RTEMS を使用し、C で記述されたマルチタスク アプリケーションが作成されます。

今、私はプロセッサと pci アーキテクチャにまったく慣れていないので、啓発のために皆さんのところに来ました。

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

このケースはありえますか?

私の見解では、この問題は発生してはならないということです。私にとって、PCI 読み取りは他のメモリ読み取りと同じであり、たとえばアドレス 0x4000'0000 にあるローカル RAM を読み取る代わりに、アドレス 0xA020'0000 を読み取るだけだからです。次に、プロセッサはこれを PCI バス上のアドレスとして変換し、バスを介してこの読み取りを実行します。確かに、この読み取りはローカル メモリの読み取りよりも長くなりますが、このプロセスは途中で中断できません。私の理解が完全にずれている可能性があります。その場合は、お気軽に修正してください。

4

1 に答える 1

2

注: PCI Express (PCIe) について言及しています。PCI は少し違うかもしれません - 私はそれに慣れていません。

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

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

現在、PCIe コアは、Completion パケットが受信されるまで CPU をブロックするか、または MemRd パケットが送信された直後に CPU を解放できます。このような場合、PCIe コアは複数の保留中の同時読み取りを処理できる必要があります。

于 2012-06-08T11:39:39.703 に答える