Xilinx High Level Synthesis(HLS)を用いた合成結果の検討
KEK 素核研
濱田 英太郎2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ1

目次• イントロダクション• SystemC• Vivado HLSを用いたsystemCの高位合成調査• まとめ

2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ2

背景• 一般的にFPGAの回路は、HDL（Hardware DescriptionLanguage：ハードウェア記述言語）を利用したRTL設計から作成
記述が困難、シミュレーションや検証に時間がかかる
組み合わせ回路>

組み合わせ回路>• クロック単位で処理を記述• クロック周波数や、信号のタイミングを意識する必要がある>• FPGAの集積度は年々増加
設計規模の増大に設計能力が追いつかない

2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

3

高位合成（High Level Synthesis：HLS）
高位合成とは…
高級プログラミング言語（CやJava等）を用いて、FPGAの回路設計を行う技術
高級プログラミング言語
data1 = 10;
data2 = 20;

組み合わせ回路

if signal_out == (data1 * data2))
return(0);else
return(1);組み合わせ回路変換>>

核融合・加速器科学分野合同計測技術ワークショップ

4>• 処理動作のアルゴリズムを直接的に記述• 高い抽象度で設計することができる• 設計生産性が飛躍的に向上• 複雑な回路を生成できる場合もある
2016/10/28

高位合成の注目の高まり(FPGAマガジン No.14より）
FPGAベンダが高位合成ツール支援に積極的
 FPGAの利用者層を広げ、応用分野を開拓!!
「業界動向」①PCやサーバ用CPUの性能向上・電力削減の煮詰まりにFPGAで対策
ムーアの法則「半導体の集積率は18か月で2倍になる」
はそろそろ限界に…

ムーアの法則（wikipediaより）集積度を高める以外の方法でプロセッサの性能向上、電力削減を実現させていかなければならない
FPGAを応用②IoTや組み込みデバイス等のCPU能力と使用可能電力が限られている環境下にFPGAを応用したい2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

5

誰でも高位合成を利用できる時代に
Vivado HLS• Xilinx社が提供する誰でも無期限に無償で利用が可能な高位合成用ツール• バージョン2016.1からwebPackでもVivado HLSが利用可能

2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

6

Vivado HLS• C、C++、SystemCの関数をVerilog HDLまたはVHDLに変換• 変換したVerilog HDLまたはVHDLファイルをIPを生成

Vivado HLSを用いてSystemCからVerilog HDLに変換した回路に注目

2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

7

SystemCとは• 抽象度の高いハードウェアや基本チャンネル
信号、タイマ、ミューテックス、セマフォシステムを記述する言語
データタイプ• C++に基づいて構築されている 基本言語
論理タイプ(0,1,x,z)、モジュール、論理ベクタ
プログラムはC++コンパイラで ポート、ビット、プロセス、C++組み込みタイプ
インターフェース
コンパイル可能

SystemC

C++「主な特徴」
1. 標準言語である
2. 異なる抽象度による表現が可能
2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

8SystemC 特徴１「標準言語である」
標準化団体であるOSCI（Open SystemC Initiative）により開発されている標準言語• 開発ツールの仕様変更の影響を受けない• 多くのツールベンダからSystemCを用いた設計ツール間で作った回路の共有が期待できる

2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

9SystemC 特徴2「異なる抽象度による表現が可能」
設計工程に応じて異なる抽象度による表現を行うことができる
要求仕様

抽象度
高い

トランザクション・レベル（TLM)

システム設計システム検証

バス・サイクル精度レベル（BCA)

アルゴリズム設計

レジスタ転送レベル（RTL)

RTL回路設計低い

アルゴリズム検証

RTL回路検証

RTLレベルのHDL記述
2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

10SystemC 特徴2「異なる抽象度による表現が可能」
設計工程に応じて異なる抽象度による表現を行うことができる
要求仕様

抽象度

バス・サイクル精度レベル（BCA)

高い
トランザクション・レベル（TLM)
バス・サイクル精度レベル（BCA)
レジスタ転送レベル（RTL)低い
RTLレベルのHDL記述
2016/10/28

モジュール
システム設計モジュール

システム検証アルゴリズム設計• 入出力インターフェースについては、RTLと同じサイクル精度• 各モジュールの本体は、高い抽象度のクロック単位の設計が可能
RTL回路設計
アルゴリズム検証

RTL回路検証

Vivado HLSを利用すれば、バス・サイクル精度レベルの記述から HDLを作れるかも!!

核融合・加速器科学分野合同計測技術ワークショップ

11SystemCバス・サイクル精度(BCA)レベル
調査方法①SystemC バス・サイクル精度レベル コード設計

Vivado HLS 2016.1
及びgtkwaveを利用②SystemC バス・サイクル精度レベル 検証③高位合成

Vivado 2016.1
を利用

2016/10/28

2つの検証結果が期待通りになるかどうかを調査する④Verilog HDLで書かれた
コードﾞの動作検証

核融合・加速器科学分野合同計測技術ワークショップ

12

コード内容「SiTCPのスローコントロールでのデータ書き込み」を想定
CLK
RBCP_ACT
自分で作成する回路

RBCP_ADDRRBCP_WE

SiTCP

RBCP_WD
RBCP_ACK

自分で作成する回路• RBCP_ACTとRBCP_WEがどちらもHの場合、内部信号reg_writeをHにする• RBCP_ACTとRBCP_WEがどちらもHになったときの1クロック後、RBCP_ACKをHにする
2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

13

①SystemC バス・サイクル精度レベル コード設計
Vivado HLSでコードを作成 （下記はコードの一部）
while(1){

RBCT_ACTとRBCT_WEが両方Hなら…

if(RBCT_ACT.read() == true && RBCT_WE.read() == true){
reg_write.write(true);
内部信号reg_writeをHにする
reg_addr.write(RBCT_ADDR.read());
1クロック待つwait();
reg_write.write(false);
RBCT_ACK.write(true);wait();
RBCT_ACK.write(false);
wait();}
wait();}
2016/10/28

内部信号reg_writeをLにする
RBCT_ACKをHにする
1クロック待つ

RBCT_ACKをLにする

ソフトウェアプログラミングのような流れでコードを作成
核融合・加速器科学分野合同計測技術ワークショップ

14②SystemC バス・サイクル精度レベル 検証
Vivado HLSで検証（シミュレーションを行う）

シミュレーション
結果ファイル2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

15

②SystemC バス・サイクル精度レベル 検証
gtkwaveを利用してresult.vcdを確認• RBCP_ACTとRBCP_WEがどちらもHの場合、内部信号reg_writeがHになっている• RBCP_ACTとRBCP_WEがどちらもHになったときの1クロック後、RBCP_ACKがHになっている

期待通りの動作になっている
2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

16

③高位合成Vivado HLSで高位合成

高位合成
結果ファイル2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ17

④Verilog HDLで書かれたコードﾞの動作検証
VivadoでVerilog HDLファイルを検証（シミュレーション）• RBCP_ACTとRBCP_WEがどちらもHの場合、内部信号reg_writeがHにならない• RBCP_ACTとRBCP_WEがどちらもHになったときの1クロック後、RBCP_ACKがHにならない

期待通りの動作にならない
2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

18

他のコード• 他のコードでも同様のテストを行なう• 出力信号がでなかったり、数クロック遅れて信号が出力されたり、と期待する動作をしてくれない「結論」
Vivado HLSではSystemCのバス・サイクル精度レベル(BCA)
コードをそのまま高位合成しても、期待通りの動作にならない

2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

19

まとめ• 高位合成とは高級プログラミング言語（CやJava等）を用いて、FPGAの回路設計を行う技術• SystemCとは抽象度の高いハードウェアやシステムを記述する言語• Vivado HLSはSystemCを高位合成することができる無償のツール• Vivado HLSを用いて、SystemCのバス・サイクル精度レベル(BCA)を高位合成する調査を行なったが、期待通りの動作にならなかった
2016/10/28

核融合・加速器科学分野合同計測技術ワークショップ

20