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. ハードウェア記述言語
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
10. モジュール (Module)
n 空のモジュールを作る: Moduleオブジェクトを作成する
l 引数はモジュール名
n Moduleオブジェクトのto_verilog()メソッドを呼び出すと
文字列形式でソースコードが取得できる
2015-12-08-HLS Shinya T-Y, NAIST 10
11. 信号 (Input, Output, Wire, Reg)
n Moduleオブジェクトの信号メソッドを呼び出すと
信号がモジュールに追加される
l 引数は信号名,幅,初期値(Reg, Integerのみ)
2015-12-08-HLS Shinya T-Y, NAIST 11
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. 代入 (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. 制御 (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. サブモジュール (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
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. 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
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�