PYNQ-Z1でカスタムオーバーレイを試す
概要
Digilent社製のFPGA 「PYNQ-Z1」を手に入れました。
このFPGAは基板上にARMプロセッサも搭載しており、このARMにてLinux環境が動作します。そして、これがこのFPGAの最大の特徴ですが、デフォルトでJupyterが立ち上がっており、PythonプログラムでFPGAに回路を書き込むことができます。
そのため、PCで設計した回路をSCP等でARM上のLinuxに送り、そこからJupyterでFPGAに回路書き込み、動作確認まで行えます。とっても便利です。
このARM上のLinuxからFPGAに回路を書き込むことをオーバーレイといい、自分のPCで設計した回路を書き込む、カスタムオーバーレイを試してみます。
PC上にVivadoのインストール
開発環境はWindows 10で行いました。 まず、Vivado 2018.2 WebPackをインストールします。
ここからpynq-z1フォルダをダウンロードし、C:\Xilinx\Vivado\2018.2\data\boards\board_filesにコピーします。
Vivado 2018.2 と Vivado HLS 2018.2のふたつのアプリケーションがインストールされますが、今回はHLSが付いていない方(Vivado 2018.2)を起動します。
New Projectを選択し、ファイルを追加したりはせずにNextを押していき「Default Part」画面まで進めます。
ここで、SelectでBoardsに切り替えるとPYNQ-Z1が項目に出てきます。ない場合はpynq-z1フォルダのコピーが正しくできているかを再確認してください。
Finishを押すとメイン画面が立ちあがります。
Lチカ回路を作成
この記事がすごくまとまっているので、これ通りに進めました。
FPGAへの書き込み
ここからPYNQの特徴を活かし、Jupyterからビットストリームを読み込みます。
Vivado の「File」から「Export」を選択し「ExportHardware」でビットストリームをエクスポートし、「led.bit」といったファイル名で保存します。
次に、ブロックデザインを表示した状態で「File」>「Export」>「Block Design」を選択し、ブロックデザインを「led.tcl」といったファイル名で保存します。
この二つのファイルをPYNQ-Z1にsambaやSCPコマンドで転送します。
Jupyterでノートブックを立ち上げ、
from pynq import Overlay OL = Overlay("led.bit")
と入力すればLEDが高速点滅するのが確認できます。すごい。
ちなみに、
from pynq.overlays.base import BaseOverlay base = BaseOverlay("base.bit")
とすればベースビットストリームを書き込み、PYNQのFPGAをデフォルトに戻すことができます。
参考ブログ
http://todotani.cocolog-nifty.com/blog/2017/01/pynq-z1overlayp.html
Lチカを低レベルな処理で実装しています。勉強になりそう。 ちなみに、ここにOverlayの再読み込み時にはNoteBookをshutdownすべきとなっています。要調査。
http://todotani.cocolog-nifty.com/blog/2017/02/pynq-z1overlayp.html
上のLチカをクラスを用いるプログラムの例が載っています。
http://bekan.hatenablog.com/entry/2017/12/06/195156 にて足し算回路をJupyterから呼び出す例が載っています。