話題の FPGA ボード、PYNQ を入手しました

(更新

Obtained a PYNQ-Z1 FPGA board which runs Python.

突然ですが、流行りモノには目のない私は、PYNQ-Z1 という FPGA ボードを入手しました。先日の Digi-Key 社のニュースレターで紹介されていたので、御覧になった方も多いかも知れませんね。(余談ですが、Digi-Key 社のニュースレターは同業他社のものに比べて参考になり、面白い製品紹介が多いです。)

PYNQ の公式サイトは、こちらです。

私もまだよく理解していないのですが、ざっくり言うと、HDL(ハードウェア記述言語)の深い理解を持たなくても、Python を使って FPGA の能力を生かした設計(高速な画像信号処理、機械学習など)のできる開発環境、ということのようです。

加筆(2019/5/21): OpenCV のハードウェアアクセラレーションには PYNQ-ComputerVision という追加パッケージが必要のようですが、現状、PYNQ-Z1 用のカスタムオーバーレイをビルドする方法が説明されていません。すぐにいろいろなハードウェアアクセラレーションを試してみたい方は、Ultra96 と呼ばれるボードのほうが良いかも知れません。

話は少しそれますが、PYNQ 上で(つまり Zynq 上で)、噂(?)の RISC-V を動かす、というサンプルプロジェクトがありました。FPGA 上で RISC-V(フリーでオープンな RISC 命令セットアーキテクチャ)を合成するというのはよくあるネタだと思いますが、PYNQ を買うとこれも実験できる、ということで、私のようなプロセッサマニアの方には、面白いオモチャ、もとい必携ガジェットだと思います。

さて。PYNQ-Z1 は、やや高価な製品(Digilent の公式サイトでは、US$ 199)ということもあり、ちゃんと動くか心配で(小心者)、とりあえず動かしてみようと思いました。が、なんと micro SD カードが必要ということで、火入れ(burn-in)が一日延びてしまいました。8GB 以上のカードで良いということですが、32GB のカードを入手しテストしてみました。無事に Jupyter Notebook の画面が見られました。良かった!(あ、写真撮り忘れた)

ところで、「え、Python でしか遊べないの?  Verilog や HLS(高位合成)ツールを使う勉強もしてみたいんだけど」と思われる方もあるかと思います。私もそう思ったのですが、どうもちゃんとサポートされているようです。オンラインワークショップも各種用意されていました。これで安心して購入できますね!

本題に入ります。PYNQ 本家サイトには、最初の立ち上げ(Getting Started)に関して、詳細な初心者向け説明があるのですが、Linux や Raspberry Pi が分かる人にはやや冗長と思われますので、以下にかいつまんで、まとめておきたいと思います。言い忘れましたが、搭載されている Xilinx Zynq XC7Z020という FPGA には 650MHz のデュアルコア ARM Cortex-A9 プロセッサが載っているので、FPGA 上にマイコンを論理合成しなくても、Raspberry Pi と同様に Linux が動いてしまう訳ですね。

Getting Started 要約(ツボ)

  • micro SD カードに焼くイメージは、Xilinx 社のサイトからダウンロードできる。
  • Raspberry Pi と同様に、dd コマンドなどでイメージを書き込む。
  • ボード上のスイッチを適切に設定すると、micro USB コネクタから電源を供給できる。
  • 同じ USB ポートを使って、2つの仮想シリアルポートが見えるようになる。(よく調べてないが、一つは診断メッセージ用かな。もう一つは login コンソール)
  • 電源を入れると Linux が起動するので、Ethernet コネクタを LAN(インターネット)に繋いでおく。DHCP でアドレスを取りに行く。DHCP が動いてない場合は、決まった静的アドレスが割り当てられる。
  • HTTP サーバーが動いていて、上記アドレスのポート 80 に HTTP アクセスすると、Jupyter Notebook にアクセスできる。そこから各種デモコードなどが実行できる。
  • SSH サーバーや SMB サーバーが動いているので、ログインしたりファイルアクセスしたりできる。ユーザー名: xilinx、パスワード: xilinx。

繰り返しになりますが、こちらの Digi-Key さんの記事(サーベイ)は非常に参考になります。御一読をお勧めします。

とりあえず、そんなところです。今日はここまで。

後記(2019/5/22)

PYNQ-Z1 の HDMI 入力端子ですが、接続するデバイス(映像出力ソース)の種類をかなり選ぶようです。

参考: No HDMI input handshake · Issue #475 · Xilinx/PYNQ

Linux が動いているので USB ウェブカムは使えるらしいのですが、MIPI 等のカメラ(Raspberry Pi のカメラモジュールみたいなやつ)を繋げないか、調べています。(PYNQ ではないですが、Arty S7 に繋いでいる方はあるようです。)

参考: Creating an FPGA-Based Low-Cost Imaging System – Hackster.io