FPGAとシリアル通信しました

先日、Chiselでシリアル通信のループバックモジュールを作成しました。 Chiselでテストしようとしたのですが、1データテストするのに1分くらいかかることがわかりました。 UARTの転送bit数は8bitなので、全部テストするのに、256分くらいかかるということです。

そんな時間かけて、PC使うことは、もったいない気がしたので、FPGAに書いてテストすることにしました。 まずは、例の如くVivadoで手持ちのFPGAボード(Zybo)に書き込みます。 次に、シリアルケーブルをFPGAボードに接続します。

ここで、shellからscreenによるシリアル接続でテストすることはよく考えると難しいので他の方法をとることにしました。 Pythonが使いたい気分だったので、調べてみると、pyserialというライブラリがあることがわかりました。

  • Short introduction — pySerial 3.4 documentation
    • write/readで簡単にシリアル通信可能でした。
    • 注意点はbytesのデータなのでintの変換が必要でした。
    • Writeしている間もFifoにReadデータを保持してくれているみたいで、問題なくループバックが動きました。

使ってみると、少々戸惑った箇所ありましたが、一応テストすることができました。 0-255のデータを使って、完全に一致することが確認できたので、ループバックテストはPassさせることができました。

chisel_uart/test_serial.py at master · moamoai/chisel_uart · GitHub

あとがき

というわけで、シリアル接続はなんとなしに動くことがわかってきました。

ただ、論理が、流用しずらく、非効率なものになっているので、リファクタリングが必要です。 あとは周波数設定対応など使いやすい形にしたいですね。

今回も特にクロック制約など一切設定しないで動作しました笑 いつか破綻することは間違いないので、xdcファイルを学んでいかないとです。