Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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
IOCh...
Veriloggen
2015-12-08-HLS Shinya T-Y, NAIST 3
実行
Verilog HDLPython
PythonでVerilog HDLを
組み立てるライブラリ
n  Pythonで書いた動作を
HDLに変換す...
GitHub/PyPiからダウンロード・インストール
n  ついさっきバージョン0.5.3をリリースしました!
n  GitHub:
https://github.com/PyHDI/veriloggen
n  PyPI (pip):
http...
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...
ハードウェア記述言語
HDL (Hardware Description Language)
n  ハードウェア設計のためのDSL
l  ソフトウェアプログラミング言語との違い
•  (多くの)プログラミング言語は逐次動作の記述のためのもの
•...
好きな言語でハードウェア開発したい
n  ハードウェア設計は言語・ツールの選択肢が少ない
l  ソフトウェア開発は用途と好みに応じて言語を選べる
•  C, C++, C#, Java, Python, Ruby, Perl, JavaScri...
Veriloggen
2015-12-08-HLS Shinya T-Y, NAIST 8
実行
Verilog HDLPython
PythonでVerilog HDLを
組み立てるライブラリ
n  Pythonで書いた動作を
HDLに変換す...
例)たくさんLEDを追加してみる
2015-12-08-HLS Shinya T-Y, NAIST 9
実行
モジュール (Module)
n  空のモジュールを作る: Moduleオブジェクトを作成する
l  引数はモジュール名
n  Moduleオブジェクトのto_verilog()メソッドを呼び出すと
文字列形式でソースコードが取得できる
201...
信号 (Input, Output, Wire, Reg)
n  Moduleオブジェクトの信号メソッドを呼び出すと
信号がモジュールに追加される
l  引数は信号名,幅,初期値(Reg, Integerのみ)
2015-12-08-HLS S...
代入 (Assign, Always)
n  Moduleオブジェクトの
Assign, Alwaysメソッドを使う
l  代入は信号オブジェクトの
呼び出しで表現: count(value)
n  Alwaysメソッド
l  センシティビティ...
代入 (Assign, Always)
n  Moduleオブジェクトの
Assign, Alwaysメソッドを使う
l  代入は信号オブジェクトの
呼び出しで表現: count(value)
n  Alwaysメソッド
l  センシティビティ...
制御 (If, For, While)
n  制御オブジェクトを作る
l  Ifオブジェクトの
ElseメソッドでElse文が書ける
l  For, While, Generateなどもある
n  制御オブジェクトもただの
Pythonのオブジ...
サブモジュール (Instance)
n  ModuleオブジェクトのInstanceメソッドで追加する
l  サブモジュール定義(sub),インスタンス名('uut'),
パラメータマップ(param_args (リスト・タプル形式)),
ポ...
コード生成 (to_verilog)
n  Moduleオブジェクトのto_verilog()メソッドを呼び出すと
文字列形式でソースコードが取得できる
n  Verilog HDLのソースコード解析・生成ツールキット
Pyverilogを利用...
既存のVerilog HDLソースコードの取り込み
n  read_verilog_module(), read_verilog_module_str()で
既存のソースコードをModuleオブジェクトに変換できる
l  辞書形式で一覧を返すの...
Veriloggen拡張ライブラリ
n  Veriloggenの基本機能はVerilog HDLと同等の記述能力
l  抽象度はほとんど変わらないが,Pythonの言語機能を利用して
Verilog HDLのソースコードを組み立てることができる...
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を
指定して...
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/P...
Upcoming SlideShare
Loading in …5
×

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

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

  • Login to see the comments

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

  1. 1. Veriloggen: Pythonによる ハードウェアメタプログラミング 高前田 伸也 奈良先端科学技術大学院大学 情報科学研究科 E-mail: shinya_at_is_naist_jp 2015年12月8日 第3回 高位合成友の会 @ドワンゴ
  2. 2. 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
  3. 3. Veriloggen 2015-12-08-HLS Shinya T-Y, NAIST 3 実行 Verilog HDLPython PythonでVerilog HDLを 組み立てるライブラリ n  Pythonで書いた動作を HDLに変換する 高位合成ではない n  Pythonのオブジェクト としてVerilogの信号や 代入を組み上げていく
  4. 4. 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�
  5. 5. 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チカチカ)
  6. 6. ハードウェア記述言語 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
  7. 7. 好きな言語でハードウェア開発したい 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
  8. 8. 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のソースコード のテキストに変換
  9. 9. 例)たくさんLEDを追加してみる 2015-12-08-HLS Shinya T-Y, NAIST 9 実行
  10. 10. モジュール (Module) n  空のモジュールを作る: Moduleオブジェクトを作成する l  引数はモジュール名 n  Moduleオブジェクトのto_verilog()メソッドを呼び出すと 文字列形式でソースコードが取得できる 2015-12-08-HLS Shinya T-Y, NAIST 10
  11. 11. 信号 (Input, Output, Wire, Reg) n  Moduleオブジェクトの信号メソッドを呼び出すと 信号がモジュールに追加される l  引数は信号名,幅,初期値(Reg, Integerのみ) 2015-12-08-HLS Shinya T-Y, NAIST 11
  12. 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 12
  13. 13. 代入 (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
  14. 14. 制御 (If, For, While) n  制御オブジェクトを作る l  Ifオブジェクトの ElseメソッドでElse文が書ける l  For, While, Generateなどもある n  制御オブジェクトもただの Pythonのオブジェクト l  定義の使い回しができる 2015-12-08-HLS Shinya T-Y, NAIST 14
  15. 15. サブモジュール (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
  16. 16. コード生成 (to_verilog) n  Moduleオブジェクトのto_verilog()メソッドを呼び出すと 文字列形式でソースコードが取得できる n  Verilog HDLのソースコード解析・生成ツールキット Pyverilogを利用 2015-12-08-HLS Shinya T-Y, NAIST 16
  17. 17. 既存の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
  18. 18. 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
  19. 19. Seq: 順序回路 2015-12-08-HLS Shinya T-Y, NAIST 19 Seqオブジェクト 生成 (count==interval-1)だったら led <= led + 1
  20. 20. 2015-12-08-HLS Shinya T-Y, NAIST 20
  21. 21. 2015-12-08-HLS Shinya T-Y, NAIST 21 FSM: 状態遷移 マシン FSM オブジェクト 生成 現在のFSM ラベル取得 次に進む 条件付きで 次に進む 現在の FSMでの 処理を追加 from/toを 指定して 状態遷移 toを 指定して 状態遷移
  22. 22. Pipeline: パイプライン回路のデータフロー設計 2015-12-08-HLS Shinya T-Y, NAIST 22 入力 Pipeline オブジェクト 生成 演算 出力
  23. 23. Pipeline: パイプライン回路のデータフロー設計 2015-12-08-HLS Shinya T-Y, NAIST 23 データフローグラフが出力できます
  24. 24. Simulation: シミュレーション支援 2015-12-08-HLS Shinya T-Y, NAIST 24 モジュール生成 パラメータ宣言を コピーする ポート宣言を コピーする 同じ名前の ポート・パラ メータを接続 クロックを作ったり リセットを作ったり 波形生成
  25. 25. Simulation: シミュレーション支援 2015-12-08-HLS Shinya T-Y, NAIST 25 テスト対象の モジュール生成 シミュレータ オブジェクト生成 シミュレータ起動 波形シミュレータ起動
  26. 26. Simulation: シミュレーション支援 n  GTKwaveで波形を観測できる 2015-12-08-HLS Shinya T-Y, NAIST 26
  27. 27. まとめ 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�

×