SlideShare a Scribd company logo
Veriloggen:
Pythonによる
ハードウェアメタプログラミング
高前田 伸也
奈良先端科学技術大学院大学 情報科学研究科
E-mail: shinya_at_is_naist_jp
2015年12月8日
第3回 高位合成友の会 @ドワンゴ
PyCoRAM:Python-VerilogハイブリッドHLS
2015-12-08-HLS Shinya T-Y, NAIST 2
データパス 制御
Memory/Stream DMAコントローラ
Channel/
Register
IOChannel/
IORegister
Computing Logic
Modeled in Verilog HDL
Control Thread
Modeled in Python
Veriloggen
2015-12-08-HLS Shinya T-Y, NAIST 3
実行
Verilog HDLPython
PythonでVerilog HDLを
組み立てるライブラリ
n  Pythonで書いた動作を
HDLに変換する
高位合成ではない
n  Pythonのオブジェクト
としてVerilogの信号や
代入を組み上げていく
GitHub/PyPiからダウンロード・インストール
n  ついさっきバージョン0.5.3をリリースしました!
n  GitHub:
https://github.com/PyHDI/veriloggen
n  PyPI (pip):
https://pypi.python.org/pypi/veriloggen
2015-12-08-HLS Shinya T-Y, NAIST 4
$ pip install veriloggen�
$ git clone https://github.com/PyHDI/veriloggen.git�
RTL representation using Verilog HDL
2015-12-08-HLS Shinya T-Y, NAIST 5
count
(32-bit)
+
Truncate
inv
32
32
32
8
8
LED
top
32
1Combinational
Circuit
Sequential
Circuit
Combinational
Circuit
Blinking LED (LEDチカチカ)
ハードウェア記述言語
HDL (Hardware Description Language)
n  ハードウェア設計のためのDSL
l  ソフトウェアプログラミング言語との違い
•  (多くの)プログラミング言語は逐次動作の記述のためのもの
•  HDLは単位時刻毎の並列の振る舞いを記述するためのも
n  Verilog HDL/VHDLの問題点
l  すべてをレジスタ転送レベルで書かなければならないため大変
l  抽象度・再利用性が低い
n  Verilog HDL/VHDLに変わる新しいHDL
l  Bluespec: System Verilog + Haskell風味
l  Chisel: Scalaベースのハードウェア設計DSL
l  MyHDL: PythonベースHDL
l  Synthesijer.Scala: ScalaでHDLを生成
2015-12-08-HLS Shinya T-Y, NAIST 6
好きな言語でハードウェア開発したい
n  ハードウェア設計は言語・ツールの選択肢が少ない
l  ソフトウェア開発は用途と好みに応じて言語を選べる
•  C, C++, C#, Java, Python, Ruby, Perl, JavaScrit, Scala, Go, Haskell
l  ハードウェア開発は?→選択肢が少ない
•  RTL: Verilog HDL, VHDL
•  高級HDL: Chisel (Scala DSL), PyMTL (Python DSL), Veriloggen
•  高位合成: C, C++, OpenCL, Java (Synthesijer), Python (PyCoRAM)
n  「好きな道具」で「好きなもの」を作る世界
•  高位設計 ≠ C設計(Cベースが現状一番良いのは認める)
•  でもRubyで書きたい!Goで書きたい!Pythonで書きたい!
–  発表者はPythonで書きたいのでこれからもいろいろやってみます
–  でも他の言語も検討中です
2015-12-08-HLS Shinya T-Y, NAIST 7
Veriloggen
2015-12-08-HLS Shinya T-Y, NAIST 8
実行
Verilog HDLPython
PythonでVerilog HDLを
組み立てるライブラリ
n  Pythonで書いた動作を
HDLに変換する
高位合成ではない
n  Pythonのオブジェクト
としてVerilogの信号や
代入を組み上げていく
n  当該オブジェクトの
to_verilog() を呼ぶと
Verilogのソースコード
のテキストに変換
例)たくさんLEDを追加してみる
2015-12-08-HLS Shinya T-Y, NAIST 9
実行
モジュール (Module)
n  空のモジュールを作る: Moduleオブジェクトを作成する
l  引数はモジュール名
n  Moduleオブジェクトのto_verilog()メソッドを呼び出すと
文字列形式でソースコードが取得できる
2015-12-08-HLS Shinya T-Y, NAIST 10
信号 (Input, Output, Wire, Reg)
n  Moduleオブジェクトの信号メソッドを呼び出すと
信号がモジュールに追加される
l  引数は信号名,幅,初期値(Reg, Integerのみ)
2015-12-08-HLS Shinya T-Y, NAIST 11
代入 (Assign, Always)
n  Moduleオブジェクトの
Assign, Alwaysメソッドを使う
l  代入は信号オブジェクトの
呼び出しで表現: count(value)
n  Alwaysメソッド
l  センシティビティリストが取れる
l  Always文中での代入は
ノンブロッキング
l  複数の文を書ける (begin – end)
n  Assignメソッド
l  代入されたオブジェクトを渡す
2015-12-08-HLS Shinya T-Y, NAIST 12
代入 (Assign, Always)
n  Moduleオブジェクトの
Assign, Alwaysメソッドを使う
l  代入は信号オブジェクトの
呼び出しで表現: count(value)
n  Alwaysメソッド
l  センシティビティリストが取れる
l  Always文中での代入は
ノンブロッキング
l  複数の文を書ける (begin – end)
n  Assignメソッド
l  代入されたオブジェクトを渡す
2015-12-08-HLS Shinya T-Y, NAIST 13
制御 (If, For, While)
n  制御オブジェクトを作る
l  Ifオブジェクトの
ElseメソッドでElse文が書ける
l  For, While, Generateなどもある
n  制御オブジェクトもただの
Pythonのオブジェクト
l  定義の使い回しができる
2015-12-08-HLS Shinya T-Y, NAIST 14
サブモジュール (Instance)
n  ModuleオブジェクトのInstanceメソッドで追加する
l  サブモジュール定義(sub),インスタンス名('uut'),
パラメータマップ(param_args (リスト・タプル形式)),
ポートマップ(port_args (リスト・タプル形式))
l  copy_params/ports/sim_ports()や
connect_params/ports()などの便利メソッド
2015-12-08-HLS Shinya T-Y, NAIST 15
コード生成 (to_verilog)
n  Moduleオブジェクトのto_verilog()メソッドを呼び出すと
文字列形式でソースコードが取得できる
n  Verilog HDLのソースコード解析・生成ツールキット
Pyverilogを利用
2015-12-08-HLS Shinya T-Y, NAIST 16
既存のVerilog HDLソースコードの取り込み
n  read_verilog_module(), read_verilog_module_str()で
既存のソースコードをModuleオブジェクトに変換できる
l  辞書形式で一覧を返すので名前をキーにModuleが取得できる
n  変換後は通常の
Moduleオブジェクト
と同じように扱える
l  Module名の変更,
変数や代入を追加,
など
l  もちろんVerilogの
ソースコードへの
変換もできる
2015-12-08-HLS Shinya T-Y, NAIST 17
Veriloggen拡張ライブラリ
n  Veriloggenの基本機能はVerilog HDLと同等の記述能力
l  抽象度はほとんど変わらないが,Pythonの言語機能を利用して
Verilog HDLのソースコードを組み立てることができる
n  より高い抽象度で設計するには?
→Veriloggenの基本機能をラップしたライブラリ
l  Seq: 順序回路
l  FSM: 状態遷移マシン
l  Pipeline: パイプライン回路のデータフロー型設計
l  Simulation: シミュレーション支援
2015-12-08-HLS Shinya T-Y, NAIST 18
Seq: 順序回路
2015-12-08-HLS Shinya T-Y, NAIST 19
Seqオブジェクト
生成
(count==interval-1)だったら
led <= led + 1
2015-12-08-HLS Shinya T-Y, NAIST 20
2015-12-08-HLS Shinya T-Y, NAIST 21
FSM:
状態遷移
マシン
FSM
オブジェクト
生成
現在のFSM
ラベル取得
次に進む
条件付きで
次に進む
現在の
FSMでの
処理を追加
from/toを
指定して
状態遷移
toを
指定して
状態遷移
Pipeline: パイプライン回路のデータフロー設計
2015-12-08-HLS Shinya T-Y, NAIST 22
入力
Pipeline
オブジェクト
生成
演算
出力
Pipeline: パイプライン回路のデータフロー設計
2015-12-08-HLS Shinya T-Y, NAIST 23
データフローグラフが出力できます
Simulation: シミュレーション支援
2015-12-08-HLS Shinya T-Y, NAIST 24
モジュール生成
パラメータ宣言を
コピーする
ポート宣言を
コピーする
同じ名前の
ポート・パラ
メータを接続
クロックを作ったり
リセットを作ったり
波形生成
Simulation: シミュレーション支援
2015-12-08-HLS Shinya T-Y, NAIST 25
テスト対象の
モジュール生成
シミュレータ
オブジェクト生成
シミュレータ起動
波形シミュレータ起動
Simulation: シミュレーション支援
n  GTKwaveで波形を観測できる
2015-12-08-HLS Shinya T-Y, NAIST 26
まとめ
n  PythonでVerilog HDLを組み立てるライブラリ
l  PythonのオブジェクトとしてVerilogの信号や代入を組み上げる
n  オープンソースで開発中
l  GitHub:
https://github.com/PyHDI/veriloggen
l  PyPI (pip):
https://pypi.python.org/pypi/veriloggen
2015-12-08-HLS Shinya T-Y, NAIST 27
$ pip install veriloggen�
$ git clone https://github.com/PyHDI/veriloggen.git�

More Related Content

PDF
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
PDF
PythonとVeriloggenを用いたRTL設計メタプログラミング
PDF
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
PDF
Pythonを用いた高水準ハードウェア設計環境の検討
KEY
PyOpenCLによるGPGPU入門
PDF
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
PDF
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
PDF
マーク&スイープ勉強会
Veriloggen.Thread & Stream: 最高性能FPGAコンピューティングを 目指したミックスドパラダイム型高位合成 (FPGAX 201...
PythonとVeriloggenを用いたRTL設計メタプログラミング
DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
Pythonを用いた高水準ハードウェア設計環境の検討
PyOpenCLによるGPGPU入門
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
マーク&スイープ勉強会

What's hot (20)

PDF
PyConAPAC2023 ワークフローエンジン Apache Airflowを用いた 大規模データパイプライン構築と改善
PDF
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
PPTX
ChainerMNについて
PDF
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
PDF
DPDK QoS
PDF
10分で分かるLinuxブロックレイヤ
PDF
Chainer で Tensor コア (fp16) を使いこなす
PDF
LLVM Backend の紹介
PDF
LLVM Register Allocation (2nd Version)
PDF
Materials Informatics and Python
PDF
Vivado hls勉強会1(基礎編)
PDF
Launch the First Process in Linux System
PDF
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
PDF
WebAssemblyのWeb以外のことぜんぶ話す
PDF
GoogleのSHA-1のはなし
PDF
Tokyor14 - R言語でユニットテスト
PPTX
Polyphony の行く末(2018/3/3)
PDF
犬でもわかる公開鍵暗号
PDF
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
PDF
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
PyConAPAC2023 ワークフローエンジン Apache Airflowを用いた 大規模データパイプライン構築と改善
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
ChainerMNについて
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
DPDK QoS
10分で分かるLinuxブロックレイヤ
Chainer で Tensor コア (fp16) を使いこなす
LLVM Backend の紹介
LLVM Register Allocation (2nd Version)
Materials Informatics and Python
Vivado hls勉強会1(基礎編)
Launch the First Process in Linux System
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
WebAssemblyのWeb以外のことぜんぶ話す
GoogleのSHA-1のはなし
Tokyor14 - R言語でユニットテスト
Polyphony の行く末(2018/3/3)
犬でもわかる公開鍵暗号
pg_bigm(ピージーバイグラム)を用いた全文検索のしくみ
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
Ad

Similar to Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ) (20)

PDF
Synverll
PDF
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PDF
マルチパラダイム型高水準ハードウェア設計環境の検討
PDF
Wrapping a C++ library with Cython
PDF
Halide, Darkroom - 並列化のためのソフトウェア・研究
PDF
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
GPGPU Seminar (PyCUDA)
PDF
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
PPTX
研究者のための Python による FPGA 入門
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
PPTX
Polyphony の並列化
PPTX
Polyphony: Python ではじめる FPGA
PDF
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
PDF
Synthesijer and Synthesijer.Scala in HLS-friends 201512
PDF
DATUM STUDIO PyCon2016 Turorial
PDF
Python勉強会1-はじめに
PDF
Python physicalcomputing
PDF
PyPy 紹介
PDF
第36回NDS 発表資料 ちょこっとpython
Synverll
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
マルチパラダイム型高水準ハードウェア設計環境の検討
Wrapping a C++ library with Cython
Halide, Darkroom - 並列化のためのソフトウェア・研究
PyCoRAM: Python-Verilog高位合成とメモリ抽象化によるFPGAアクセラレータ向けIPコア開発フレームワーク (FPGAX #05)
次世代言語 Python による PyPy を使った次世代の処理系開発
GPGPU Seminar (PyCUDA)
Pythonによる高位設計フレームワークPyCoRAMでFPGAシステムを開発してみよう
研究者のための Python による FPGA 入門
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Polyphony の並列化
Polyphony: Python ではじめる FPGA
PyCoRAMによるPythonを用いたポータブルなFPGAアクセラレータ開発 (チュートリアル@ESS2014)
Synthesijer and Synthesijer.Scala in HLS-friends 201512
DATUM STUDIO PyCon2016 Turorial
Python勉強会1-はじめに
Python physicalcomputing
PyPy 紹介
第36回NDS 発表資料 ちょこっとpython
Ad

More from Shinya Takamaeda-Y (20)

PDF
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
PDF
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
PDF
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
PDF
ゆるふわコンピュータ (IPSJ-ONE2017)
PDF
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
PDF
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
PDF
A CGRA-based Approach for Accelerating Convolutional Neural Networks
PDF
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
PDF
Zynq+PyCoRAM(+Debian)入門
PDF
FPGA・リコンフィギャラブルシステム研究の最新動向
PDF
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
PDF
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
PDF
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PDF
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
PDF
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
PDF
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
PDF
むかし名言集bot作りました!
PDF
APGAS言語X10を用いたオンチップネットワークシミュレーションの並列化
PDF
Mapping Applications with Collectives over Sub-communicators on Torus Network...
PDF
Network Performance of Multifunction On-chip Router Architectures (IEICE-CPSY...
ディープニューラルネットワーク向け拡張可能な高位合成コンパイラの開発
Veriloggen.Stream: データフローからハードウェアを作る(2018年3月3日 高位合成友の会 第5回 @東京工業大学)
Pythonによるカスタム可能な高位設計技術 (Design Solution Forum 2016@新横浜)
ゆるふわコンピュータ (IPSJ-ONE2017)
助教が吼える! 各界の若手研究者大集合「ハードウェアはやわらかい」
Debian Linux on Zynq (Xilinx ARM-SoC FPGA) Setup Flow (Vivado 2015.4)
A CGRA-based Approach for Accelerating Convolutional Neural Networks
コンピュータアーキテクチャ研究の最新動向〜ISCA2015参加報告〜 @FPGAエクストリーム・コンピューティング 第7回 (#fpgax #7)
Zynq+PyCoRAM(+Debian)入門
FPGA・リコンフィギャラブルシステム研究の最新動向
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
A Framework for Efficient Rapid Prototyping by Virtually Enlarging FPGA Resou...
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
A High Performance Heterogeneous FPGA-based Accelerator with PyCoRAM (Runner ...
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
PyCoRAM: Yet Another Implementation of CoRAM Memory Architecture for Modern F...
むかし名言集bot作りました!
APGAS言語X10を用いたオンチップネットワークシミュレーションの並列化
Mapping Applications with Collectives over Sub-communicators on Torus Network...
Network Performance of Multifunction On-chip Router Architectures (IEICE-CPSY...

Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)