DDR3メモリをFPGAで操作してみる。〜400MHz( DDR3-800 )

SPARTAN6には、DDR3を操作できるハードマクロが組み込まれ、MCBと呼ばれる統一されたユーザーインターフェイスが用意されています。最大400MHzのメモリクロックで操作できるので、1個の16ビット幅のDDR3メモリなら、最大ピーク転送レートを、1.6Gバイト/秒にすることができるようです。無論このスピードは、昨今のメモリの性能から比較するとかなり低いですが、普通のI/Oを使ってDDR3などを設計するより2倍以上のスピードアップが期待できます。XILINXの通常のI/O(いわゆる、OSERDES2、ISERDES2を使わない)でDDR転送を使うと、せいぜい200MHzが限度ですが、ハードマクロでは400MHzのDDR転送ができるようです。ここで言う400MHzとは、DDR3-800 のことで、400MHzでダブルデータレートの意味です。

XilinxのSPARTAN6評価基板、SP605( SPARTAN6 Evaluation kit SP605 XC6SLX45T )には、DDR3メモリが搭載されているので、これを  Custom MicroBlaze を使ってメモリテストをしてみます。

ISEで、IP (CORE Generator & Architecture Wizard) を起動し、DDR3操作のRTLソースを作成

詳細は、 DDR2メモリをFPGAで操作してみる。SPARTAN6を使って400MHz( DDR2-800 ) にありますが、ここでは違ってるところをピックアップします。

IPの名称を、mymcb として、Wizard を起動します。IPは、MIG v3.7 を指定します。



BANK3にDDR3を接続します。


SP605基板で使っているDDR3メモリの型番を指定します。


MCBのインターフェイスを選択します。

One 128-bit bi-directional port を選択します。メモリクロックを400MHzで動かすと、バースト転送では、1.6Gバイト/秒になり、このスピードに間に合うようにするには、32ビットポートでは、400MHz、64ビットポートでは、200MHz、128ビットポートでは100MHzのクロックでデータを送受信できないといけませんので、一番遅い128ビットポートにします。また、32ビットや64ビットでは、複数のポートになって、内部でアービタが働き、その優先順位を監視する回路が必要になってきて、なおかつその判定に200MHz以上の速さが必要なため、128ビットにします。無論、複数のマスターからメモリにアクセスする場合は、アービタを自前で作成する必要がありますが、100MHzでいいので、回路のスピードに余裕が出てきます。


SP605基板の、RZQ、ZIQピン、クロックの入力状態を指定します。SP605には、ディファレンシャルクロックが入力されていますが、入力クロックをそのまま使うとクロックスピードの変更ができないので、DCMの出力で使うために、シングルエンドにします。


出来上がったIP COREはこのまま使用しないので、mymcb.xco を削除します。ソースは、ipcore_dir\mymcb\user_design\rtl 以下に作成されますから、それを改造して使います。


作成された、MCB制御回路のソースの所在。user_design フォルダ以下を使うので、それらをプロジェクトに SRCs フォルダを作って、そにコピーして、あとは削除するか、どこかに移動します。


さてここで、Wizardで作成されたソースで使うのは、以下のモジュールです。
  1. user_design\rtl\mymcb.v 一部変更します。この回路を呼び出すことで、MCBが使えます。
  2. user_design\rtl\infrastructure.v 一部変更します。
  3. user_design\rtl\memc_wrapper.v 変更なし。
  4. user_design\par\mymcb.ucf bank3 にDDR3メモリを接続するピン指定など。一部変更します。このファイルはこのままにして、コピーして使います。
  5. user_design\rtl\mcb_controller\iodrp_controller.v 変更なし。
  6. user_design\rtl\mcb_controller\iodrp_mcb_controller.v 変更なし。
  7. user_design\rtl\mcb_controller\mcb_raw_wrapper.v 変更なし。
  8. user_design\rtl\mcb_controller\mcb_soft_calibration.v 変更なし。
  9. user_design\rtl\mcb_controller\mcb_soft_calibration_top.v 変更なし。
  10. user_design\rtl\mcb_controller\mcb_ui_top.v 変更なし。

以上のファイルと、SP605で、Custom MicroBlaze のモニタを動かす回路を追加、改造して、プロジェクトに追加したのが以下。

ソースファイルは、プロジェクトディレクトリに、SRCs というフォルダを作り、その中に Custom MicroBlaze ( risc2s.ngc risc2s.v )と、モニタ( mainmem.v )、TOPモジュール( sp605cmbmcb1t.v )、MCBのFIFOとデータ転送するメモリモデュール( mem32_128.v )、UCFファイル( sp605cmbmcb1t.ucf )を置き、作成した user_design 以下はフォルダごと、SRCs 以下にコピーしています。

ISE( ISE13.1 )でプロジェクトを設定して、インプリメントする前のものを、ここにおいておきます。
sp605cmbmcb1t.lzh 出来上がったビットファイルだけ付け加えています。


準備中


ホームに戻る


inserted by FC2 system