MicroBlaze MPMC (Multi-Port Memory Controller) によるSDRAMアクセス 設定例
2010/06/21-
 弊社ではSDRAM (MT48LC16M16A)へのアクセス試験に、MicroBlazeを用いております。
その際使用するIP:MPMC (Multi-Port Memory Controller) の簡易的な設定方法をご説明します。
この例では、XCM-109をターゲットとしてご説明致します。

※ご紹介した例により動作を保証するもので無いことにご注意ください。
ご使用条件によっては、動作周波数の変更や、放熱その他の技術的検討を要することがあります。


開発環境の各バージョンは以下のようになります。

ISEのバージョン:10.1.03
EDKのバージョン:10.1.03
MPMCのバージョン:4.03.a
(1)BSBウィザードでMicroBlazeのベースを構築します

標準ストリーム先とするため、UARTを初期設定で組み込みました。


(2)MPMCの組み込み

IP Catalog -> Memory and Memory Controller から Multi-Port Memory Controllerを選択します




(3)バスを接続します


(4)IPの設定

Memory Partにて、TypeをSDRAMとして「MT48LC16M16A2-7E」を選択します。
データ線幅に「16」を選択し、Sizeを32MBとします。
今回システムクロックは125MHzなので、Clock Periodには8000を設定します。


クリックで拡大します

(5)アドレス割付け

Generate Addressesによりアドレスを割付けます。
0x87FFFFFF - 0x86000000 + 1 = 0x2000000 で、32MBの領域が割当てられました。


(6)クロックの生成

MPMCに90度位相のクロックが必要となるので、clock generatorを設定します。


クリックして拡大します

(7)ポートの割付け

DMピン〜InitDoneピンまでを外部ピンに引き出します。



リセット信号、クロックを接続します
Clk90には、新たに作成した90度位相のクロックを接続します。



External PortsのSDRAM_DMのRangeを [7:0] から [1:0]に変更します


                 ↓

(8)NetListの生成

ここまでの設定でNetListの生成が通れば完了です。



(9)インスタンシエーションとFPGA内ピンとの接続

ISEでインスタンシエートし、FPGAピンと接続します。
今回、タイミング制約は特に与えていません。(UCFファイル例


(10)メモリテストプログラム

実際にWrite/Readしてアクセスできるか確かめます。
xutil内にあるXUtil_MemoryTest16()という関数を編集して使用しています。



メモリ検査完了時の出力例です




この例は、細かいタイミング制約を与えておらず、FPGAやSDRAMの性能を十分に引き出していないと考えられます。
どうかみなさまはもっと上手に構築してください。

みなさまの参考になれば幸いです。
当方はアプリケーションを行っておりませんので、EDKやXILINXツールの操作には未熟です。
間違いなど見つけられましたらぜひご指摘下さい。
メールでのご質問はこちらへどうぞ
XILINXシリーズトップへ