Upload
takefumi-miyoshi
View
7.056
Download
4
Embed Size (px)
DESCRIPTION
Citation preview
計算機としてのFPGAの基礎知識
三好 健文株式会社イーツリーズ・ジャパン
1
2012.8.17 @虎ノ門
三好健文 - e-trees. Japan, Inc.
2
東工大→東大→東工大→電通大→現在
コンパイラとかHW/SW協調設計とか囲碁専用ハードウェア
CUDA/MPIコンパイラ
ネットワーク処理の専用ハードウェア化
ストリーム処理専用アーキテクチャ
JavaRock
FPGAとは?
3
論理回路・データパスを自由に作り込める
クロックレベルの同期と並列性の活用
Field Programmable Gate Array
73Feb. 2011 KEYWORD Bluespec Sytem Verilog,高位合成言語
HDLがドレスを着たお姫さまだとすると,コンパイル時にエラーをしっかり検出してくれるが故にコンパイルを通すのが困難な反面,コンパイルさえ通れば合成した回路がきちんと動作してくれるBluespecはパワフルなツンデレ娘と筆者はイメージしています(図2).
Verilog HDLやVHDLを使った設計で,― あぁ~,数字って32ビットだった.うっかりキャストされていたよ…
― テスト・ベンチのステート・マシンを書くのが面倒だな.― モジュールのインスタンシーエーションで入出力ピンをつなぎ忘れていた
という思いをしたことはありませんか? 単純な記述の羅列や細かいミスへの注力が続くと,本来力を入れるべき,アーキテクチャの設計まで億
おっくう
劫になってしまいます.また,「コンパイル(論理合成)は通るのに,シミュレーションやFPGA上で動作させると,何かおかしい」という事態に頭を悩ませ,原因はうっかりミスだったということも一度や二度ではないと思います. 記述の手間がもっと省けて,コンパイル時に強力にエラー・チェックしてくれるHDL言語ないかなあ…という要求に応えてくれるのがBluespec System Verilogです(図1).VHDLがまじめなキャリア・ウーマン,Verilog
...a<={data, 10};...
;case 100; next<=101;case 101; if .... then next<=105; else nex<= 102; . . .
FPGA
実機合成・配置配線
ステート・マシン
BSVなら“型チェック”でコンパイル・エラー BSVのStmt FSMで簡単に書けるよ♪
うまく動かないよー
たくさん書くの疲れるよー
◀図1 Bluespec System Verilog(BSV)で安全,らくらくハードウェア開発
▲ 図2 Bluespec System Verilogは ツンデレ娘きっちりしていてキャリアも長いVHDL,あいまいさが許容されるのがVerilog HDL,コンパイル時にしっかりエラーを検出し,その後,素直に動くのがBluespec System Verilog.
新世代のESL合成ソリューション Bluespec System Verilogのすすめ
高位設計言語で複雑な回路もらくらく設計
本章では,高位設計言語であるBluespec System Verilogを紹介する.この言語では,コンパイル時にしっかりエラー検出ができ,また,さまざまなライブラリも提供している.FPGAやASICが大規模化し複雑な回路を設計する機会が増えてきた今,知っておくべき技術だろう. (編集部) 三好 健文
第3章
出典: CQ出版 Interface 2011年2月号より
FPGAの利用シーン独自の回路を実現できるハードウェア
特定の処理を低消費電力で高性能処理
デバイスに近い処理を簡単に実現
自由なI/Oポートの定義
ASIC開発のプロトタイプとして
特定用途向け少数生産の製品として
4
http://www.micron.com/about/news-and-events/events/xfest-2012
http://japan.xilinx.com/products/boards-and-kits/EK-K7-KC705-G.htm
FPGAの利用シーン独自の回路を実現できるハードウェア
特定の処理を低消費電力で高性能処理
デバイスに近い処理を簡単に実現
自由なI/Oポートの定義
ASIC開発のプロトタイプとして
特定用途向け少数生産の製品として
5
あるいは,オリジナルの演算コンポーネントとして
http://www.micron.com/about/news-and-events/events/xfest-2012
http://japan.xilinx.com/products/boards-and-kits/EK-K7-KC705-G.htm
freeocean
6
最大スループット: 1Gbps
最大同時処理コネクション数: 50万
秒間同時接続数: 約2万HTTPリクエスト
最大消費電力: 約160W
ハードウェアWebキャッシュサーバ
http://e-trees.jp/index.php/製品/freeocean/
ちょっと宣伝
Since 2006
freeocean-ng 構想
7
最大スループット: 20Gbps
最大同時処理コネクション数: 50万
秒間同時接続数: 約2万HTTPリクエスト
最大消費電力: 200W以下
ハードウェアWebキャッシュサーバちょっと相談
“FPGA”に関してよく聞くフレーズ向いてる計算ならGPUやCPUより速いよ
そんなのFPGAなら1クロックでできるし!!
8
“FPGA”に関してよく聞くフレーズ向いてる計算ならGPUやCPUより速いよ
そんなのFPGAなら1クロックでできるし!!
9
Smith-Waterman 法による多重配列アライメン ト処理とモンテカルロ法ベースの金融シミュレーショ ンを FPGA で実行した場合,それぞれ CPU
に比べ て 228 倍と 545 倍高速に処理できた[ 1 ] Reconfigurable Computing in the Multi-Core Era. In Internal Workshop on Highly-Efficient Accelerators and Reconfigurable Technologies, 2010.
“FPGA”に関してよく聞くフレーズ向いてる計算ならGPUやCPUより速いよ
そんなのFPGAなら1クロックでできるし!!
うーん,メモリ少ないんですよね...
浮動小数点数演算はちょっと苦手かも...
10
FPGAの性能に関して,ソフトウェア・アプリ開発者とイメージを共有したい
と,いいながら
で,実際FPGAってどんな素子なの?「それ1クロックで...」の光と影
浮動小数点数演算が苦手?
データの入出力ってどうやるの?
メモリ使えるの?
高位合成言語について
11
「それ1クロックで...」の光と影演算素子を好きにつなげられる
データ移動に関するクロックコストは0
12
「それ1クロックで...」の光と影演算素子/配線を通る時間は0ではない
遠い配線は演算素子で中継されることも
13
δ n秒 δ n秒
δ n秒 δ n秒
δ n秒
δ n秒
クロックを長くしないと安定しない
δ n秒
用途にあわせてクロックを制御するのが技適度にFFを入れてクロックを分割する
パイプライン並列化でスループットの旨味も
14
δ n秒 δ n秒
δ n秒 δ n秒
δ n秒
δ n秒
クロックを長くしないと安定しない
FF
FF
FF
FF FFFF
FPGAの内部はどうなっているのか?
15
Spartan-6 FPGA 䝁䞁䝣 䜱䜼䝱䝤䝹 japan.xilinx.com 9䝻䝆䝑䜽 䝤䝻䝑䜽 䝴䞊䝄䞊 䜺䜲䝗UG384 (v1.0) 2009 ᖺ 6 ᭶ 24 ᪥
X-Ref Target - Figure 3
ᅗ 3 : SLICEM 䛾ᅗ
A6:A1B6:B1
C6:C1
D6:D1
DI
CI
A6:A1
AX
CIN
1
WA6:WA1
BI
CLK
CX
WE
CESR
AI
BX
A6:A1WA6:WA1
A6:A1 O6O5
WA7
DI1
WA8
MC31
CED Q
ug384_03_042309
CK
SR
WA6:WA1
DI2 CLK
CARRY4
COUT
WE
A6:A1WA6:WA1
O6O5
WA7
DI1
WA8
MC31
DI2 CLK WE
O6O5
WA7
DI1
WA8
MC31
DI2 CLK WE
O6O5
WA7
DI1
WA8
MC31
DI2 CLK WE
LUTRAMROM SRINIT0
SRINIT1
CED Q
CK
SR
SRINIT0SRINIT1
CED Q
CK
SR
SRINIT0SRINIT1
CED Q
CK
SR
SRINIT0SRINIT1
CED AQ
A
BQ
Q
CK
SR
FFLATCHAND2LOR2LSRINIT0SRINIT1
CED Q
CK
SR
FFLATCHAND2LOR2LSRINIT0SRINIT1
D5QMC31CYXORO5O6
MC31CYXORDXO5O6
C5QF7CYXORO5O6
F7CYXORCXO5O6
B5QF8CYXORO5O6
F8CYXORBXO5O6
A5QF7CYXORO5O6
F7CYXORAXO5O6
CED Q
CK
SR
FFLATCHAND2LOR2LSRINIT0SRINIT1
CED Q
CK
SR
FFLATCHAND2LOR2LSRINIT0SRINIT1
DPRAM64DPRAM32SPRAM64SPRAM32SRL16SRL32
LUTRAMROM
DPRAM64DPRAM32SPRAM64SPRAM32SRL16SRL32
LUTRAMROM
DPRAM64DPRAM32SPRAM64SPRAM32SRL16SRL32
LUTRAMROM
DPRAM64DPRAM32SPRAM64SPRAM32SRL16SRL32
DX
B
AMUX
BMUX
CMUX
C
D
DMUX
CQ
DQ
6入力
1024bit カウンタの作り方
16
(1)愚直に作ってみる
(2)2段に分けて作ってみる
1024bit カウンタの作り方
17
(1)愚直に作ってみる
(2)2段に分けて作ってみるfreq. 66.996MHz, 256スライス
freq. 503.170MHz, 32スライス
1024bit カウンタの作り方
18
(1)
(2)
カウンタのbit幅と周波数の関係
19
0
275
550
825
1100
4 32 256 1024 2048
Max Freq.(MHz)
浮動小数点数演算が苦手?
20
よくある全部入り浮動小数点数演算器を作ってみた32bit 単精度コア
最大動作周波数 約423MHz
838スライス(#.Regs.: 2592,#.LUTs:2122)
64bit 倍精度コア
最大動作周波数 約413MHz
2032スライス(#. Regs.: 8145, #.LUTs: 5502)
XC7K325Tなら59個入る?
XC7K325Tなら24個入る?
浮動小数点数演算が苦手?
21
コンポーネントだけなら32bit 単精度コア
加減算器 175スライス
乗算器 49スライス,3DSP
64bit 倍精度コア
加減算器 301スライス
乗算器 143スライス,11DSP
XC7K325Tなら291個入る?
XC7K325Tなら280個入る?
XC7K325Tなら169個入る?
XC7K325Tなら76個入る?
たぶん,こういう方向で何かあればいいんじゃないかなあ...
データの入出力ってどうやるの?パソコンとの通信
PCIe,イーサネット,UART
FPGA同士の通信
Rocket I/O,GPIO
その他ペリフェラルとの通信
LVDS,GPIO
22
データの入出力ってどうやるの?パソコンとの通信
PCIe,イーサネット,UART
FPGA同士の通信
Rocket I/O,GPIO
その他ペリフェラルとの通信
LVDS,GPIO
23
HDLに実装したUDP/IPの性能
24
e7 UDP/IP IP¸®�FPGA�ÉÂÆÝà´?c¬<s�,V!!
E(959.1Mbps�®ÐÙ¶à»×Þ}ÅàÁru¬,V�ÐÜƸÚ�W¬FPGA��/YÊàÇ°±®���,V�ª���á1000BASE-T�ruw3¬E(~PY�ª�����¢�ã�
e7 UDP/IP IP� ��������MAC��IP��UDP��FPGA��������������������
UDPÅàÁ{� ÆàÁÚ̶ÂÆ�G{(Octet)
1Gbps��©� E(̶ÂÆA�
,RruÅàÁÛàÆ (Mbps)
64 130 961538 486.4
256 322 388198 792.9
1024 1090 114678 940.6
1472 1538 81274 959.1
FPGA��Ðܿ¹áÀÎÆ°±®|\��i��!!
e7UDP/IP IP¸®�ܼ´�£�ÐÜƸÚ�W¬,V�¢���áÀÎÆ°±®¦ÀÎÆ°±®¬���ª�¤�Ðܿ¹�8i�©¢�ã6��á��¥�ÊàÇ°±®kj<�á|\ÃàÚ�ÉÂÆÝà´�ÅàÁ¬>��ªN"�|\���¢�ã�
.9FPGAám�ÒàÇ�
e7 UDP/IP¸®�áSpartan 6áVirtex 5áVirtex 6���ª��¬_oQ��ã ¢�áSP605áML506áML605���¬Ll���¢�ã ¿ÂÆ®ÂÐ<��6��ÒàǬk+�ª���b�� �¬�_o����¢�ã ��¡��FPGAáFPGAm�ÒàÇ �.9¥�e��ã n����^p����ã
Xilinx ISE¬���|\���
スループット
Pentium4 2.8GHz512MBCentOS
PC(1)
Core i7-3930K 3.2GHz16GBWindows7 Pro.
PC(2)
レイテンシ(μ秒)
16Byte 256Byte 1024Byte
FPGA 61 77 120
PC(1) Java 228 200 222
PC(1) C 149 149 196
PC(2) Java 200 200 202
表 3 リソース使用量の比較結果レジスタ数 LUT 数 占有スライス数 BRAM36E1
Native 1620 2212 779 12
JavaRock 1472 2084 785 12
user-modulee7UDPIP-Core
MAC
TX
FPGA
PC
RX
BRAM
BRAM
GbE
図 7 イーサネットを介して PC と FPGA を接続するシステムの例
JavaRockで合成した場合のハードウェアリソース量が下回ったが,読み書きをカウンタするレジスタの使い方などの違いによるもので本質的な違いはないと考えられる.また合成の結果得られた最高動作周波数はどちらも 211.751MHzであった.
4. 3 ケース 2: イーサネットで接続する場合次に,協調設計の対象となる FPGAと CPUが UDP/IP通
信を介してデータを共有するシステムを設計することを考える.イーサネットインタフェイスは FPGAでも一般的になりつつあり,多くの評価ボードでもイーサネットポートが搭載されている.イーサネットを使うことで,接続する CPUや FPGAの個数や物理的な配置を比較的自由に取り扱うことができるため,柔軟な HW/SW協調システムの構築が可能となる.本稿ではケーススタディとして表 1 に示した諸元の PC と
ML605をイーサネットを介して図 7のように接続する例を考える.プロトコルには UDP/IP を用いる.本稿では,イーサネットおよび UDP/IPのプロトコル処理にイーツリーズ・ジャパン社の e7UDP/IP IPコア [13]を用いる.e7UDP/IP IPコアは,FPGA上のロジックのみでプロトコル処理を実現しているソフトマクロであり,ユーザモジュールからハンドシェイクプロトコルでアクセスして GbE上で UDPパケットの送受信ができる.この IPコアは,ペイロード 1472バイトの UDPパケットを 959.1Mbpsで送信できる性能を有する.本稿では,PC(CPU)と FPGAが UDP/IPで接続された協
調システムの設計をする場合のプリミティブ処理の性能評価として,UDPパケット受信し返送するエコーバックモジュールを,単純なステートマシンとして RTLで設計した場合 (Native)とJavaプログラムから JavaRockから合成した場合 (JavaRock)
とで比較する.図 8 に UDP パケットをエコーバックを行うJava プログラムを示す.図 6 に示した PCIe 経由でメモリを読み書きするケーススタディと違い,図 8のプログラムでは受信パケットデータを送信パケットキューにコピーしている.このメモリアクセスは,JavaRockがコンパイル時に e7UDP/IP
IPコアのメモリアクセスに透過的に変換される.まず,スループットを比較した結果を表 4に示す.これは,図
7に示したシステムで「PCが FPGA上のモジュールに UDP
パケットを送信して返送パケットを受信する処理」を 10万回繰り返すのにかかった時間から求めたスループットである.データのペイロードとして,16Byte,256Byte,1024Byteの 3パタンで評価を行った結果を示している.ここで,JavaRock(trad.)
に示した結果は,節 3. 2 で述べた拡張 JRHI を用いずにプロ
! "public class UDPEcho{
private final UDP_TX udp_tx = new UDP_TX();
private final UDP_RX udp_rx = new UDP_RX();
public void run(){
while(true){
while(udp_rx.valid == false) ;
udp_rx.read_flag = true;
for(int i = 0; i < udp_rx.data_length; i++){
int d;
d = udp_rx.data[i];
udp_tx.data[i] = d;
}
udp_tx.dest_ip = udp_rx.src_ip;
udp_tx.dest_port = udp_rx.src_port;
udp_tx.src_ip = udp_rx.dest_ip;
udp_tx.src_port = udp_rx.dest_port;
udp_tx.data_length = udp_rx.data_length;
udp_rx.read_flag = false;
while(udp_tx.busy == true) ;
udp_tx.start = true;
udp_tx.start = false;
}
}
}
# $図 8 UDP/IP をエコーバックする Java プログラム
表 4 スループットの評価結果 (MBps)
16Byte 256Byte 1024Byte
Native 0.262 3.31 8.47
JavaRock 0.262 3.20 8.32
JavaRock(trad.) 0.259 3.03 6.82
PCGbE
PC(1)
or
PC(2)
図 9 PC との対向で UDP/IP のエコーバックを行う評価システム
グラムを記述し合成した場合の処理性能である.すなわち,図8 に示した Java プログラムのメモリコピーの部分を,従来のJRHIを用いて明示的にメモリアクセスのための信号操作を記述した Javaプログラムを合成した場合のスループットである.この結果より,JavaRock で合成したモジュールのスループットは,Nativeに比べて遜色ないと言える.また,JavaRockとJavaRock(trad.)の結果を比較すると,1024Byte単位のパケット処理を行った場合に 1.2 倍高速化できていることがわかる.また,この差は単位処理内でメモリにアクセスする回数の増加に伴って大きくなることがわかる.これは,透過的にハードウェアアクセスとするよう拡張した JRHIが有効であることを示している.さらに,UDP/IP によるエコーバックのスループットを評
価するために,表 5 に示す,図 9 のような PC 上で動作するUDP/IPのエコーバックソフトウェアに対してパケットを連続で送る場合のスループットを評価した結果と比較する.エコーバックソフトウェアは Javaと Cで記述し,PC(1)では Java版と C版を,PC(2)で Java版を実行した.比較に用いた PC(1)
と PC(2)の諸元をそれぞれ表 6と表 7に示す. 表 4と表 5の結果を比較すると,FPGAとのスループットが PCのとスループットに比べ約 2,3倍高速に動作していることが分かる.すなわち,UDPで接続した FPGAに処理をオフロードすることで,CPUにオフロードする場合よりも高速に処理させること
— 5 —
メモリ使えるの?FPGA内蔵LUTRAM
演算回路との共用.速い
FPGA内蔵BlockRAM
FPGA内の専用リソース.速い.
外部メモリ
SRAM: 速い.でも高い.
DRAM: 遅い.でも安い.25
DDR3メモリにアクセスしてみた
26
49サイクル
76サイクル
UPLいろんな 制御信号線
e7MemIface DDR3
とりあえず初期実装としてはこんな感じ
100MHz 400MHz
Universal Protocol Line
27
ちょっと寄道
������
[a,b,c,d] ����
[w,x,y,z]
��� �K%��� �K &� �KAJ@H8EJ@K C89GBG=?;��K7�4�
��1��0�7 3/5-+�6�
��2�7 3/5-��,6�
a b c L�
w x y z
���
��� �*���
' � = "�(.)6�
��
a
b
c
d
w
x
y
z
���K���K����!2 >8DI:*�#K�� � �*�$�
��2 ������
w=a+b,x=b-c, y=w/x,z=d+1
<IBF0 ���*��
UPL��������������������������#$" !���� ��
Universal Protocol Line
28
ちょっと寄道! /VQSUFJ@B�),G���+P&4�)G$" ! /�)G� P]AG#���F-� ! /#���^0 ;N?��VQSU7\� �F�OM1�
�)����� ����� �)�
�*'%�
VQSUD<B� ;NM� VQSUD<B ;NM�
0���7�K6G� FJLTYRP �9�NE3D8\*��F>G:DP �5\��G� P��;=M1 D3@?WXY����72@BIJ3�
��!Z.�![��D (�!Z�,![��P '%C�L�HM�
! &���*1�/I�!,��.J ! &B<>�K=H;"�K=H;����K=H;��*)�
! & ��*1�/I��,��.J ! &A8<>C6HD<>�
�L&���25MHzK32bit�
&&&%:>FH#���+02=H;,��
&&&%=H;-@4?E5G9H=3G7�
= A8<>,�(,�,$��'K� �'�
a b
c
MSB LSB
! &���*1�/I�!,��.J ! &B<>�K=H;"�K=H;����K=H;��*)�
! & ��*1�/I��,��.J ! &A8<>C6HD<>�
�L&���25MHzK32bit�
&&&%:>FH#���+02=H;,��
&&&%=H;-@4?E5G9H=3G7�
= A8<>,�(,�,$��'K� �'�
a b
c
MSB LSB
高位合成言語
29
手軽なハードウェア開発を夢見てVol. 29 No. 1 Feb. 2012 81
表 1 ベース言語別に分類した高位合成言語の例ベースの言語 言語名C BACH-C [5],Handel-C [6],DeepC Compiler [7],PICASSO [8],COBRA-ABS [9],
DEFACTO Compiler [10],Streams-C [11],GARP C Compiler [12],SA-C [13],Impulse-C [14],SpecC [15],GorillaC [16]
C++ SystemC [17],OCAPI [18],HP-Machine [19]
Java Galadriel/Nenya [20],JHDL [21],Lime [22],MaxCompiler [23],Sea Cucumber [24],JavaRock [25]
C# Kiwi [26]
Python PHDL [27],MyHDL [28]
Ruby RHDL [29]
ML CAPH [30]
Fortran DeepC Compiler [7],ROCCC [31],SRC-6 [32]
Haskell Lava [33], Bluespec System Verilog [34](BSV)
Matlab MATCH [35],DEFACTO Compiler [10]
た言語および言語処理系では,高水準言語の機能を用いて記述された部分とハードウェア化の対象となる部分のコードを混在させることができない.また,ハードウェアとしてビット幅や並列性を明示的に指示した箇所のコードはソフトウェアとして実行することができない.そのため,処理の検証には動作のシミュレーションが必要となる.すなわち,単にソフトウェアをプログラムとして実行した場合に比べて検証時間が長大になる,あるいは,検証に使える手段が限られることで動作検証やデバッグにかかるコストが大きくなるいう問題は残る.
3. 2 言語機能の制限ベースとした言語の持つ機能のうち,ハードウェア
上に構成が難しい,あるいは必要以上に実装のコストが大きい機能は,その使用に対する制限が加えられている.たとえば,C では,ポインタ演算が可能であるが,どのようにハードウェアにマッピングするかは一つの実装上の課題となる.多くの言語でポインタ演算やポインタ変数の使用には制限があるか,独自にハードウェアの動作に対応づけている.Cyber
Workbench [36]や AutoESL [37]では,コンパイル時にポインタ変数へのアクセスを適切なメモリアクセスや I/Oアクセスに置換する機能を提供している.
また,オブジェクト指向言語において,クラスのインスタンスの動的な生成を実現するのは困難である.そのため,Javaをベースとする高位合成処理系である Sea Cucumber [24]及び JavaRock [25]では,インスタンスの動的生成をサポートしていない.
3. 3 拡張なしの入力を受け付ける処理系第 3. 1 節では,ベースとなる言語を拡張した高位
合成言語について述べた.その一方で,CyberWork-
Bench [36],AutoESL [37]や LegUp [38]は,拡張のない ANSI-Cを入力として受けつけられる処理系である.Javaベースの Sea Cucumber [24],JavaRock [25]
や Lime [22],C#ベースの Kiwi [26] もまた拡張のないベース言語を入力として受け付けられる.これらの高位合成処理系に入力されるプログラム
は,それぞれの言語の一般的なコンパイラでコンパイルすればコンピュータの上でソフトウェアとして動作させることができる.これらは,新たなプログラミング習得の手間なしでプログラムをハードウェアとして実装でき,また,ソフトウェアとしてアルゴリズムレベルでのデバッグが可能になるため,開発の繁雑さが解消される.しかしながら,FPGAの性能を引き出すためには,拡張された記述方法の利用や,変換器の動作を考慮したコードの記述が必要になることも
高位合成言語
30
タイプ別に高位合成言語を分けてみた
既存の高水準言語ベースのHDL:
ImpulseC, MaxCompiler など
既存の高水準言語をハードウェアに:
AutoESL, CyberWorkBench, Lime, JavaRock
モダンな概念を取り入れた新しいHDL:
Bluespec
.java%
Java����%������
.vhdl%
Java����%�������
��/������JavaRock%��� ��
JVM%
JavaRock
31
JavaRockの目指すところJavaプログラムをそのままHW化する
追加構文,データ型は導入しない
記述に制限は加える
“HDLで書けることをJavaで書けるようにする”ではない
“Javaで書けることを全部HDLにする”ではないVol. 48 No. 5 FPGA 向け高位合成言語としての Java の活用手法の検討 9
RandomPlayer MCPlayer
Game FPGAMain
MonitorWrapper RS232CWapper
Player
Executable as Software
JVM FPGA
ICFPTPlayer
Calculator
calc
Implement-able onto FPGA
monitor rs232c
playerplayer
2
HDL modules HDL modules
図 15 connect6 のデバッグで用いたクラスのクラス図
VGAJavaTestSwingFrame VGAIf
VGAWrapper
Executable as Software
JVM FPGA
Implement-able onto FPGA
monitor
vgavga
HDL modules
SwingCanvas
図 16 グラフィクス描画ハードウェア設計のためのクラス構造
と ICFTPPlayer.javaとして Javaで実装する.図 15 に,Java で実装した connect6 をデバッグする際に利用したクラス群のクラス図を示す.ICFPTPlayer と Calculator からなる ICFPT で提示された connect6プレイヤは,他の幾つかのプレーヤ実装と共に Playerインターフェイスを実装するクラスである.このクラスのインスタンスは,Game とFPGAGameで共有される.Gameは JVM上で動作させるときのメインルーチンであり,FPGAGameは FPGA
上に実装するときのトップエンティティに相当するクラスである.Gameを含むクラス群は JVMで直接実行することができ,FPGAGameを含むクラス群は FPGA
に実装可能である. このように,ソフトウェアとしてのデバッグ環境を構築することで,簡単かつ効率的にデバッグできる.
5.3.2 VGAグラフィクス描画ハードウェアVGAグラフィクス描画ハードウェアを設計することを考える.描画ルーチン,たとえば四角形を色を変えながら描画するルーチンをハードウェア化するとする.図 16にデバッグのために設計したクラス階層を示す.ハードウェア化すべき,描画ルーチンを記述した
VGAJavaTestから,実際の描画対象として Swingで
図 17 VGA グラフィクス描画ハードウェアをソフトウェアでデバッグ
図 18 VGA グラフィクス描画ハードウェア
作成した描画対象である SwingFrameをインスタンシエーションすることで図 17に示すようにソフトウェアとして実行結果を確認できる. 一方でハードウェアモジュールを JRHI でラップした VGAIf をインスタンシエーションすることで,図 18に示すように実ハードウェアとして実行結果を確認できる.今回は説明のために,ハードウェア生成時とソフトウェアスタック上のクラスで異なるクラス名を用いた.しかし,同じクラス名でソフトウェアあるいはハードウェアのモジュールを設計しておき,コンパイル時および実行時のクラスパスでそれぞれを呼び出すようにすることで,ソースコードはまったく変更することなく,どちらの環境も利用できるようにすることもできる.
6. ま と めJavaRockは,複雑なアプリケーションを FPGAで処理するための開発をサポートする高位合成言語の設
Vol. 48 No. 5 FPGA 向け高位合成言語としての Java の活用手法の検討 9
RandomPlayer MCPlayer
Game FPGAMain
MonitorWrapper RS232CWapper
Player
Executable as Software
JVM FPGA
ICFPTPlayer
Calculator
calc
Implement-able onto FPGA
monitor rs232c
playerplayer
2
HDL modules HDL modules
図 15 connect6 のデバッグで用いたクラスのクラス図
VGAJavaTestSwingFrame VGAIf
VGAWrapper
Executable as Software
JVM FPGA
Implement-able onto FPGA
monitor
vgavga
HDL modules
SwingCanvas
図 16 グラフィクス描画ハードウェア設計のためのクラス構造
と ICFTPPlayer.javaとして Javaで実装する.図 15 に,Java で実装した connect6 をデバッグする際に利用したクラス群のクラス図を示す.ICFPTPlayer と Calculator からなる ICFPT で提示された connect6プレイヤは,他の幾つかのプレーヤ実装と共に Playerインターフェイスを実装するクラスである.このクラスのインスタンスは,Game とFPGAGameで共有される.Gameは JVM上で動作させるときのメインルーチンであり,FPGAGameは FPGA
上に実装するときのトップエンティティに相当するクラスである.Gameを含むクラス群は JVMで直接実行することができ,FPGAGameを含むクラス群は FPGA
に実装可能である. このように,ソフトウェアとしてのデバッグ環境を構築することで,簡単かつ効率的にデバッグできる.
5.3.2 VGAグラフィクス描画ハードウェアVGAグラフィクス描画ハードウェアを設計することを考える.描画ルーチン,たとえば四角形を色を変えながら描画するルーチンをハードウェア化するとする.図 16にデバッグのために設計したクラス階層を示す.ハードウェア化すべき,描画ルーチンを記述した
VGAJavaTestから,実際の描画対象として Swingで
図 17 VGA グラフィクス描画ハードウェアをソフトウェアでデバッグ
図 18 VGA グラフィクス描画ハードウェア
作成した描画対象である SwingFrameをインスタンシエーションすることで図 17に示すようにソフトウェアとして実行結果を確認できる. 一方でハードウェアモジュールを JRHI でラップした VGAIf をインスタンシエーションすることで,図 18に示すように実ハードウェアとして実行結果を確認できる.今回は説明のために,ハードウェア生成時とソフトウェアスタック上のクラスで異なるクラス名を用いた.しかし,同じクラス名でソフトウェアあるいはハードウェアのモジュールを設計しておき,コンパイル時および実行時のクラスパスでそれぞれを呼び出すようにすることで,ソースコードはまったく変更することなく,どちらの環境も利用できるようにすることもできる.
6. ま と めJavaRockは,複雑なアプリケーションを FPGAで処理するための開発をサポートする高位合成言語の設
http://javarock.sourceforge.net/
高位合成言語
32
HDL覚えなくてもHW設計ができる...というのは言い過ぎかもですが
JavaRock
ImpluseC
http://www.cs.tsukuba.ac.jp/~yoshiki/FPGA/Contest/index.php?FPGA2011%C1%B4%C2%D0%C0%EF%CD%FA%CE%F2
高位合成言語
33
HDL覚えなくてもHW設計ができる...というのは言い過ぎかもですが
http://d.hatena.ne.jp/nushio/20120708
で,実際FPGAってどんな素子なの?「それ1クロックで...」の光と影
浮動小数点数演算が苦手?
データの入出力ってどうやるの?
メモリ使えるの?
高位合成言語について
34
要・工夫
やり方による
豊富使える.大容量にはコスト有
お試しください