FC2カウンター FPGAの部屋 Veritak3.69B以降とChipScopeによる協調検証
fc2ブログ

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

FPGAの部屋

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

Veritak3.69B以降とChipScopeによる協調検証

Veritak3.69B以降とChipScopeによる協調検証のやり方について書いてみようと思う。
まずは、Veritakをインストールしていない方は、VeritakのダウンロードページからPro版かBasic版をダウンロードして、試用してほしい。試用期間は14日に設定してあるそうだ。
次に、”Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのプロジェクト”からもう一度プロジェクトをダウンロードしてほしい。Veritakのプロジェクトをアップデートしたのとddr2_burst_test.vにバグがあったので修正した。
まずは、ファイルを解凍するとddr2_burst_testというフォルダができるはずだ。その下にsimulationフォルダがあるので、そこを開く。
simulationフォルダには、まだDDR2 SDRAMのVerilogモデルが足りないので、それをダウンロードしよう。
Micron社のMT47H32M16BN-3のページからVerilogのモデルをダウンロードする。
512Mb_ddr2.zip というZIPアーカイブがダウンロードされるので、ddr2_burst_test/simulation フォルダに512Mb_ddr2というフォルダを作って、その中に展開する。
Veritak_cs_sim_test_1_090626.png

今度は、Spartan3A Starter Kitに載っているMicron社製のDDR2 SDRAMのスピードグレードを調べることにする。実は型番はMicron社製のDDR2 SDRAMに刻印されていないで、何かコードが印刷されている。このSpartan3A Starter KitのDDR2 SDRAMには”8GD42 D9GMG cz98”と刻印されていた。この型番を知るためにはMicronのFBGA DecoderのページでFBGA Code:にD9GMGを入れて検索する。そうすると、パーツ・ナンバーがMT47H32M16BN-3:Dと出てくる。これで512MbitのDDR2 SDRAMのマニュアルから、データ幅が16ビットということと、スピードグレードが3ということが分かる。この値を上の図で緑色の四角で示したddr2_parameters.vh を多少書き換える。このファイルをエディタで開いて、下の図のピンクの四角で囲んだ部分を追加し、セーブする。
Veritak_cs_sim_test_2_090626.png

これでした準備は終了したので、一番上の図のddr2_burst_test.vtakprjをダブルクリックしてVeritak3.69Bを起動しよう。

Window02, VCD file has different timescale (-9) from Veritak Project(-12) というダイアログが出てくるので、OKボタンをクリックする。
そうするとシミュレーションが始まる。シミュレーションが終了した後もWorkspaceにDDR2のモデルのインフォメーションが表示されていることと思う。これはそのうち終わる。
次には”ChipScopeの波形とシミュレーション波形”というウインドウをクリックして前に出す。
Veritak_cs_sim_test_4_090626.png

ユーティリティメニューのVCD波形の表示スタート時刻を変更するをクリックする。
Veritak_cs_sim_test_5_090626.png

VCD Timestart Shift Dialogが開く。Set Time OffsetもScaleもToleranceもちょうど良く設定されているのでSetボタンをクリックする。すると、”ChipScope波形とシミュレーション波形の比較”ウインドウで水色で示されたVCDの信号(ChipScopeの信号)だけがシフトして、オレンジ色や黒で示されたシミュレーションの波形の波形と位置が合うはずだ。ちなみにオレンジ色の信号名はバスの信号の一部を抜き出した信号だ。rpなどは本当は4ビット幅なのだが、ChipScopeでどうしても下3ビットしか見つからなかった。そのため、シミュレーション波形も4ビットのところ3ビット幅としてWaveform Viewerに入れている。下にSetボタンをクリックした後のVeritakの図を示す。
Veritak_cs_sim_test_6_090626.png

このように、VCDの波形とシミュレーションの波形がそろって、異なるところを赤で表示できるようになった。
水色(VCDつまりChipScope波形)のdout_nodeとその下のシミュレーション波形のdout_nodeの値がこのウインドウ幅の中ではぴったり合っているのが確認できる。また、...../DQS2intck_FIFO_FALL/wp[2:0]と下のシミュレーション波形のパートセレクトしたwp[2:0]では、少し位相が異なっている。これは、基本的にwpはWriteのクロック、つまりDDR2 SDRAMの場合はDQSのクロックで動作する。ChipScopeでは決められたFPGA内部のクロックでサンプルされるが、実際はそのタイミングで変化しているかわからないためだ。シミュレーションでは大体こんなものかな?という値の遅延を付加している。

次に各機能を私なりに説明しようと思う。
最初にToleranceだが、これはVeritakチュートリアルによると公差で、どうしても生じる微妙な誤差を無視する設定だ。今、0.1ns が入っていると思うが0ns にしてみよう。すると、いろいろな波形の値の変化の境界に赤い部分が生じるはずだ。下の図参照。
Veritak_cs_sim_test_7_090626.png

従って、正常な部分が赤に表示されないようにToleranceをうまく設定してほしい。ちなみに、3nsと設定(Setボタンをクリック)すると、...../DQS2intck_FIFO_FALL/wp[2:0]と下のシミュレーション波形の差異も消えてしまうので、設定値の決定にはくれぐれもご用心を。。。
Veritak_cs_sim_test_8_090626.png

Toleranceは0.1nsに戻しておく。
Scaleは動作周波数の周期で問題ない。現在はDDR2-300なので、FPGA内部の動作周波数は150MHz、周期に直すと6.666...ns なので6.66667と設定する。
最後にSet Time Offsetの値の設定の仕方だが、これは最初からやるためにとりあえず0nsに設定する。全体を表示するアイコンをクリックして全体を表示する。下の図は全体表示した状態。それに見にくいのでCheck by Red Markerのチェックもとりあえず外そう。
Veritak_cs_sim_test_9_090626.png

ここで2つのdout_nodeに注目する。見にくいが水色のVCD波形の始まりのあたりに黒いカーソルを、黒色のシミュレーションの波形の始まりのあたりに赤カーソルをセットする。(上の図参照、左クリックと右クリックでカーソルをセットする) そしてOffset ByをBetween T1 and T2にセットして、Setボタンを押すと波形が大体そろったのではないだろうか? 大体そろった状態を下の図に示す。
Veritak_cs_sim_test_10_090626.png

ちなみにVCD波形(ChipScope波形)のdout_nodeが下のシミュレーションのdout_nodeよりもだいぶ短いのは、ChipScopeのサンプル数を1024ポイントにしているからだ。1024×6.6667nsで6.83us程度の幅となっている。
この後はOffset ByをEdit box aboveに戻し、値を増減させて、ぴったり合う位置を探る。その際に波形をズームしないとあっているかどうかが分からない。ズームインはシフトキーを押しながら、ズーム範囲を選択する。ズームアウトはシフトキーを押しながら右クリックする。

これで大体、一通りの説明をしたが、皆さん、できましたでしょうか?何か質問があったらコメント欄にお願いします。

Veritakのこの機能については、”2.4.1.4 VCD波形とVeritak波形を一緒に表示する”を参照のこと。
私は、とても良い機能だと思っているが、反応が少ないし、あまり便利な機能ではないのだろうか?でも、少なくとも私はとても便利な機能だと思っている。ただ、惜しいのはChipScopeが評価版のみで、ずっと使い続けるためには購入する必要があることだ。出来れば、ISE WebPACKでも標準の機能としてほしい。

追加:
ChipScopeからExportしたVCDファイルの本体は、ddr2_burst_test/Synth111/VCD_Filesフォルダの中のDDR2_Burst_Test_Start.vcd です。
  1. 2009年06月27日 05:34 |
  2. ChipScope、シミュレーション協調検証
  3. | トラックバック:0
  4. | コメント:2

コメント

たっく

いつもお世話になっております。思えば10日前のブログで、コメントしたことがきっかけでした。いやな予感がしたのですが。(笑)
鍛えていただきありがとうございました。ひとつのブログから、ソフトウェアが進化することもある稀な例だと思います。Veritak以外でも実装が進むとHappyですね。
  1. 2009/06/27(土) 06:41:36 |
  2. URL |
  3. #-
  4. [ 編集 ]

たっくさん、いろいろわがままを言って申し訳ありませんでした。
おかげで私にとっては、とても素晴らしい機能になりました。ありがとうございました。
シミュレーション(つまり自分の予定)と実機がどうのように違っているかが分かれば、それをシミュレーションにフィードバックして、さらに高い精度でシミュレーションすることができるようになると思います。
  1. 2009/06/27(土) 07:00:37 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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