パソコン通信と呼ばれるコミュニティには参加したことがなかったのでXMODEM もほとんど使ったことがない。スマホ時代の人も XMODEM なんぞ使う機会はないだろう。組み込みシステムの世界ではシリアル通信は今でも必要なのでTera Term を使ったことがある人は一定数いるに違いない。そして、Term Termにはちゃんとその機能 XMODEM がある。
プロトコル詳細はウィキペデイアの XMODEMに譲るとして、ここでは polyphony を使用した XMODEM の設計についてフォーカスしよう。
#メモリのシミュレーション
XMODEM を FPGA に導入したいという動機はパソコン通信ではない。画像データなどをメモリへロード、メモリからセーブするのに利用することを想定している。対象相手は最終的には DRAM になるが、現時点では BRAM でシミュレーションすることにしよう。そして、そのシミュレーションも Polyphony で記述する。
x_mem がそのシミュレーションをするモジュールだ。NOP, WRITE, READ の cmd を受け付け BRAM に WRITE なら書きこみREAD なら BRAM から読み出す。実際のデータのやり取りは queue から行う。
#XMODEM 書き込み:QUEUE からメモリへ
xmodem_q2m class は in_q から XMODEM のプロトコルを受け取り、out_q へ返事をする。そして、要求に応じて x_mem へコマンドを送信しデータを"アップロード"する。
さて、ソースはどうしたものか?gist に張り付けておくことにしよう。現時点では BRAM が対象なので実用性はない。近いうちに DRAM に対応することにしよう。
https://gist.github.com/ryos36/62d48e37346048b00f502ce12d29565f
https://gist.github.com/ryos36/cf50b30425a37b49f177fe8a827d37cd
https://gist.github.com/ryos36/cb07a8287a4a14f6532a3a8e29c1ec49