FC2カウンター FPGAの部屋 ChipScope、シミュレーション協調検証
fc2ブログ

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

FPGAの部屋

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

Veritak3.69C以降におけるModelSimのVHDLシミュレーションとChipScopeの協調検証

今まではVeritakがVerilogのシミュレータだったので、VerilogのシミュレーションとChipScope波形を比べていたが、VeritakがVersion 3.69Cから2つのVCD波形を比べられるようになったので、比べてみた。
プロジェクトはこのブログでは訳があって公開していないキャラクタ・ディスプレイ・コントローラのVHDL版。ModelSimでシミュレーションして、”ModelSimでVHDLのプロジェクトからVCDファイルを出力する方法(覚書)”を使って、disp_timingモジュールだけのVCD波形を20ms分取り出してある。取り出した波形をVeritakで表示したのが下の図。
VHDL_ChipScope_comp_1_090702.png

ISE11.2のプロジェクトにChipScopeのファイルを入れてインプリメント。
VHDL_ChipScope_comp_2_090702.png

Spartan3 Starter Kitにつないで、ChipScopeのAnalyzerで波形をサンプルし、VCDファイルにExportする。
VHDL_ChipScope_comp_3_090702.png

ChipScopeのVCDファイルとModelSimから出力したVCDファイルを両方Veritakのプロジェクトに入れる。その際、ChipScopeのVCDファイルをプロジェクトの最初のファイルとする。Veritak 3.69C以降は最初に入れたVCDファイルのスケールとオフセットを変更することができる。
Waveform ViewerにChipScopeの波形を入れて、その下にModelSimから出力したVCDファイルの相当する波形を入れる。その場合に、ModelSimから出力したVCDファイルの波形を見ると、LSBからになっているので、Waveform Viewer入れてから逆順に並べ替える。
VHDL_ChipScope_comp_4_090702.png

並べおわたら、右クリックのグループ化から名前付作成を選択する。
VHDL_ChipScope_comp_5_090702.png

名前を付ける。
VHDL_ChipScope_comp_6_090702.png

出来たv_point[10:0] をChipScopeの波形の下に持っていく。それを繰り返してModelSimから出力したVCDファイルの波形をChipScopeの波形の下に入れていく。そして、”Veritak3.69B以降とChipScopeによる協調検証”を参考にVCD Timestart Shift Dialogを設定すると、ModelSimから出力したVCDファイルの波形とChipScopeの波形を比べることができる。
VHDL_ChipScope_comp_7_090702.png

波形全体を表示すると、真っ赤です。
VHDL_ChipScope_comp_8_090702.png

20ms間シミュレーションを行っているので、ChipScopeで取れた波形はほんの一部分です。
なお、ModelSimのシミュレーションのレゾリューションはps なので、VCD Timestart Shift DialogのScaleには40000 を入れています。
  1. 2009年07月03日 06:20 |
  2. ChipScope、シミュレーション協調検証
  3. | トラックバック:0
  4. | コメント:2

Veritak 3.68AのChipScopeとシミュレーションの波形比較機能の補足

Veritak 3.68AのChipScopeとシミュレーションの波形比較機能”の補足をする。
Veritak3_68A_3_090624.png

上の図で”真ん中や、右はじに赤いところがあるが、詳しくは調査してみないとわからないが、どうもバースト長がシミュレーションと実機で違っているようだ。”と書いたが、それが本当ならばシミュレーションの意味を揺るがすほどの事実。(パソコンのPCIボードへのアクセスなど、シミュレーションするのが非常に難しい場合もあるが、この場合は実機とシミュレーションが、たぶん一致するはず。。。)シミュレーションと実機は同じであるはずだ。だって、シミュレーションと実機が違っていたら、シミュレーションの意味がない。そこには何らかの要因があるはず。
というわけで社運ならぬ私運をかけて解析した。おかげで首がこってしまったが、解明することができた。ふ~。前ふりが長かったが、皆さんなんだと思われますか?


実はリフレッシュ動作のタイミングの違いでした。
シミュレーションは、待つのがいやなので初期化の一部の時間を縮めてある。例えば”電源とクロックが安定した(リセットが解除されてから)200us後で、CKEを1にしてNOPまたはDESECTコマンドを入れる”などの項目だ。DDR2 SDRAMの初期化のシーケンスはここを参照
ところが実機の方はそのまま初期化シーケンスを実行しているので、リフレッシュのタイミングが双方で異なっていたのだ。それをとらえた波形をお見せしよう。
Veritak_cs_sim_test_11_090626.png

上の図で水色のrasb_node_2d, casb_node_2d, web_node_2dに注目してほしい。これらはChipScopeでキャプチャした波形だ。上図で緑色で囲ったところがプリチャージ・コマンド、紫色で囲ったところがリフレッシュ・コマンドになっている。そのためタイミングがずれて、後ろが真っ赤になってしまった。
これもVeritakの比較機能がなければ、このような現象が起こっていること自体がわからなかった。
  1. 2009年06月28日 04:56 |
  2. ChipScope、シミュレーション協調検証
  3. | トラックバック:0
  4. | コメント:0

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

Veritak 3.68AのChipScopeとシミュレーションの波形比較機能

Verilogシミュレータ、Veritak 3.68Aの波形比較機能は、なんと、シミュレーションの波形とChipScope Proから出力したVCDファイルを同時に表示して、それを比較できるのだ。これは本当にすごいと思う。世界初かもしれない?
具体的には、下の図を見てほしい。これはVeritak作者のたっくさんからいただいたプロジェクトを一部変更したものだ。
Veritak3_68A_2_090624.png

表示されているWaveform Viewerには、青いChipScopeのVCDファイルの信号と対応するVeritakでシミュレーションした信号波形(黒またはオレンジ色)が縦に並べてある。上下の信号の異なっている部分が赤で表示されているわけだ。Waveform Viewerの右はじに’]’が表示されているのが、比較している信号となる。
VCD Timestart Shift Dialogを見てほしい。Set Time Offsetが、VCDをシミュレーション波形からどのくらいシフトするかを決めている。そのシフトする条件はOffset Byで決定されている。そして、ChipScopeはクロックでサンプリングされているので、クロックのスケールをかける必要がある。現在のDDR2 SDRAMコントローラの周期は6.6667ns なので、Scaleに6.6667が入っている。そして、Check by Red Makerにチェックを入れているので、波形を比較して異なっている部分が赤く表示されている。
詳しくは、Veritakチュートリアルの”2.4.1.4 VCD波形とVeritak波形を一緒に表示する”を参照のこと。
上の波形でDQS2intclk_RISE/wgray2 は赤くなっているが、これはDQSクロックで動作する非同期FIFOのWRITEポインタ用グレーコードカウンタをFPGA内部クロックで2度サンプルした後の信号だ。よって1クロック程度遅れるのは仕方がないと言えると思う。

ChipScopeでとった波形の全体像を下に示す。
Veritak3_68A_3_090624.png

真ん中や、右はじに赤いところがあるが、詳しくは調査してみないとわからないが、どうもバースト長がシミュレーションと実機で違っているようだ。ChipScopeの試用期間が終わる前に詳しく解析しようと思っている。このように違いが良くわかる。
後で、ダウンロードできるプロジェクトでのやり方を書こうと思っている。
  1. 2009年06月24日 20:40 |
  2. ChipScope、シミュレーション協調検証
  3. | トラックバック:0
  4. | コメント:0