Xilinx Spartan-3E starter kit用DDR SDRAMコントローラ

スターターキットの64-Mbit DDR SDRAM(Micron社MT46V32M16)用の簡易コントローラでございます。
32 bitのデータが8,388,608個(24 bitアドレス分)持つメモリとして制御するもので、一応バーストもできます。
動作周波数は100 MHzで、ボードの50 MHzクロックを2倍して使ってくださいねん。
(2009/02/22更新でふ)

いろいろリンク

addr [23:0] メモリのアドレス
size [8:0] バースト長(最大512のとき0)
start   メモリ制御の開始
we   書き込みのとき1、読み込みのとき0
rdy   コントローラ準備完了のとき1
ack   制御が終わったとき1クロックだけ1
clk   クロック(100MHz)
rst   リセット

動作について

・書き込み
startから2クロック後に書き込みデータを与えるとうまいこと書けます。
バーストアドレスはコントローラが生成するので、アドレスは開始アドレスを与えまする。
図は8バースト長の場合ですよ。


・読み込み
startから9クロック後にデータが読み込めるようになります。
書き込みと同じく、アドレスは開始アドレスで固定しまする。
図は8バースト長の場合ですよ。

・リフレッシュ
リフレッシュは7.8us毎に勝手に行うので、startとぶつかるとstart信号が無視されちゃいます。start信号と同じクロックのrdy信号をみてやってねん。

クロックについて

動作周波数は100 MHzで、ボードの50 MHzクロックを2倍して使いまふ。
DQS生成のクロックは90度ずれたクロックを使用していますよん。
一方、DRAMへのクロックは1/4前にずらして使用しまふ。
位相が270度なのですが、直接フィードバックしてDCMに入力するので位相をずらしてますのです。

回路ソース

テスト回路も含めた構成になっています(回路構成をみてね)
テストベンチの動作にはMT46V32M16のモデルが必要ですよん。
ソースファイル
 ・chip_ddrdram.v
 ・ctr_ddrdram.v
 ・test_ddrdram.v
 ・chip_ddrdram.ucf
テストベンチ
 ・testbench.v
ビットファイル 
 ・chip_ddrdram.bit

回路構成



構成全体でのハードウェア量はおよそ5%で、そこそこちっこいです。
(ISE 9.1から9.2でちっこくなりまひた)
Design Summary Report:
Number of External IOBs 53 out of 232 22%
Number of BUFGMUXs 6 out of 24 25%
Number of DCMs 3 out of 4 75%
Number of Slices 276 out of 4656 5%
Number of SLICEMs 4 out of 2328 1%

論理合成と配置配線

犬山が使ったツールはISE 9.2isp4です(Windows7 x64)。
・Synthese中のXilinx Specific OptionsでRegister Duplicationチェックボックスを外してください。
・UCFファイルには使用しないピンも含まれているので、Implement DesignのTranslate Properties中で
 Allo Unmatched LOC Constraintsのチェックボックスを入れてください。

シミュレーションについて

testbench.vはPost Place and Route Simulation用で、論理合成・配置配線後のモデルで行います。
(遅延が入っていないBehavioral Simulationでは正しく動作しないです)
DDR DRAMのMT46V32M16TG-6Tのモデルはここからダウンロードして下さいまし。
 
初期化に200us待つのをシミュレーションでするのは尋常ならぬ時間がかかるので、ctr_ddrdram.v中の
パラメータINIT_CYCLEを小さくするとすばやく結果が見れるようになります。
テスト回路もメモリ全体を試験するために時間がかかるので、test_ddrdram.v中のENDADDRを小さくするのが
おすすめでござりまする。
下の図はModelsim XE starterで実行した結果例ですよん。
(ISE9.2sp4では内部シミュレータを試してみましたところ、うまいこと動きました)

DRAM初期化


データ書き込み(クリックで大きくなりまふ)


データ読み込み(クリックで大きくなりまふ)


実機でデータ読み込みしたところをChipscopeでのぞいてみました。

参考リンク

MicronさんのMT46V32M16TG-6T
エルピーダさんのDDR DRAM技術書
 いつもお世話になってます。