FPGAによるI/Oインテンシブなデータ 
処理の高性能化 
株式会社イーツリーズ・ジャパン/わさらぼ合同会社 
三好 健文 
2014.12.1
Authentication 
2 
(株)イーツリーズ・ジャパン 
FPGAでWeb(キャッシュ)サーバを作ってきた(いる)会社 
2000 
2002 
2004 
2006 
2008 
2010 
2012 
TCP HTTP/1.0 
IPv4 
TCP band width ctrl. 
IPv6 Redundant load balancing 
IP filter 
TCP port forwarding 
HTTP/1.1 
“FPGA” で “高速ネットワーク処理” 
〜2014
3 
わさらぼ合同会社 - Synthesijer 
✔ JavaプログラムをFPGA上のハードウェアに変換する高位合成処理系 
✔ ソフトウェアとして実行可能.動作の確認、検証に 
✔ 複雑なアルゴリズムのハードウェア実装が楽に 
✔ オブクジェクト指向設計による再利用性の向上 
✔ 特殊な記法,追加構文はない 
Opensource 
http://synthesijer.sourceforge.net 
✔ 書けるプログラムに制限は加える(動的なnew,再帰などは不可) 
Javaコンパイラ 
フロントエンド 
HW開発フロー 
Synthesijer 
エンジン 
Javaコンパイラ 
バックエンド 
合成 
配置配線 
while(){ 
if(...){ 
… 
}else{ 
… 
… 
} 
…. 
} 
(いつもの)SW開発フロー 
複雑な状態遷移も,Javaの制御構文を使って楽に設計できる同じJavaプログラムをソフトウェアとしても 
FPGA上のハードウェアとしても実行可能
4 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について
5 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について
6 
FPGAとは? 
Field Programmable Gate Array 
✔ 論理回路・データパスを自由に作り込めるLSI 
✔ クロックレベルの同期と並列性を活用した処理を実現
7 
FPGAとは? 
Field Programmable Gate Array 
✔ 論理回路・データパスを自由に作り込めるLSI 
✔ I/Oを自由に使える
8 
FPGAとは? 
Field Programmable Gate Array 
✔ 論理回路・データパスを自由に作り込めるLSI 
✔ I/Oを自由に使える 
✔ クロックレベルの同期と並列性を活用した処理を実現
9 
FPGAとは? 
Field Programmable Gate Array 
✔ 論理回路・データパスを自由に作り込めるLSI 
✔ I/Oを自由に使える 
✔ クロックレベルの同期と並列性を活用した処理を実現 
✔ ASIC開発のプロトタイプとして 
✔ 特定用途向け(少数生産)の製品として
10 
FPGAの中身についてもう少し 
“論理回路を作り込める”仕組み 
Xilinx社 Virtex-7のSliceの構造Altera社 Stratix-VのLABの構造 
Xilinx, WP405 Altera, Logic Array Blocks and Adaptive Logic Modules in Stratix V Devices 
01 
00 
2 0 
63 1 
〜〜 
〜〜
11 
FPGAの中身についてもう少し 
“論理回路を作り込める”仕組み 
✔ 汎用の論理構成要素 
+ 
✔ 多ポートの内蔵メモリ 
✔ DSP 
✔ DDRメモリコントローラ 
✔ 高速I/Oコントローラ(SERDES,符号化ユニット) 
✔ 汎用マイクロプロセッサ
Ratio = FPGA/ASIC, 種々のベンチマークの相乗平均 
12 
FPGAの中身についてもう少し 
“論理回路を作り込める”仕組みのオーバヘッド 
Logic Only Logic & DSP Logic & 
Memory 
Logic, Memory 
& DSP 
Area Ratio 40 28 37 21 
Critical Path 
Delay(Fastest Grade) 3.2 3.4 2.3 2.1 
Critical Path 
Delay(Slowest Grade) 4.3 4.5 3.1 2.8 
Dynamic Power 
Consumption 12 12 9.2 9.0 
[7] I. Kuon and J. Rose, “Measuring the gap between fpgas and asics,” 
Proceedings of the 2006 ACM/SIGDA 14th Inter- national Symposium on Field Programmable Gate Arrays, pp.21–30, 
FPGA ’06, ACM, New York, NY, USA, 2006.
13 
FPGAとは? 
Field Programmable Gate Array 
✔ 論理回路・データパスを自由に作り込めるLSI 
✔ I/Oを自由に使える 
✔ クロックレベルの同期と並列性を活用した処理を実現 
✔ ASIC開発のプロトタイプとして 
✔ 特定用途向け(少数生産)の製品として
14 
プラットフォームとしてのFPGA 
プロセッサの場合 
FPGAの場合高性能 
低消費電力 
コンパクト
15 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について
16 
“アプリケーション”は様々 
EE Times - Google's Project ARA Smartphones to Use Lattice ECP5 FPGAs 
http://www.eetimes.com/document.asp?doc_id=1321936 
FPGA入門 - どこで使われているか? 
http://www.fpga.co.jp/nyumon2.html
17 
“アプリケーション”は様々 
Node 0 
Node 1 
Node N 
+ Node i 
Op 
Op 
Op 
... 
e-trees.Japanの場合 
などなど
18 
アプリケーション研究事例 
@FCCM2014,FPL2014,FPGA2014 
- Fast, Power-Efficient Biophotonic Simulations for Cancer Treatment Using FPGAs 
- SMCGen: Generating Reconfigurable Design for Sequential Monte Carlo Applications 
- FPGA Gaussian Random Number Generators with Guaranteed Statistical Accuracy 
- FPGA Implementation of EM Algorithm for 3D CT Reconstruction 
- A Scalable Multi-engine Xpress9 Compressor with Asynchronous Data Transfer 
- FPGA Accelerated Online Boosting for Multi-target Tracking 
- High-Throughput Implementation of a Million-Point Sparse Fourier Transform 
- Power-efficient Re-gridding Architecture for Accelerating Non-uniform Fast Fourier Transform 
- Radix-4 and Radix-8 Booth Encoded Interleaved Modular Multipliers Over General Fp 
- Dataflow Acceleration of Krylov Subspace Sparse Banded Problems 
- A Highly-efficient and Green Data Flow Engine for Solving Euler Atmospheric Equations 
- An Efficient FPGA-based Hardware Framework for Natural Feature Extraction and Related Computer Vision Tasks 
- An Efficient Sparse Conjugate Gradient Solver Using a Benes Permutation Network 
- Efficient 3D Triangulation in Hardware for Dense Structure-from-Motion in Low-Speed Automotive Scenarios 
- FPGA-based Biophysically-Meaningful Modeling of Olivocerebellar Neurons 
- Square-Rich Fixed Point Polynomial Evaluation on FPGAs 
- Hardware Acceleration of Database Operations 
- A Scalable Sparse Matrix-Vector Multiplication Kernel For Energy-Efficient Sparse-BLAS On FPGAs 
- Binary Stochastic Implementation of Digital Logic 
- Accelerating Parameter Estimation for Multivariate Self-Exciting Point Processes 
- Energy-Efficient Multiplier-Less Discrete Convolver through Probabilistic Domain Transformation 
- …..
19 
アプリケーション研究事例 
FPGAドミナントではない会議での事例 
- The Click2NetFPGA Toolchain @USENIX ATC2012 
- SURF Algorithm in FPGA: a Novel Architecture for High Demanding Industrial Applications @DATE2012 
- Achieving 10Gbps line-rate key-value stores with FPGAs @USENIX HotCloud 2013 
- FPGA Acceleration for the Frequent Item Problem @ICDE 2010 
- An FPGA-based pattern classifier using data compression @IEEEI 2010 
- A reconfigurable fabric for accelerating large-scale datacenter services @ISCA 2014 
- LINQits: big data on little clients @ISCA 2013 
- Parallel Real-time Garbage Collection of Multiple Heaps in Reconfigurable Hardware @ISMM2014 
- Accelerating Machine-Learning Algorithms on FPGAs using Pattern-Based Decomposition @J. of Sig. Process. Syst. 
- Willow: A User-Programmable SSD @USENIX OSDI2014 
- Hardware Enforcement of Application Security Policies Using Tagged Memory @USENIX OSDI2008 
- Histograms as a Side Effect of Data Movement for Big Data @SIGMOD2014 
- Flexible Query Processor on FPGAs @VLDB2013 
- Complex Event Detection at Wire Speed with FPGAs @VLDB2010 
- Data Processing on FPGAs @VLDB2009 
- ….. 
などなどなど沢山
20 
“アプリケーション”は様々 
今回は “I/Oインテンシブ” で “高性能” な話 
FPGA 
高いスループットでたくさんのデータを処理
21 
“アプリケーション”は様々 
今回は “I/Oインテンシブ” で “高性能” な話 
1) http://www.theregister.co.uk/Print/2011/12/12/ibm_vs_oracle_data_centre_optimisation/ 
2) http://www.redbooks.ibm.com/redpapers/pdfs/redp4725.pdf 
DB,金融,油田探索... 
1) 
2) 
例: IBM Netteza
22 
アプリケーション研究事例 
FPGAドミナントではない会議での事例 
- The Click2NetFPGA Toolchain @USENIX ATC2012 
- SURF Algorithm in FPGA: a Novel Architecture for High Demanding Industrial Applications @DATE2012 
- Achieving 10Gbps line-rate key-value stores with FPGAs @USENIX HotCloud 2013 
- FPGA Acceleration for the Frequent Item Problem @ICDE 2010 
- An FPGA-based pattern classifier using data compression @IEEEI 2010 
- A reconfigurable fabric for accelerating large-scale datacenter services @ISCA 2014 
- LINQits: big data on little clients @ISCA 2013 
- Parallel Real-time Garbage Collection of Multiple Heaps in Reconfigurable Hardware @ISMM2014 
- Accelerating Machine-Learning Algorithms on FPGAs using Pattern-Based Decomposition @J. of Sig. Process. Syst. 
- Willow: A User-Programmable SSD @USENIX OSDI2014 
- Hardware Enforcement of Application Security Policies Using Tagged Memory @USENIX OSDI2008 
- Histograms as a Side Effect of Data Movement for Big Data @SIGMOD2014 
- Flexible Query Processor on FPGAs @VLDB2013 
- Complex Event Detection at Wire Speed with FPGAs @VLDB2010 
- Data Processing on FPGAs @VLDB2009 
- ….. 
などなどなど沢山
23 
freeocean@e-trees.Japan 
FPGA によるWebサーバー 
ネットワークI/F 100/1000BASE-T x 4 
対応プロトコルHTTP/1.1, (IPv4, IPv6, TCP, ICMP) 
メモリ(コンテンツ用) DDR2 SDRAM 4GB〜32GB 
最大同時コネクション数491,520 
サイズ1.5U(430x603x66 mm) 
最大消費電力300W未満
24 
freeocean@e-trees.Japan 
Ethernet IP 
TCP 
HTTP 
Ethernet IP 
TCP 
・・・ 
TCP 
TCP 
TCP 
・・・ 
TCP 
HTTP 
HTTP 
Filesystem 
+ 
Storage 
* モジュール構成はイメージです 
✔ 専用回路ならではの並列性の活用
25 
freeocean@e-trees.Japan 
✔ 専用回路ならではの並列性の活用 
KBps
26 
freeocean@e-trees.Japan 
✔ [参考] 今時のApache/PCにabで負荷をかけてみる 
✔ PCのスペック 
✔ 結果 
CPU Intel(R) Core(TM) i5-3570 CPU@3.4GHz 
メモリ 32GB 
ディスク Intel SSDC2W24 
OS Fedora release 17 
Apache Apache/2.2.23 
➔ 1kB ➔ 1MB 
並列度スループット(kBps) 
10 40225 
100 48865 
1000 12494 
並列度スループット(kBps) 
10 114565 
100 114568 
1000 N/A
27 
Memcached@Xilinx, ETH Zurich 
10G if 
Network stack Memcached 
DRAM 
Network 
adapter 
FPGA 
x86 DRAM 
motherboard 
Hash table Value store 
✔ Memcached部分はデータフローアーキテクチャ 
✔ レイテンシ = 481Cycles@156MHz 
https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf
28 
Memcached@Xilinx, ETH Zurich 
https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf
29 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について
30 
I/O処理システムとしてのFPGA 
✔ FPGAが持っているI/Oと関連コンポーネント 
✔ I/O性能の予備的な評価 
✔ 高性能化のためのアーキテクチャ設計
31 
I/Oと関連コンポーネント 
✔ 汎用入出力ポート (GPIO) 
✔ 高速シリアル通信ブロック 
✔ 光トランシーバ
32 
汎用入出力ポート 
✔ いろいろな用途に使われる 
✔ LEDチカチカとか...だけじゃない!! 
Xilinx, WP393 より 
✔ HP I/Oは1,866Mb/s(DDR3)や1,600Mb/s LVDSをサポート
33 
高速シリアル通信ブロック 
✔ 12.5Gb/s,13.1Gbpsといった高速転送をサポート 
✔ PCIeやSATA,あるいは生で利用. 
Xilinx, UG476 より
34 
FPGA x 光 
12chの高速トランシーバを光で伝送 
http://www.hitechglobal.com/Boards/Virtex7_PCIE_Gen3.htm
35 
I/O性能の予備的な評価 
✔ システムを作るにはI/Oは必須 
✔ 作り始める前に大体の性能を知っておきたい 
FPGA 
GbE, 10GbE 
例えば↓のようなシステムを想定したときの 
だいたいの性能見積もりをしたい 
PCIe 
SATA 
HDD,SSD 
ホストコンピュータ 
LAN 
WAN
36 
GbE 
GMII,RGMIIやSGMIIでPHYとFPGAを接続 
✔ PCS/PMA/PMDはPHYがやってくれる 
✔ FPGAは125MHz*8bitでEthernetフレームを送受 
FPGA 
PHY 
(ex. 88E1111) 
8-bit TX/RX 
MAC層 
@125MHz 
プリアンブルSFD 送り先MACアドレス送り先MACアドレスPID データSFD
37 
GbE 
FPGAによるUDP/IPプロトコルスタックの転送性能 
(e7UDP/IP @ e-trees.Japan) 
UDP 
データ長 
Ethernet/IP/ 
UDPヘッダ長 
Ethernetプリアンブル/ 
FCS/フレーム間ギャップ 
トータルパケット 
占有長(Octet) 
最大パケット 
数/1Gbps 
最大UDP 
転送データレート 
(Mbps) 
64 14+20+8 8+4+12 130 961538 492.3 
256 14+20+8 8+4+12 322 388198 795.0 
1024 14+20+8 8+4+12 1090 114678 939.4 
1472 14+20+8 8+4+12 1538 81274 957.1
38 
10GbE 
SFIでSFP+と接続 
FPGA 
10.3125Gbps 
高速シリアルI/O 
PCS/ 
PMA層 
MAC層 
64-bit TX/RX 
@156.25MHz 
プリアンブルSFD 送り先MACアドレス送り先MACアドレスPID データSFD 
GbEの時の1/8のサイクル数でヘッダを処理しなければいけない!!
39 
10GbE 
10GbEのコアを対向で接続したときの 
折り返しレイテンシとスループットを測定 
= 約9.3Gbpsの転送レートは達成できている
40 
PCIe Gen2 
✔ よくあるアクセラレータの実装を想定 
✔ KC705
41 
PCIe Gen2
FPGA VC709 
42 
PCIe Gen3 
PCIe 
Integrated 
Block 
cc 
cq 
pcie2axilite 
(xapp1201) 
rc 
rq bmd_writer/ 
bmd_reader 
config./ 
status 
DMA 
Engine 
SW 
Host 
Memory MIG 
On-board 
DDR3 
int. Controller 
FIFO 
FIFO 
axi_writer 
axi_reader 
bmd_writer/ 
bmd_reader 
AXI-ST 
256bit 
250MHz 
AXI-MM 
256bit 
250MHz 
PC->FPGA: 2KByte 
FPGA->PC: 128Byte 
src(64bit), dest(64bit), 
Length(<= 8MB), dir
43 
PCIe Gen3 
✔ *** Gen2 x8での読み書き性能の測定結果 
Write (FPGA Board DDR3 -> Host Memory) 
0 2000 4000 6000 8000 1000012000140001600018000 
1600 
1400 
1200 
1000 
800 
600 
400 
200 
0 
Bytes 
MBps 
Read (Host Memory -> FPGA Board DDR3) 
0 2000 4000 6000 8000 1000012000140001600018000 
2000 
1800 
1600 
1400 
1200 
1000 
800 
600 
400 
200 
0 
Bytes 
MBps
44 
SATA 
✔ e7SATA: コア+専用FPGAボード2Gb DDR3L 
Spartan6 
XC6SLX45T 
FMC
45 
SATA 
✔ e7SATA: コア+専用FPGAボード
46 
SATA 
✔ e7SATA FPGAボード内での読み出し性能測定 
0 500000 1000000 1500000 2000000 2500000 3000000 3500000 4000000 4500000 
300 
250 
200 
150 
100 
50 
0 
Micron 
Intel 
Fujitsu(1st) 
Fujitsu (2nd〜) 
Bytes 
Micron: RealSSD C400, Intel: Intel SSD 330 Series, Fujitsu: MHV2080BS(HDD) 
MBps
47 
LVDSによる高速通信 
これを活用して,1.6Gbpsなどの高速通信を行う
48 
LVDSによる高速通信 
たとえばADC/DACなどを接続するとき 
ADC→FPGA: 245.76MHz DDR * 14bit 
FPGA→DAC: 491.52MHz DDR * 8bit 
http://www.sdlabo.org 
FMC150@4DSP
データはどうせ移動させる 
移動途中で副次的に処理できる 
49 
なぜFPGAでデータ処理をするか? 
10G if 
Network stack Memcached 
DRAM 
Network 
adapter 
FPGA 
x86 DRAM 
motherboard 
Hash table Value store 
図は https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf より
50 
高性能化のためのアーキテクチャ 
✔ 組み合わせ回路(アプリケーション特化演算器)と 
データ並列性の活用 
✔ パイプライン並列化 
✔ データハンドリング機構 
リソース使用量,配線遅延を考慮しつつ 
性能を最大化する実装をみつける必要がある
51 
駄目な例 
... 
signal c: unsigned(WIDTH-1 downto 0); 
… 
process(clk) 
begin 
if clk'event and clk = '1' then 
c <= c + 1; 
end if; 
end process; 
...
52 
組み合わせ回路/データ並列性の活用 
✔ プロセッサと比べてFPGA回路のφは圧倒的に低速 
✔ 高速データ処理では1クロックでデータを捌く必要も 
✔ 時にはソフトウェア実装とは全く違う場合も 
条件 
・・・ 
条件 
v.s
53 
パイプライン並列化 
FIFO 
w [byte] 
f [Hz] 
実行 
ステージ 
スループット T [bps] 
FIFO 
実行 
ステージ 
実行 
ステージ 
パケットデータが d [byte] のとき全データ入力を受け取るのにかかる時間 = (d/w)*(1/f) [sec] 
同様に、全データの出力にかかる時間 = (d/w)*(1/f) [sec] 
スループットT [bps]を実現するとき、パケットデータを(8*d)*(1/T) [sec]内で処理し続ける必要がある 
→ 各モジュールで処理に使える時間 t は 8*d/T-2*d/(w*f) [sec] → (8*d/T-2*d/(w*f))/(1/f) [cycle] 
 たとえば、d=1500, T=1G, w=4, f=100Mのとき 
 1パケットあたりの処理にかけられるサイクル数は450サイクル. 
    f=200Mなら1650サイクル,w=16なら1012サイクル
54 
データハンドリング機構 
✔ I/O(外部メモリや各種I/F)は共有する必要がある 
✔ データ処理結果の一時的なバッファリングが必要 
(FIFOやBRAMを使用することが多い) 
✔ そんなに大きくはない + 自分で管理する必要がある 
ハンドシェイクジョインの出力をうまく捌くための適応型マージネットワークの例
55 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について
56 
FPGAの開発環境について 
✔ 開発フロー 
✔ 標準インターフェースでIPの活用が容易に(なりつつある) 
✔ 様々なDSLベースのFPGAシステム開発 
✔ 高位合成言語/高位合成処理系による開発
57 
開発フロー 
ある程度のパソコンで設計可能 
HDLを使ったRTL設計で所望のモジュールを実装 
RTLシミュレーションによる動作検証 
使用するFPGAにあわせた制約を定義 
ツールで合成,配置配線,FPGA構成情報生成 
実機で動作確認
58 
開発フロー 
開発の様子の例
59 
開発フロー 
ある程度のパソコンで設計可能 
HDLを使ったRTL設計で所望のモジュールを実装 
RTLシミュレーションによる動作検証 
使用するFPGAにあわせた制約を定義 
ツールで合成,配置配線,FPGA構成情報生成 
実機で動作確認 
結構つらい,時間がかかる
60 
標準I/FによるIPの活用 
✔ 検証済みモジュールを組み合わせてシステムを設計 
✔ 浮動小数点数演算コア 
✔ FFT 
✔ ビデオエンコーダ 
✔ プロトコルスタック などなどなど 
✔ AXI,Avalonといった標準I/FをFPGAベンダが定義
61 
IPの活用 
Xilinx IPインテグレータの設計画面の例
62 
IP接続向けの標準I/F 
✔ AXIやAvalonといたインターフェース 
✔ メモリマップド or ストリーム 
クロック 
リセット 
アドレス 
長さ 
サイズ 
各種ctrl/設定 
データ 
ストローブ 
データ有効 
各種ステータス 
データ 
ストローブ 
データ有効
63 
様々なDSLベースのシステム開発(1) 
RTL設計(あるいは少し抽象的なHW設計)を 
より楽にするためのDSL 
✔ MyHDL (Pythonベース) 
✔ JHDL (Javaベース) 
✔ Chisel (Scalaベース) 
✔ MaxCompiler (Javaベース) 
などなどなど
64 
様々なDSLベースのシステム開発(2) 
使用するプログラミングモデルに特化したDSL 
✔ Bluespec (並行プログラミング) 
✔ DIL (パイプラインプログラミング) 
✔ FloPoCo (浮動小数点数パイプライン) 
などなどなど
65 
様々なDSLベースのシステム開発(3) 
実装したいアプリケーションに特化したDSL 
✔ Spiral ←Linear Digital Processing 
✔ HDL Coder ← 信号処理(Matlab) 
✔ Optimus ← ストリーム処理 
✔ LINQ ← クエリプロセッシング 
などなどなど 
✔ DSLを作るツールも.(たとえば,LMS/Scala)
66 
Synthesijer.scala とは 
私もSynthesijer.scalaというのを設計中 
✔ ''Scala''ベースのDSL 
✔ signal, port: 状態を変更可能なオブジェクト 
✔ expr: 副作用なしの式 
✔ sequencer: 状態遷移機械 
✔ module: モジュール全体 
✔ 上記のオブジェクトをScalaでインスタンス化.つなぎ合わせる.
67 
Synthesijer.scala の例(1) 
✔ Lチカ 
def generate_led() : Module = { 
val m = new Module("led") 
val q = m.outP("q") 
val counter = m.signal(32) 
q <= ref(counter, 5) 
val seq = m.sequencer("main") 
counter <= (seq.idle, VECTOR_ZERO) 
val s0 = seq.idle -> seq.add() 
counter <= (s0, counter + 1) 
return m 
} 
def generate_sim(target:Module, name:String) : SimModule = { 
val sim = new SimModule(name) 
val inst = sim.instance(target, "U") 
val (clk, reset, counter) = sim.system(10) 
inst.sysClk <= clk 
inst.sysReset <= reset 
return sim 
}
68 
高位合成言語/高位合成処理系 
✔ Vivado HLS 
✔ OpenCL対象の処理系 
✔ CyberWorkBench 
✔ Cynthesizer 
✔ Symphony C Compiler 
✔ ImpulseC 
✔ Lime 
などなどなど 
...私もSynthesijerを設計中
69 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について
70 
ポテンシャルをどう活かすか!! 
https://www.youtube.com/watch?v=FCmfcfPt4T4
71 
牧本先生の講演を生で
72 
コンテンツ 
✔ FPGAとは? 
✔ FPGAを使ったアプリケーション研究開発事例 
✔ データ(I/O)処理システムとしてのFPGA 
✔ FPGAの開発環境について

ICD/CPSY 201412

  • 1.
  • 2.
    Authentication 2 (株)イーツリーズ・ジャパン FPGAでWeb(キャッシュ)サーバを作ってきた(いる)会社 2000 2002 2004 2006 2008 2010 2012 TCP HTTP/1.0 IPv4 TCP band width ctrl. IPv6 Redundant load balancing IP filter TCP port forwarding HTTP/1.1 “FPGA” で “高速ネットワーク処理” 〜2014
  • 3.
    3 わさらぼ合同会社 -Synthesijer ✔ JavaプログラムをFPGA上のハードウェアに変換する高位合成処理系 ✔ ソフトウェアとして実行可能.動作の確認、検証に ✔ 複雑なアルゴリズムのハードウェア実装が楽に ✔ オブクジェクト指向設計による再利用性の向上 ✔ 特殊な記法,追加構文はない Opensource http://synthesijer.sourceforge.net ✔ 書けるプログラムに制限は加える(動的なnew,再帰などは不可) Javaコンパイラ フロントエンド HW開発フロー Synthesijer エンジン Javaコンパイラ バックエンド 合成 配置配線 while(){ if(...){ … }else{ … … } …. } (いつもの)SW開発フロー 複雑な状態遷移も,Javaの制御構文を使って楽に設計できる同じJavaプログラムをソフトウェアとしても FPGA上のハードウェアとしても実行可能
  • 4.
    4 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について
  • 5.
    5 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について
  • 6.
    6 FPGAとは? FieldProgrammable Gate Array ✔ 論理回路・データパスを自由に作り込めるLSI ✔ クロックレベルの同期と並列性を活用した処理を実現
  • 7.
    7 FPGAとは? FieldProgrammable Gate Array ✔ 論理回路・データパスを自由に作り込めるLSI ✔ I/Oを自由に使える
  • 8.
    8 FPGAとは? FieldProgrammable Gate Array ✔ 論理回路・データパスを自由に作り込めるLSI ✔ I/Oを自由に使える ✔ クロックレベルの同期と並列性を活用した処理を実現
  • 9.
    9 FPGAとは? FieldProgrammable Gate Array ✔ 論理回路・データパスを自由に作り込めるLSI ✔ I/Oを自由に使える ✔ クロックレベルの同期と並列性を活用した処理を実現 ✔ ASIC開発のプロトタイプとして ✔ 特定用途向け(少数生産)の製品として
  • 10.
    10 FPGAの中身についてもう少し “論理回路を作り込める”仕組み Xilinx社 Virtex-7のSliceの構造Altera社 Stratix-VのLABの構造 Xilinx, WP405 Altera, Logic Array Blocks and Adaptive Logic Modules in Stratix V Devices 01 00 2 0 63 1 〜〜 〜〜
  • 11.
    11 FPGAの中身についてもう少し “論理回路を作り込める”仕組み ✔ 汎用の論理構成要素 + ✔ 多ポートの内蔵メモリ ✔ DSP ✔ DDRメモリコントローラ ✔ 高速I/Oコントローラ(SERDES,符号化ユニット) ✔ 汎用マイクロプロセッサ
  • 12.
    Ratio = FPGA/ASIC,種々のベンチマークの相乗平均 12 FPGAの中身についてもう少し “論理回路を作り込める”仕組みのオーバヘッド Logic Only Logic & DSP Logic & Memory Logic, Memory & DSP Area Ratio 40 28 37 21 Critical Path Delay(Fastest Grade) 3.2 3.4 2.3 2.1 Critical Path Delay(Slowest Grade) 4.3 4.5 3.1 2.8 Dynamic Power Consumption 12 12 9.2 9.0 [7] I. Kuon and J. Rose, “Measuring the gap between fpgas and asics,” Proceedings of the 2006 ACM/SIGDA 14th Inter- national Symposium on Field Programmable Gate Arrays, pp.21–30, FPGA ’06, ACM, New York, NY, USA, 2006.
  • 13.
    13 FPGAとは? FieldProgrammable Gate Array ✔ 論理回路・データパスを自由に作り込めるLSI ✔ I/Oを自由に使える ✔ クロックレベルの同期と並列性を活用した処理を実現 ✔ ASIC開発のプロトタイプとして ✔ 特定用途向け(少数生産)の製品として
  • 14.
    14 プラットフォームとしてのFPGA プロセッサの場合 FPGAの場合高性能 低消費電力 コンパクト
  • 15.
    15 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について
  • 16.
    16 “アプリケーション”は様々 EETimes - Google's Project ARA Smartphones to Use Lattice ECP5 FPGAs http://www.eetimes.com/document.asp?doc_id=1321936 FPGA入門 - どこで使われているか? http://www.fpga.co.jp/nyumon2.html
  • 17.
    17 “アプリケーション”は様々 Node0 Node 1 Node N + Node i Op Op Op ... e-trees.Japanの場合 などなど
  • 18.
    18 アプリケーション研究事例 @FCCM2014,FPL2014,FPGA2014 - Fast, Power-Efficient Biophotonic Simulations for Cancer Treatment Using FPGAs - SMCGen: Generating Reconfigurable Design for Sequential Monte Carlo Applications - FPGA Gaussian Random Number Generators with Guaranteed Statistical Accuracy - FPGA Implementation of EM Algorithm for 3D CT Reconstruction - A Scalable Multi-engine Xpress9 Compressor with Asynchronous Data Transfer - FPGA Accelerated Online Boosting for Multi-target Tracking - High-Throughput Implementation of a Million-Point Sparse Fourier Transform - Power-efficient Re-gridding Architecture for Accelerating Non-uniform Fast Fourier Transform - Radix-4 and Radix-8 Booth Encoded Interleaved Modular Multipliers Over General Fp - Dataflow Acceleration of Krylov Subspace Sparse Banded Problems - A Highly-efficient and Green Data Flow Engine for Solving Euler Atmospheric Equations - An Efficient FPGA-based Hardware Framework for Natural Feature Extraction and Related Computer Vision Tasks - An Efficient Sparse Conjugate Gradient Solver Using a Benes Permutation Network - Efficient 3D Triangulation in Hardware for Dense Structure-from-Motion in Low-Speed Automotive Scenarios - FPGA-based Biophysically-Meaningful Modeling of Olivocerebellar Neurons - Square-Rich Fixed Point Polynomial Evaluation on FPGAs - Hardware Acceleration of Database Operations - A Scalable Sparse Matrix-Vector Multiplication Kernel For Energy-Efficient Sparse-BLAS On FPGAs - Binary Stochastic Implementation of Digital Logic - Accelerating Parameter Estimation for Multivariate Self-Exciting Point Processes - Energy-Efficient Multiplier-Less Discrete Convolver through Probabilistic Domain Transformation - …..
  • 19.
    19 アプリケーション研究事例 FPGAドミナントではない会議での事例 - The Click2NetFPGA Toolchain @USENIX ATC2012 - SURF Algorithm in FPGA: a Novel Architecture for High Demanding Industrial Applications @DATE2012 - Achieving 10Gbps line-rate key-value stores with FPGAs @USENIX HotCloud 2013 - FPGA Acceleration for the Frequent Item Problem @ICDE 2010 - An FPGA-based pattern classifier using data compression @IEEEI 2010 - A reconfigurable fabric for accelerating large-scale datacenter services @ISCA 2014 - LINQits: big data on little clients @ISCA 2013 - Parallel Real-time Garbage Collection of Multiple Heaps in Reconfigurable Hardware @ISMM2014 - Accelerating Machine-Learning Algorithms on FPGAs using Pattern-Based Decomposition @J. of Sig. Process. Syst. - Willow: A User-Programmable SSD @USENIX OSDI2014 - Hardware Enforcement of Application Security Policies Using Tagged Memory @USENIX OSDI2008 - Histograms as a Side Effect of Data Movement for Big Data @SIGMOD2014 - Flexible Query Processor on FPGAs @VLDB2013 - Complex Event Detection at Wire Speed with FPGAs @VLDB2010 - Data Processing on FPGAs @VLDB2009 - ….. などなどなど沢山
  • 20.
    20 “アプリケーション”は様々 今回は“I/Oインテンシブ” で “高性能” な話 FPGA 高いスループットでたくさんのデータを処理
  • 21.
    21 “アプリケーション”は様々 今回は“I/Oインテンシブ” で “高性能” な話 1) http://www.theregister.co.uk/Print/2011/12/12/ibm_vs_oracle_data_centre_optimisation/ 2) http://www.redbooks.ibm.com/redpapers/pdfs/redp4725.pdf DB,金融,油田探索... 1) 2) 例: IBM Netteza
  • 22.
    22 アプリケーション研究事例 FPGAドミナントではない会議での事例 - The Click2NetFPGA Toolchain @USENIX ATC2012 - SURF Algorithm in FPGA: a Novel Architecture for High Demanding Industrial Applications @DATE2012 - Achieving 10Gbps line-rate key-value stores with FPGAs @USENIX HotCloud 2013 - FPGA Acceleration for the Frequent Item Problem @ICDE 2010 - An FPGA-based pattern classifier using data compression @IEEEI 2010 - A reconfigurable fabric for accelerating large-scale datacenter services @ISCA 2014 - LINQits: big data on little clients @ISCA 2013 - Parallel Real-time Garbage Collection of Multiple Heaps in Reconfigurable Hardware @ISMM2014 - Accelerating Machine-Learning Algorithms on FPGAs using Pattern-Based Decomposition @J. of Sig. Process. Syst. - Willow: A User-Programmable SSD @USENIX OSDI2014 - Hardware Enforcement of Application Security Policies Using Tagged Memory @USENIX OSDI2008 - Histograms as a Side Effect of Data Movement for Big Data @SIGMOD2014 - Flexible Query Processor on FPGAs @VLDB2013 - Complex Event Detection at Wire Speed with FPGAs @VLDB2010 - Data Processing on FPGAs @VLDB2009 - ….. などなどなど沢山
  • 23.
    23 freeocean@e-trees.Japan FPGAによるWebサーバー ネットワークI/F 100/1000BASE-T x 4 対応プロトコルHTTP/1.1, (IPv4, IPv6, TCP, ICMP) メモリ(コンテンツ用) DDR2 SDRAM 4GB〜32GB 最大同時コネクション数491,520 サイズ1.5U(430x603x66 mm) 最大消費電力300W未満
  • 24.
    24 freeocean@e-trees.Japan EthernetIP TCP HTTP Ethernet IP TCP ・・・ TCP TCP TCP ・・・ TCP HTTP HTTP Filesystem + Storage * モジュール構成はイメージです ✔ 専用回路ならではの並列性の活用
  • 25.
    25 freeocean@e-trees.Japan ✔専用回路ならではの並列性の活用 KBps
  • 26.
    26 freeocean@e-trees.Japan ✔[参考] 今時のApache/PCにabで負荷をかけてみる ✔ PCのスペック ✔ 結果 CPU Intel(R) Core(TM) i5-3570 CPU@3.4GHz メモリ 32GB ディスク Intel SSDC2W24 OS Fedora release 17 Apache Apache/2.2.23 ➔ 1kB ➔ 1MB 並列度スループット(kBps) 10 40225 100 48865 1000 12494 並列度スループット(kBps) 10 114565 100 114568 1000 N/A
  • 27.
    27 Memcached@Xilinx, ETHZurich 10G if Network stack Memcached DRAM Network adapter FPGA x86 DRAM motherboard Hash table Value store ✔ Memcached部分はデータフローアーキテクチャ ✔ レイテンシ = 481Cycles@156MHz https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf
  • 28.
    28 Memcached@Xilinx, ETHZurich https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf
  • 29.
    29 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について
  • 30.
    30 I/O処理システムとしてのFPGA ✔FPGAが持っているI/Oと関連コンポーネント ✔ I/O性能の予備的な評価 ✔ 高性能化のためのアーキテクチャ設計
  • 31.
    31 I/Oと関連コンポーネント ✔汎用入出力ポート (GPIO) ✔ 高速シリアル通信ブロック ✔ 光トランシーバ
  • 32.
    32 汎用入出力ポート ✔いろいろな用途に使われる ✔ LEDチカチカとか...だけじゃない!! Xilinx, WP393 より ✔ HP I/Oは1,866Mb/s(DDR3)や1,600Mb/s LVDSをサポート
  • 33.
    33 高速シリアル通信ブロック ✔12.5Gb/s,13.1Gbpsといった高速転送をサポート ✔ PCIeやSATA,あるいは生で利用. Xilinx, UG476 より
  • 34.
    34 FPGA x光 12chの高速トランシーバを光で伝送 http://www.hitechglobal.com/Boards/Virtex7_PCIE_Gen3.htm
  • 35.
    35 I/O性能の予備的な評価 ✔システムを作るにはI/Oは必須 ✔ 作り始める前に大体の性能を知っておきたい FPGA GbE, 10GbE 例えば↓のようなシステムを想定したときの だいたいの性能見積もりをしたい PCIe SATA HDD,SSD ホストコンピュータ LAN WAN
  • 36.
    36 GbE GMII,RGMIIやSGMIIでPHYとFPGAを接続 ✔ PCS/PMA/PMDはPHYがやってくれる ✔ FPGAは125MHz*8bitでEthernetフレームを送受 FPGA PHY (ex. 88E1111) 8-bit TX/RX MAC層 @125MHz プリアンブルSFD 送り先MACアドレス送り先MACアドレスPID データSFD
  • 37.
    37 GbE FPGAによるUDP/IPプロトコルスタックの転送性能 (e7UDP/IP @ e-trees.Japan) UDP データ長 Ethernet/IP/ UDPヘッダ長 Ethernetプリアンブル/ FCS/フレーム間ギャップ トータルパケット 占有長(Octet) 最大パケット 数/1Gbps 最大UDP 転送データレート (Mbps) 64 14+20+8 8+4+12 130 961538 492.3 256 14+20+8 8+4+12 322 388198 795.0 1024 14+20+8 8+4+12 1090 114678 939.4 1472 14+20+8 8+4+12 1538 81274 957.1
  • 38.
    38 10GbE SFIでSFP+と接続 FPGA 10.3125Gbps 高速シリアルI/O PCS/ PMA層 MAC層 64-bit TX/RX @156.25MHz プリアンブルSFD 送り先MACアドレス送り先MACアドレスPID データSFD GbEの時の1/8のサイクル数でヘッダを処理しなければいけない!!
  • 39.
    39 10GbE 10GbEのコアを対向で接続したときの 折り返しレイテンシとスループットを測定 = 約9.3Gbpsの転送レートは達成できている
  • 40.
    40 PCIe Gen2 ✔ よくあるアクセラレータの実装を想定 ✔ KC705
  • 41.
  • 42.
    FPGA VC709 42 PCIe Gen3 PCIe Integrated Block cc cq pcie2axilite (xapp1201) rc rq bmd_writer/ bmd_reader config./ status DMA Engine SW Host Memory MIG On-board DDR3 int. Controller FIFO FIFO axi_writer axi_reader bmd_writer/ bmd_reader AXI-ST 256bit 250MHz AXI-MM 256bit 250MHz PC->FPGA: 2KByte FPGA->PC: 128Byte src(64bit), dest(64bit), Length(<= 8MB), dir
  • 43.
    43 PCIe Gen3 ✔ *** Gen2 x8での読み書き性能の測定結果 Write (FPGA Board DDR3 -> Host Memory) 0 2000 4000 6000 8000 1000012000140001600018000 1600 1400 1200 1000 800 600 400 200 0 Bytes MBps Read (Host Memory -> FPGA Board DDR3) 0 2000 4000 6000 8000 1000012000140001600018000 2000 1800 1600 1400 1200 1000 800 600 400 200 0 Bytes MBps
  • 44.
    44 SATA ✔e7SATA: コア+専用FPGAボード2Gb DDR3L Spartan6 XC6SLX45T FMC
  • 45.
    45 SATA ✔e7SATA: コア+専用FPGAボード
  • 46.
    46 SATA ✔e7SATA FPGAボード内での読み出し性能測定 0 500000 1000000 1500000 2000000 2500000 3000000 3500000 4000000 4500000 300 250 200 150 100 50 0 Micron Intel Fujitsu(1st) Fujitsu (2nd〜) Bytes Micron: RealSSD C400, Intel: Intel SSD 330 Series, Fujitsu: MHV2080BS(HDD) MBps
  • 47.
  • 48.
    48 LVDSによる高速通信 たとえばADC/DACなどを接続するとき ADC→FPGA: 245.76MHz DDR * 14bit FPGA→DAC: 491.52MHz DDR * 8bit http://www.sdlabo.org FMC150@4DSP
  • 49.
    データはどうせ移動させる 移動途中で副次的に処理できる 49 なぜFPGAでデータ処理をするか? 10G if Network stack Memcached DRAM Network adapter FPGA x86 DRAM motherboard Hash table Value store 図は https://www.usenix.org/sites/default/files/conference/protected-files/blott_hotcloud13_slides.pdf より
  • 50.
    50 高性能化のためのアーキテクチャ ✔組み合わせ回路(アプリケーション特化演算器)と データ並列性の活用 ✔ パイプライン並列化 ✔ データハンドリング機構 リソース使用量,配線遅延を考慮しつつ 性能を最大化する実装をみつける必要がある
  • 51.
    51 駄目な例 ... signal c: unsigned(WIDTH-1 downto 0); … process(clk) begin if clk'event and clk = '1' then c <= c + 1; end if; end process; ...
  • 52.
    52 組み合わせ回路/データ並列性の活用 ✔プロセッサと比べてFPGA回路のφは圧倒的に低速 ✔ 高速データ処理では1クロックでデータを捌く必要も ✔ 時にはソフトウェア実装とは全く違う場合も 条件 ・・・ 条件 v.s
  • 53.
    53 パイプライン並列化 FIFO w [byte] f [Hz] 実行 ステージ スループット T [bps] FIFO 実行 ステージ 実行 ステージ パケットデータが d [byte] のとき全データ入力を受け取るのにかかる時間 = (d/w)*(1/f) [sec] 同様に、全データの出力にかかる時間 = (d/w)*(1/f) [sec] スループットT [bps]を実現するとき、パケットデータを(8*d)*(1/T) [sec]内で処理し続ける必要がある → 各モジュールで処理に使える時間 t は 8*d/T-2*d/(w*f) [sec] → (8*d/T-2*d/(w*f))/(1/f) [cycle]  たとえば、d=1500, T=1G, w=4, f=100Mのとき  1パケットあたりの処理にかけられるサイクル数は450サイクル.     f=200Mなら1650サイクル,w=16なら1012サイクル
  • 54.
    54 データハンドリング機構 ✔I/O(外部メモリや各種I/F)は共有する必要がある ✔ データ処理結果の一時的なバッファリングが必要 (FIFOやBRAMを使用することが多い) ✔ そんなに大きくはない + 自分で管理する必要がある ハンドシェイクジョインの出力をうまく捌くための適応型マージネットワークの例
  • 55.
    55 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について
  • 56.
    56 FPGAの開発環境について ✔開発フロー ✔ 標準インターフェースでIPの活用が容易に(なりつつある) ✔ 様々なDSLベースのFPGAシステム開発 ✔ 高位合成言語/高位合成処理系による開発
  • 57.
    57 開発フロー ある程度のパソコンで設計可能 HDLを使ったRTL設計で所望のモジュールを実装 RTLシミュレーションによる動作検証 使用するFPGAにあわせた制約を定義 ツールで合成,配置配線,FPGA構成情報生成 実機で動作確認
  • 58.
  • 59.
    59 開発フロー ある程度のパソコンで設計可能 HDLを使ったRTL設計で所望のモジュールを実装 RTLシミュレーションによる動作検証 使用するFPGAにあわせた制約を定義 ツールで合成,配置配線,FPGA構成情報生成 実機で動作確認 結構つらい,時間がかかる
  • 60.
    60 標準I/FによるIPの活用 ✔検証済みモジュールを組み合わせてシステムを設計 ✔ 浮動小数点数演算コア ✔ FFT ✔ ビデオエンコーダ ✔ プロトコルスタック などなどなど ✔ AXI,Avalonといった標準I/FをFPGAベンダが定義
  • 61.
    61 IPの活用 XilinxIPインテグレータの設計画面の例
  • 62.
    62 IP接続向けの標準I/F ✔AXIやAvalonといたインターフェース ✔ メモリマップド or ストリーム クロック リセット アドレス 長さ サイズ 各種ctrl/設定 データ ストローブ データ有効 各種ステータス データ ストローブ データ有効
  • 63.
    63 様々なDSLベースのシステム開発(1) RTL設計(あるいは少し抽象的なHW設計)を より楽にするためのDSL ✔ MyHDL (Pythonベース) ✔ JHDL (Javaベース) ✔ Chisel (Scalaベース) ✔ MaxCompiler (Javaベース) などなどなど
  • 64.
    64 様々なDSLベースのシステム開発(2) 使用するプログラミングモデルに特化したDSL ✔ Bluespec (並行プログラミング) ✔ DIL (パイプラインプログラミング) ✔ FloPoCo (浮動小数点数パイプライン) などなどなど
  • 65.
    65 様々なDSLベースのシステム開発(3) 実装したいアプリケーションに特化したDSL ✔ Spiral ←Linear Digital Processing ✔ HDL Coder ← 信号処理(Matlab) ✔ Optimus ← ストリーム処理 ✔ LINQ ← クエリプロセッシング などなどなど ✔ DSLを作るツールも.(たとえば,LMS/Scala)
  • 66.
    66 Synthesijer.scala とは 私もSynthesijer.scalaというのを設計中 ✔ ''Scala''ベースのDSL ✔ signal, port: 状態を変更可能なオブジェクト ✔ expr: 副作用なしの式 ✔ sequencer: 状態遷移機械 ✔ module: モジュール全体 ✔ 上記のオブジェクトをScalaでインスタンス化.つなぎ合わせる.
  • 67.
    67 Synthesijer.scala の例(1) ✔ Lチカ def generate_led() : Module = { val m = new Module("led") val q = m.outP("q") val counter = m.signal(32) q <= ref(counter, 5) val seq = m.sequencer("main") counter <= (seq.idle, VECTOR_ZERO) val s0 = seq.idle -> seq.add() counter <= (s0, counter + 1) return m } def generate_sim(target:Module, name:String) : SimModule = { val sim = new SimModule(name) val inst = sim.instance(target, "U") val (clk, reset, counter) = sim.system(10) inst.sysClk <= clk inst.sysReset <= reset return sim }
  • 68.
    68 高位合成言語/高位合成処理系 ✔Vivado HLS ✔ OpenCL対象の処理系 ✔ CyberWorkBench ✔ Cynthesizer ✔ Symphony C Compiler ✔ ImpulseC ✔ Lime などなどなど ...私もSynthesijerを設計中
  • 69.
    69 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について
  • 70.
  • 71.
  • 72.
    72 コンテンツ ✔FPGAとは? ✔ FPGAを使ったアプリケーション研究開発事例 ✔ データ(I/O)処理システムとしてのFPGA ✔ FPGAの開発環境について