さて、最初の絵をなんとかしないといけなくて
信号を見ながら確認していると、分かった事は
インプットのクロックとアウトプットのクロックが非同期であると言う事です
同じ66MHzでも、クロックのソースが同じでない場合、それぞれのクロックドメインの信号は同期しないのです。
今となっては、そんな事も知らないのかい、と思うような事も知らなかったです
もしも言ってる事がわからない人は、2つのデバイスで30Hzの同期信号を作り
オシロスコープで二つの信号を計測して見てください(オシロが使える人はこんな事知ってるけどね)
すると片方の信号に対して同じような波形がもう一個できるのですが、その信号がスーっと動いて行きます。
これは、どんなに精度が良いクロックソースであっても、誤差を持つためです
例えばクロックを作る水晶には
50MHz±100ppmなどと書かれています
これは20nsで一周するクロックを提供するけど、100ppmの誤差は勘弁してよ
って意味です
ppmと言うのはPerts Per Millionの頭文字で100万個と言う意味で
100ppmは100万個の中の100個つまり1万分の1の誤差はあると言う意味です
20.002の場合は不具合じゃないよ、19.998の場合は不具合じゃないよ
って事です
さて、非同期だからどうだと言うのかと言うと、あるタイミングで256クロック分のインプット信号が来ると分かっている場合、信号が開始するタイミングでFIFOを256クロック読みに行くと、まだ書き込まれていない場合があります
これを読みに行くと、黒い絵だったり、前のクロックと同じ絵だったりします
不具合の画像が横方向の線をランダムに配置したようになっているのは、64bit単位でのデータは揃っていたらからです