SlideShare a Scribd company logo
1 of 34
Download to read offline
計算機としての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

More Related Content

What's hot

FPGA startup 第一回 LT
FPGA startup 第一回 LTFPGA startup 第一回 LT
FPGA startup 第一回 LTYamato Kazuhiro
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向Shinya Takamaeda-Y
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法Kentaro Sano
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6Kentaro Ebisawa
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかなおき きしだ
 
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)Takefumi MIYOSHI
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)marsee101
 
高速シリアル通信を支える技術
高速シリアル通信を支える技術高速シリアル通信を支える技術
高速シリアル通信を支える技術Natsutani Minoru
 
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識なおき きしだ
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
katagaitaictf11_misc_ysk
katagaitaictf11_misc_yskkatagaitaictf11_misc_ysk
katagaitaictf11_misc_yskysk256
 
FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器I_HaL
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方Mr. Vengineer
 

What's hot (20)

FPGA startup 第一回 LT
FPGA startup 第一回 LTFPGA startup 第一回 LT
FPGA startup 第一回 LT
 
Reconf_201409
Reconf_201409Reconf_201409
Reconf_201409
 
Takep lpc1114-190614
Takep lpc1114-190614Takep lpc1114-190614
Takep lpc1114-190614
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
Fpgax 20130604
Fpgax 20130604Fpgax 20130604
Fpgax 20130604
 
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 
ソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うかソフトウェア技術者はFPGAをどのように使うか
ソフトウェア技術者はFPGAをどのように使うか
 
FPGA
FPGAFPGA
FPGA
 
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
 
Riscv+fpga200606
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
 
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
 
高速シリアル通信を支える技術
高速シリアル通信を支える技術高速シリアル通信を支える技術
高速シリアル通信を支える技術
 
増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識増え続ける情報に対応するためのFPGA基礎知識
増え続ける情報に対応するためのFPGA基礎知識
 
Info talk2013
Info talk2013Info talk2013
Info talk2013
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
katagaitaictf11_misc_ysk
katagaitaictf11_misc_yskkatagaitaictf11_misc_ysk
katagaitaictf11_misc_ysk
 
Adk2012
Adk2012Adk2012
Adk2012
 
FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器FPGAによるHDMI to LVDS変換器
FPGAによるHDMI to LVDS変換器
 
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
 

Similar to Google 20130218

Osc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiOsc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiNoriyuki Yamaguchi
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_yskysk256
 
200625material naruse
200625material naruse200625material naruse
200625material naruseRCCSRENKEI
 
20221018_IoTLT_vol92_kitazaki_v1.pdf
20221018_IoTLT_vol92_kitazaki_v1.pdf20221018_IoTLT_vol92_kitazaki_v1.pdf
20221018_IoTLT_vol92_kitazaki_v1.pdfAyachika Kitazaki
 
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみたHiroki Nakahara
 
モーターを低速で定速で動かしてみる
モーターを低速で定速で動かしてみるモーターを低速で定速で動かしてみる
モーターを低速で定速で動かしてみるKeiichi Sakai
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータShinya Takamaeda-Y
 
[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)
[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)
[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)Insight Technology, Inc.
 
Router board勉強会vol2(配布用)
Router board勉強会vol2(配布用)Router board勉強会vol2(配布用)
Router board勉強会vol2(配布用)milk hanakara
 
あるブートローダの話
あるブートローダの話あるブートローダの話
あるブートローダの話nullnilaki
 
20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf
20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf
20230424_Node-RED-MCU_vol1_kitazaki_v1.pdfAyachika Kitazaki
 
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 24章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2mao999
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf
20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf
20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdfAyachika Kitazaki
 
Odyssey MAX 10 FPGA入門セミナーテキスト
Odyssey MAX 10 FPGA入門セミナーテキストOdyssey MAX 10 FPGA入門セミナーテキスト
Odyssey MAX 10 FPGA入門セミナーテキストTsuyoshi Horigome
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話Masawo Yamazaki
 
20230423_Javascript_Festival_2023_kitazaki_v1.pdf
20230423_Javascript_Festival_2023_kitazaki_v1.pdf20230423_Javascript_Festival_2023_kitazaki_v1.pdf
20230423_Javascript_Festival_2023_kitazaki_v1.pdfAyachika Kitazaki
 

Similar to Google 20130218 (20)

Osc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamagutiOsc2012 tokyo fall_home_san_nayamaguti
Osc2012 tokyo fall_home_san_nayamaguti
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
 
200625material naruse
200625material naruse200625material naruse
200625material naruse
 
20221018_IoTLT_vol92_kitazaki_v1.pdf
20221018_IoTLT_vol92_kitazaki_v1.pdf20221018_IoTLT_vol92_kitazaki_v1.pdf
20221018_IoTLT_vol92_kitazaki_v1.pdf
 
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
電波望遠鏡用の分光器をAltera SDK for OpenCL使ってサクッと作ってみた
 
モーターを低速で定速で動かしてみる
モーターを低速で定速で動かしてみるモーターを低速で定速で動かしてみる
モーターを低速で定速で動かしてみる
 
CMSI計算科学技術特論A (2015) 第9回
CMSI計算科学技術特論A (2015) 第9回CMSI計算科学技術特論A (2015) 第9回
CMSI計算科学技術特論A (2015) 第9回
 
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータPyCoRAMを用いたグラフ処理FPGAアクセラレータ
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
 
[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)
[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)
[INSIGHT OUT 2011] C22 RAC buffer sharing の仕組み(yamashita)
 
Router board勉強会vol2(配布用)
Router board勉強会vol2(配布用)Router board勉強会vol2(配布用)
Router board勉強会vol2(配布用)
 
あるブートローダの話
あるブートローダの話あるブートローダの話
あるブートローダの話
 
20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf
20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf
20230424_Node-RED-MCU_vol1_kitazaki_v1.pdf
 
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 24章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf
20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf
20230504_M5_Japan_Tour_2023_Spring_kitazaki_v1.pdf
 
Odyssey MAX 10 FPGA入門セミナーテキスト
Odyssey MAX 10 FPGA入門セミナーテキストOdyssey MAX 10 FPGA入門セミナーテキスト
Odyssey MAX 10 FPGA入門セミナーテキスト
 
SRQ Flip Flopの等価回路モデル
SRQ Flip Flopの等価回路モデルSRQ Flip Flopの等価回路モデル
SRQ Flip Flopの等価回路モデル
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話
 
20230423_Javascript_Festival_2023_kitazaki_v1.pdf
20230423_Javascript_Festival_2023_kitazaki_v1.pdf20230423_Javascript_Festival_2023_kitazaki_v1.pdf
20230423_Javascript_Festival_2023_kitazaki_v1.pdf
 
RSQB Flip Flopの等価回路モデル
RSQB Flip Flopの等価回路モデルRSQB Flip Flopの等価回路モデル
RSQB Flip Flopの等価回路モデル
 

More from Takefumi MIYOSHI

ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoTakefumi MIYOSHI
 
ACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組みACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組みTakefumi MIYOSHI
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29Takefumi MIYOSHI
 
Misc for edge_devices_with_fpga
Misc for edge_devices_with_fpgaMisc for edge_devices_with_fpga
Misc for edge_devices_with_fpgaTakefumi MIYOSHI
 
Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511Takefumi MIYOSHI
 
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)Takefumi MIYOSHI
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Takefumi MIYOSHI
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Takefumi MIYOSHI
 
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Takefumi MIYOSHI
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Takefumi MIYOSHI
 

More from Takefumi MIYOSHI (20)

ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyo
 
DAS_202109
DAS_202109DAS_202109
DAS_202109
 
ACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組みACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組み
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
 
Misc for edge_devices_with_fpga
Misc for edge_devices_with_fpgaMisc for edge_devices_with_fpga
Misc for edge_devices_with_fpga
 
Cq off 20190718
Cq off 20190718Cq off 20190718
Cq off 20190718
 
Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511
 
Reconf 201901
Reconf 201901Reconf 201901
Reconf 201901
 
Hls friends 201803.key
Hls friends 201803.keyHls friends 201803.key
Hls friends 201803.key
 
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
 
Hls friends 20161122.key
Hls friends 20161122.keyHls friends 20161122.key
Hls friends 20161122.key
 
Slide
SlideSlide
Slide
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
Das 2015
Das 2015Das 2015
Das 2015
 
Microblaze loader
Microblaze loaderMicroblaze loader
Microblaze loader
 
Reconf 201506
Reconf 201506Reconf 201506
Reconf 201506
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
 
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
 
Synthesijer hls 20150116
Synthesijer hls 20150116Synthesijer hls 20150116
Synthesijer hls 20150116
 

Google 20130218

  • 1. 計算機としてのFPGAの 基礎知識 三好 健文 株式会社イーツリーズ・ジャパン 1
  • 2. 三好健文 - e-trees. Japan, Inc. 東工大→東大→東工大→電通大→現在 コンパイラとかHW/SW協調設計とか 囲碁専用ハードウェア CUDA/MPIコンパイラ ネットワーク処理の専用ハードウェア化 ストリーム処理専用アーキテクチャ JavaRock 2 2012.8.17 @虎ノ門
  • 3. 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
  • 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
  • 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. 「それ1クロックで...」の光と影 演算素子を好きにつなげられる データ移動に関するクロックコストは0 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
  • 17. 1024bit カウンタの作り方 (1)愚直に作ってみる freq. 66.996MHz, 256スライス (2)2段に分けて作ってみる freq. 503.170MHz, 32スライス 17
  • 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