問題タブ [pci-e]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cpu-architecture - メモリバスとアドレスバスの違い
コンピュータアーキテクチャのメモリバスとアドレスバスの違いを簡単に指摘できますか?また、メモリバスとは、データバスを参照していることを意味しますか?
c# - PCI / PCI-X / PCI-E HBA 上のデバイスと通信してデバイスを管理するサンプル アプリケーション
私はこれの完全な初心者です。私は、PCI / PCI-X / PCI-E HBA 上のデバイスと通信して管理する「概念実証」の種類のサンプル C# .NET アプリケーションを開発するように言われました。ここに含まれる通信プロトコルの知識がありません。グーグルがあまり役に立たないか、検索が最適化されていない可能性があります。過去の経験からよく知っているのは、C# - ADO.NET だけです。これと参照リンクにどのようにアプローチするべきかについての指針を持っている体はありますか。IF が既に存在するサンプル アプリケーションは、ビジネス ニーズに合わせて複製する際に非常に役立ちます。
fpga - FPGAでのPCIインターフェイスのテスト
上司から、アルテラのボードでPCIExpressをテストするためのコードが提供されました。コードは、BIOSの読み取り、いくつかのレジスタの設定、バッファへの書き込みなどの命令を含むいくつかのcコードファイルで構成されています。現在の私の仕事は、コードを実行してコードの機能を確認することです。FPGAを初めて使用するので、FPGA用にコンパイルするためにどのツールやコンパイラなどを使用するのか理解できません。
Cコードなので、Verilog/VHDLと同じ環境は使えないと思います。FPGAのさまざまなインターフェイスをテストするためにCコードをコンパイルするために使用できるコンパイラに関するヒントを入手できますか?
ありがとう、よろしく
H
boot - PCIE USB 3.0 拡張カードからの起動
USB 3.0 対応の PCIE 拡張カードを購入しました。Windows内ではかなりうまく機能します。ただし、起動メニューから選択するオプションがないため、USB 3.0 サムドライブ (拡張カードに接続されている) を起動することができませんでした。USB 3.0 デバイスを起動する方法はありますか? USB 3.0 拡張カードのサポートを拡張する起動ソフトウェアはありますか? たとえば、Plop Boot Manager 5.0 のようなものですか? または、開発することは可能ですか?
私の拡張カードは Transcend PDU3 http://www.transcend-info.com/products/catlist.asp?ModNo=291&Func1No=1です。
ありがとう!
pci - PCIe 64 ビットの非プリフェッチ可能スペース
私は PCIe 仕様である恐怖を読んでいますが、次の質問のペアに対する解決策はまだ得られません。
PCIe では、巨大な (たとえば 16GB) 64 ビットのプリフェッチ不可能なメモリ空間を 4GB 境界より上にマッピングできますか? それとも、32 ビットの時代と同じ 1 GB にバインドされていて、プリフェッチできない巨大な領域を要求する方法がないのでしょうか?
仕様で許可されていると仮定すると(そして私の読書では許可されています)、広く利用可能なBIOSはそれをサポートしていますか? それとも、理論上は許可されていますが、実際には行われていませんか?
gpu - PCI-E 3.0x16GPUをPCI-E1.0x16スロットに挿入できますか?
私は古いマザーボードAsusP5KDeluxeを持っています。現在のGPU(NVIDIA 8800 GTX)を変更する必要がありますが、すべての新しいGPUはPCI-E3.0スロットを使用しているようです。3.0は1.0スロットと下位互換性がありますか?アダプターはありますか?私はこれをしばらくの間グーグルしていて、何かを見つけることができません...
ありがとうございました
linux-kernel - 64 ビット Linux ホストから 64 ビット pcie カードへのアドレス割り当て
64 ビットの Linux ホストで 64 ビットの PCI Express カードを使用しています。問題は、バーは 64 ビットですが、常に 32 ビットのアドレス範囲にあるアドレスを取得することです。つまり、BAR の上位 32 ビットは常にゼロです。
実際の 64 ビット アドレスを使用するよう強制するにはどうすればよいですか? カーネルが pci デバイスを列挙できるように、ブート時の引数で BIOS 列挙をオーバーライドして強制しようとしましたが、BIOS と同じ結果になります。
Linux は実際の 64 ビット アドレスをサポートしていませんか?
linux - FPGA が CPU RAM に直接 DMA できるようにする Linux デバイス ドライバー
FPGA(現在はPCIエクスプレス経由でPCに接続されている)がDMAデータをCPU RAMに直接転送できるようにするLinuxデバイスドライバーを作成しています。これは対話なしで実行する必要があり、ユーザー スペースはデータにアクセスできる必要があります。詳細: - 64 ビット Fedora 14 を実行中 - システムに 8GB の RAM がある - FPGA (Cyclone IV) が PCIe カード上にある
これを達成するために、私は次のことを実行しました。RAM の上位 2GB が /proc/meminfo で予約されていることがわかります - FPGA レジスタへの読み書きを可能にするために BAR0 をマップしました (これは完全に機能します) - remap_pfn_range() を使用してドライバーに mmap 関数を実装しました - ioremap を使用してバッファーの仮想アドレス - バッファーにデータを書き込むための ioctl 呼び出し (テスト用) を追加しました - データをバッファーに書き込む ioctl 呼び出しを作成して mmap をテストし、データがユーザー空間からバッファーにあることを確認しました
私が直面している問題は、FPGA が私が提供したバッファ アドレスにデータを DMA し始めるときです。(DMAR から:) PTE エラーが常に発生するか、以下のコードで次のエラーが発生します: DMAR: [DMA Write] Request device [01:00.0] fault addr 186dc5000
DMAR: [fault reason 01] Present bit in root entry is DRHD のクリア: エラー ステータス reg 3 の処理
最初の行のアドレスは、FPGA からの DMA に基づいて毎回 0x1000 ずつインクリメントします。
ここに私の init() コードがあります:
}
これが私のmmapコードです:
ご協力いただきありがとうございます。
caching - キャッシュ可能な PCIe BAR の mmap の実行方法
mmap()
この BAR をプロセッサ キャッシュにキャッシュ可能にすることを目標に、PCIe BAR のカスタム関数を使用してドライバーを作成しようとしています。これが最大の帯域幅を達成するための最良の方法ではなく、書き込みの順序が予測できないことは承知しています (この場合も問題ではありません)。
これは、MMAP が値をキャッシュするのをどのように防止しますか?で説明されている内容と似ています。
プロセッサは Sandy Bridge i7、PCIe デバイスは Altera Stratix IV dev です。ボード。
まず、CentOS 5 (2.6.18) でやってみました。MTRR 設定を変更して、BAR がキャッシュ不可能な MTRR 内にないことを確認し、ビットをクリアして使用io_remap_pfn_range()
しました。読み取りは期待どおりに機能しました。読み取りは正しい値を返し、同じアドレスへの 2 回目の読み取りでは必ずしも読み取りが PCIe に送られるとは限りません (FPGA で読み取りカウンターがチェックされました)。ただし、書き込みによりシステムがフリーズし、ログや画面にメッセージが表示されずに再起動しました。_PAGE_PCD
_PAGE_PWT
次に、PAT をサポートする CentOS 6 (2.6.32) で試してみました。結果は同じです。読み取りは正しく動作し、書き込みはシステムのフリーズと再起動を引き起こします。興味深いことに、非テンポラル/書き込み結合フル キャッシュ ライン書き込み (AVX/SSE) は期待どおりに動作します。つまり、それらは常に FPGA に送信され、FPGA はフル キャッシュ ライン書き込みを監視し、読み取りは後で正しい値を返します。ただし、単純な 64 ビット書き込みでもシステムのフリーズ/再起動が発生します。
また、ドライバーコードioremap_cache()
を試してみました。iowrite32()
結果は同じです。
ハードウェアの問題だと思いますが、何が起こっているのかについて誰かがアイデアを共有できれば幸いです.
編集: CentOS 6: Machine Check Exception: 5 Bank 5: be2000000003110a で MCE メッセージをキャプチャできました。
2 ソケットの Sandy Bridge (Romley) でも同じコードを試しました。読み取りと非一時的な書き込みの動作は同じです。単純な書き込みでは MCE/クラッシュは発生しませんが、システム状態には影響しません。つまり、メモリ内の値は変化しません。 .
また、古い 2 ソケット Nehalem システムでも同じコードを試しました。コードは異なりますが、単純な書き込みでも MCE が発生します。
linux - Linux でドライバーが割り込みを受信したことをユーザー空間アプリケーションに通知するにはどうすればよいですか?
データ バッファーの読み取り準備が整ったときにハードウェア割り込みを送信する PCIe デバイスがあります。これに対する最善のアプローチはシグナルを使用することだと思いますが、その方法は完全にはわかりません。私がする必要があると私が信じていることは次のとおりです。
- ドライバーが信号の送信先を認識できるように、ユーザー空間アプリケーションの PID を保存します。
- PCIe デバイス ドライバーの割り込みハンドラーで、ユーザー空間アプリケーションにシグナルを送信します。
- ユーザー空間アプリケーションで、シグナルを処理するためのシグナル ハンドラー関数を実装します。
これらのいずれかを行う方法がわかりません。ユーザー空間アプリケーションの PID を保存する方法/場所は? ドライバーの割り込みハンドラーからその特定の PID に信号を送信するにはどうすればよいですか (kill コマンドを使用する必要があると思いますが、PID を取得する構文に興味があります)。PID を保存した後、ユーザー空間アプリケーションに信号を待機させるにはどうすればよいですか? PID を保存した後もユーザー空間アプリケーションを実行し続け、シグナルが受信されたときにシグナル ハンドラー関数を実行し、シグナルが到着する前の場所で実行を継続することは可能ですか? (ISR の仕組みに似ています)