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

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でみえていないのでわからない?

これでバグのでる条件はわかったので、次はシミュレーション環境で同じバグが出るかどうかを確かめて、バグが出たらバグを修正する。シミュレーション環境ででないようだったら、モデルを修正したりして、実機の動作をシミュレートできるようにすることが肝心だと思っている。シミュレーション環境でバグが出てHDLを修正するのと、ChipScope Proで信号を見ながらHDLを修正するのでは、デバック効率に雲泥の差があると思っている。
ともかくバグが特定できて?(まだわからないし、複数バグがある可能性もあるが。。。)良かったと思っている。
#やはり検証は大事だと思う。DDR2 SDRAMコントローラを作った頃は意識していなかったが、アサーションを入れておけば良かった。シミュレーションでアサーションエラーが出ていれば、すぐにバグが分かった可能性がある。
- 2010年08月26日 05:49 |
- 画像処理
-
| トラックバック:0
-
| コメント:0