アドレス マップ
ホストと VCK190 の環境をセットアップしたら、ホスト コンピューターで lspci
コマンドを実行し、すべての PCIe BAR 空間の一覧を表示します。次の図に示すように、ホストがアクセスできる PCIe BAR は 3 つあります。
BAR3 空間のサイズは 256MB で、アドレスは 0x381F_0000_0000 ~ 0x381F_0FFF_FFFF です。BAR3 空間は Versal デバイスのアドレス 0xF000_0000 ~ 0FFFF_FFFF にマップされ、この中には PMC スレーブ空間とブロック RAM 空間が含まれます。QSPI コントローラーは PMC にあります。
このアプリケーション ノートでは、ホストは BAR3 空間にのみアクセスします。1 つ目の空間は QSPI コントローラー アドレス セグメントで、ベース アドレスは 0x381f_0103_0000、サイズは 64KB です。2 つ目の空間はブロック RAM セグメントで、ベース アドレスは 0x381f_0800_0000、サイズは 32KB です。
PCIe BAR3 空間 | デバイス名 | Versal デバイス アドレス ベース |
---|---|---|
0x381F_0103_0000 ~ 0x381F_0103_FFFF | QSPI コントローラー | 0xF103_0000 ~ 0xF103_FFFF (64KB) |
0x381f_0800_0000 ~ 0x381F_0800_7FFF |
ブロック RAM Port0 読み出しの場合 |
0xF800_0000 ~ 0xF800_7FFF (32KB) |
このブロック RAM には、2 つのポートに対してそれぞれ独立したアドレスがあります。前述のように、1 つのアドレスはホストからのリードバック用で、PCIe BAR3 にマップされます。したがって、ソフトウェア アプリケーションでは、PCIE_BAR_BRAM マクロを xqspipsu.h で定義しています。もう 1 つのアドレスは QSPI コントローラーによって書き込まれるため、ソフトウェアから QSPI コントローラーに対し、BOARD_BRAM_BASE アドレスが 0x201_8000_0000 であることを通知します。このアクセスは、Versal デバイス内部で実行されます。
PCIe BAR3 | デバイス名 | サイズ (B) | Versal デバイス アドレス ベース | ホスト アクセス |
---|---|---|---|---|
0x381f_0800_0000 |
ブロック RAM Port0 読み出しの場合 |
32K | 0xF800_000 | ホストから BAR 空間へのアクセス |
NOP |
ブロック RAM Port1 書き込みの場合 |
32K | 0x201_8000_0000 | ホストがこの 64 ビット アドレスを QSPI コントローラーの DMA アドレス レジスタに設定 |
ホスト アプリケーションのデータフロー
次の図に、プログラミングの全体的なガイドラインを示します。全体的なプログラミング フローは、QSPI のアボートと初期化、フラッシュ ID の読み出し、フラッシュの消去、フラッシュの書き込み、フラッシュのベリファイの各サブフローで構成されます。フラッシュのベリファイ サブフローでは、フラッシュからブロック RAM への DMA 読み出し、ホストによるブロック RAM からホスト ローカル RAM への読み出し、およびホスト上でのコンペアが実行されます。