LoginSignup
4
1

More than 3 years have passed since last update.

普通の工業大学生がUltra96 V1を使ってPYNQ Overlay Tutorialをしてみた

Last updated at Posted at 2020-05-06

※M2です.(PYNQは)初心者です.
※この手の記事は山程あって今更感もありますが,毎回やり方を忘れるので,メモ用として残します.
※PYNQ自体の解説記事ではありません.実装内容自体は↓の"Developing Single IP"と同じです.
PYNQ Overlay Tutorial: https://pynq.readthedocs.io/en/v2.5.1/overlay_design_methodology/overlay_tutorial.html
※PYNQの使い方というより,Vivadoの使い方の記事になってしまいました.
※工業大学生です.文章力に期待をしてはいけません.

はじめに

以下の状態を満たした状態で始めることとします.

  • Ultra96 V1上で,PYNQのjupyter-notebookを起動できる.
  • Vivado HLS,Vivadoがインストール済み&使用できる.

今回の記事では,Vivadoは2018.3のバージョンのものを用いました.

最終目標は,PYNQ Overlay Tutorialのadd関数をUltra96 V1上で動かせるようにすることです.

Vivado HLSを用いてIPコアを作成

PYNQ Overlay Tutorialに沿って,2つの整数を加算するIPコアを作成します.
Vivado HLSを起動して新しいプロジェクトを作成し,Partsは"xczu3eg-sbva484-1-e"を指定します.

新しいファイルをsourceに追加し,PYNQ Overlay Tutorialのadd関数をコピペしておきます.このadd関数をトップ関数に指定し,C Synthesisで合成をかけます.
vivado1.png
合成が完了したら,Export RTLでIPコアを作成します.

Vivadoを用いてbit streamを作成

Vivadoを起動したら,新しいプロジェクト(RLT Project)を作成し,BoardはUltra96 V1を指定します.

IPコアをプロジェクトに追加する

前の工程で作成したIPコアをこのプロジェクトに追加できるように設定します.
Tools→Settingsを選択し,Project SettingsからIP→Repositoryを選択します."+"ボタンを押して,出てきたディレクトリ選択画面の中から,先程作成したVivado HLSプロジェクトの中の"solution1/impl/ip"を選択します.

上手くいくと,以下のようにIPコアが追加されます.
vivado1.png

Block Designを作成する

IP INTEGRAGERのCreate Block Designを選択します.
Diagramの中のadd IP("+"ボタン)を選択し,先程追加したIPコアを指定します.
vivado2.png

同様にして,Zynq UltraScale+ MPSoCも追加します.
vivado3.png

以上の操作が完了したら,Run Block Automation → Run Connection Automationを選択し,配線をしてもらいます.
vivado4.png

配線が完了したら,保存してBlock Designを閉じます.

Bitstreamを生成する

Sources→Design Sourcesで先程,作成したブロックデザインを右クリックし,Create HDL Wrapperを選択します.
vivado5.png

Wrapperができたら,Generate Bitstreamを選択して完了です.

Ultra96上でOverlayを動かす

<Vivado プロジェクト>.src/sources_1/bd/design1/hw_handoff/design_1/design_1.hwh
<Vivado プロジェクト>.src/sources_1/bd/design1/hw_handoff/design_1/design_1_bd.tcl
<Vivado プロジェクト>.runs/impl_1/design_1_wrapper.bit
の3つのファイルを,まとめてUltra96上の同一ディレクトリ内にコピーしておきます.
これら3つのファイルは念の為,すべて同じ名前(ここでは,design_1.*)にしておきます.

あとはPYNQ Overlay Tutorialに沿って,overlayを動かしていきます.

from pynq import Overlay

overlay = Overlay('/home/xilinx/design_1.bit')
add_ip = overlay.add_0

add_ip.write(0x10, 4)
add_ip.write(0x18, 5)
add_ip.read(0x20)

動きました.

jupyter.png

感想

Tutorialって行間が広すぎて生きて帰ってくるのが大変ですね.

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1