Soumettre la recherche
Mettre en ligne
Pynq祭り資料
•
6 j'aime
•
4,726 vues
一
一路 川染
Suivre
PYNQ祭り(2017年3月4日)で使ったスライド(2017年3月21日改版)
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 41
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
ryos36
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
marsee101
PYNQ祭りLT todotani
PYNQ祭りLT todotani
Kenshi Kamiya
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
Takep lpc1114-190614
Takep lpc1114-190614
たけおか しょうぞう
Riscv+fpga200606
Riscv+fpga200606
たけおか しょうぞう
FPGAスタートアップ資料
FPGAスタートアップ資料
marsee101
Recommandé
PYNQ 祭り: Pmod のプログラミング
PYNQ 祭り: Pmod のプログラミング
ryos36
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
marsee101
PYNQ祭りLT todotani
PYNQ祭りLT todotani
Kenshi Kamiya
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
Takep lpc1114-190614
Takep lpc1114-190614
たけおか しょうぞう
Riscv+fpga200606
Riscv+fpga200606
たけおか しょうぞう
FPGAスタートアップ資料
FPGAスタートアップ資料
marsee101
FPGAX6_hayashi
FPGAX6_hayashi
愛美 林
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
marsee101
20140310 fpgax
20140310 fpgax
funadasatoshi
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
Kei Nakazawa
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
なおき きしだ
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
marsee101
FPGAって、何?
FPGAって、何?
Toyohiko Komatsu
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
Analog Devices の IP コアを使う
Analog Devices の IP コアを使う
ryos36
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
2017年のFPGA Community活動について
2017年のFPGA Community活動について
Mr. Vengineer
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
Linux : PSCI
Linux : PSCI
Mr. Vengineer
PYNQ祭り
PYNQ祭り
Mr. Vengineer
FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器
I_HaL
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
Shinya Takamaeda-Y
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
Shinya Takamaeda-Y
Gpu vs fpga
Gpu vs fpga
Yukitaka Takemura
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
Shinya Takamaeda-Y
FPGA startup 第一回 LT
FPGA startup 第一回 LT
Yamato Kazuhiro
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
Spark Summit
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
Insight Technology, Inc.
Contenu connexe
Tendances
FPGAX6_hayashi
FPGAX6_hayashi
愛美 林
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
marsee101
20140310 fpgax
20140310 fpgax
funadasatoshi
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
Kei Nakazawa
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
なおき きしだ
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
marsee101
FPGAって、何?
FPGAって、何?
Toyohiko Komatsu
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
Analog Devices の IP コアを使う
Analog Devices の IP コアを使う
ryos36
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
2017年のFPGA Community活動について
2017年のFPGA Community活動について
Mr. Vengineer
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
Linux : PSCI
Linux : PSCI
Mr. Vengineer
PYNQ祭り
PYNQ祭り
Mr. Vengineer
FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器
I_HaL
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
Shinya Takamaeda-Y
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
Shinya Takamaeda-Y
Gpu vs fpga
Gpu vs fpga
Yukitaka Takemura
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
Shinya Takamaeda-Y
FPGA startup 第一回 LT
FPGA startup 第一回 LT
Yamato Kazuhiro
Tendances
(20)
FPGAX6_hayashi
FPGAX6_hayashi
高位合成ツールVivado hlsのopen cv対応
高位合成ツールVivado hlsのopen cv対応
20140310 fpgax
20140310 fpgax
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
FPGAって、何?
FPGAって、何?
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Analog Devices の IP コアを使う
Analog Devices の IP コアを使う
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
2017年のFPGA Community活動について
2017年のFPGA Community活動について
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
Linux : PSCI
Linux : PSCI
PYNQ祭り
PYNQ祭り
FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器
Zynq+PyCoRAM(+Debian)入門
Zynq+PyCoRAM(+Debian)入門
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
Gpu vs fpga
Gpu vs fpga
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
FPGA startup 第一回 LT
FPGA startup 第一回 LT
En vedette
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
Spark Summit
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
Insight Technology, Inc.
PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)
Kenta IDA
Presto in my_use_case
Presto in my_use_case
wyukawa
PYNQで○○してみた!
PYNQで○○してみた!
aster_ism
20171012 found IT #9 PySparkの勘所
20171012 found IT #9 PySparkの勘所
Ryuji Tamagawa
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
Ryuji Tamagawa
20170210 sapporotechbar7
20170210 sapporotechbar7
Ryuji Tamagawa
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめ
Takeshi HASEGAWA
En vedette
(9)
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
PYNQ単体でUIを表示してみる(PYNQまつり)
PYNQ単体でUIを表示してみる(PYNQまつり)
Presto in my_use_case
Presto in my_use_case
PYNQで○○してみた!
PYNQで○○してみた!
20171012 found IT #9 PySparkの勘所
20171012 found IT #9 PySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
20170210 sapporotechbar7
20170210 sapporotechbar7
コンピュータエンジニアへのFPGAのすすめ
コンピュータエンジニアへのFPGAのすすめ
Similaire à Pynq祭り資料
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃう
ksk sue
How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Takanori Suzuki
Python physicalcomputing
Python physicalcomputing
Noboru Irieda
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
ryos36
210728 mpy
210728 mpy
Takuya Nishimoto
IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
Takayuki Shimizukawa
スタート低レイヤー #0
スタート低レイヤー #0
Kiwamu Okabe
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
Inside winnyp
Inside winnyp
FFRI, Inc.
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Kazuki Onishi
Pdp11 on-fpga
Pdp11 on-fpga
magoroku Yamamoto
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
Shinya Takamaeda-Y
C83 λカ娘の販促にやってきました
C83 λカ娘の販促にやってきました
Kiwamu Okabe
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
fuzzysphere
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
Yuya Rin
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
Kenta IDA
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)
Similaire à Pynq祭り資料
(20)
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃう
How to run P4 BMv2
How to run P4 BMv2
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Python physicalcomputing
Python physicalcomputing
Polyphony: Python ではじめる FPGA
Polyphony: Python ではじめる FPGA
210728 mpy
210728 mpy
IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
スタート低レイヤー #0
スタート低レイヤー #0
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
Inside winnyp
Inside winnyp
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
Pdp11 on-fpga
Pdp11 on-fpga
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
C83 λカ娘の販促にやってきました
C83 λカ娘の販促にやってきました
Wrapping a C++ library with Cython
Wrapping a C++ library with Cython
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Pynq祭り資料
1.
1 @ikwzmPYNQ 祭り(2017/3/4) Python
で FPGA プログラミング PYNQ 祭り 2017 年 3 月 4 日 @ikwzm
2.
2 @ikwzmPYNQ 祭り(2017/3/4) 自己紹介みたいなもの ・ハンドルネーム
ikwzm ・現在隠居中 ・52 才(けっこう年) ・主に論理回路設計(回路図~VHDL) ・たまにプログラム(アセンブラ~C/Ruby) ・Python 歴 1 ヶ月
3.
3 @ikwzmPYNQ 祭り(2017/3/4) Python
で FPGA プログラミング?
4.
4 @ikwzmPYNQ 祭り(2017/3/4) PYNQ
(Python Productivity for Zynq) とは ・ PYNQ = Python + Zynq ・ Zynq = PS(Processing System) + PL(Programmable Logic) ・ PL は HDL or Vivado-HLS で記述。 ・ PL を PS で制御。 この制御を Python で記述。 ・ Python で PL をプログラミングするわけじゃない
5.
5 @ikwzmPYNQ 祭り(2017/3/4) Python
で FPGA プログラミング 本当に する話
6.
6 @ikwzmPYNQ 祭り(2017/3/4) 目次 ・
Polyphony の紹介 ・ Polyphony での記述例(fibonacci)とインターフェース ・ MessagePack-RPC Server on FPGA-SoC-Linux ・ Design Flow ・ PYNQ-Z1 での動作 ・ 課題
7.
7 @ikwzmPYNQ 祭り(2017/3/4) Polyphony
(本日の主役) の紹介(1) ・ Python ベースの高位合成コンパイラ ・ 作っているのは 有限会社シンビー http://www.sinby.com/PolyPhony/index.html ・ github でも公開中 https://github.com/ktok07b6/polyphony ・ 高位合成友の会 第3回(2015/12/08) でのスライド https://www.slideshare.net/ktok07b6/3-polyphony
8.
8 @ikwzmPYNQ 祭り(2017/3/4) Polyphony
の紹介(2) Polyphony はこんなツール(になる予定) - 高位合成友の会 第3回(2015/12/08)のスライドより抜粋 - ・ 特徴 ・ Python で書いたコードを Verilog-HDL に変換するための コンパイラ ・ コードは Python インタープリタで動く普通の Python のコード ・ 特殊なクラスや言語拡張は基本的になし ・ ただし、 使える言語要素に制限有り ・ オープンソース
9.
9 @ikwzmPYNQ 祭り(2017/3/4) Polyphony
の紹介(3) Polyphony はこんなツール(になる予定) - 高位合成友の会 第3回(2015/12/08)のスライドより抜粋 - ・ 得意なこと ・ 抽象度の高い処理記述 ・ ソフトウェアのハードウェア化 ・ 動くものを早く作る ・ 出来ないこと、 苦手なこと ・ クロック単位のタイミング制御 ・ ハードウェアの制御 ・ 性能の追求
10.
10 @ikwzmPYNQ 祭り(2017/3/4) 良い悪い Polyphony
の紹介(4) ハードウェア記述言語の生産性と性能 - 高位合成友の会 第3回(2015/12/08)のスライドより抜粋 - 生 産 性 高 低 性能 (速度,リソース...) 高位合成処理系 VHDL Verilog-HDL 夢の 処理系 Polyphony (目標) ・言語機能の充実 ・コードの再利用 ・最適化性能アップ ・バックエンドライブラリの充実 いまここ! (2015/12 月時
11.
11 @ikwzmPYNQ 祭り(2017/3/4) Polyphony
での記述例 - fib.py - from polyphony import testbench def fib(n): if n <= 0: return 0 if n == 1: return 1 r0 = 0 r1 = 1 for i in range(n-1): prev_r1 = r1 r1 = r0 + r1 r0 = prev_r1 return r1 @testbench def test(): expect = [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610] for i in range(len(expect)): result = fib(i) assert expect[i] == result print(i, "=>", result) test() shell$ python3 fib.py 0 => 0 1 => 1 2 => 1 3 => 2 4 => 3 5 => 5 6 => 8 7 => 13 8 => 21 9 => 34 10 => 55 11 => 89 12 => 144 13 => 233 14 => 377 15 => 610 shell$ fib.py
12.
12 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v Polyphony
で fib.py を高位合成 shell$ polyphony fib.py shell$ 一見何も起きないようだが shell$ ls -1 fib.py polyphony_out.v polyphony_out_fib.v polyphony_out_test.v shell$ なんかファイルが出来てる python3 polyphony polyphony_out_ fib.v 高位合成した回路 fib.py シミュレーション用の テストベンチ Vivado Behv Sim
13.
13 @ikwzmPYNQ 祭り(2017/3/4) Vivado
で Behavioral Simulation
14.
14 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_fib.v
の Interface(1) module fib ( input wire clk, input wire rst, input wire fib_ready, input wire fib_accept, output reg fib_valid, input wire signed [31:0] fib_in_n, output reg signed [31:0] fib_out_0 ); //localparams localparam fib_b1_INIT = 0; localparam fib_b1_S1 = 1; localparam fib_ifthen3_S0 = 2; localparam fib_ifelse4_S1 = 3; localparam fib_ifthen6_S0 = 4; localparam fib_ifelse7_S0 = 5; : (中略) : endmodule polyphony_out_fib.v clk rst fib_ready fib_in_n fib_valid fib_out_0 fib_accept fib
15.
15 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_fib.v
の Interface(2) clk rst fib_ready fib_in_n fib_valid fib_out_0 fib_accept n return fib
16.
16 @ikwzmPYNQ 祭り(2017/3/4) fib
を PS(Processing System)から使うには? clk rst fib_ready fib_in_n fib_valid fib_out_0 fib_accept def test(): for i in range(8): result = fib(i) print(i, "=>", result) test() fib_test.py shell$ python3 fib_test.py 0 => 0 1 => 1 2 => 1 3 => 2 4 => 3 5 => 5 6 => 8 7 => 13 shell$ ? fib
17.
17 @ikwzmPYNQ 祭り(2017/3/4) MessagePack-RPC
(Remote Procedure Call) import msgpackrpc cli = msgpackrpc.Client( msgpackrpc.Address( 'localhost',18800)) def fib(n): return cli.call('fib', n) def test(): for i in range(5): result = fib(i) print(i, "=>", result) test() fib_client.py fib_server.py import msgpackrpc class FibServer(object): def fib(self, n): if n <= 0: return 0 if n == 1: return 1 r0 = 0 r1 = 1 for i in range(n-1): prev_r1 = r1 r1 = r0 + r1 r0 = prev_r1 return r1 svr=msgpackrpc.Server(FibServer()) svr.listen(msgpackrpc.Address( 'localhost',18800)) svr.start()shell$ python3 fib_client.py 0 => 0 1 => 1 2 => 1 3 => 2 4 => 3 shell$ shell$ python3 fib_server.py & shell$ 94 00 05 A366 69 62 91 03 [ 0, 5, "fib", [ 3 ] ] 94 01 05 C0 02 [ 1, 5, nil, 2 ] Request Message Response Message
18.
18 @ikwzmPYNQ 祭り(2017/3/4) MessagePack-RPC
Server on FPGA-SoC-Linux(1) PTTY_AXI Fib_Interface fib Fib_Server fib_ready fib_in_n fib_valid fib_out_0 fib_accept ZPTTY.ko socat fib_client.py FPGA Manager Clk/Reset /dev /fpga0 /dev /fpgaclk0 /dev/zptty0 network interface from polyphony import testbench def fib(n): if n <= 0: return 0 if n == 1: return 1 r0 = 0 r1 = 1 for i in range(n-1): prev_r1 = r1 r1 = r0 + r1 r0 = prev_r1 return r1 fib.py polyphony_out_ fib.v polyphony Device Tree Overlay /config /device- tree PS(Processing System) PL(Programmable Logic)
19.
19 @ikwzmPYNQ 祭り(2017/3/4) MessagePack-RPC
Server on FPGA-SoC-Linux(2) import msgpackrpc cli = msgpackrpc.Client( msgpackrpc.Address( 'localhost',54321)) def fib(n): return cli.call('fib', n) def test(): for i in range(5): result = fib(i) print(i, "=>", result) test() fib_client.py PTTY_AXI Fib_Interface fib Fib_Server fib_ready fib_in_n fib_valid fib_out_0 fib_accept ZPTTY.ko socat fib_client.py FPGA Manager Clk/Reset /dev /fpga0 /dev /fpgaclk0 /dev/zptty0 network interface Device Tree Overlay /config /device- tree PS(Processing System) PL(Programmable Logic)
20.
20 @ikwzmPYNQ 祭り(2017/3/4) MessagePack-RPC
Server on FPGA-SoC-Linux(3) PTTY_AXI Fib_Interface fib Fib_Server fib_ready fib_in_n fib_valid fib_out_0 fib_accept ZPTTY.ko socat fib_client.py FPGA Manager Clk/Reset /dev /fpga0 /dev /fpgaclk0 /dev/zptty0 network interface Device Tree Overlay /config /device- tree PS(Processing System) PL(Programmable Logic) 94 00 05 A3 66 69 62 91 03 [ 0, 5, "fib", [ 3 ] ] Request Message を生成 3 2 Fib_Interface が Request Message を unpack して fib のインターフェース信号に変換
21.
21 @ikwzmPYNQ 祭り(2017/3/4) MessagePack-RPC
Server on FPGA-SoC-Linux(4) PTTY_AXI Fib_Interface fib Fib_Server fib_ready fib_in_n fib_valid fib_out_0 fib_accept ZPTTY.ko socat fib_client.py FPGA Manager Clk/Reset /dev /fpga0 /dev /fpgaclk0 /dev/zptty0 network interface Device Tree Overlay /config /device- tree PS(Processing System) PL(Programmable Logic) 94 01 05 C0 02 [ 1, 5, nil, 2 ] Response Message Fib_Interface が fib からのリタ ーン値を Response Message に pack 3 2
22.
22 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v Design
Flow python3 polyphony polyphony_out_ fib.v fib.py Vivado Behv Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) Vivado IP Integrator Synthesis Implementation design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager vhdl- archiver.rb
23.
23 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v msgpack-if-gen python3 polyphony polyphony_out_ fib.v fib.py Vivado Behv
Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) Vivado IP Integrator Synthesis Implementation design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager fib.yml --- name: fib generate : interface: {name: Fib_Interface, file: Fib_Interface.vhd} server: {name: Fib_Server , file: Fib_Server.vhd } port: {clock: clk, reset: rst, clear: } methods: - name: fib interface: {type: polyphony} arguments: - name: n type: Integer interface: {name: Signal , type: {name: Signed, width: 32}, port: {data: fib_in_n}} returns: - name: o type: Integer interface: {name: Signal , type: {name: Signed, width: 32}, port: {data: fib_out_0}} --- vhdl- archiver.rb
24.
24 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v Vivado
IP Packager (1) python3 polyphony polyphony_out_ fib.v fib.py Vivado Behv Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager Vivado IP Integrator Synthesis Implementation vhdl- archiver.rb
25.
25 @ikwzmPYNQ 祭り(2017/3/4) Vivado
IP Packager (2)
26.
26 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v Vivado
IP Integrator (1) python3 polyphony polyphony_out_ fib.v fib.py Vivado Behv Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager Vivado IP Integrator Synthesis Implementation vhdl- archiver.rb
27.
27 @ikwzmPYNQ 祭り(2017/3/4) Vivado
IP Integrator (2)
28.
28 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v Vivado
Synthesis & Implementation (1) python3 polyphony polyphony_out_ fib.v fib.py Vivado Behv Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager Vivado IP Integrator Synthesis Implementation vhdl- archiver.rb
29.
29 @ikwzmPYNQ 祭り(2017/3/4) Vivado
Synthesis & Implementation (2)
30.
30 @ikwzmPYNQ 祭り(2017/3/4) Load
and start fib server on PL(Programmable Logic) shell# echo 1 >/sys/class/fpgacfg/fpgacfg0/data_format shell# echo 1 >/sys/class/fpgacfg/fpgacfg0/load_start shell# dd if=design_1_wrapper.bit of=/dev/fpgacfg0 bs=1M 3+1 records in 3+1 records out 4045676 bytes (4.0 MB) copied, 0.296939 s, 13.6 MB/s 1. Download "design_1_wrapper.bit" to PL 2. Load "zptty" device driver and overlay device-tree shell# modprobe zptty shell# dtbocfg.rb --install zptty0 --dts zptty0-zynq-zybo.dts 3. Start socat (background) shell# socat -d -d tcp-listen:54321,fork /dev/zptty0,raw,nonblock,echo=0 & [2] 2145 2017/03/01 09:34:13 socat[2145] N listening on AF=2 0.0.0.0:54321 FPGA-SoC-Linux(https://github.com/ikwzm/FPGA-SoC-Linux)の場合
31.
31 @ikwzmPYNQ 祭り(2017/3/4)
32.
32 @ikwzmPYNQ 祭り(2017/3/4) 課題 1.
Design Flow が複雑 ・ すぐに切れそうな Tool Chain ・ msgpack-if-gen.rb 用の設定ファイル(fib.yml)が必要 2. MessagePack-RPC のオーバーヘッド ・ レイテンシーの増大 ・ スループットの悪化 3. Polyphony の言語的な制約
33.
33 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v 課題
1.1 Design Flow が複雑 - すぐに切れそうな Tool Chain python3 polyphony polyphony_out_ fib.v fib.py Vivado Behv Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) Vivado IP Integrator Synthesis Implementation design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager 複数のツールの組み合わせで 各ツールが独自の進化 1. python 2. polyphony 3. msgpack-vhdl 4. Vivado vhdl- archiver.rb
34.
34 @ikwzmPYNQ 祭り(2017/3/4) polyphony_out_ test.v polyphony_out.v 課題
1.2 Design Flow が複雑 - msgpack-if-gen.rb 用設定ファイル必要 python3 polyphonyfib.py Vivado Behv Sim Fib_Interface.vhd Fib_Server.vhd msgpack- if-gen.rb fib.yml Fib_Server.zip (IP for Vivado) Vivado IP Integrator Synthesis Implementation design_1_ wrapper.bit design_1_bd .tcl MsgPack.vhd Vivado IP Packager 現状 polyphony_out_ fib.v 今後の 予定 vhdl- archiver.rb
35.
35 @ikwzmPYNQ 祭り(2017/3/4) 課題
2. MessagePack-RPC のオーバーヘッド PTTY_AXI Fib_Interface fib Fib_Server fib_ready fib_in_n fib_valid fib_out_0 fib_accept ZPTTY.ko socat fib_client.py FPGA Manager Clk/Reset /dev /fpga0 /dev /fpgaclk0 /dev/zptty0 network interface Device Tree Overlay /config /device- tree PS(Processing System) PL(Programmable Logic) やたら長いパス レイテンシーの増大 (片道 数十 msec~数百 msec) 低速な TTY I/F スループットの悪化 (数十 MByte/sec)
36.
36 @ikwzmPYNQ 祭り(2017/3/4) 課題
3. Polyphony の言語的な制約 ・ もともと論理回路は動的型付けが苦手(というかムチャブリです) ところが Python は動的型付け言語 Polyphony では変数の型を限定することで対応 使えるのは 32bit 整数、 True、 False だけ(2015/12 時点) ・ 最近は List (1次元かつ中身は整数のみ)やタプルも追加 ・ さらにクラスも使えるようになった(次頁参照) ・ Polyphony は現在絶賛開発中 今後いろいろと出来る様になるかも (多倍長整数、 浮動小数点、 文字列、 辞書、 多次元配列...)
37.
37 @ikwzmPYNQ 祭り(2017/3/4) Polyphony
の進化 - mmult.py - from polyphony import testbench class StreamIn: def __init__(self, buf, size): self.size = size self.buf = buf def read(self, addr): return self.buf[addr] class StreamOut: def __init__(self, buf, size): self.size = size self.buf = buf def write(self, addr, data): self.buf[addr] = data def mmult(a_buf:list, b_buf:list, o_buf:list, size): a = StreamIn(a_buf, size) b = StreamIn(b_buf, size) o = StreamOut(o_buf, size) for i in range(size): o.write(i, a.read(i) * b.read(i)) @testbench def test(): a = [0,1,2,3,4,5,6,7] b = [0,1,2,3,4,5,6,7] o = [0,0,0,0,0,0,0,0] size = 8 mmult(a, b, o, size) for i in range(size): print(i, ":", a[i], "*", b[i], "=>", o[i]) assert o[i] == a[i]*b[i] test() shell$ python3 mmult.py 0 : 0 * 0 => 0 1 : 1 * 1 => 1 2 : 2 * 2 => 4 3 : 3 * 3 => 9 4 : 4 * 4 => 16 5 : 5 * 5 => 25 6 : 6 * 6 => 36 7 : 7 * 7 => 49 shell$ mmult.py ・ 2017 年 2 月現在 ・ List と Class が使える。 ・ テストベンチ(polyphony_out_ test.v)は上手く動かなかった。 ・ List へのアクセスはウェイトが固定な ので BlockRAM 限定。 AXI マスタ ー等は使えない。 ・ MessagePack-RPC は未対応。
38.
38 @ikwzmPYNQ 祭り(2017/3/4) 参考
- PYNQ-Festival ・ 以下の資料やバイナリイメージ ・ 本日説明したスライド ・ u-boot ・ Linux Kernel 4.8.17 (FPGA manager+Device Tree Overlay) ・ Debian 8 Root File System ・ design_1_wrapper.bit (PYNQ-Z1 用 bitstream) ・ fibonacci_client.ipynb はこちらにあります。 https://github.com/ikwzm/PYNQ-Festival
39.
39 @ikwzmPYNQ 祭り(2017/3/4) 参考
- Polyphony ・ Python ベースの高位合成コンパイラ ・ 作っているのは 有限会社シンビー http://www.sinby.com/PolyPhony/index.html ・ github でも公開中 https://github.com/ktok07b6/polyphony ・ 高位合成友の会 第3回(2015/12/08) でのスライド https://www.slideshare.net/ktok07b6/3-polyphony
40.
40 @ikwzmPYNQ 祭り(2017/3/4) 参考
- MessagePack-VHDL ・ MessagePack-RPC を使って FPGA を制御 @Qiita http://qiita.com/ikwzm/items/2644c6e50a7049c75d49 ・ github で公開中 https://github.com/ikwzm/msgpack-vhdl https://github.com/ikwzm/msgpack-vhdl-examples
41.
41 @ikwzmPYNQ 祭り(2017/3/4) 参考
- FPGA-SoC-Linux ・ FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1 対応) @Qiita http://qiita.com/ikwzm/items/d6fdaa859906252fd8b0 ・ github で公開中 https://github.com/ikwzm/FPGA-SoC-Linux
Télécharger maintenant