Lynx-EyEDの電音鍵盤 新館

制御とか数学とか駄文とか

Spartan-6 LX9を使ったLPDDR SDRAMのハードマクロ実装(その1)

例のAVNET Spartan-6 LX9 MicroBoardにはLPDDR SDRAM(MT46H32M16)が載ってます。
Virtex-6と同様Spartan-6にもMCB(Memory Controller Block)が搭載されており、外部メモリを内蔵ハードウェアで駆動します。
MCBは通常はMIGツールを利用してGUIでリソースラッパーを生成して使用します。

◆参考文献

  • テクニカルサポートセミナー
    • Xilinx Customer Education Services:"Spartan-6 and Virtex-6 families design and architecture v11.3"

◆はじめに
ISEを起動します。自分は普段使いのISE Design Suiteが13.2ですが、12.xでも同様です。11.xでは後述する内容が既知のバグにより動作しませんので、アップデートをお勧めします。
また、MIGツールが日本語が含まれているフォルダを誤認識するようなので、なるべく半角英数字フォルダを使ってください。

◆プロジェクトの準備
※以降、作業用フォルダはC:\sp6lx9testとします。
Project navigatorを起動します。

File -> New Project ->

Name:		lpddr_mig
Location	C:\sp6lx9test\lpddr_mig

f:id:Lynx-EyED:20110912234618j:image

Next ->
以下の項目を修正します。

Family:		Spartan6
Device:		XC6SLX9
Package:	CSG324
…
Preferred Language:	(VHDLVerilogかお好きなほうで)

f:id:Lynx-EyED:20110912234617j:image
Next -> Finish

◆MIGツールの使用
次にMIGツールの生成するIPコアを準備します

Project -> New Source...
f:id:Lynx-EyED:20110912234616j:image
New Source WizardでIP(CORE Generator & Architecture wizard)を選択し、File nameを「mymig」などとしておきます。

Next ->

View by function タブのMemories & Storage Elementsの項目の中のMemory Interface Generatorsの「MIG Vertex6 and Spartan6*1
f:id:Lynx-EyED:20110912234615j:image
Next -> Finish

そうすると、しばらくたってMIGのオプション選択画面になる。
f:id:Lynx-EyED:20110912234614j:image
Next ->
次もNext ->
ピンコンパチ画面も面倒いのでそのままスキップ(ぉぃ Next ->
Memory Selection画面ではBank3*をLPDDRに指定。(なぜBank3*なのかは参考資料UG388「移行性とバンキング」のセクションを参照してください) Next ->
f:id:Lynx-EyED:20110912234612j:image
Memory Partでは、LX9マイクロボードに搭載されている「MT46H32M16XXXX-5」を選択。
f:id:Lynx-EyED:20110914195027j:image
Next ->
Next ->
f:id:Lynx-EyED:20110912234611j:image

Port ConfigurationではドロップダウンからTwo 32-bit bi-directional and four 32-bit undirectional portsを選択しますが、チェックはport0のみにします。
Next -> Next -> Next ->

System ClockをSingle Endにします。
f:id:Lynx-EyED:20110914195026j:image
Next ->
後編でシミュレーションをするので今回はAcceptにチェックしてNext -> Next -> Generate
これで、ラッパーその他のツールが生成されました。

Projects -> Add copy of source...

で、C:\sp6lx9test\lpddr_mig\ipcore_dir\mymig\user_design\rtlのフォルダに生成されてるRTLをプロジェクトにインプリメントしてですね…

「は?プロジェクト?つくってねーよ。わかんねーよいきなり言われてもラッパーなんてどんな風に書いてあるかわからんし」
UG416のp.36表1-7によると、プロジェクト設定を丸ごと作ってくれるバッチファイルがあるそうです。
でもその前に、環境設定パスが(LinuxはLD_LIBRARY_PATH)通っていなければなりませんので、

「マイコンピュータ」を右クリック→ プロパティ → 詳細設定 → 環境変数(N)
をクリックしてユーザー環境変数

変数:PATH
値:C:\Xilinx\[_ise_version_]\ISE_DS\ISE\bin\nt\;

そうしたら、C:\sp6lx9test\lpddr_mig\ipcore_dir\mymig\example_design\par\
にある、

create_ise.bat

を実行するとISEプロジェクトを全部作ってくれる。ただし、creeate_ise.batを編集画面で確認し、この記述がなかったら追記する

call rem_files.bat

↓ここから
coregen -b makeproj.bat coregen -p . -b ila_coregen.xco coregen -p . -b icon_coregen.xco coregen -p . -b vio_coregen.xco
↑ここまで
xtclsh set_ise_prop.tcl

いったんISE Project Navigatorを終了して、先ほどのparフォルダのtest.xise(またはtest.ise)をProject Navigatorで開く。
これで、Implement Designまでできるプロジェクトが完成したはず。(※もしこれでエラーが出たら、ライセンスキーがうまく取得できていないか、同じライセンスを2台以上のPCで使っていないか確認する。たぶんエラーメッセージにもそのようなことが書いてあるはず。)



次回は、このマクロを実機に実装してみます。

*1:12.xでは単に「MIG」という項目になっている