前回、MicroBlaze32ビット・ソフトコア利用のサンプルプロジェクトでの吉例Lチカ動作が成功。超小型のFPGAボードCMOD S7、なかなかいろいろ出来るんでないの、と気を良くしてます。今回はこれまた気になっていたオンボードのADコンバータを使用してみます。12ビット、1Mサンプル毎秒を2チャンネル搭載。
※かえらざるMOS回路 投稿順 INDEX
※Digilent CMOD S7のマニュアルは以下のページにあります。
なお、CMOD S7搭載のFPGAは「多分、お求めやすい」XC7S25-1CSGA225Cです。
※実習には AMD社(Xilinx) Vivado 2023.2 を使用させていただいております。
ADコンバータのExampleプロジェクト
ADコンバータを使ってみる一番の早道は、Digilent社が用意してくれているサンプルプロジェクトを使ってみれば、という感じです。プロジェクトの解説ページが以下に。
Cmod S7-25 Microblaze XADC Demo
上記ページのお名前通り、前回同様MicroBlazeコアを使ったIPブロック設計のサンプルプロジェクトのようです。ただし、前回まではチュートリアルであったので、解説ページを読みながら指示に従って手を動かす必要がありましたが、今回はサンプルプロジェクトなので、完成したプロジェクト・ファイルが用意されてます。それをダウンロードすれば即動作、の筈なのだけれども、お約束通りいろいろあり。
まさかのワークスペース内のお名前バッティング
上記のDigilent社の解説ページはVitis Classicベースです。Vitis Classicを起動しようとすると、今回もVitis UIDEの方を使えよ、という警告あり、でも無視してClassicでやってます。どこかで変えないとならないのか。。。メンドクセー。
解説ページの以下の部分から最新のZIPファイルをダウンロードし、インポートすれば済むはず。
上記にはHWのxprプロジェクトのアーカイブと、SWのアーカイブの2つのリンクがありますが、ADCを動かしてみるだけであれば黄色のマーカを引いてあるCmod-S7-XADC-sw.ide.zipの方をダウンロードすれば良いようです。前回のチートリアルでやった通り、その中にハードウエアのビットストリームファイルも含まれています。HWのxprの方は、ハードウエアの設計の中身を見たり変更したりするためのもののようです。
ここでちょいとフェイントを食らったのが、解説ページの以下の記述です。
何やら *.ide.xipというような記述あり、ZIPの中にそういうお名前のファイルがくるまっているの?と一瞬混乱しましたぜ。しかしそんなものはなく、xip は zipの綴りミスみたいです。ダウンロードしたZIPファイルそのものをVitisで指定して開けば良いです。
さてプロジェクトをインポートしたときにエラーに遭遇。こんな感じ。
今回、当初は、前回のチュートリアル・プロジェクトで使ったのと同じVitisのワークスペースを指定してました。前回のチュートリアル・プロジェクトでは「デフォルトのdesign_1_wrapperというお名前」をそのまま何も考えずに使ってしまってました。今回のExampleの中でも同名のファイルが使われており、それが上記の原因みたいです。仕方がないので、別なワークスペース用のフォルダを掘りなおしてそちらに向けたらすんなりインポートできました。こんな感じ。
お約束のビルドエラー
解説ページを見ると「ビルド成功したら見ないで良い」、つまり失敗したら見てね、の記述がありました。どうもVitisのバージョンによって不成功になる場合があるようです。当方使用しているのは「ほぼほぼ最新」のVitis Classic 2023.2 なのですが、ビルドは失敗しました。こんな感じ。
どうも、リンカのスクリプトが見つからん、ということみたいです。だいたいI:ってドライブどこ? そんなドライブ接続した記憶ないんだが。。。
まあ、解説ページに対処の仕方が書いてあったので淡々とFIXしたらビルドできました。以下のようなプロジェクトの階層構造の中で、.sprjファイルと、.prjファイルの両方で儀式をやらんとならないです。ちょっとメンドイ。
実機でRUN
ビルド出来てしまえば、USB接続したCMOD S7ボードにHW、SWを流し込んで動作させるのは一撃です。なお、今回は以下の2つの準備が必要です。
-
- CMOD S7ボードの32番と33番端子がアナログ入力端子なので、そこに入力テスト用の電圧源(決して5.5Vを超えてはならぬ、超えると壊れるぞ、と。)を接続
- ADCした結果は、USB UART経由でホストに報告されるのでホスト上で仮想端末ソフト(9600bps)を動かしておくこと
1のためには、これまたDigilent製AD2のAWG1と2を接続。2には伝統のTeratermProを使用であります。こんな波形をアナログ端子に印加してみましたぞ。
上記波形を印加しているときにTeratermに報告されてきた電圧が以下に。
なんか、微妙に0.28Vくらい下駄はいてないかい。。。CMOD S7のアナログ入力には「3.3Vを1Vに」するようなアッテネータが入っているみたい。そのせいなのか? それともアナログGNDの接続の問題か? ただExampleが走ったといって喜ぶわけにもいかないみたい。