FC2カウンター FPGAの部屋 Verilog版DDR SDRAMコントローラのテスト回路
FC2ブログ

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

FPGAの部屋

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

Verilog版DDR SDRAMコントローラのテスト回路

Chipscopeのチュートリアルで題材に使っていたVerilog版DDR SDRAMコントローラのテスト回路のことを書こうと思う。
Verilog版DDR SDRAMコントローラのテスト回路はここにあります。Spartan3E Starter Kitを持っている人はダウンロードして試してみてください。いつものように、ダウンロードして使用したときの責任はもてないのと再配布は禁止、商用禁止でお願いしたい。
ダウンロードしてZIPを解くと、DDR_burst_test_verilog フォルダがあると思う。その中にDDRtest_synth101iフォルダがあるので、その中の DDRtest_synth101.ise がISE10.1i のプロジェクトファイルだ。
そのプロジェクトをISE10.1iで開いて、Chipscopeチュートリアルを参考にやってみると良いと思う。
プロジェクトに入れてあるChipscopeのファイルがDDRtest_cs_test.cdc だ。それを説明しようと思う。
Chipscope_tutorial_48_080402.png

上の図がChipscope Analyzer の表示だ。
read_error は、outff_flagが1のときにexpected_read_data != out_data の時に1になる信号。つまり期待値とリードしたデータが違っていたということ。
rasb_node_1d, casb_node_1d, web_node_1d はそれぞれDDR SDRAMのRAS#, CAS#, WE#。
out_dataはリードしたデータの出力。
outff_flag は DDRtest.v で言うと rddata_valid 信号でリード・データが有効であるということを示す信号。

さらに下の図で流れを説明する。
Chipscope_tutorial_49_080402.png

赤い縦線のところでRAS#, CAS#, WE# = 0,1,0 なのでDDR SDRAMをプリチャージする。次の緑の縦線のところでRAS#, CAS#, WE# = 0,1,1 なのでアクティベートする。
赤い楕円で囲まれたとことは、RAS#, CAS#, WE# = 1,0,0 なので、バーストでWRITEしている。
緑の楕円で囲まれたところは、RAS#, CAS#, WE# = 1,0,1 なので、先ほどWRITEしたデータをバーストでREADしている。
バーストで書き込むデータはオール0から始まって、1つデータ転送するごとに+1される。よってそういうデータが読めるはずだ。読めるはずという期待値が expected_read_data で、実際にリードできたデータがout_data、out_dataのイネーブルがoutff_flagだ。テスト回路としては、outff_flagが1の時に expected_read_data とout_data を比較している。(前にも書いたが。。。)

Chipscopeの定義ファイルは DDRtest_cs_test.cdc だが、これはテキストファイルでテキストエディタで見ることができる。
テキストエディタで見てみると、フォルダは絶対パスで書いてあるようだ。ダウンロードした皆さんのところでやってみるときには、絶対パスを書き直すか .cdc ファイルを作り直す必要があるようだ。
DDRtest_cs_test.cdc のパスが書いてあるところはファイルの頭にあるがこんな感じ。

#ChipScope Core Inserter Project File Version 3.0
#Sat Apr 05 05:57:46 JST 2008
Project.device.designInputFile=H\:\\HDL\\FndtnISEWork\\Spartan3E_starter_kit\\test\\DDR_burst_test_verilog\\DDRtest_synth101i\\DDRtest_cs.ngc
Project.device.designOutputFile=H\:\\HDL\\FndtnISEWork\\Spartan3E_starter_kit\\test\\DDR_burst_test_verilog\\DDRtest_synth101i\\DDRtest_cs.ngc
Project.device.deviceFamily=13
Project.device.enableRPMs=true
Project.device.outputDirectory=H\:\\HDL\\FndtnISEWork\\Spartan3E_starter_kit\\test\\DDR_burst_test_verilog\\DDRtest_synth101i\\_ngo


:や\はエスケープ・キャラクタ?の\ をつけるような感じだ。これで自分の .ngc や _ngo の位置を書き換えれば、私は大丈夫だったが保障はできない。
そうでなければ、私がChipscopeに入れた信号名は、全部ここに書いてある。
データに入れた信号は下のように書くようだ。

Project.unit<0>.dataChannel<0>=read_error
Project.unit<0>.dataChannel<10>=ddr_sdram_cont_inst/rddata_fifo_inst/out_data<6>


ソート順か?データ<0>の次がデータ<10>になっている。
トリガーは下のようになっている。

Project.unit<0>.triggerChannel<0><0>=read_error
Project.unit<0>.triggerChannel<0><1>=ddr_sdram_cont_inst/controller_inst/rasb_node_1d


下の写真がテストを行っているところだ。LEDのLD0がテストが正常、LD1がテストがエラーを示している。さらにBTN Southを押すとリセットがかかる。
SPA3_ST_KIT_080405.jpg


わかっているかもしれないが、最後にもう1つChipscopeの使い方。
Chipscope_tutorial_50_080405.png

ピンクの四角で囲んだ三角をクリックすると、波形キャプチャスタート、緑の四角で囲んだ黒四角を押すとストップ。青四角で囲んだ"T!"をクリックするとフリーランしてトリガがかからなくても波形を表示する。つまり、トリガ条件に合わなくてトリガがからなくても"T!"ボタンをクリックすると波形を見ることができる。

Spartan3E Starter Kitをもっている方は、よろしければChipscopeを試してみて、テストしている間、LEDが正常を示していたか、それともエラー表示になったかをコメントで教えてください。
最後にChipscopeはここからダウンロードできます。
  1. 2008年04月04日 21:43 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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