Spartan-6のMCBの使い方(1)
Spartan-6には、MCBという、DDR SDRAM(DDR,DDR2,DDR3,LPDDR)にアクセスするためのハードウェアマクロが内蔵されています。この使い方を調べてみました。
MCBは「MCB」という名のプリミティブで提供されますが、普通はこれを直接インプリメントすることはせず、CoreGeneratorで作ったラッパを被せて使います。MCBにはパラメータやポートが非常に多くあり、手動で設定することは困難だからです。
ここではISE12.1を使います。ISE12.2だとなぜか上手く動きませんでした。
ISEを起動したら、New Source WizardからCoreGeneratorを起動して、Memories & Storage Elements中にあるMIGを起動します。MCBのテストなので、ファイル名はmymcbにします。
MIGの画面では、メモリの容量や速度、アドレス線の設定、終端抵抗の設定などができますが、それらはXILINXのドキュメントを参照してください。このブログではXILINXのドキュメントに書かれていないことを書きます。
MIGの設定を最後まで行ったら、Project Managerにmymcb.xcoファイルが登録されています。
普通の感覚なら、このmymcb.xcoをインスタンシエートするような記述をして、次の図のようにプロジェクトに取り込みたいところです。
しかし、MCBではそうはいきません。CoreGenで作ったmymcb.xcoは、クロック入力はFPGA外部からの供給を前提としていて、周波数は200MHzを仮定していて変更できない、という特徴があるからです。
つまり、特定の評価ボードを前提としているようです。
自分で作ったボードで使って、クロックも自由にしたい場合は、mymcb.xcoのしくみを理解する必要があります。
まず、CoreGenで生成したファイルの構造を見てみます。
CoreGenでMIGを実行すると、(プロジェクトのフォルダ)\ipcore_dir\mymcb\user_design\rtlにmymcb.xcoのソース一式が出来ています。
なお、\ipcore_dir\mymcb\にはuser_designというフォルダとexample_designというフォルダがあり、似たようなファイルが入っています。
example_designは、MCBのラッパのほかにテストパターンジェネレータが入っていてエラーの有無をチェックするためのサンプルデザインのようです。user_designにあるmymcb.vhdがmymcb.xcoと等価なファイルです。
したがって、user_design以下のmymcb.vhdを除く各種ファイルをプロジェクトに追加することで、MCBをインプリメントでき、なおかつ動作をカスタマイズできます。
・memc3_wrapper.vhd
・memc3_infrastructure.vhd
・mcb_soft_calibration_top.vhd
・mcb_soft_calibration.vhd
・mcb_raw_wrapper.vhd
・iodrp_mcb_controller.vhd
・iodrp_controller.vhd
mymcb.xcoをRegenarateすると、上記の各ファイルが再生成されます。
このようにxcoをインスタンシエートするのではなく、xcoによって生成されたVHDLソースをみつけて、それをインスタンシエートするといいでしょう。
| 固定リンク
コメント