FC2カウンター FPGAの部屋 2010年08月26日
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでCMOSカメラ・ディスプレイ回路18(DDR2 SDRAMコントローラのバグ)

この前から悩んできた画面のノイズだが、どうやら自作のDDR2 SDRAMコントローラのバグである可能性が大きくなってきた。
問題の部分を捉えたChipScope Proの画面を下に示す。(ちなみにCMOSカメラを基板に実装してからChipScope Proも安定してかけられるようになった)
CamDispCntrler_DDR2_31_100826.png

Xカーソルのddr2_input_address は0x18D84で、Oカーソルのddr2_input_address は0x080ACになっている。Xカーソルの方はCamere ControllerがDDR2 SDRAMに書いた時のアドレスで、Oカーソルの方がVGA Contoroller が非同期FIFOの半分の量をバーストで読み出すアクセスになる。
この際にバンクが異なると、このDDR2 SDRAMコントローラは1バンクのみアクティブにできるので、バンクをプリチャージしてからアクティベートコマンドを入れて、READコマンドを送る必要がある。
ところが、ここでは、1つREADコマンド(ピンクの四角)を入れてから、バンク・プリチャージ(緑の四角)して、それからアクティベート・コマンド、READコマンド(黄色の四角)を入れている。最初のREADコマンドのバンクやROWアドレスが異なるので、異なったアドレスのデータが出ていた。これがバグであるようだ。
下に示すように、バンクが違わない場合は、データに問題はないようだ。ROWアドレスが違う場合もプリチャージが必要だが、この場合は前のCamere ControllerのWriteがChipScope Proでみえていないのでわからない?
CamDispCntrler_DDR2_32_100826.png

これでバグのでる条件はわかったので、次はシミュレーション環境で同じバグが出るかどうかを確かめて、バグが出たらバグを修正する。シミュレーション環境ででないようだったら、モデルを修正したりして、実機の動作をシミュレートできるようにすることが肝心だと思っている。シミュレーション環境でバグが出てHDLを修正するのと、ChipScope Proで信号を見ながらHDLを修正するのでは、デバック効率に雲泥の差があると思っている。
ともかくバグが特定できて?(まだわからないし、複数バグがある可能性もあるが。。。)良かったと思っている。

#やはり検証は大事だと思う。DDR2 SDRAMコントローラを作った頃は意識していなかったが、アサーションを入れておけば良かった。シミュレーションでアサーションエラーが出ていれば、すぐにバグが分かった可能性がある。
  1. 2010年08月26日 05:49 |
  2. 画像処理
  3. | トラックバック:0
  4. | コメント:0