FC2カウンター FPGAの部屋 DDR2 SDRAMコントローラのシミュレーションまとめ
FC2ブログ

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

FPGAの部屋

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

DDR2 SDRAMコントローラのシミュレーションまとめ

DDR2 SDRAMコントローラのシミュレーションで、とりあえずVerilogコードを公開しようと思う。まだインプリメントまではうまくいっていない。リードデータを受ける際の入力ディレイもインプリメントしていないし、IOBにも全部入っていない。ちゃんとインプリメントするには書き直しが必要かもしれない。
DDR2 SDRAMコントローラはほとんどDDR SDRAMコントローラと同じだ。Posted CASもODTも使用していない。修正箇所はプリフェッチ4に対応して4バーストにしたのと、初期化ルーチンをいじったくらいか?
使用しているシミュレータはVeritak Basicだ。これはたっくさんの作られたVerilogシミュレータだ。ModelSim Staterでも良いのだが、1万行の制限にかかると遅くなるので、以前購入したVeritak Basic(現在の最新バージョンはVer3.41K、このブログではそのバージョンを使用して説明している)を使用している。
ちなみにVeritakはPro版もBasic版もダウロードページからダウンロードできて16日間試用できる。私は、Veritak BasicをVectorのページから購入した。今は4,830円だそうだ。

さて、DDR2 SDRAMコントローラのシミュレーション用のファイルはここからダウンロードすることができる。
例によって保証はありません。プロジェクトやファイルは個人的に実験するのみで、商用に使用することや再配布は禁止します。ダウンロードして試してみた方も動いたどうかコメントで教えてください。

まずはダウンロードして、展開すると"ddr2_controller"というフォルダが出てくると思う。その下に"simulation"フォルダがあるはず。"simulation"フォルダには、DDR2 SDRAMのモデルがないので、Micron社からダウンロードさせてもらうことにする。DDR2 SDRAM(Micron MTH16M16-37E)のモデルをMicron社のMT47H16M16BG-37Eのページからダウンロードする。
それを展開すると"256Mb_ddr2"フォルダがあるので、その中の"ddr2.v"と"ddr2_parameters.vh"を取り出して、"simulation"フォルダに入れる。さらに、"ddr2_parameters.vh"をエディタで開いて、コメントの後に"sg37E"と"x16"を定義する。

`define sg37E
`define x16


ddr2_simlation_1_080205.png

これでファイルは全部そろったので、Veritakのプロジェクトを作る。
Veritakを起動する。起動したらVerilogプロジェクトメニューの新しいプロジェクトの作成を選択する。
ddr2_simlation_2_080205.png

ダイアログが開くので、simulationフォルダに移動する。次に、ファイル名に適当なプロジェクト名をつけて保存する。ここではDDR2_SDRAMtest_tb.vtakprj というプロジェクト名をつけた。
ddr2_simlation_3_080205.png

コンパイルするファイルを選択するダイアログが開くので、ddr2.v と DDR2_SDRAMtest_tb.v を選択して、Addボタンをクリック。
ddr2_simlation_4_080205.png

そうすると左下のペインに入力される。さらにddr2_contorllerフォルダに移動して、そこにあるすべてのVerilogファイルをAddしよう。
ddr2_simlation_5_080205.png

次にISEインストールフォルダの下のverilogフォルダの下の src フォルダを開く。そこにあるglbl.v を Addする。その後、unisims フォルダをダブルクリックして開く。
ddr2_simlation_6_080205.png

unisims フォルダの中に入ってAdd Lib Dir ボタンをクリックし、ライブラリとして登録する。
ddr2_simlation_8_080205.png

これでプロジェクトへのVerilogファイルの登録は終了なので、Save Project ボタンでプロジェクトをセーブする。その後 Exit ボタンを押して登録画面を終了する。
ddr2_simlation_9_080205.png

Verilogプロジェクトメニューから Load Verilog プロジェクトを選択する。
ddr2_simlation_10_080205.png

DDR2_SDRAMtest_tb.vtakprj を開く。
ddr2_simlation_11_080205.png

コンパイルが始まり、Verilog Simulation Ready.. が出たら、ピンクの枠で囲ったシミュレーション開始をクリックする。
ddr2_simlation_12_080205.png

シミュレーションが終了し、$stop; でシミュレーションが一時停止する。
ddr2_simlation_13_080205.png

VerilogファイルのウインドウをXで消す。ピンクの枠で囲ったScope Tree View を前面にするというアイコンをクリック。
ddr2_simlation_14_080205.png

Scope Tree View ウインドウと Waveform Viewer 1 ウインドウが開く。Scope Tree View ウインドウで左のペインからDDR2_SDRAMtest_tb をクリックすると、右のピンに信号が表示される。それをすべて選択して、そこで右クリックする。そうすると 選択信号をWaveform Viewerに追加 が出るので選択する。
ddr2_simlation_15_080205.png

そうすると、Waveform Viewer 1 ウインドウに選択した信号が表示される。ピンクの枠で囲った全体波形を表示するアイコンをクリックする。
ddr2_simlation_16_080205.png

そうすると、全体波形が表示される。
ddr2_simlation_17_080205.png

左クリックで黒いカーソルがでる。右クリックで赤カーソルがでます。上の図で右端の図の位置あたりに黒、赤カーソルを表示して、ピンクの枠で囲ったアイコンをクリックするとその間をズームする。
ddr2_simlation_18_080205.png

ズームしたら、その中の上の図辺りをもう一度ズームする。
ddr2_simlation_19_080205.png

ズームされたのが、DDR2 SDRAMへの書き込みだ。ddr2_dq_sdramがDDR2 SDRAMでのデータ、ddr2_dqs_sdramが同じくDQSだ。CASレイテンシ=3、Posted CAS=未使用、ODTも未使用となっている。あまりDDRと変わらない。

シミュレーションの一番最初のメッセージがワーニングになっている。

DDR2_SDRAMtest_tb.MT47H16M16_inst.cmd_task at time 10626000.0 ps WARNING: 200 us is required before CKE goes active.


これはCKEをアクティブにするまでに200us 経過していないというワーニングだ。シミュレーション時間が長くなるので、短くしてある。これがいやな方は、simulationフォルダの ddr2_cont_parameters.vh ファイルの14行目をコメントアウトして、13行目のコメントをはずしてください。

2008/02/07:訂正
DDR2_SDRAMtest_tb.vにバグがあったので、ダウンロードファイルを修正しました。ModelSimでの動作も確認しました。
たっくさん、ご指摘ありがとうございました。ModelSimではシミュレーションをしていませんでした。
  1. 2008年02月07日 04:36 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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