本流FPGA AMD(Xilinx)搭載のDigilent CMOD S7導入。前回は開発ツール付属のVerilogシミュレータを使用。今回はCMOD S7ボードそのものについて調査。それにはアウト・オブ・ボックスと銘打たれたサンプルプロジェクトを開いてみるのが一番良いのでは?ということで既存プロジェクトをOpen。
※かえらざるMOS回路 投稿順 INDEX
CMOD S7の入出力と端子
Digilent CMOD S7のハードウエア構成については以下のページに解説があります。
ボードサイズとしては「48ピンDIPサイズ」です。DIPとしては少し大きめ(48ピンというとZ8000を思い出す年寄です。)しかし端子としては中央部の12端子がなく、36ピンのみ実装されています。中央部の端子を無くしてスペースを確保した部分にFPGA XC7S25-1CSGA225Cが搭載されています。
短辺の片方にJTAG/Serial兼用のUSBソケット、他方にDigilent社規格?のPMODコネクタが実装されています。
36ビン接続されているピンのうち、FPGAのIOピンは32本で、2本はアナログ入力ピン、2本は電源ピンです。
ボード上にはハードウエアのステータスLEDなどを除くと以下のLEDとスイッチが搭載されています。
-
- 単色(緑)のLED4個
- RGBのLED1個
- プッシュスイッチ2個
上記についてはユーザが勝手に使うことが可能です。
アウト・オブ・ボックス・デモ
ボードには購入時「アウト・オブ・ボックス」と銘打ったデモのビットストリームが書き込み済です。上記のLED5個を点滅(RGBについては色を変える)させた上、プッシュスイッチを押すと、USBで接続したホストの仮想シリアル端末(9600ボー、8ビット、ノンパリティ、ストップ1ビット)にどちらのスイッチが押されたか報告するというものです。
このサンプル・プロジェクトを見れば、LEDの点滅だけでなくボードを操作するための基本が全て分かろうというもの。当然、Example projectということでソース等公開されています。解説ページが以下に。
ステップバイステップでOOBデモを再構成してみる
上記ページからプロジェクトファイルをダウンロードすることができ、実際に手元のVivadoでビットストリームを生成して書き込んで動作させることができます。ただ、微妙なところで引っかかったのでその辺を書き留めておきます。
サンプル・プロジェクトをダウンロードして展開後の手順です。
-
- まずはVivadoを起動して Open Projectを選択
-
- XPRファイルを指定
ダウンロードしたファイルを解凍するとOOBデモのサンプルファイルとは異なるファイル名の拡張子.xpr ファイルがでてきてちょっと戸惑いましたが、一つしかないのでそれを指定しました。
-
- 古いバージョン?
当方で使用しているVivadoは最新版でもない2023.2というバージョンなのですが、ダウンロードしたファイルはもっと古いみたいです。どうせZIPファイルに全部保存されているので、バックアプもせず upgradeしてしまいます。
するとさらにディレクトリ構造がなんたらと言ってきたので、これまた良きに計らってくれ、Yesっと。
-
- プロジェクトのファイル構造ができた
この状態で右上のステータスを確認すると以下のようにOut-of-dateとなっていたので、これはビットストリーム・ファイルの再生成必須であろうと。
必要なファイルはそろっているので、前々回と同様以下の手順でビットストリームを作成であります。
-
- Run Synthesis
- Run Implementation
- Generate Bitstream
CMOD S7がUSBで接続されていることを確認し、Program Deviceすればボードにビットストリームが書き込まれました。LEDが煌びやかに点滅しておりますぞ。ここまで問題なしね。
USBシリアル接続の端末でムムっ
ビットストリームファイル自体はUSBでも「JTAG側」で書き込まれているハズですが、それと並列にUSBシリアル接続も使えるようになってます。Windowsのデバイスマネージャをみるとこんな感じ。手元の環境ではCOM14と認識されているみたい。
COM14に伝統のTeratermProを向け、CMOD S7上のプッシュスイッチを押したところが以下に。
どうもLF(ラインフィード)は正常に動作しているのに、CR(キャリッジリターン)であるべき制御コードがあろうことか文字 ‘r’ として伝わってきているみたい。”\n”はちゃんとエスケープ処理されているのに”\r”がCRでなく文字 r になっちゃっている?
そこでUART送信を行っているVerilogソースの以下のところを勝手改変してみました。コメントアウトしているのが元のコードっす。
行末のCRをなくしてLFだけにしてしまいました。まあ行末処理はLFでもCRでもTeratermProはなんでも対応可です。
予定通り変なrは消えたな。でもなんでエスケープできなかったのだろう?要追及じゃね。