Spartan3A Starter Kit

Spartan3A Starter KitのDDR2 SDRAMコントローラの構想
(Spartan3A Starter KitのDDR2 SDRAMコントローラをどのように実装するかを考えてみた。SD_LOOP_OUT、SD_LOOP_INを使って、やってみたかった分散RAMを使った非同期FIFOでリードデータを受けることにする)
Spartan3A Starter KitのDDR2 SDRAMコントローラの構想2
(前回の”Spartan3A Starter KitのDDR2 SDRAMコントローラの構想”でDDR2 SDRAMコントローラの回路を考察したのだが、回路をVerilogで書いているうちにまずいところを発見し修正した)
Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過3(フロアプランを試す)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過2(DQSからBUFGをまわしたクロック)”で、お任せでインプリメントをしてみたが、遅延がばらついてしまった。そ れで今回はFloorplan Editorでエリア制約を試してみることにした)
Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過4(ロジックセルを固定する)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過3(フロアプランを試す)”でフロアプランのエリア制約をかけてみたところ、IOパッドから分散RAM使用のFIFOの 入り口までのネットの遅延がばらばらという問題があった。これを入り口のロジックセルを狙い撃ちして位置を固定することで遅延の短縮ならびに、平均化を図 ることにした)
Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過5(ロジックセルの固定の微調整)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過4(ロジックセルを固定する)”でロジックセルを固定したが、微妙な遅延差が残った。今回は微妙な遅延差の解消を目指した。最適なフロアプランにできた。)
Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過6(DCMやBUFGの配置)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過5(ロジックセルの固定の微調整)”でデータパスの遅延調整は終了したので、今度はクロックパスの遅延を調整した)
Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュールのシミュレーション1
(Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュールができあがったので、シミュレーションをしてみた。その結果まだ、おかしい。ddr2_dqが最初から0000を出力してしまっている。これはZZZZのはず。。。)
Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュールのシミュレーション2
(不具合はIOBUFのトライステート条件を入力するT入力の論理を間違えていたからだった。やはりCoregenで生成したFIFOではフリーランクロックでないと駄目のようだ)
Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュールのシミュレーション3
(CoreGenで作った非同期FIFOが使用にマッチしないので、”同期FIFOと非同期FIFO”で自作した非同期FIFOで再チャレンジした)
Spartan3A Starter KitのDDR2 SDRAMコントローラのインプリメント(再度インプリ)
(自作の非同期FIFOを使用したので、再度インプリメントした。その結果、インバータを入れるソースファイルの階層によって、インプリメント結果が異なることが分かった)
Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュール公開
(Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュールを公開した。ここからダウンロードできます。ただし、本当のIOpバッドや非同期FIFOの素子の配置を確認 するためのプロジェクトです。制御用のステートマシンなどはこれからです)

Spartan3A Starter KitのDDR2 SDRAMコントローラの再開
(前 回、”Spartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュール公開”でSpartan3A Starter KitのDDR2 SDRAMコントローラIOテストモジュール公開をして止まっていたSpartan3A Starter KitのDDR2 SDRAMコントローラだが、今回テスト出来きるまで作り上げることにした。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション1
(”Spartan3A Starter KitのDDR2 SDRAMコントローラの再開”で、また作り始めたSpartan3A Starter KitのDDR2 SDRAMコントローラだが、だいぶデバックが進んできた。DQSもDQも正常な動作になって、書き込みも読みだしもできるようになった。Write、 Readのシミュレーション波形を表示)
Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション2(DMの機能検証)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション1”でDQとDQSの動作はOKになったので、今度はDMの動作のバグを取ることにする。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション3(リードデータのバグフィックス
”Spartan3A Starter KitのDDR2 (SDRAMコントローラのシミュレーション2(DMの機能検証)”でリードした時の出力データが正しくないという課題があったが、バグをフィックスして正常に出力されるようになった。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション4(バースト転送テスト)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラのシミュレーション3(リードデータのバグフィックス)”でリードした時の出力データも正常になったので、今度はバースト転送テストのシミュレーションをしてみることにした。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのインプリメント(準備編)
(UCF にDDR2 SDRAMのアドレスや制御信号を加えてUCFを完成させる。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのインプリメント2(弱音を吐く編)
(Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのインプメントをしているのだが、Virtex-4と違ってSpartan-3Aだと200MHz動作、DDR2 -400は厳しいみたい。クリティカルパスをとりあえずFFでぶった切ってきたのだけれど、そろそろモグラたたきになってしまったようだ(こっちをケアし ても、あっちがだめ)。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのその後
(Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストの2度目のシミュレーションを行った。
やはり、FFでクリティカルパスを切ったので、全体的にタイミングがずれていて、DQに出すデータやマスクを再度FFでラッチする必要があった。いろいろなタイミング関係を調整して、やっとバースト転送テストで正常に動作するようになった。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのインプメントをPlanAheadでフロアプラン
(Spartan3A Starter KitのDDR2 SDRAMコントローラのインプメントをPlanAheadでフロアプランしてみることにした。インプリメント後の配置をPlanAheadでいじるのではなく、配置配線前にエリア制約をかけてみることにした。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのインプリメント3(DDR2-300がOK)
(さて、Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのインプリメントはDDR2-300に目標を変更してインプリメントを行っている。
これでインプリメントは終了したので、実機で動かしてみることにする。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのその後2
(前回、うまくインプリメントが出来た!!と思ったSpartan3A Starter KitのDDR2 SDRAMコントローラだが、動作しなかった。がっくり。。。
よく調べてみると、Spartan3A Starter Kitの水晶発振器って50MHz!!100MHzと思ってやっていた。ということで入力周波数を50MHzに変更。良しこれで、と思ってもやはりだめ。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのデバック
(ChipScope Pro 11.1を使ってSpartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのデバックをしている。
だいぶ原因が分かってきた。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのデバック2(sd_loop_outの処理)
(”Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのデバック”でsd_loop_inを前に1クロック前に伸ばすという結論になった。sd_loop_inを前に 1クロック前に伸ばすには、sd_loop_outを1クロック前に伸ばす必要がある。(結局、sd_loop_outのタイミングはそのままとしまし た)その前に、そういえばsd_loop_outのケアを忘れていたことに気がついた。はたしてsd_loop_outはどのようにインプリメントされて いるの調べるということでFPGA Editorを立ち上げて調べてみた。
1時間バーストテストを行ったが結局エラーは出なかった。これでSpartan3A Starter KitのDDR2-300 SDRAMコントローラは完成とする!!!)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのプロジェクト
(Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのプロジェクトを置いておくので、興味のある方はダウンロードしてください。)
Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのインプリメントエラー
(”Spartan3A Starter KitのDDR2 SDRAMコントローラのバーストテストのプロジェクト”で公開したSpartan3A Starter Kit のDDR2コントローラのバーストテストのプロジェクトをもう一度コンパイルしてみた。ChipScope Proが期限切れだったので、Removeしてインプリメントした。そうしたらPlace & Route でエラーとなってしまった。DCMの位置を固定したらインプリメントすることができた)
Spartan-3A Stater Kitを使用し、MIGでDDR2-SDRAMを制御
Spartan-3A Stater Kitを使用し、ISE12.1のMIGでDDR2-SDRAMを制御しようと思って、試しにやってみた。

inserted by FC2 system