EDKでPCIe+DDR3のアクセラレータフレームワークを作る(4)

EDKでPCIe+DDR3のアクセラレータフレームワークを作る(3)までで,フレームワークのコアとなるEmbededd Processorの構成が完成しました.最後に,Embedded Processor内で完結しない制御信号や外部とのインターフェースを整えるトップモジュールをHDLとUCFファイルを用意します.

今回のシステムは,ほぼEmbedded Processorで構成したままなので

  • PCIeのクロックを生成
  • リセットやPLLのロック信号を適切に接続する
  • PCIeコアの割り込み制御のハンドリング

くらいが,トップモジュールに記述しなければならない事項です.

トップモジュールのひな形をつくる

Embedded Processorのインスタンスを生成するラッパーHDLモジュールはツールにつくってもらうことができます.作り方は,Core GeneratorでHDLのInstanceテンプレートを作る手順と似ていて,

  • ISEのHierarchyペインでEmbedded Processor(今回はaxi_cdma_system_i)を選択
  • ProcessesペインのGenerate Top HDL Sourceをダブルクリックする

で完了です.

PCIeのクロックを接続

PCIeのリファレンスクロック入力は差動信号です.XPS内で差動→単信号に変換することもできるようですが,よくわからなかったので,トップモジュールでケアします.といっても,普通にGTE2のインスタンスを作るだけですね.

もちろん,pcie_ref_clkはsignal宣言しないといけません.

リセット入力信号の生成

今回,PLLとしては,全体のクロックマネージャとPCIe内部のものの2系統があります.そこで,

とかして,クロックマネージャとPCIeのPLLロック信号をリセット回路にフィードバックします.

PCIeコアの割り込みのハンドリング

PCIeの割り込みテストをするために,GPIOを使ってFPGAからホストPCへのPCIe割り込みを制御ができるようにしてみます.GPIOに’1′ を書くと,割り込みが発生するというわけです.

ホストPCには,割り込みが起きたら,「GPIO1の値を読んで割り込み要因であることを確認し,割り込み制御ピンを下げる」という処理をするドライバを用意すればいいですね.

最後に

今回は,とりあえずフレームワークを作るまでの手順を紹介しました.しかし,実際には自分のロジックを組み込まなければいけません.

自作コンポーネントを組み込む場合には,まじめにAXIコアとして作成して,IPカタログにimportして組み合わせるというのが王道です.ただ,テスト段階では,Utilityの下にある,AXI External Master Connector/AXI External Slave ConnectorというモジュールでEmbedded Processorの外にAXIメモリ空間の信号を引き出して,独自モジュールと接続するという方法をとることもできます.

Let’s enjoy with AXI♪

シェアする

  • このエントリーをはてなブックマークに追加

フォローする