Xilinx Memory Interface Generator (MIG) による DDR2 SDRAM のアクセス のバックアップソース(No.1)

更新

[[公開メモ]]

#contents

* 注意点 [#v3e85f93]

以下の内容はまだ試行錯誤中のもので、実機でうまく行くか試していません。

間違っている可能性が多分にあります。すみません。

* 入出力ポートを指定してコアを生成する [#c78446c5]

MIG を使って Reference Board 用のコアを作るのは簡単にできるのですが、
任意の入出力ポートを指定してコアを生成する方法はちょっと分かりにくいみたいです。

手順を以下に示します。

 Core name: Xilinx MIG
 Version: 3.3
 Release Date: December 2, 2009

を使って、

 Spartan 3A DSP 1800 Starter Platform

用のコアを作成したものです。

** MIG の2ページ目で [Create Design] を指定する [#r9f457ed]

最終的には Verify UCF and Update Design and UCF で望みのコアを作るのですが、
始めの段階ではカスタム .ucf を作るため情報が不足しているので、
まずは適当なピンを使ったコアを吐かせて、
その .ucf ファイルを元にカスタム .ucf を作ることになります。

ということで、ここでは [Create Design] を選びます。

&attachref;

** メモリの仕様に合わせてオプションを選択する [#me3ee50b]

|Memory Selection|DDR2 SDRAM|
|||
|Frequency|8000 ps = 125MHz|
|Write Pipe Stages|4|
|Memory Type|Components|
|Memory Part|MT47H32M16-3|
|Data Width|64|
|Data Mask|Check|
|||
|Burst Length|4|
|Burst Type|sequential|
|Output Drive Strength|Fullstrength|
|RTT(nominal)-ODT|150ohms ?|
|DQS# Enable|Enable|
|||
|Use DCM|Uncheck|
|Class for Address and Control|Class II|
|Class for Data|Class II|
|Debug Signals for Memory Controller|Disable|

** Available/Reserved ピンは指定しない [#c95111af]

デフォルトでは全てのピンが Available Pins に入っていて、
MIG はその中から適当なピンを選んでコアを生成します。

もちろんできたコアは実機とは異なるピンを使ったものになるため、
そのままでは使えないのですが、後で直すことにしてここではそのままにしておきます。

このページの [Read UCF File] は Reserved Pins の内容を読み込むもので、
使うピンを指定する物では無いので、押しても役に立ちません。

** Bank もこの時点では気にしない [#d099ae7e]

MIG は Available Pins から適当なピンを選んで信号線を割り当てますが、
このページで信号線の種類毎に使う Bank を指定することができます。

デフォルトでは Address ピンの割り当てがうまくできていなかったので、
Bank1 の Address/Control もチェックすることで、すべてのピンの割り当てができました。

繰り返しになりますが、この時点ではピン配置を気にする必要は無いので、
すべてのピンが割り当てられるまでチェックを増やせばOKです。

&attachref;

** コアを生成する [#m28d5b83]

最後にライセンスを承諾するとコアが生成されます。

** ピンを指定するための ucf ファイルを作る [#j3b09d33]

ddr2mi という名前でコアを作ったので、

(project folder)/ipcore_dir/ddr2mi/user_design

にコアが生成されました。

このフォルダの par/ddr2mi.ucf に、
MIG が適当に決定したピン配置で ucf ファイルが作成されています。

このファイルから #bank というコメントが付いている行を抜き出すと、
ピン配置を指定している部分を抽出できます。

unix ライクなコンソールが使えれば、

 LANG:console
 $ grep "#bank" ipcore_dir/ddr2mi/user_design/par/ddr2mi.ucf | sort > ddr2mi_pins.ucf

などとすれば、

ddr2mi_pins.ucf
 NET "cntrl0_ddr2_a[0]" LOC = "J21" ;     #bank 1
 NET "cntrl0_ddr2_a[10]" LOC = "B2" ;     #bank 3
 NET "cntrl0_ddr2_a[11]" LOC = "H7" ;     #bank 3
 NET "cntrl0_ddr2_a[12]" LOC = "G6" ;     #bank 3
 ...
 
 NET "cntrl0_ddr2_dqs_n[6]" LOC = "J4";     #bank 3
 NET "cntrl0_ddr2_dqs_n[7]" LOC = "J6";     #bank 3
 NET "cntrl0_rst_dqs_div_in" LOC = "G4";     #bank 3
 NET "cntrl0_rst_dqs_div_out" LOC = "F5";     #bank 3

のようなファイルができます。

これを自分のボードに合わせて編集し、正しいピンを指定します。

** ucf ファイルを元にコアのピン配置を変更する [#g2034423]

Design ペインの Hierarchy で ddr2mi をダブルクリックして MIG を起動します。

今度は [Verify UCF and Update Design and UCF] を選択し、~
Load Prj File に ipcore_dir/ddr2mi/user_design/mig.prj ~
Load UCF File に ddr2mi_pins.ucf ~
を指定します。

Next を連打して、もう一度ライセンス条項を許諾すると、
指定したピン配置でコアを生成できます。

** 正しいピン配置になっているかどうか確認する [#n22a8f15]

 LANG:console
 $ grep "#Bank" ipcore_dir/ddr2mi/user_design/par/ddr2mi.ucf | sort > ddr2mi_pins.ucf

としてみると、指定したとおりのピン配置でコアが生成されていると思います。

* MIG の生成したコアを使う [#p0f9bc5f]

まだこれからです。

Counter: 55111 (from 2010/06/03), today: 3, yesterday: 6