Skip to main content
計算機としての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