オンラインショップ
問い合わせ
即日発送 送料無料 佐川急便かクロネコでお届け。カード、銀行振り込み、代引き決済。
製品情報>Kintex-7 PCIe 光ボード「Cosmo-K」>PCI Expressサンプルデザイン>DDR3へのDMA

DDR3へのDMA

Kintex-7のPCI Express XDMAは、広大なDDR3メモリに対して転送を行って、初めて威力を発揮します。このページではXDMAを使用して、DDR3メモリに読み書きするデザインについて説明します。

ここで紹介するプロジェクトは、BRAMターゲットのPCIe DMAのページで説明したデザインの応用となるので、まずは上記のページをご覧ください。

したがって、主にこのページでは、BRAMターゲットの場合との相違点について紹介します。

 → Vivadoデザインファイルのダウンロードはこちら

ブロックデザイン

まず、完成したブロックデザインを示します。

このデザインには、DDR3メモリを操作するMIGと、PCI Expressを制御するXDMAを中心があります。

AXIバスとクロック

PCI ExpressはGen2 x4で構成されていて、DMA用のM_AXIポートと、制御レジスタ実装用のM_AXI_LITEポートが出力されています。M_AXIポートは64bitのバス幅を持ち、PCI Expressのクロック(axi_aclk)は125MHzとなります。

MIGはDDR3メモリを1600MHz動作(クロック800MHz,データバス32bit)で動作させていて、帯域は6.4GByte/sとなります。MIGのAXI側のバスは256bitとなり、ui_clkは200MHzとなります。

PCIeとMIGはクロックドメインとバス幅が異なるため、間にaxi_interconnectを置いて、その差を吸収しています。

なお、MIGに供給するクロックソースを作り出しているclk_wizには125MHzのクロックを入れていますが、このクロックは基板上の水晶で作り出したものをmgtclk1_p/nから入力しています。したがって、MIGとPCIeは非同期のクロックドメインで動いています

もし、MIGとPCIeのクロックを同期させたい場合には、clk_wiz_0のclk_in1入力を、xdmaの出力にあるaxi_aclkに接続してください。

cskgpioの役割

cskgpioは、コントロールレジスタを実装しています。

基本的にはBRAMターゲットのPCIe DMAのページで説明したものと同様の役割をしていますが、MIGを有効にすると発熱が大きくなるため電圧や温度を読み出すためのレジスタや、MIGを停止させるためのレジスタが追加されています。

内蔵レジスタのアドレスと機能を以下に示します。

オフセット 方向 名称 機能
+0 R VERSION バージョン番号
+4 RW SW_LED ボード上のDIPSWやLED
+8 RW GPIO0_OUT GPIO[29:0]の出力値
+12 RW GPIO0_DIR GPIO[29:0]の出力許可
+16 R GPIO0_IN GPIO[29:0]の入力値
+20 RW GPIO1_OUT GPIO[59:30]の出力値
+24 RW GPIO1_DIR GPIO[59:30]の出力許可
+28 R GPIO1_IN GPIO[59:30]の入力値
+32 R XADC_TEMPE 温度の読み出し
+36 R XADC_VCCINT VCCINTの読み出し
+40 R XADC_VCCAUX VCCAUXの読み出し
+44 RW MIG_CTRL MIG状態の制御
+48 RW IRQ_ENABLE 割り込みの許可
+52 RW IRQ_ASSERT 割り込み発生

MIG_CTRLレジスタの機能は、

  • bit0・・・(RW) MIGのリセット信号   0:リセット解除  1:リセット
  • bit1・・・(R) MMCM DONEの状態  MIGのクロックがロックしたか?
  • bit2・・・(R) MIGのINIT DONEの状態 MIGの初期化が完了したか?
  • bit3・・・(RW) MIGのクロック選択 (未使用)
  • bit4・・・(RW) MIGのクロックリセット clk_wiz_0をリセットする

となっています。

なお、cskgpioの中でXADCを使用しているため、MIGコアに温度情報を与えなければなりません。そのため、temp_o[11:0]を出力しています。

 

オフセット+48と+52のレジスタは、割り込みをコントロールするためのレジスタですが、ドライバが操作するため、ユーザが操作する必要はありません。

Xdmaieq10

 

Xdmaieq11_2

 

M_AXI_BYPASSについて

XDMAの設定でPCIe to DMA Bypass Interfaceを有効にすると、M_AXI_BYPASSというポートが作られますが、これを有効にしてポートを未接続のまま開放しておくと、PCによってはOSが起動しないという現象が発生します。

すべてのPCで不具合が生じるわけではなく、正常に動作するPCもあります。

 

したがって、M_AXI_BYPASSは無効にすることが望ましいといえます。

 

アドレスの割り当て

Address Editorで以下のように割り当てます。

M_AXIの0~0x3fffffffをMIG(DDR3)に割り当て、M_AXI_LITEの0~0xffffをCSKGPIOに割り当てています。

 

DMA速度

PCIe Gen2 x4で行った場合、Read/Writeともに1.6~1.7GB/secの速度が出ています。概ね10M~100MByteのときに最高の速度となるようです。

BRAMとDDR3メモリに有意な差はみられませんでした。DDR3の読み出しオーバーヘッドなどによる速度の低下は観測できませんでした。

 

エラー率

PCIe経由でDDR3メモリに22TByte転送しましたが、1bitのエラーも発生しませんでした。

単純な計算によれば、エラー率は5.6×10-15以下と見積もれます。

デバイスドライバと制御ソフト

こちらのページをご覧ください。

 

ライセンス

このサンプルプロジェクトおよび、当社製のライブラリは当社のComso-Kで使用する上では自由に使用できます。エンドユーザへの再配布も可能です。

Cosmo-Kではなく、お客様が開発したハードで使用する場合も基本的に無償で使用できますが、無保証であることの確認のため、あらかじめご連絡ください。

 


© 2017 TokushuDenshiKairo Inc. All rights reserved