Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
一川
Uploaded by
一路 川染
PDF, PPTX
4,774 views
Pynq祭り資料
PYNQ祭り(2017年3月4日)で使ったスライド(2017年3月21日改版)
Engineering
◦
Read more
6
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 41
2
/ 41
3
/ 41
4
/ 41
5
/ 41
6
/ 41
7
/ 41
8
/ 41
9
/ 41
10
/ 41
11
/ 41
12
/ 41
13
/ 41
14
/ 41
15
/ 41
16
/ 41
17
/ 41
18
/ 41
19
/ 41
20
/ 41
21
/ 41
22
/ 41
23
/ 41
24
/ 41
25
/ 41
26
/ 41
27
/ 41
28
/ 41
29
/ 41
30
/ 41
31
/ 41
32
/ 41
33
/ 41
34
/ 41
35
/ 41
36
/ 41
37
/ 41
38
/ 41
39
/ 41
40
/ 41
41
/ 41
More Related Content
PPTX
研究者のための Python による FPGA 入門
by
ryos36
PDF
Riscv+fpga200606
by
たけおか しょうぞう
PDF
FPGAX6_hayashi
by
愛美 林
PDF
Pynqでカメラ画像をリアルタイムfastx コーナー検出
by
marsee101
PDF
FPGAスタートアップ資料
by
marsee101
PPTX
PYNQ 祭り: Pmod のプログラミング
by
ryos36
PDF
Takep lpc1114-190614
by
たけおか しょうぞう
PDF
PYNQ祭りLT todotani
by
Kenshi Kamiya
研究者のための Python による FPGA 入門
by
ryos36
Riscv+fpga200606
by
たけおか しょうぞう
FPGAX6_hayashi
by
愛美 林
Pynqでカメラ画像をリアルタイムfastx コーナー検出
by
marsee101
FPGAスタートアップ資料
by
marsee101
PYNQ 祭り: Pmod のプログラミング
by
ryos36
Takep lpc1114-190614
by
たけおか しょうぞう
PYNQ祭りLT todotani
by
Kenshi Kamiya
What's hot
PPTX
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
by
marsee101
PDF
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
by
Kentaro Ebisawa
PPTX
FPGAって、何?
by
Toyohiko Komatsu
PDF
高位合成ツールVivado hlsのopen cv対応
by
marsee101
PPT
20140310 fpgax
by
funadasatoshi
PDF
ソフトウェア技術者はFPGAをどのように使うか
by
なおき きしだ
PDF
Vivado hlsのシミュレーションとhlsストリーム
by
marsee101
PDF
Gpu vs fpga
by
Yukitaka Takemura
PDF
FPGAによるHDMI to LVDS変換器
by
I_HaL
PDF
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
by
Kei Nakazawa
PDF
Linux : PSCI
by
Mr. Vengineer
PPTX
Analog Devices の IP コアを使う
by
ryos36
PDF
2017年のFPGA Community活動について
by
Mr. Vengineer
PDF
増え続ける情報に対応するためのFPGA基礎知識
by
なおき きしだ
PDF
PYNQ祭り
by
Mr. Vengineer
PDF
FPGA startup 第一回 LT
by
Yamato Kazuhiro
PDF
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
by
marsee101
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
by
marsee101
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
by
Kentaro Ebisawa
FPGAって、何?
by
Toyohiko Komatsu
高位合成ツールVivado hlsのopen cv対応
by
marsee101
20140310 fpgax
by
funadasatoshi
ソフトウェア技術者はFPGAをどのように使うか
by
なおき きしだ
Vivado hlsのシミュレーションとhlsストリーム
by
marsee101
Gpu vs fpga
by
Yukitaka Takemura
FPGAによるHDMI to LVDS変換器
by
I_HaL
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
by
Kei Nakazawa
Linux : PSCI
by
Mr. Vengineer
Analog Devices の IP コアを使う
by
ryos36
2017年のFPGA Community活動について
by
Mr. Vengineer
増え続ける情報に対応するためのFPGA基礎知識
by
なおき きしだ
PYNQ祭り
by
Mr. Vengineer
FPGA startup 第一回 LT
by
Yamato Kazuhiro
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
by
marsee101
Viewers also liked
PDF
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
by
Insight Technology, Inc.
PPTX
PYNQで○○してみた!
by
aster_ism
PPTX
PYNQ単体でUIを表示してみる(PYNQまつり)
by
Kenta IDA
PDF
20171012 found IT #9 PySparkの勘所
by
Ryuji Tamagawa
PDF
コンピュータエンジニアへのFPGAのすすめ
by
Takeshi HASEGAWA
PDF
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
by
Spark Summit
PDF
20170210 sapporotechbar7
by
Ryuji Tamagawa
PDF
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
by
Ryuji Tamagawa
PDF
Presto in my_use_case
by
wyukawa
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
by
Insight Technology, Inc.
PYNQで○○してみた!
by
aster_ism
PYNQ単体でUIを表示してみる(PYNQまつり)
by
Kenta IDA
20171012 found IT #9 PySparkの勘所
by
Ryuji Tamagawa
コンピュータエンジニアへのFPGAのすすめ
by
Takeshi HASEGAWA
APACHE TOREE: A JUPYTER KERNEL FOR SPARK by Marius van Niekerk
by
Spark Summit
20170210 sapporotechbar7
by
Ryuji Tamagawa
20170927 pydata tokyo データサイエンスな皆様に送る分散処理の基礎の基礎、そしてPySparkの勘所
by
Ryuji Tamagawa
Presto in my_use_case
by
wyukawa
Similar to Pynq祭り資料
PDF
FPGA+SoC+Linux実践勉強会資料
by
一路 川染
PPTX
Polyphony の行く末(2018/3/3)
by
ryos36
PPTX
Polyphony: Python ではじめる FPGA
by
ryos36
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
PDF
Python physicalcomputing
by
Noboru Irieda
PPTX
Polyphony 新機能ツアー
by
ryos36
PDF
明日からはじめるネットワーク運用自動化
by
Taiji Tsuchiya
PDF
Protocol Buffers 入門
by
Yuichi Ito
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
by
shoma h
PDF
JVM上で動くPython処理系実装のススメ
by
Yoshiaki Shibutani
PPTX
Polyphony の並列化
by
ryos36
PDF
Reconf_201409
by
Takefumi MIYOSHI
PPTX
天気予報ガジェットを作りな がら、Pythonを勉強しよう
by
Hiroki Yato
PPTX
Capture the flag write up q13,q20,q21 for ss
by
Masahiro Fukuda
PPTX
電子工作のためのPython
by
Takuya Nishimoto
PDF
おまえらこのライブラリ使ってないの? m9 (2013-07)
by
Toru Furukawa
PDF
PyPy 紹介
by
shoma h
PPTX
数値計算のための Python + FPGA
by
ryos36
PDF
ハードウェアを用いてPythonを学ぶ
by
Yuta Kitagami
PDF
Riak Source Code Reading #2: Erlang Client
by
nobu_k
FPGA+SoC+Linux実践勉強会資料
by
一路 川染
Polyphony の行く末(2018/3/3)
by
ryos36
Polyphony: Python ではじめる FPGA
by
ryos36
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
Python physicalcomputing
by
Noboru Irieda
Polyphony 新機能ツアー
by
ryos36
明日からはじめるネットワーク運用自動化
by
Taiji Tsuchiya
Protocol Buffers 入門
by
Yuichi Ito
次世代言語 Python による PyPy を使った次世代の処理系開発
by
shoma h
JVM上で動くPython処理系実装のススメ
by
Yoshiaki Shibutani
Polyphony の並列化
by
ryos36
Reconf_201409
by
Takefumi MIYOSHI
天気予報ガジェットを作りな がら、Pythonを勉強しよう
by
Hiroki Yato
Capture the flag write up q13,q20,q21 for ss
by
Masahiro Fukuda
電子工作のためのPython
by
Takuya Nishimoto
おまえらこのライブラリ使ってないの? m9 (2013-07)
by
Toru Furukawa
PyPy 紹介
by
shoma h
数値計算のための Python + FPGA
by
ryos36
ハードウェアを用いてPythonを学ぶ
by
Yuta Kitagami
Riak Source Code Reading #2: Erlang Client
by
nobu_k
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
Download