黒い点も解消

FIFOの部分もこの投稿で終わりにしたいと思います

 

風に揺らぐのれんの様な不具合を直すと、絵はすっきりと表示されました。

この時は更に感動しましたが、それでももうひとつ不可解な不具合が残っていました。

FIFOの不具合(俺の不具合ですけどね)で最後に残ったのは

黒い妙な点でした。

f:id:info-akiron-com:20201125224118g:plain

黒ドット画像

基本的には綺麗に表示されているのですが、画面中に百個くらいの点が

規則性なくバラバラと表示されるのです。

まだまだアマチュアだった私は「見なかったことにしよう」かと思いましたが

流石にそういうわけにもいかず、原因を調査しました。

まず、よく見るとこの黒い点は点ではなく短い横棒でした

つまり、センサーの中でピクセル単位で起きている現象ではなく、これもデータを転送する過程で、ロジックの不具合により発生している現象でした。

とても不可解だったのは、画像の縦横が揃っていたという事です。

それのどこが不可解なのかと言うと、不具合になる点があるにも関わらずデータの総量は正しいという事です

 

元々予定した信号は、有効信号に対してデータが同期しているもの でした

f:id:info-akiron-com:20201125085739p:plain

期待していた信号

 

黒い点のエラーが発生する場合、それに押し出されて画素がずれるのではないか?と思いました。

f:id:info-akiron-com:20201125085812p:plain

エラーを予測していたケース

しかし実際には、該当する部分の画素がすっぽり抜けてしまっていたのです

f:id:info-akiron-com:20201125085839p:plain

実際のエラー

 

この理由は、ちょっと変わったFIFOにありました

この時使っていたFIFOは、データを読み出す指示を出した最初の一クロックを無視します、更に、2クロック目のreadが発生してから1クロック遅れてデータが発生しています。

また、read=outputではなく、read=アドレスの進行なので、readによってデータ(D0)が読まれてもenableが出ていないと、このデータは有効にはなりません

つまりこれが黒ドットだったと言うわけです

f:id:info-akiron-com:20201126082716p:plain

なぜreadしたにもかかわらず、enableは別に存在するかと言うと

これは、このFIFOFPGAの外にある事に起因するのだと思います

例えばFIFOが複数存在している場合、outputのバスを共有にしたいケースがあるとします、FIFO1が出力をしている間に、FIFO2,FIFO3は読み進めて一部のデータを捨てたいとします、その時にFIFOのoutputが競合しない様にするなどの使い方が考えられます

f:id:info-akiron-com:20201128114058g:plain

FIFO read, enable

 

結果として、readとenableのタイミングが合っていない事がわかり、ここまで修正すると、おかしな点のない絵が出る様になりました。

やれやれでしたが、一切不具合なく、センサの出力をはっきり出せる様になった時も、気持ちは感慨深いものがありました。