本報告までに作成してきたPINE64送信プログラム及びPapilio側での受信プログラムを用いて通信実験を行った。現時点で2度ほど実験を行っているので、順に結果を示す。
1回目の実験時は、Papilio側で通信がすぐに終了し、データがすべて1になるという状況になった。これは、Papilio側でデータの更新タイミングを「SERDESによって送信されてきた100MHzクロック」を用いて行っており、またこのクロック8回分で64bitデータを受信する設計であったことが原因である。PINE側からクロックが出力できず、通信のクロックがずれており、かつPINE側の送信に遅延を入れていたため、データを受け取りすぎたのだ。
この結果を踏まえ、PINE側からの送信開始時のフラグとともに、Papilio側でデータ受信が完了したことを示すフラグをPINE側に返す、ハンドシェイクを用いた方式にした。
修正後の2回目の実験でも、通信が成功しなかった。しかし、この原因はプログラムでなくハード側であると考えられる。実験直前に発覚したミスも含めて、原因は以下のものであると考える。
・先日作成したPINE用シールドのPapilio搭載側のA、Bラインの向きが180度逆であった。A0ピンの位置にA15ピン、B0ピンの位置にB15ピンが接続されていた。設計時に逆に配置してしまったようである。現状SERDESのクロック出力ピンにPINEからのデータ出力ピンがつながっている個所もあるので、修正か再作成を検討中である。
・ハンドシェイク方式に変更した際、データ更新を要求するPapilio側の送信ピンを、SERDESの受信側に接続されているピンから出力していた。実験時は有線であったためあまり問題ではないが、修正が必要である。
・Python側で遅延を一度も入れないプログラムにしていた。データ更新中に下がるはずのフラグを読み込んでいない可能性がある。
・統合実験を急いだため、個別の実験を行わずに実験を行っていた。そのため、現時点で通信失敗の原因がPINE側からの送信速度が速すぎるのか、Papilio側で受信ができていないのかが不明である。
問題点が複数同時に発覚したので、修正には少し時間を要すると考えられるが、ひとつづつ実験を行っていく予定である。