計算機としてのFPGAの
基礎知識

        三好 健文
    株式会社イーツリーズ・ジャパン




                      1
三好健文 - e-trees. Japan, Inc.

     東工大→東大→東工大→電通大→現在

     コンパイラとかHW/SW協調設計とか
      囲碁専用ハードウェア

      CUDA/MPIコンパイラ

      ネットワーク処理の専用ハードウェア化

      ストリーム処理専用アーキテクチャ

      JavaRock

                 2            2012.8.17 @虎ノ門
FPGAとは?
 本章では,高位設計言語である Bluespec System Verilog を紹介する.こ
の言語では,コンパイル時にしっかりエラー検出ができ,また,さまざまなライブ
ラリも提供している.FPGA や ASIC が大規模化し複雑な回路を設計する機会が
Field Programmable Gate Array
増えてきた今,知っておくべき技術だろう.                       (編集部)                                    三好 健文


         論理回路・データパスを自由に作り込める
 Verilog HDL や VHDL を使った設計で,
                   HDL がドレスを着たお姫さまだとすると,コンパイル時
― あぁ∼,数字って 32 ビットだった.うっかりキャスト                       にエラーをしっかり検出してくれるが故にコンパイルを通
  されていたよ…                                           すのが困難な反面,コンパイルさえ通れば合成した回路が
     ・   クロックレベルの同期と並列性の活用
― テスト ベンチのステート マシンを書くのが面倒だな.
              ・    きちんと動作してくれる Bluespec はパワフルなツンデレ
― モジュールのインスタンシーエーションで入出力ピン                          娘と筆者はイメージしています(図 2)
                                                                      .
  をつなぎ忘れていた
という思いをしたことはありませんか?
 単純な記述の羅列や細かいミスへの注力が続くと,本来
力を入れるべき,アーキテクチャの設計まで億劫になって
しまいます.また,
        「コンパイル(論理合成)は通るのに,
シミュレーションや FPGA 上で動作させると,何かおか
しい」という事態に頭を悩ませ,原因はうっかりミスだっ
たということも一度や二度ではないと思います.
 記述の手間がもっと省けて,コンパイル時に強力にエ
ラー・チェックしてくれる HDL 言語ないかなあ…という
要 求 に 応 え て く れ る の が Bluespec System Verilog で す
(図 1)
    .VHDL がまじめなキャリア・ウーマン,Verilog                              出典: CQ出版 Interface 2011年2月号より
                                                               ▲ 図 2 Bluespec System Verilog は ツ
                                                               ンデレ娘
                                                                                             3
FPGAの利用シーン
  独自の回路を実現できるハードウェア

  特定の処理を低消費電力で高性能処理

  デバイスに近い処理を簡単に実現

   自由なI/Oポートの定義


                      http://japan.xilinx.com/products/boards-and-kits/EK-K7-KC705-G.htm



  ASIC開発のプロトタイプとして
                      http://www.micron.com/about/news-and-events/events/xfest-2012




  特定用途向け少数生産の製品として


                                                                                      4
FPGAの利用シーン
  独自の回路を実現できるハードウェア

  特定の処理を低消費電力で高性能処理

  デバイスに近い処理を簡単に実現

   自由なI/Oポートの定義


                      http://japan.xilinx.com/products/boards-and-kits/EK-K7-KC705-G.htm



  ASIC開発のプロトタイプとして
                      http://www.micron.com/about/news-and-events/events/xfest-2012




  特定用途向け少数生産の製品として

 あるいは,オリジナルの演算コンポーネントとして
                                                                                      5
freeocean                         ちょっ
                                                と宣伝
ハードウェアWebキャッシュサーバ
   最大スループット: 1Gbps

   最大同時処理コネクション数: 50万

   秒間同時接続数: 約2万HTTPリクエスト

   最大消費電力: 約160W




                     Since 2006
                     http://e-trees.jp/index.php/製品/freeocean/
                                                                 6
freeocean-ng 構想         ちょっ
                           と相談
ハードウェアWebキャッシュサーバ
   最大スループット: 20Gbps

   最大同時処理コネクション数: 50万

   秒間同時接続数: 約2万HTTPリクエスト

   最大消費電力: 200W以下




                                 7
FPGA に関してよく聞くフレーズ
 向いてる計算ならGPUやCPUより速いよ

 そんなのFPGAなら1クロックでできるし!!




                          8
FPGA に関してよく聞くフレーズ
    向いてる計算ならGPUやCPUより速いよ

    そんなのFPGAなら1クロックでできるし!!

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.




                                                                          9
FPGA に関してよく聞くフレーズ
  向いてる計算ならGPUやCPUより速いよ

  そんなのFPGAなら1クロックでできるし!!

と,いいながら

  うーん,メモリ少ないんですよね...

  浮動小数点数演算はちょっと苦手かも...

 FPGAの性能に関して,ソフトウェア・アプリ開発者と
 イメージを共有したい

                              10
で,実際FPGAってどんな素子なの?
  「それ1クロックで...」の光と影

  浮動小数点数演算が苦手?

  データの入出力ってどうやるの?

  メモリ使えるの?



  高位合成言語について


                      11
「それ1クロックで...」の光と影
  演算素子を好きにつなげられる

  データ移動に関するクロックコストは0




                       12
「それ1クロックで...」の光と影
  演算素子/配線を通る時間は0ではない

  遠い配線は演算素子で中継されることも


                  δ n秒          δ n秒



    δ n秒                 δ n秒          δ n秒



           δ n秒                 δ n秒



           クロックを長くしないと安定しない
                                              13
用途にあわせてクロックを制御するのが技
  適度にFFを入れてクロックを分割する

  パイプライン並列化でスループットの旨味も


                δ n秒          δ n秒

                FF     FF

    δ n秒               δ n秒          δ n秒
           FF
                       FF     FF
                FF
                              δ n秒



           クロックを長くしないと安定しない
                                            14
FPGAの内部はどうなっているのか?
       X-Ref Target - Figure 3




                                                    COUT

                   DI
                                  DI2 CLK WE                                                                 D
        D6:D1                    A6:A1     O6
                                 WA6:WA1 O5                         D          Q
                                   LUT                              CE             D5Q
                                   RAM                              CK             MC31
                                   ROM    DI1              CARRY4        SRINIT0   CY                        DMUX
                                                                         SRINIT1   XOR
                                  DPRAM64                                          O5
                                  DPRAM32                                 SR       O6
                                  SPRAM64
                                  SPRAM32                                                 D          Q       DQ
                                  SRL16                                                        FF
                                                                                   MC31   CE
                                  SRL32 WA8                                                    LATCH
                                                                                   CY     CK
                                         WA7                                                   AND2L
                                                                                   XOR
                                        MC31                                                   OR2L
                                                                                   DX          SRINIT0
                                                                                   O5          SRINIT1
                 DX                                                                O6
                                                                                               SR

                   CI
                                  DI2 CLK WE
                                 A6:A1     O6                                                                C
        C6:C1
                                 WA6:WA1 O5                         D          Q
                                   LUT                              CE
                                   RAM                              CK             C5Q
                                   ROM    DI1                            SRINIT0   F7
                                                                         SRINIT1   CY
                                  DPRAM64                                          XOR                       CMUX
                                  DPRAM32                                 SR       O5
                                  SPRAM64                                          O6
                                  SPRAM32
                                  SRL16
                                  SRL32 WA8                                        F7
                                         WA7                                       CY     D          Q       CQ
                                                                                               FF
                                        MC31                                       XOR    CE   LATCH
                                                                                   CX     CK   AND2L
                 CX                                                                O5          OR2L
             CLK                                                                   O6          SRINIT0
                                                                                               SRINIT1
                                                                                               SR
               WE

                 CE
                 SR

                    BI
                                  DI2 CLK WE                                                                 B
        B6:B1                    A6:A1     O6
                                 WA6:WA1 O5                         D          Q
                                  LUT                               CE             B5Q
                                  RAM                               CK             F8
                                  ROM     DI1                            SRINIT0   CY
                                                                                                             BMUX
                                                                         SRINIT1   XOR
                                  DPRAM64                                          O5
                                  DPRAM32                                 SR       O6
                                  SPRAM64
                                  SPRAM32                                                 D    FF    Q       BQ
                                  SRL16 WA8                                        F8
                                                                                   CY
                                                                                          CE   LATCH
                                  SRL32                                                   CK   AND2L
                                         WA7                                       XOR
                                        MC31                                       BX          OR2L
                                                                                   O5          SRINIT0
                 BX                                                                O6          SRINIT1
                                                                                               SR




 6入力
                    AI
                                  DI2 CLK WE                                                                 A
        A6:A1                    A6:A1     O6
                                 WA6:WA1 O5                         D          Q
                                   LUT                              CE             A5Q
                                   RAM                              CK             F7
                                   ROM    DI1                            SRINIT0   CY
                                                                                   XOR                       AMUX
                                                                         SRINIT1
                                  DPRAM64                                          O5
                                  DPRAM32                                 SR       O6
                                  SPRAM64
                                  SPRAM32                                                 D          Q       AQ
                                  SRL16 WA8                                        F7          FF
                                                                                   CY
                                                                                          CE   LATCH
                                  SRL32
                                         WA7                                       XOR    CK   AND2L
                                        MC31                                       AX          OR2L
                                                                                   O5          SRINIT0
                                                                                   O6          SRINIT1
                                                                                               SR


                                                1
                 AX


                                                       CIN
                                                                                                    ug384_03_042309



                                                     3 : SLICEM
                                                                                                                      15
1024bit カウンタの作り方
(1)愚直に作ってみる




(2)2段に分けて作ってみる




                   16
1024bit カウンタの作り方
(1)愚直に作ってみる




        freq. 66.996MHz, 256スライス
(2)2段に分けて作ってみる




        freq. 503.170MHz, 32スライス
                                   17
1024bit カウンタの作り方
 (1)



                   (2)




                         18
カウンタのbit幅と周波数の関係
                 Max Freq.(MHz)

 1100



  825



  550



  275



    0
        4   32       256          1024   2048



                                                19
浮動小数点数演算が苦手?
よくある全部入り浮動小数点数演算器を作ってみた
  32bit 単精度コア
                                  XC7K325Tなら
  最大動作周波数 約423MHz                  59個入る?


  838スライス(#.Regs.: 2592,#.LUTs:2122)

  64bit 倍精度コア
                                  XC7K325Tなら
  最大動作周波数 約413MHz                  24個入る?


  2032スライス(#. Regs.: 8145, #.LUTs: 5502)



                                               20
浮動小数点数演算が苦手?
コンポーネントだけなら
  32bit 単精度コア    XC7K325Tなら
                  291個入る?
  加減算器 175スライス
                        XC7K325Tなら
  乗算器 49スライス,3DSP       280個入る?


  64bit 倍精度コア    XC7K325Tなら
                 169個入る?
  加減算器 301スライス
                            XC7K325Tなら

  乗算器 143スライス,11DSP           76個入る?



たぶん,こういう方向で何かあればいいんじゃないかなあ...
                                         21
データの入出力ってどうやるの?
  パソコンとの通信

   PCIe,イーサネット,UART

  FPGA同士の通信

   Rocket I/O,GPIO

  その他ペリフェラルとの通信

   LVDS,GPIO


                      22
データの入出力ってどうやるの?
  パソコンとの通信

   PCIe,イーサネット,UART

  FPGA同士の通信

   Rocket I/O,GPIO

  その他ペリフェラルとの通信

   LVDS,GPIO


                      23
FPGA
HDLに実装したUDP/IPの性能
   959.1Mbps
スループット
     FPGA                                                          1000BASE-T


                                               1Gbps
           UDP
                                  (Octet)                                                   (Mbps)

                    64              130            961538                                    486.4
                  256               322            388198                                    792.9
                 1024              1090            114678                                    940.6
                 1472              1538                81274                                 959.1

                                                                                       表 3 リソース使用量の比較結果                                       

   FPGA                                                      !!
レイテンシ(μ秒)
                                                                                  レジスタ数 LUT 数 占有スライス数 BRAM36E1
                                                                         Native   1620     2212     779               12
                                                                         JavaRock 1472     2084     785               12

      e7UDP/IP IP                                                                           FPGA
                                                                                 GbE
                                                                          PC                          e7UDPIP-Core




                                                                                                                           user-module
                                                                                              MAC
                                                                                                          RX   BRAM

                                                                                                          TX   BRAM
                         16Byte      256Byte       1024Byte
                                                                        図 7 イーサネットを介して PC と FPGA を接続するシステムの例
 FPGA                     61            77             120
                                                                                                 PC(1)
                                                                        JavaRock で合成した場合のハードウェアリソース量が下回っ
                                                                                                  Pentium4 2.8GHz
 PC(1) Java               228          200             222              たが,読み書きをカウンタするレジスタの使い方などの違いに
                                                                                                  512MB
                                                                                                  CentOS
                                                                        よるもので本質的な違いはないと考えられる.また合成の結果
 PC(1) C                  149          149             196              得られた最高動作周波数はどちらも 211.751MHz であった.                                     
                                                                          4. 3 ケース 2: イーサネットで接続する場合
                                                                                                 PC(2)
 PC(2) Java               200          200             202                                        Core i7-3930K 3.2GHz
                                                                          次に,協調設計の対象となる FPGA と CPU が UDP/IP 通
                                                                                                  16GB
                                                                        信を介してデータを共有するシステムを設計することを考える.
                                                                                                  Windows7 Pro.
                                                                        イーサネットインタフェイスは FPGA でも一般的になりつつ
                                                                        あり,多くの評価ボードでもイーサネットポートが搭載されて
                                                                  Xilinx ISE
                                                                        いる.イーサネットを使うことで,接続する CPU や FPGA の
                                                                                                                                         24
                                                                        個数や物理的な配置を比較的自由に取り扱うことができるため,
メモリ使えるの?
  FPGA内蔵LUTRAM

   演算回路との共用.速い

  FPGA内蔵BlockRAM

   FPGA内の専用リソース.速い.

  外部メモリ

   SRAM: 速い.でも高い.

   DRAM: 遅い.でも安い.
                      25
DDR3メモリにアクセスしてみた
とりあえず初期実装としてはこんな感じ
                          いろんな 
    UPL                   制御信号線

             e7MemIface            DDR3

    100MHz                400MHz




                             49サイクル




                                   76サイクル

                                            26
Universal Protocol Line                                              ちょっ
                                                                        と寄道
UPL




          =                                                                w
                                                                 a

                                                                 b            x

                                                                 c            y

                                                                 d            z




      [a,b,c,d]               w=a+b,x=b-c,           [w,x,y,z]
                              y=w/x,z=d+1


                  a   b   c

                                             w   x   y   z




                                                                                  27
Universal Protocol Line                                  ちょっ
                                                                       と寄道
! 
! 
! 




!  !                     !  ! 
!  !                     !  !                =   =

                                 MSB
                                   MSB                               LSBLSB
        25MHz 32bit
           25MHz 32bit                   a   a               b   b

                                                     c   c




                                                                              28
高位合成言語
手軽なハードウェア開発を夢見て
         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]


 た言語および言語処理系では,高水準言語の機能を                          また,オブジェクト指向言語において,クラスのイ
 用いて記述された部分とハードウェア化の対象とな                        ンスタンスの動的な生成を実現するのは困難である.                     29
高位合成言語
タイプ別に高位合成言語を分けてみた

   既存の高水準言語ベースのHDL:

    ImpulseC, MaxCompiler など

   既存の高水準言語をハードウェアに:

    AutoESL, CyberWorkBench, Lime, JavaRock

   モダンな概念を取り入れた新しいHDL:

    Bluespec


                                              30
JavaRock                                                                                             http://javarock.sourceforge.net/
JavaRockの目指すところ
            JavaプログラムをそのままHW化する

                追加構文,データ型は導入しない

                記述に制限は加える

            HDLで書けることをJavaで書けるようにする ではない                                                                                                     Vol. 48          No. 5                              FPGA 向け高位合成言語としての Java の活用手法の検討                                                  9




            Javaで書けることを全部HDLにする ではない
                           Vol. 48          No. 5                               FPGA 向け高位合成言語としての Java の活用手法の検討
                                                                                                          Game
                                                                                                               2
                                                                                                                                                             player
                                                                                                                                                                          Player
                                                                                                                                                                                      player
                                                                                                                                                                                                                FPGAMain
                                                                                                                                                                                                                                 9
                                                                                                                                                                                                         monitor                      rs232c

                                                                                                                                                   ICFPTPlayer         RandomPlayer       MCPlayer        MonitorWrapper        RS232CWapper

                                                                                                                                                           calc

                                                                                                                                                    Calculator                                               HDL modules         HDL modules


                                           player                   player
                               Game                     Player                                FPGAMain
                                                2                                                                                          Executable as Software                                    Implement-able onto FPGA



                                                                                       monitor                      rs232c                         JVM                                                          FPGA


   .java%                        ICFPTPlayer

                                         calc
                                                     RandomPlayer       MCPlayer        MonitorWrapper        RS232CWapper
                                                                                                                                                 図 15        connect6 のデバッグで用いたクラスのクラス図
                                  Calculator                                               HDL modules         HDL modules




                  Java                      %
                         Executable as Software                                    Implement-able onto FPGA


                                                                                                                                                                                                                                               図 17   VGA グラフィクス描画ハードウェアをソフトウェアでデ
                                 JVM
                                                                                       JVM%   FPGA

                                                                                                                                                         SwingFrame
                                                                                                                                                                              vga
                                                                                                                                                                                      VGAJavaTest
                                                                                                                                                                                                       vga
                                                                                                                                                                                                                       VGAIf
                                                                                                                                                                                                                                                      バッグ
                               図 15 connect6 のデバッグで用いたクラスのクラス図
                                                                                                                                                         SwingCanvas                                            monitor

                                                                                                                                                                                                                    VGAWrapper

Java        %                                                                                                                                                                                                      HDL modules

                                                                                                                                 図 17 VGA グラフィクス描画ハードウェアをソフトウェアでデ
                                       SwingFrame
                                                            vga
                                                                    VGAJavaTest
                                                                                     vga
                                                                                                     VGAIf
                                                                                                                                      バッグ    Executable as Software Implement-able onto FPGA



                                                                                                                                                                        JVM                              FPGA
                                       SwingCanvas                                            monitor
                                                                                                                                            図 16         グラフィクス描画ハードウェア設計のためのクラス構造
                  JavaRock%
                                                                                                  VGAWrapper


                                                                             .vhdl%                                          /
                                                                                                 HDL modules
                                                                                                                                          と ICFTPPlayer.java として Java で実装する.
                                                                                                                                             図 15 に ,Java で 実 装 し た connect6 を デ バッ
                                                                                                                                          グ す る 際 に 利 用 し た ク ラ ス 群 の ク ラ ス 図 を 示 す.
                                          Executable as Software             Implement-able onto FPGA



                                                      JVM                              FPGA
                                                                                                                                          ICFPTPlayer と Calculator からなる ICFPT で提                                                                      図 18   VGA グラフィクス描画ハードウェア
                                                                                                                                          示された connect6 プレイヤは,他の幾つかのプレー
                          図 16 グラフィクス描画ハードウェア設計のためのクラス構造
                                                                                                                                          ヤ実装と共に Player インターフェイスを実装するク
                                                                                                                                          ラスである.このクラスのインスタンスは,Game と
                                                                                                                                                                                                                                               作成した描画対象である SwingFrame をインスタンシ
                                                                                                                                                                                                                                               エーションすることで図 17 に示すようにソフトウェ
                                                                                                                                                                                                                                                                                      31
                         と ICFTPPlayer.java として Java で実装する.
高位合成言語
HDL覚えなくてもHW設計ができる
         ...というのは言い過ぎかもですが




                               ImpluseC




                              JavaRock




            http://www.cs.tsukuba.ac.jp/~yoshiki/FPGA/Contest/index.php?FPGA2011%C1%B4%C2%D0%C0%EF%CD%FA%CE%F2


                                                                                                           32
高位合成言語
HDL覚えなくてもHW設計ができる
         ...というのは言い過ぎかもですが




                http://d.hatena.ne.jp/nushio/20120708
                                                    33
で,実際FPGAってどんな素子なの?
  「それ1クロックで...」の光と影   要・工夫

  浮動小数点数演算が苦手?     やり方による

  データの入出力ってどうやるの?     豊富

  メモリ使えるの?     使える.
               大容量にはコスト有


  高位合成言語について     お試しください


                            34

Google 20130218

  • 1.
    計算機としてのFPGAの 基礎知識 三好 健文 株式会社イーツリーズ・ジャパン 1
  • 2.
    三好健文 - e-trees.Japan, Inc. 東工大→東大→東工大→電通大→現在 コンパイラとかHW/SW協調設計とか 囲碁専用ハードウェア CUDA/MPIコンパイラ ネットワーク処理の専用ハードウェア化 ストリーム処理専用アーキテクチャ JavaRock 2 2012.8.17 @虎ノ門
  • 3.
    FPGAとは?  本章では,高位設計言語である Bluespec SystemVerilog を紹介する.こ の言語では,コンパイル時にしっかりエラー検出ができ,また,さまざまなライブ ラリも提供している.FPGA や ASIC が大規模化し複雑な回路を設計する機会が Field Programmable Gate Array 増えてきた今,知っておくべき技術だろう. (編集部) 三好 健文 論理回路・データパスを自由に作り込める  Verilog HDL や VHDL を使った設計で, HDL がドレスを着たお姫さまだとすると,コンパイル時 ― あぁ∼,数字って 32 ビットだった.うっかりキャスト にエラーをしっかり検出してくれるが故にコンパイルを通 されていたよ… すのが困難な反面,コンパイルさえ通れば合成した回路が ・ クロックレベルの同期と並列性の活用 ― テスト ベンチのステート マシンを書くのが面倒だな. ・ きちんと動作してくれる Bluespec はパワフルなツンデレ ― モジュールのインスタンシーエーションで入出力ピン 娘と筆者はイメージしています(図 2) . をつなぎ忘れていた という思いをしたことはありませんか?  単純な記述の羅列や細かいミスへの注力が続くと,本来 力を入れるべき,アーキテクチャの設計まで億劫になって しまいます.また, 「コンパイル(論理合成)は通るのに, シミュレーションや FPGA 上で動作させると,何かおか しい」という事態に頭を悩ませ,原因はうっかりミスだっ たということも一度や二度ではないと思います.  記述の手間がもっと省けて,コンパイル時に強力にエ ラー・チェックしてくれる HDL 言語ないかなあ…という 要 求 に 応 え て く れ る の が Bluespec System Verilog で す (図 1) .VHDL がまじめなキャリア・ウーマン,Verilog 出典: CQ出版 Interface 2011年2月号より ▲ 図 2 Bluespec System Verilog は ツ ンデレ娘 3
  • 4.
    FPGAの利用シーン 独自の回路を実現できるハードウェア 特定の処理を低消費電力で高性能処理 デバイスに近い処理を簡単に実現 自由なI/Oポートの定義 http://japan.xilinx.com/products/boards-and-kits/EK-K7-KC705-G.htm ASIC開発のプロトタイプとして http://www.micron.com/about/news-and-events/events/xfest-2012 特定用途向け少数生産の製品として 4
  • 5.
    FPGAの利用シーン 独自の回路を実現できるハードウェア 特定の処理を低消費電力で高性能処理 デバイスに近い処理を簡単に実現 自由なI/Oポートの定義 http://japan.xilinx.com/products/boards-and-kits/EK-K7-KC705-G.htm ASIC開発のプロトタイプとして http://www.micron.com/about/news-and-events/events/xfest-2012 特定用途向け少数生産の製品として あるいは,オリジナルの演算コンポーネントとして 5
  • 6.
    freeocean ちょっ と宣伝 ハードウェアWebキャッシュサーバ 最大スループット: 1Gbps 最大同時処理コネクション数: 50万 秒間同時接続数: 約2万HTTPリクエスト 最大消費電力: 約160W Since 2006 http://e-trees.jp/index.php/製品/freeocean/ 6
  • 7.
    freeocean-ng 構想 ちょっ と相談 ハードウェアWebキャッシュサーバ 最大スループット: 20Gbps 最大同時処理コネクション数: 50万 秒間同時接続数: 約2万HTTPリクエスト 最大消費電力: 200W以下 7
  • 8.
  • 9.
    FPGA に関してよく聞くフレーズ 向いてる計算ならGPUやCPUより速いよ そんなのFPGAなら1クロックでできるし!! 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. 9
  • 10.
    FPGA に関してよく聞くフレーズ 向いてる計算ならGPUやCPUより速いよ そんなのFPGAなら1クロックでできるし!! と,いいながら うーん,メモリ少ないんですよね... 浮動小数点数演算はちょっと苦手かも... FPGAの性能に関して,ソフトウェア・アプリ開発者と イメージを共有したい 10
  • 11.
    で,実際FPGAってどんな素子なの? 「それ1クロックで...」の光と影 浮動小数点数演算が苦手? データの入出力ってどうやるの? メモリ使えるの? 高位合成言語について 11
  • 12.
  • 13.
    「それ1クロックで...」の光と影 演算素子/配線を通る時間は0ではない 遠い配線は演算素子で中継されることも δ n秒 δ n秒 δ n秒 δ n秒 δ n秒 δ n秒 δ n秒 クロックを長くしないと安定しない 13
  • 14.
    用途にあわせてクロックを制御するのが技 適度にFFを入れてクロックを分割する パイプライン並列化でスループットの旨味も δ n秒 δ n秒 FF FF δ n秒 δ n秒 δ n秒 FF FF FF FF δ n秒 クロックを長くしないと安定しない 14
  • 15.
    FPGAの内部はどうなっているのか? X-Ref Target - Figure 3 COUT DI DI2 CLK WE D D6:D1 A6:A1 O6 WA6:WA1 O5 D Q LUT CE D5Q RAM CK MC31 ROM DI1 CARRY4 SRINIT0 CY DMUX SRINIT1 XOR DPRAM64 O5 DPRAM32 SR O6 SPRAM64 SPRAM32 D Q DQ SRL16 FF MC31 CE SRL32 WA8 LATCH CY CK WA7 AND2L XOR MC31 OR2L DX SRINIT0 O5 SRINIT1 DX O6 SR CI DI2 CLK WE A6:A1 O6 C C6:C1 WA6:WA1 O5 D Q LUT CE RAM CK C5Q ROM DI1 SRINIT0 F7 SRINIT1 CY DPRAM64 XOR CMUX DPRAM32 SR O5 SPRAM64 O6 SPRAM32 SRL16 SRL32 WA8 F7 WA7 CY D Q CQ FF MC31 XOR CE LATCH CX CK AND2L CX O5 OR2L CLK O6 SRINIT0 SRINIT1 SR WE CE SR BI DI2 CLK WE B B6:B1 A6:A1 O6 WA6:WA1 O5 D Q LUT CE B5Q RAM CK F8 ROM DI1 SRINIT0 CY BMUX SRINIT1 XOR DPRAM64 O5 DPRAM32 SR O6 SPRAM64 SPRAM32 D FF Q BQ SRL16 WA8 F8 CY CE LATCH SRL32 CK AND2L WA7 XOR MC31 BX OR2L O5 SRINIT0 BX O6 SRINIT1 SR 6入力 AI DI2 CLK WE A A6:A1 A6:A1 O6 WA6:WA1 O5 D Q LUT CE A5Q RAM CK F7 ROM DI1 SRINIT0 CY XOR AMUX SRINIT1 DPRAM64 O5 DPRAM32 SR O6 SPRAM64 SPRAM32 D Q AQ SRL16 WA8 F7 FF CY CE LATCH SRL32 WA7 XOR CK AND2L MC31 AX OR2L O5 SRINIT0 O6 SRINIT1 SR 1 AX CIN ug384_03_042309 3 : SLICEM 15
  • 16.
  • 17.
    1024bit カウンタの作り方 (1)愚直に作ってみる freq. 66.996MHz, 256スライス (2)2段に分けて作ってみる freq. 503.170MHz, 32スライス 17
  • 18.
  • 19.
    カウンタのbit幅と周波数の関係 Max Freq.(MHz) 1100 825 550 275 0 4 32 256 1024 2048 19
  • 20.
    浮動小数点数演算が苦手? よくある全部入り浮動小数点数演算器を作ってみた 32bit単精度コア XC7K325Tなら 最大動作周波数 約423MHz 59個入る? 838スライス(#.Regs.: 2592,#.LUTs:2122) 64bit 倍精度コア XC7K325Tなら 最大動作周波数 約413MHz 24個入る? 2032スライス(#. Regs.: 8145, #.LUTs: 5502) 20
  • 21.
    浮動小数点数演算が苦手? コンポーネントだけなら 32bit単精度コア XC7K325Tなら 291個入る? 加減算器 175スライス XC7K325Tなら 乗算器 49スライス,3DSP 280個入る? 64bit 倍精度コア XC7K325Tなら 169個入る? 加減算器 301スライス XC7K325Tなら 乗算器 143スライス,11DSP 76個入る? たぶん,こういう方向で何かあればいいんじゃないかなあ... 21
  • 22.
    データの入出力ってどうやるの? パソコンとの通信 PCIe,イーサネット,UART FPGA同士の通信 Rocket I/O,GPIO その他ペリフェラルとの通信 LVDS,GPIO 22
  • 23.
    データの入出力ってどうやるの? パソコンとの通信 PCIe,イーサネット,UART FPGA同士の通信 Rocket I/O,GPIO その他ペリフェラルとの通信 LVDS,GPIO 23
  • 24.
    FPGA HDLに実装したUDP/IPの性能 959.1Mbps スループット FPGA 1000BASE-T 1Gbps UDP (Octet) (Mbps) 64 130 961538 486.4 256 322 388198 792.9 1024 1090 114678 940.6 1472 1538 81274 959.1 表 3 リソース使用量の比較結果 FPGA !! レイテンシ(μ秒) レジスタ数 LUT 数 占有スライス数 BRAM36E1 Native 1620 2212 779 12 JavaRock 1472 2084 785 12 e7UDP/IP IP FPGA GbE PC e7UDPIP-Core user-module MAC RX BRAM TX BRAM 16Byte 256Byte 1024Byte 図 7 イーサネットを介して PC と FPGA を接続するシステムの例 FPGA 61 77 120 PC(1) JavaRock で合成した場合のハードウェアリソース量が下回っ Pentium4 2.8GHz PC(1) Java 228 200 222 たが,読み書きをカウンタするレジスタの使い方などの違いに 512MB CentOS よるもので本質的な違いはないと考えられる.また合成の結果 PC(1) C 149 149 196 得られた最高動作周波数はどちらも 211.751MHz であった. 4. 3 ケース 2: イーサネットで接続する場合 PC(2) PC(2) Java 200 200 202 Core i7-3930K 3.2GHz 次に,協調設計の対象となる FPGA と CPU が UDP/IP 通 16GB 信を介してデータを共有するシステムを設計することを考える. Windows7 Pro. イーサネットインタフェイスは FPGA でも一般的になりつつ あり,多くの評価ボードでもイーサネットポートが搭載されて Xilinx ISE いる.イーサネットを使うことで,接続する CPU や FPGA の 24 個数や物理的な配置を比較的自由に取り扱うことができるため,
  • 25.
    メモリ使えるの? FPGA内蔵LUTRAM 演算回路との共用.速い FPGA内蔵BlockRAM FPGA内の専用リソース.速い. 外部メモリ SRAM: 速い.でも高い. DRAM: 遅い.でも安い. 25
  • 26.
    DDR3メモリにアクセスしてみた とりあえず初期実装としてはこんな感じ いろんな  UPL 制御信号線 e7MemIface DDR3 100MHz 400MHz 49サイクル 76サイクル 26
  • 27.
    Universal Protocol Line ちょっ と寄道 UPL = w a b x c y d z [a,b,c,d] w=a+b,x=b-c, [w,x,y,z] y=w/x,z=d+1 a b c w x y z 27
  • 28.
    Universal Protocol Line ちょっ と寄道 !  !  !  !  !  !  !  !  !  !  !  = = MSB MSB LSBLSB 25MHz 32bit 25MHz 32bit a a b b c c 28
  • 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] た言語および言語処理系では,高水準言語の機能を また,オブジェクト指向言語において,クラスのイ 用いて記述された部分とハードウェア化の対象とな ンスタンスの動的な生成を実現するのは困難である. 29
  • 30.
    高位合成言語 タイプ別に高位合成言語を分けてみた 既存の高水準言語ベースのHDL:    ImpulseC, MaxCompiler など 既存の高水準言語をハードウェアに:    AutoESL, CyberWorkBench, Lime, JavaRock モダンな概念を取り入れた新しいHDL:    Bluespec 30
  • 31.
    JavaRock http://javarock.sourceforge.net/ JavaRockの目指すところ JavaプログラムをそのままHW化する 追加構文,データ型は導入しない 記述に制限は加える HDLで書けることをJavaで書けるようにする ではない Vol. 48 No. 5 FPGA 向け高位合成言語としての Java の活用手法の検討 9 Javaで書けることを全部HDLにする ではない Vol. 48 No. 5 FPGA 向け高位合成言語としての Java の活用手法の検討 Game 2 player Player player FPGAMain 9 monitor rs232c ICFPTPlayer RandomPlayer MCPlayer MonitorWrapper RS232CWapper calc Calculator HDL modules HDL modules player player Game Player FPGAMain 2 Executable as Software Implement-able onto FPGA monitor rs232c JVM FPGA .java% ICFPTPlayer calc RandomPlayer MCPlayer MonitorWrapper RS232CWapper 図 15 connect6 のデバッグで用いたクラスのクラス図 Calculator HDL modules HDL modules Java % Executable as Software Implement-able onto FPGA 図 17 VGA グラフィクス描画ハードウェアをソフトウェアでデ JVM JVM% FPGA SwingFrame vga VGAJavaTest vga VGAIf バッグ 図 15 connect6 のデバッグで用いたクラスのクラス図 SwingCanvas monitor VGAWrapper Java % HDL modules 図 17 VGA グラフィクス描画ハードウェアをソフトウェアでデ SwingFrame vga VGAJavaTest vga VGAIf バッグ Executable as Software Implement-able onto FPGA JVM FPGA SwingCanvas monitor 図 16 グラフィクス描画ハードウェア設計のためのクラス構造 JavaRock% VGAWrapper .vhdl% / HDL modules と ICFTPPlayer.java として Java で実装する. 図 15 に ,Java で 実 装 し た connect6 を デ バッ グ す る 際 に 利 用 し た ク ラ ス 群 の ク ラ ス 図 を 示 す. Executable as Software Implement-able onto FPGA JVM FPGA ICFPTPlayer と Calculator からなる ICFPT で提 図 18 VGA グラフィクス描画ハードウェア 示された connect6 プレイヤは,他の幾つかのプレー 図 16 グラフィクス描画ハードウェア設計のためのクラス構造 ヤ実装と共に Player インターフェイスを実装するク ラスである.このクラスのインスタンスは,Game と 作成した描画対象である SwingFrame をインスタンシ エーションすることで図 17 に示すようにソフトウェ 31 と ICFTPPlayer.java として Java で実装する.
  • 32.
    高位合成言語 HDL覚えなくてもHW設計ができる ...というのは言い過ぎかもですが ImpluseC JavaRock http://www.cs.tsukuba.ac.jp/~yoshiki/FPGA/Contest/index.php?FPGA2011%C1%B4%C2%D0%C0%EF%CD%FA%CE%F2 32
  • 33.
    高位合成言語 HDL覚えなくてもHW設計ができる ...というのは言い過ぎかもですが http://d.hatena.ne.jp/nushio/20120708 33
  • 34.
    で,実際FPGAってどんな素子なの? 「それ1クロックで...」の光と影 要・工夫 浮動小数点数演算が苦手? やり方による データの入出力ってどうやるの? 豊富 メモリ使えるの? 使える. 大容量にはコスト有 高位合成言語について お試しください 34