6. Veriloggenとその他の処理系との違い
n 高位合成や高位DSLはソースコードそのものが回路定義
l リフレクションを利用:ソースコード情報を取得
l ソースコードを「コンパイラで」解析しデータフロー等に変換
l 回路を追加するにはソースコードを追加する必要がある
• 頻出パターンもコード化しないといけないL
l 生成元言語のサブセットのみ対応L
n Veriloggenは明示的にHDLを組み立てる
l リフレクション未使用:ソースコードそのもの定義は無関係
l ソースコードの「実行」によりデータフロー等を構築
l 回路の追加は明示的なオブジェクト操作で実現される
• 頻出パターンはメソッド切り出しができるJ
l 生成元言語のすべての機能を利用できるJ
l ソフトウェア文法をそのままHW化はできないL
Trax2016-03 Shinya T-Y, NAIST 6
7. ソフトウェア要件
n 対応OS:Pythonとiverilogが動作すれば何でもOKなはず
l 普段は Ubuntu 14.04とMac OS X 10.11 で検証しています
n 必要なソフトウェア
l Icarus Verilog: 0.9.6 以上(ただし10.xはNG)
l Python: 2.7 or 3.4 以上(3.5がおすすめ)
l Python pip(Pythonパッケージ管理ソフトウェア): 7.1.2 以上
l virtualenv(Python仮想環境管理ツール,推奨): 12.0.7 以上
• "pip install virtualenv" でインストールできる
l pytest, pytest-pythonpath(テスト用ツール,必要があれば)
• pytest: 2.8.2, pytest-pythonpath: 0.7 以上
• "pip install pytest pytesth-pythonpath" でインストールできる
l git(バージョン管理,推奨)
Trax2016-03 Shinya T-Y, NAIST 7
8. Getting Started, Veriloggen!
n python3, pip, virtualenvはインストール済みとします
n Virtualenv環境を作る
n Veriloggenをインストールする
l スライド作成時(2016年3月1日)の最新版 0.6.1
n 以上(簡単でしょ?)
mkdir test_vg
cd test_vg
virtualenv --python=python3 .
source bin/activate
pip install pytest pytest-pythonpath
pip install veriloggen
Trax2016-03 Shinya T-Y, NAIST 8
9. 再掲: Veriloggenを用いたRTL設計フロー
Design Generator by Python
from veriloggen import *
m = Module('blinkled')
clk = m.Input('CLK')
led = m.Output('LED', 8)
count = m.Reg('count', 32)
m.Assign( led(count[31:24]) )
m.Always(Posedge(clk)(
count( count + 1 ) )
hdl = m.to_verilog()
print(hdl)
blinkled
CLK RST
LED count
assign
always
Veriloggen Object
module blinkled (
input CLK,
output [7:0] LED
);
reg [31:0] count;
assign LED = count[31:24];
always @(posedge CLK) begin
count <= count + 1;
end
endmodule
Verilog Source Code
module
input
CLK
input
RST
blinkled
Verilog AST
to_verilog()
Verilog
AST
Generator
Verilog
Code
Generator
Run on Python Interpreter
Verilog HDLコードの
組み立てルールをPythonの
言語機能を活用して記述
Verilog HDLによる回路記
述・
テストベンチが生成される
実行
Trax2016-03 Shinya T-Y, NAIST 9
17. fsm_example.py (1): 入出力・FSMオブジェクト
n 好きに入出力を定義する(Input, Output, Reg, ...)
n FSMオブジェクトを作る
l FSMオブジェクトにステート遷移情報を追加していく
Trax2016-03 Shinya T-Y, NAIST 17
32. Dataflowライブラリを使ってみる: FFT
n veriloggen/examples/dataflow_fft4 を開く
l 他にも dataflow_fftN, dataflow_sort, dataflow_matmul がある
n 動かしてみる
n こんな感じ
l 左は整数としての結果,右は固定小数としての結果
cd veriloggen/examples/dataflow_fft4
emacs dataflow_fft4.py
python3 dataflow_fft4.py
Trax2016-03 Shinya T-Y, NAIST 32
33. Dataflowライブラリを使ってみる: ソート
n veriloggen/examples/dataflow_sort を開く
n 動かしてみる
n こんな感じ
l 入力は [100, 99, 98, ..., 93]
l 出力は [93, ..., 98, 99, 100]
になるはず
l 上がIcarus Verilogでの結果
l 下がSWとして同一メソッドの
実行結果→一致している!
cd veriloggen/examples/dataflow_sort
emacs dataflow_sort.py
python3 dataflow_sort.py
Trax2016-03 Shinya T-Y, NAIST 33
34. まとめ
n Veriloggenは便利!
l 安定版はPyPIから
l 最新版はGitHubからどうぞ
git clone https://github.com/PyHDI/veriloggen.git
pip install veriloggen
Trax2016-03 Shinya T-Y, NAIST 34