シリアルポートを用いた通信
安価なFPGAボードでは、デジタル回路とPC間でデータをやり取りするために、低速なシリアルポートを搭載している場合がある。 例えば、Digilent社製Nexys4 DDRではUSBケーブルを介したシリアルポート通信(UART)が可能である。
シリアルポート通信のためのVerilogコード
http://www.fpga4fun.com/SerialInterface.html に詳しい解説がある。 このサイトからVerilogコード(async.zip)もダウンロードできる。 ファイルの中で、使用するクロックの周波数(ClkFrequency)とボーレート(BaudRate)を必要に応じて変更すればすぐに動く。
シリアル通信のためのソフトウェア
様々な言語で書くことができるが、pyserialが簡単である。 testcom.pyに文字列、または16 bitデータをやりとりするプログラムの例を載せてある。 1バイト送信する度に100 usくらい待ってから次のバイトを送るようにした方がよさそうである。
使い方
- FPGAにasync.zipにあるasync_transmitter, async_receiverという2つのモジュールを組み込む。
- WE=RV, WD=RDとすれば、単純にPCから受け取ったデータをそのまま返すことが可能である。
- FPGAにコードを書き込んだら、/dev/ttyUSB1などのデバイスファイルでアクセス可能となる。
- デフォルトではroot権限が必要なので、"sudo chmod 766 /dev/ttyUSB1"を実行して誰でもアクセスできるようにする必要がある。
- これで上のtestcom.pyを使って通信できる。