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

更新


公開メモ

注意点

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

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

入出力ポートを指定してコアを生成する

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] を指定する

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

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

[添付]

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

Memory SelectionDDR2 SDRAM
Frequency8000 ps = 125MHz
Write Pipe Stages4
Memory TypeComponents
Memory PartMT47H32M16-3
Data Width64
Data MaskCheck
Burst Length4
Burst Typesequential
Output Drive StrengthFullstrength
RTT(nominal)-ODT150ohms ?
DQS# EnableEnable
Use DCMUncheck
Class for Address and ControlClass II
Class for DataClass II
Debug Signals for Memory ControllerDisable

Available/Reserved ピンは指定しない

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

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

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

Bank もこの時点では気にしない

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

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

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

[添付]

コアを生成する

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

ピンを指定するための ucf ファイルを作る

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 ファイルを元にコアのピン配置を変更する

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

正しいピン配置になっているかどうか確認する

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

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

MIG の生成したコアを使う

まだこれからです。


Counter: 55389 (from 2010/06/03), today: 6, yesterday: 0