inamasujpのブログ

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をインストールします。

github.com

ここから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チカ回路を作成

qiita.com

この記事がすごくまとまっているので、これ通りに進めました。

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から呼び出す例が載っています。