SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Polyphony
~Pythonベースの高位合成コンパイラ~
有限会社シンビー 片岡/鈴木
目次
● Polyphonyの特徴
● 現在の開発状況
● 今後の開発
Polyphonyの特徴
Polyphonyはこんなツール(になる予定)
特徴
● Pythonで書いたコードをHDL(Verilog)に
変換するためのコンパイラ
● コードはPythonインタプリタで動く普通
のPythonのコード
● 特殊なクラスや言語拡張は基本的になし
● ただし,使える言語要素に制限あり
● オープンソース
Polyphonyはこんなツール(になる予定)
得意なこと
● 抽象度の高い処理記述
● ソフトウェアのハードウェア化
● 動くものを早く作る
出来ないこと,苦手なこと
● クロック単位のタイミング制御
● ハードウェアの制御
● 性能の追求
Pythonのいいところ
開発が早い
● ソースの読みやすさ,書きやすさ
● 割とすぐに身につく (学習コスト低め)
● 標準ライブラリが充実
● 使える外部ライブラリも多い
Pythonの上のような特徴を生かした高位合成ツール
(になる予定)
ハードウェア記述言語の生産性と性能
生
産
性
性能
(速度,リソース...)
高
低
高位合成処理系
VHDL
Verilog
良い悪い
夢の
処理系
ハードウェア記述言語の生産性と性能
生
産
性
性能
(速度,リソース...)
高
低
高位合成処理系
VHDL
Verilog
良い悪い
Polyphonoy
(目標)
いまここ!
↓
夢の
処理系
ハードウェア記述言語の生産性と性能
生
産
性
性能
(速度,リソース...)
高
低
高位合成処理系
VHDL
Verilog
良い悪い
Polyphonoy
(目標)
夢の
処理系・言語機能の充実
・コードの再利用
・最適化性能アップ
・バックエンドライブラリの充実
いまここ!
↓
現在の開発状況
値 (リテラル)
● 使えるのは整数,True,Falseだけ
● 浮動小数点数は現状未対応
将来的にはサポート予定
● 文字列も...今後検討
変数
とりあえず普通に使えますが……
課題: 常に符号あり32ビット整数型として合成
32ビット使い切るようなケースはまれ
しかし,Pythonには変数の型を明示する方法がない
#Pythonは値の代入により変数の型が決まる
x = 120
変数
課題: 常に符号あり32ビット整数型として合成
対策案: 表明 (アサーション) によるビット数推定
assert文で値の範囲,符号,ビット幅などのヒント
をコンパイラに与える
実行時の検証にもなり,二度おいしい
#xは符号なし7ビットに合成
assert 0 <= x and x <= 127
#xのビット数を直接指定することも可
assert x.bit_length() == 7
式
算術演算,ビット演算
比較演算,論理演算
x = 1 + (2 + 3) * -4
y = y & 0b11110000
d = a < b < c
e = x and y or z
リスト
生成
参照と代入
● 長さは固定長
● リストに入れられる要素は整数型,True,False
のみ
xs = [1, 2, 3, 4]
ys = [0] * 4096
xs[0] = xs[-1] * 2
リスト
追加,削除など長さを変える操作不可
メソッドは基本的に不可
追加,削除はあったほうが便利…
どういう操作をサポートするかどうかは検討中です
list.append(5)
list.index(a)
list.count(b)
list.sort()
関数定義 & 関数呼び出し
Pythonの関数⇒Verilogのモジュール
def f(x):
...
module f(...);
...
Python
Verilog
関数定義 & 関数呼び出し
Pythonの関数呼び出し⇒Verilogのサブモジュール
def f(x):
g(x)
module f(...);
g g_inst(...);
Python
Verilog
関数定義 & 関数呼び出し
関数の並列実行
という関数があるとき
f()とg()は,並列に実行されます
(※データフロー解析の結果,関数に依存関係がなく
関数の内側で外の環境を変化させないことが条件)
も並列に実行,ただし逐次実行も可能です
(同じFUの並列度は調整可能)
def f(x): ...
def g(y): ...
x = f(0) + g(1)
x = f(0) + f(1)
関数定義 & 関数呼び出し
内部関数もサポート
def f(x, y):
def f_a(a):
...
def f_b(b):
...
return f_a(x) * f_b(y)
制御構造: for
forループ
for i in range(x): # ここだけrange関数使える
...
else: # for-elseも一応対応 (基本使わないけど...)
...
制御構造: for
一応リストも回せます
内部的には…こう変換しています
for x in xs: # xsはリスト
func(x)
# len()はリストの長さを得る組み込み関数
for i in range(len(xs)):
x = xs[i]
func(x)
その他利用可能な言語要素
● if-elif-else
● while-else
● continue, break
● assert
● return
● print関数
…などが利用できます
テストベンチ合成
テストベンチ向けの合成も可能
def func01(x):
def inner(y):
return y + 1
return inner(x)
@testbench
def test():
assert 1 == func01(0)
assert 2 == func01(1)
assert 3 == func01(2)
ソースコードの制限
Pythonのどんなコードも合成できるわけではない
例えば,
● クラス
● 辞書,タプルなどのオブジェクト
● 組み込み関数 (sorted, map, filter…)
● クロージャ
…
など,使用できない言語要素は多い
今のところC言語などと表現力はあまり変わらない
Polyphonyを使ってみた例
すごくシンプルなプロセッサの実装
1. CPUエミュレータのようなソースをPythonで書く
2. 実際にFPGAの上でソフトプロセッサとして動かす
Polyphonyを使ってみた例
def mips_main(imem:list, dmem:list):
...
while True:
iaddr = IADDR(pc)
ins = imem[iaddr]
pc = pc + 4
op = ins >> 26
if op == R:
funct = ins & 0x3f
shamt = (ins >> 6) & 0x1f
rd = (ins >> 11) & 0x1f
rt = (ins >> 16) & 0x1f
rs = (ins >> 21) & 0x1f
if funct == ADDU:
reg[rd] = reg[rs] + reg[rt]
次のFPGAマガジン(No.12)に載るかも・・・?
今後の開発
今後の開発予定機能の例
言語要素のサポート強化
例えば,
● クラス
● 高階関数
をサポート
その他の開発予定機能
● import文によるコードの再利用
● 組込み関数
enumerate, zip, any, all, abs, sum, ...
● ライブラリ
numpy, scipy (ほとんど妄想)
...
おわりに
Polyphonyはオープンソースです
GitHubで公開中
https://github.com/ktok07b6/polyphony
● バグ報告
● 追加機能のリクエスト
● プルリクエスト
歓迎します☺
ご清聴ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

PHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよPHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよMasaru Matsuo
 
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたMasaru Matsuo
 
〜laravel で学ぶ MVC
 〜laravel で学ぶ MVC 〜laravel で学ぶ MVC
〜laravel で学ぶ MVCmikakane
 
PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性Rina Fukuda
 
AbemaTVのコメントビューアを作る話
AbemaTVのコメントビューアを作る話AbemaTVのコメントビューアを作る話
AbemaTVのコメントビューアを作る話ロフト くん
 
Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)Masaharu IWAI
 
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料Takako Miyagawa
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyazuma satoshi
 

Was ist angesagt? (9)

PHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよPHP カンファレンス 2014 に行ってきたよ
PHP カンファレンス 2014 に行ってきたよ
 
JavaのLambdaの裏事情
JavaのLambdaの裏事情JavaのLambdaの裏事情
JavaのLambdaの裏事情
 
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみた
 
〜laravel で学ぶ MVC
 〜laravel で学ぶ MVC 〜laravel で学ぶ MVC
〜laravel で学ぶ MVC
 
PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性PHPerに覚えて欲しい日本語の重要性
PHPerに覚えて欲しい日本語の重要性
 
AbemaTVのコメントビューアを作る話
AbemaTVのコメントビューアを作る話AbemaTVのコメントビューアを作る話
AbemaTVのコメントビューアを作る話
 
Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)Perl (OSC2011 Tokyo/Spring, Doc-ja)
Perl (OSC2011 Tokyo/Spring, Doc-ja)
 
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
 

Andere mochten auch

PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learningMori Labo.
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出marsee101
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Shinya Takamaeda-Y
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームmarsee101
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)marsee101
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門narusugimoto
 
HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127
HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127
HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127HPCシステムズ株式会社
 
Ry pyconjp2015 karaoke
Ry pyconjp2015 karaokeRy pyconjp2015 karaoke
Ry pyconjp2015 karaokeRenyuan Lyu
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)Tokoroten Nakayama
 

Andere mochten auch (14)

PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
高位合成でDeep learning
高位合成でDeep learning高位合成でDeep learning
高位合成でDeep learning
 
PYNQ祭り
PYNQ祭りPYNQ祭り
PYNQ祭り
 
Pynq祭り資料
Pynq祭り資料Pynq祭り資料
Pynq祭り資料
 
Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出Pynqでカメラ画像をリアルタイムfastx コーナー検出
Pynqでカメラ画像をリアルタイムfastx コーナー検出
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
 
Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)Vivado hls勉強会1(基礎編)
Vivado hls勉強会1(基礎編)
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127
HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127
HPC で使えそうな FPGA 搭載 AWS F1 インスタンス 20170127
 
Antinoise system & Noise Cancellation
Antinoise system & Noise CancellationAntinoise system & Noise Cancellation
Antinoise system & Noise Cancellation
 
Ry pyconjp2015 karaoke
Ry pyconjp2015 karaokeRy pyconjp2015 karaoke
Ry pyconjp2015 karaoke
 
D4 cloud
D4 cloudD4 cloud
D4 cloud
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
 

Ähnlich wie 高位合成友の会 第3回 (2015/12/08) でのスライド

Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発shoma h
 
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Takayuki Shimizukawa
 
5分でわかるphalcon php
5分でわかるphalcon php5分でわかるphalcon php
5分でわかるphalcon phpYusaku Kinoshita
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplibShinya Okano
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介shoma h
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitSeiya Mizuno
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もうAkira Nonaka
 
Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化ryos36
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るYoshio Hanawa
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトTetsuya Morimoto
 
vscode pipenv docker
vscode pipenv dockervscode pipenv docker
vscode pipenv dockerikdysfm
 
cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行kunihikokaneko1
 
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Katsuhiro Morishita
 

Ähnlich wie 高位合成友の会 第3回 (2015/12/08) でのスライド (20)

Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Report
 
次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発次世代言語 Python による PyPy を使った次世代の処理系開発
次世代言語 Python による PyPy を使った次世代の処理系開発
 
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
 
5分でわかるphalcon php
5分でわかるphalcon php5分でわかるphalcon php
5分でわかるphalcon php
 
Pyconjp2016 pyftplib
Pyconjp2016 pyftplibPyconjp2016 pyftplib
Pyconjp2016 pyftplib
 
Introduction Pycon2010
Introduction Pycon2010Introduction Pycon2010
Introduction Pycon2010
 
PyPy 紹介
PyPy 紹介PyPy 紹介
PyPy 紹介
 
Fluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent BitFluentd1.2 & Fluent Bit
Fluentd1.2 & Fluent Bit
 
Tfug kansai vol1
Tfug kansai vol1Tfug kansai vol1
Tfug kansai vol1
 
Why python
Why pythonWhy python
Why python
 
Why python
Why pythonWhy python
Why python
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もう
 
Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
 
勉強会資料#1
勉強会資料#1勉強会資料#1
勉強会資料#1
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
 
vscode pipenv docker
vscode pipenv dockervscode pipenv docker
vscode pipenv docker
 
cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行
 
Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
 

高位合成友の会 第3回 (2015/12/08) でのスライド