FC2カウンター FPGAの部屋 Spartan-3A Starter KitでMIGを使用する2(MIGの生成)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Spartan-3A Starter KitでMIGを使用する2(MIGの生成)

Spartan-3A Starter KitでMIGを使用する1(PlanAhead新規プロジェクトの作成)”の続き。

Project ManagerからIP Catalogを選択する。
MIG_11_110502.png

IP Catalogのウインドウが右に開く。今回はMIGを使用するので、Memory & Storage Elements -> Memory Interface Generators -> MIGをダブルクリックして起動する。
MIG_12_110502.png

MIGのダイアログが開いたが、Design EntryがVHDLだったので、一旦Cancelした。今回はVerilogを使用する。
MIG_13_110502.png

MIGを右クリックして、右クリックメニューからIP Catalog Setting...を選択する。
MIG_14_110502.png

HDL TypeをAutoからVerilogに変更して、OKボタンをクリックする。
MIG_15_110502.png

同様にMIGを起動すると、Design EntryがVerilogになった。これで、MIGのウィザードを進める。
MIG_16_110507.png

今回はCreate Designのラジオボタンをクリックする。(Spartan-3A Starter Kitなので、Xilinx Reference Boardsのラジオボタンをクリックしたら、Reference Designを使えと言われてしまった)
MIG_17_110509.png

Spartan-3Aを選択する。xc3s700a-fg484 -4 が選択されている。Spartan-3A Starter Kit系のFPGAのみ選択できるようだ。やはり、Spartan-3AでDDR, DDR2 SDRAMのメモリインタフェースを提供するのは難しいと思う。DDR2 SDRAMコントローラを自分で作ったときに実感できた。やはり、トレーニングシーケンスを実行出来るVirtex-4以降のFPGAでないと、どのパッケージでもコンパチに動作できるDDR SDRAMコントローラIPを作るのは難しいのだと思う。
MIG_18_110509.png

DDR2 SDRAMを選択する。
MIG_19_110509.png

動作周波数は125MHzとする。周期で8000psなので、Frequencyのボックスを修正した。
実際にSpartan-3A Starter Kitに搭載されているMicronのDDR2 SDRAMのマーキングがD9GMGだったので、FBGA Part Marking Decoderで調べたところ、型番はMT47H32M16BN-3:Dだということがわかった。よって、Memory Partでその型番を選択した。
Data WithはDDR2 SDRAMに合わせて16を選択した。
MIG_20_110509.png

次に、Burst Lengthはデフォルト値の4とした。Burst Typeもデフォルト値のsequential。その他もデフォルト値とした。
MIG_21_110509.png

次のDCM Optionは外部からクロックを入れたいので、チェックを外した。それに伴って、System Clockも坏土された。その他はデフォルト値とした。
MIG_22_110509.png

次のReserve Pinsだが、使用しないピンをReserved Pinsに指定すれば確実だとは思うが、とりあえず無しで、どのようにピン配置されるかを見てみることにした。
MIG_23_110509.png

次は、System Control、Data、Address/Control の各信号のバンクを選ぶ、Spartan-3A Starter Kitのユーザーガイドを調べると、すべてバンク3にあるようだ。Bank3にチェックをして選択する。
MIG_24_110509.png

Summaryが表示される。
MIG_25_110509.png

Micron社のシミュレーション・モデルのライセンスが表示される。Acceptのラジオボタンをクリックする。
MIG_26_110509.png

プリント基板作成時のガイドラインが表示される。これを見ても、基板を作る前にMIGでIPを生成してみる必要があるようだ。
MIG_27_110509.png

いろいろな注意事項が出てくる。Generateボタンをクリックして、MIGを生成する。
MIG_28_110509.png

生成が終了した。何度かMIGの生成を試しているので、mig_v3_61_4になってしまった。
MIG_29_110510.png

生成は成功したが、Spartan-3A Starter Kitのピン配置とは違っている。下にUCFファイルのピン配置の一部を引用する。

NET "cntrl0_ddr2_ck[0]" LOC = "M5" ; #bank 3
NET "cntrl0_ddr2_ck_n[0]" LOC = "N4" ; #bank 3
NET "cntrl0_ddr2_dm[0]" LOC = "V3" ; #bank 3
NET "cntrl0_ddr2_dm[1]" LOC = "P3" ; #bank 3
NET "cntrl0_ddr2_a[12]" LOC = "P1" ; #bank 3
NET "cntrl0_ddr2_a[11]" LOC = "P2" ; #bank 3
NET "cntrl0_ddr2_a[10]" LOC = "M3" ; #bank 3
NET "cntrl0_ddr2_a[9]" LOC = "M4" ; #bank 3
NET "cntrl0_ddr2_a[8]" LOC = "M1" ; #bank 3
NET "cntrl0_ddr2_a[7]" LOC = "M2" ; #bank 3
NET "cntrl0_ddr2_a[6]" LOC = "K1" ; #bank 3
NET "cntrl0_ddr2_a[5]" LOC = "L1" ; #bank 3
NET "cntrl0_ddr2_a[4]" LOC = "L5" ; #bank 3
NET "cntrl0_ddr2_a[3]" LOC = "L3" ; #bank 3
NET "cntrl0_ddr2_a[2]" LOC = "K3" ; #bank 3
NET "cntrl0_ddr2_a[1]" LOC = "K2" ; #bank 3
NET "cntrl0_ddr2_a[0]" LOC = "K5" ; #bank 3
NET "cntrl0_ddr2_ba[1]" LOC = "K4" ; #bank 3
NET "cntrl0_ddr2_ba[0]" LOC = "H2" ; #bank 3
NET "cntrl0_ddr2_cke" LOC = "H1" ; #bank 3
NET "cntrl0_ddr2_cs_n" LOC = "H4" ; #bank 3
NET "cntrl0_ddr2_ras_n" LOC = "H3" ; #bank 3
NET "cntrl0_ddr2_cas_n" LOC = "G3" ; #bank 3
NET "cntrl0_ddr2_we_n" LOC = "G1" ; #bank 3
NET "cntrl0_ddr2_odt" LOC = "F2" ; #bank 3
NET "reset_in_n" LOC = "K6" ; #bank 3



Spartan-3A Starter KitのUCFの一部を引用すると下のようになるので、上のMIGのUCFとは違っているのがわかる。

NET "SD_CK_P" LOC = "M1" | IOSTANDARD = SSTL18_II ;
NET "SD_CK_N" LOC = "M2" | IOSTANDARD = SSTL18_II ;
NET "SD_UDM" LOC = "E3" | IOSTANDARD = SSTL18_II ;
NET "SD_LDM" LOC = "J3" | IOSTANDARD = SSTL18_II ;
NET "SD_A<12>" LOC = "Y2" | IOSTANDARD = SSTL18_II ;
NET "SD_A<11>" LOC = "V1" | IOSTANDARD = SSTL18_II ;
NET "SD_A<10>" LOC = "T3" | IOSTANDARD = SSTL18_II ;
NET "SD_A<9>" LOC = "W2" | IOSTANDARD = SSTL18_II ;
NET "SD_A<8>" LOC = "W1" | IOSTANDARD = SSTL18_II ;
NET "SD_A<7>" LOC = "Y1" | IOSTANDARD = SSTL18_II ;
NET "SD_A<6>" LOC = "U1" | IOSTANDARD = SSTL18_II ;
NET "SD_A<5>" LOC = "U4" | IOSTANDARD = SSTL18_II ;
NET "SD_A<4>" LOC = "U2" | IOSTANDARD = SSTL18_II ;
NET "SD_A<3>" LOC = "U3" | IOSTANDARD = SSTL18_II ;
NET "SD_A<2>" LOC = "R1" | IOSTANDARD = SSTL18_II ;
NET "SD_A<1>" LOC = "T4" | IOSTANDARD = SSTL18_II ;
NET "SD_A<0>" LOC = "R2" | IOSTANDARD = SSTL18_II ;


  1. 2011年05月09日 05:27 |
  2. MIG
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/1791-11c0e7bb
この記事にトラックバックする(FC2ブログユーザー)