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

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

FPGAの部屋

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

Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーションまとめ2

Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーションまとめの続きだ。
前回、コンパイルしたところで終了だったので、今度はシミュレーションをスタートする。
以前やったVerilog2001版DDR SDRAMコントローラーのModelSimシミュレーション2を参考にしてほしい。
unisim_ver ライブラリを読み込んで glbl も読み込むために以下のコマンドをtranscriptペインで実行する。

vsim -t ps -L unisims_ver work.DDRtest_tb work.glbl


Verilog_simu_15_070209.png

コマンドを実行するとインスタンスがエラボレートされて以下のような状況になると思う。
Verilog_simu_16_070209.png

Waveウインドを表示するために、View メニューからDebug Windows -> Wave を選択する。
Verilog_simu_17_070209.png

Objectペインで右クリックしてAdd to Wave -> Signal in Region を選択して DDRtest_tb の信号を全部waveウインドウに入れる。
Verilog_simu_18_070209.png

シミュレーションを実行するために、Transcriptペインで run -all とコマンドを入れる。
Verilog_simu_19_070209.png

これでシミュレーションがスタートした。ModelSim XEⅢ 6.1e Starterだとかなり時間がかかるが10分くらい待てばシミュレーションが終了すると思う。ModelSim SEだとかなり速いんだけど。。。
Finish Vsim, Are you sure you want to finish? ダイアログが出てくるので”いいえ(N)”ボタンをクリックする。はいをクリックするとModelSimが終了してしまうので注意。一度終了してしまい悔しい思いをしたことがある。
Verilog_simu_20_070209.png

シミュレーション結果を見るためにwaveウインドウのタブをクリックして前面に出す。
次にZoom Fullアイコンをクリックすると全体が見えると思う。
Verilog_simu_21_070209.png

Write波形、Read波形が見える。
Verilog_simu_22_070209.png

次にコメントで教えていただいたステートマシンのステートをステート名で表示する方法だ。
まずはWorkspaceペインのsimタブをクリックして、Instanceを見てDDRtest_tb/DDRtest_inst/ddr_sdram_cont_inst/controller_instをクリックする。
Objectsペインを見ると MAIN_STATE, INIT_STATE, STATE_DETS があるのでそこで右クリックして Add to Wave の Selected Signals を選択する。
Verilog_simu_23_070209.png

次にwaveウインドウの MAIN_STATE, INIT_STATE, STATE_DETS を選択して右クリック。
Radix から ASCII を選択するとステート名を表示できる。
Verilog_simu_24_070209.png

このようになります。
Verilog_simu_25_070209.png

さらにUndockをクリックしてwaveウインドウを外に出して大きく表示してみよう。

後は自分で確かめてみてください。
関連記事はSpratan3E Starter KitのDDR SDRAMコントローラの説明などあるのでご参照ください。
更に関連する質問のある方はコメントを使ってもらうか、もしくは、abcd_marsee101@mail.goo.ne.jp から adcd_ を除いたメールアドレスに、ご連絡ください。
  1. 2007年02月11日 08:29 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:6

コメント

$finish

いつも興味津々で拝見させてもらっています。
私のようなVerilog若葉マークごときがコメントするのはおこがましいとは思いますが。。。
シミュレーションを停止させる場合には$stopを使うとModelSimはシミュレーション後にあの忌まわしいダイアログを出さずに止まってくれます。
  1. 2007/02/14(水) 14:07:41 |
  2. URL |
  3. Verilog若葉マーク #-
  4. [ 編集 ]

こんにちは。
コメントありがとうございます。

なるほど。$stopもあるんですね。Verilog本に$finishを書く例が載っていたので、そのまま使いました。今度は$stopにしたいと思います。
ありがとうございました。
  1. 2007/02/14(水) 14:16:09 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

$stop は、break point と似たようなもんで中断っすね。
再開可能。
$finish は、ホントに終了。
それ以降コードがあっても再開はできません。

modelsim だけでなく、コマンドラインに戻って欲しくないときは、
$stop();
$finish();
のように一応並べて書いておくことも多いです。

また、$finish(2) のように引数を指定すると、
シミュレータによっては実行時間を出してくれたり
便利なこともあります。
  1. 2007/02/15(木) 06:32:19 |
  2. URL |
  3. hyotan #VWFaYlLU
  4. [ 編集 ]

hyotanさん、こんにちは。

いろいろ教えていただいて、ありがとうございます。
$stop と $finish の違い、勉強になりました。
  1. 2007/02/15(木) 08:47:16 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

並べて書くと・・・

$stop;
$finish;
と記述すると、シミュレーションとしては$stopでブレークした状態でコマンドラインからrunさせると$finishでシミュレーション自体が即終了するといった具合になるのでしょうか?
いつも$stopでブレークさせた状態で波形観測してたので再開可能だとは知りませんでした。(hyotanさん、勉強になりました)
  1. 2007/02/15(木) 12:09:44 |
  2. URL |
  3. Verilog若葉マーク #-
  4. [ 編集 ]

のはずですけど、わざわざ再開させるようなことを
長いことやってません。
というのも、vhdl では、現状の構文では stop が不可能なので、
verilog だけ stop を利用したシミュレーションでもなかろうってことで。
-- シミュレータの機能を使えばできなくはないんすけど。
-- また vhdl 2006 ではできるようになるらしい。

あちきのような年寄りは、いにしえの BASIC 言語の
STOP
END
を思い出します。
END は、最後にしか書けないわけで、
まったく同じ意味なんですわ。
  1. 2007/02/16(金) 00:47:04 |
  2. URL |
  3. hyotan #VWFaYlLU
  4. [ 編集 ]

コメントの投稿


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

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