SlideShare une entreprise Scribd logo
1  sur  102
Télécharger pour lire hors ligne
Workshop: Network Tester with FPGA
    WIDE CAMP Autumn 2012 (9/3 - 9/6)



               Yohei Kuga
            sora@haeena.net
Workshop overview

"Lattice社のFPGA開発キットを使って、簡単なネットワークテスタを作成しま
す。FPGAの開発ツールを使ったEthernet回路設計を駆け足で体験すること
で、FPGAによるネットワークデバイス開発を学びます。動くものを作成して、
実際にLANケーブルの転送遅延やリピータハブの処理遅延を計測して遊び
ます。"


"The purpose of this workshop is to learn the usage of a FPGA IDE and
the development of network devices on FPGA. In this workshop,
participants try to develop a simple network tester on Lattice's FPGA
SDK and to evaluate the delay of a LAN cable or a repeater hub by
developed testers."

                                                      Webページより
Main topic
FPGA programming for beginners
    Dev kit and tools
    Tutorial 1: "LED"
    Simulation tool and testbench
    Tutorial 2: "Simulation"
    IP core
    Building on the command-line
FPGA design for Ethernet
    overview, MII, RMII, timing chart, MDIO, RFC2544
    Tutorial 3: "Delay measurement tool for network device"
Play with the measurement device
Next step
    {Layer2, Layer3, IPv6, throughput, frame loss rate} support
Extra materials
a. PCI and PCI Express
     overview, Bus (wishbone), sample code, debug, DMA and SR-IOV
     Tutorial 5: "How to use PCI Express IP"
b. HTML5 for embedded system
     Blob/Arraybuffer, websocket, node.js, HTML canvas
c. FPGA hot topics
     FPGA development kit, Handmade 10G/40G/100G device, memory,
     CAM/TCAM,HLS for FPGA, Embedded CPU

Reference list
Schedule


 9/4
                 Main topic


 9/5
                                Extra a:
           Main topic         PCI Express
Materials
Latest slide URL
    http://goo.gl/8UzFx
Tutorial code
    https://github.com/sora/fpga-workshop-2012f
FPGA programming for beginners
本ワークショップの進め方
Lattice社のFPGA開発キットを使ってFPGA開発を
一通り体験します                                         新規プロジェクト作成



                                                 HDLプログラミング
開発環境: Lattice Diamond
Lattice社のFPGA開発の統合環境
     Editing, pin assign, syntax check,            ピンアサイン
     IP catalog, logic synthesis (論理合成), FPGA
     configuration, etc.
                                                   コンパイル
RTLシミュレーション: ActiveHDL
     Lattice Diamondに付属
     Windowsのみ                                   コンフィグレーション


                                                今回のFPGAの開発手順
LatticeECP3 Versa Development Kit
FPGA開発キッド
   Lattice LatticeECP3
   1000BASE-T (2 port)
   PCI Express x1 I/F
   DDR SDRAM
   SERDES I/F
開発ツール
   Lattice Diamond 2.0
        論理合成: Synplify
        シミュレータ: Active-HDL
                                        http://www.latticesemi.co.
価格: $99 → $299                          jp/corporate/newscenter/newsletters/newsmay2011/ecp3
                                        versadevelopmentkit.cfm

ユーザガイド (手元にダウンロードしてください)
                                                                         PHY chip
  http://www.latticesemi.com/documents/EB62.pdf
                                                                         (Marvell
                                                                        88E1119R)
How to install Lattice Diamond for Linux
# CentOS 6.3 (x86_64)
# Install dependent packages using yum
$ sudo rpm -ivh diamond_2_0-base-154-i386-linux.rpm
$ sudo /usr/local/diamond/2.0/ispfpga/bin/lin/lmutil lmhostid
# Get License file from Lattice web
$ sudo mv ~/Download/license.dat /usr/local/diamond/2.0/license/
$ cd /usr/local/diamond/2.0/bin/lin
$ cp -pi libftlils d2xx.so.1.0.4 libftd2xx.so.0
# Plug in the configure cable (USB)
$ lsusb
Bus 001 Device 002: ID 0403:6010 Future Technology Devices
International, Ltd FT2232C Dual USB-UART/FIFO IC
$ sudo /sbin/rmmod ftdi_sio
$ sudo /sbin/rmmod usbserial
$ export bindir="/usr/local/diamond/2.0/bin/lin"
$ source /usr/local/diamond/2.0/bin/lin/diamond_env
$ diamond
Tutorial 1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1


基本的なFPGA開発の流れを学ぶ
  LEDを点灯
  DIPスイッチとLEDの連携
  counter回路
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
   source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1



led_top.v                                    led.lpf
module top (                                 BLOCK   RESETPATHS ;
   output [7:0] led                          BLOCK   ASYNCPATHS ;
);                                           IOBUF   PORT "led_0"   SITE=Y20 IO_TYPE=LVCMOS33 ;
assign led = 8'b10101010;                    IOBUF   PORT "led_1"   SITE=AA21 IO_TYPE=LVCMOS33 ;
endmodule                                    IOBUF   PORT "led_2"   SITE=U18 IO_TYPE=LVCMOS33 ;
                                             IOBUF   PORT "led_3"   SITE=U19 IO_TYPE=LVCMOS33 ;
                                             IOBUF   PORT "led_4"   SITE=W19 IO_TYPE=LVCMOS33 ;
                                             IOBUF   PORT "led_5"   SITE=V19 IO_TYPE=LVCMOS33 ;
                                             IOBUF   PORT "led_6"   SITE=AB20 IO_TYPE=LVCMOS33 ;
                                             IOBUF   PORT "led_7"   SITE=AA20 IO_TYPE=LVCMOS33 ;
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.1: LED
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
Tutorial 1.2: LED+DIP switch
   source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1



switch_top.v                                 switch.lpf
module top (                                 BLOCK RESETPATHS ;
   input [7:0] switch                        BLOCK ASYNCPATHS ;
, output [7:0] led                           IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ;
);                                           IOBUF PORT "led_1" SITE=AA21 IO_TYPE=LVCMOS33 ;
assign led = switch;                         IOBUF PORT "led_2" SITE=U18 IO_TYPE=LVCMOS33 ;
endmodule                                    IOBUF PORT "led_3" SITE=U19 IO_TYPE=LVCMOS33 ;
                                             IOBUF PORT "led_4" SITE=W19 IO_TYPE=LVCMOS33 ;
                                             IOBUF PORT "led_5" SITE=V19 IO_TYPE=LVCMOS33 ;
                                             IOBUF PORT "led_6" SITE=AB20 IO_TYPE=LVCMOS33 ;
                                             IOBUF PORT "led_7" SITE=AA20 IO_TYPE=LVCMOS33 ;
                                             LOCATE COMP "switch_0" SITE "J7" ;
                                             LOCATE COMP "switch_1" SITE "J6" ;
                                             LOCATE COMP "switch_2" SITE "H2" ;
                                             LOCATE COMP "switch_3" SITE "H3" ;
                                             LOCATE COMP "switch_4" SITE "J3" ;
                                             LOCATE COMP "switch_5" SITE "K3" ;
                                             LOCATE COMP "switch_6" SITE "J2" ;
                                             LOCATE COMP "switch_7" SITE "J1" ;
Tutorial 1.3: LED+counter
   source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1



counter_top.v                                counter.lpf
module top (                                 BLOCK RESETPATHS ;
   input clock                               BLOCK ASYNCPATHS ;
, input reset_n                              IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ;
, output [7:0] led                           IOBUF PORT "led_1" SITE=AA21 IO_TYPE=LVCMOS33 ;
);                                           IOBUF PORT "led_2" SITE=U18 IO_TYPE=LVCMOS33 ;
                                             IOBUF PORT "led_3" SITE=U19 IO_TYPE=LVCMOS33 ;
reg[31:0] counter = 32'd0;                   IOBUF PORT "led_4" SITE=W19 IO_TYPE=LVCMOS33 ;
wire        reset = ~reset_n;                IOBUF PORT "led_5" SITE=V19 IO_TYPE=LVCMOS33 ;
assign        led = ~counter[31:24];         IOBUF PORT "led_6" SITE=AB20 IO_TYPE=LVCMOS33 ;
                                             IOBUF PORT "led_7" SITE=AA20 IO_TYPE=LVCMOS33 ;
always @(posedge clock) begin                LOCATE COMP "reset_n" SITE "A21" ;
  if (reset)                                 LOCATE COMP "clock" SITE "L5" ;
    counter <= 32'd0;                        IOBUF PORT "clock" IO_TYPE=LVDS25
  else                                       DIFFRESISTOR=OFF DIFFDRIVE="NA" ;
    counter <= counter + 32'd1;
end
endmodule
Simulation tool

Active-HDL
    Lattice Diamond付属のシミュレータ
OSSのVerilog HDLシミュレーション環境
    iverilog + gtkwave
    GPL cver + gtkwave
Tutorial 2: simulation
    source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2

counter_tb.v
`timescale 1ns / 1ns

module top_tb;

reg       clock;
reg       reset_n;
wire[7:0] led;

initial begin
  $dumpfile("counter.vcd");
  $dumpvars(0, top_tb);
end

initial begin
  $monitor($realtime,,"ps %h %h %h ",clock,reset_n,led);
end

top top_tb (
   .clock(clock)
, .reset_n(reset_n)
, .led(led)
);

initial reset_n = 1'b0;
initial clock   = 1'b0;
always #1
  clock = ~clock;

initial begin
  #10 reset_n = 1'b1;
  #300 $finish;
end
Tutorial 2: simulation
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2
Tutorial 2: simulation
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2
Tutorial 2: simulation
    source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2

#   OSX: `brew install gplcver icarus-verilog gtkwave`
#   icarus verilog + gtkwave
$   iverilog -o counter_sim counter_tb.v counter_top.v
$   vvp counter_sim
$   gtkwave counter.vcd
#   GPL Cver + gtkwave
$   cver counter_tb.v counter_top.v
$   gtkwave counter.vcd
IP core
パッケージ化された回路情報

ハードIP
  予めFPGA内に組み込まれて提供されるIP
ソフトIP
  RTLレベルで提供,またはゲートレベルに論理合成されRTLがブラック
  ボックス化されて提供されるIP

IPの例:
    CPU, FIFO, FFT, SRAM I/F, PCIe I/F, Ethernet MAC, etc.
http://opencores.org ではIPがOSSライセンスで提供されている

Lattice DiamondではIPカタログであるIPExpressを使ってIPを使う
How to use IPexpress

DiamondからIPexpressを起動
How to use IPexpress

Project Path, File Name, Module Outputを入力してCustomize
How to use IPexpress

各種設定を入力 (FIFOのbit幅や深さ)
How to use IPexpress

File -> Add -> Existing File
How to use IPexpress

生成された{file name}.ipxを選択して'Add'
How to use IPexpress
IPの{file name}_tmpl.vにネット名称が記述されているので,それを基にIPを使
用する.tb_{file name}_tmpl.vなども参考になる
Building on the Command Line

GUIを使わずに論理合成する
1. {project name}.tclに作業内容を記述
2. $ diamondc {project name}.tcl > output.log

Xilinx ISEでも大体同じことが可能

         prj_project open "/home/sora/proj/led.ldf"
         prj_run Synthesis -impl led
         prj_run Translate -impl led
         prj_run Map -impl led
         prj_run PAR -impl led
         prj_run PAR -impl led -task PARTrace
         prj_run Export -impl led -task Bitgen
         prj_project close


                           tclスクリプトの例
FPGA design for Ethernet
Ethernet physical layer

今回作成するネットワークテスタに必要となる物理層を中心に解説
特に今回はMIIさえわかれば大丈夫


  データリンク層
                      MAC               MAC: media access control
                                        RS: Reconciliation Sublayer
                      RS                MII: Media Independent Interface
                                              PHYの外部インタフェース
                            MII         PCS: Physical Coding Sublayer
                                              データの符号化 , AutoNeg
                      PCS               PMA: Physical Medium Attachment
    物理層                           PHY         シリアル・パラレル変換
                      PMA               PMD: physical medium dependent
                                              アナログ・デジタル変換
                      PMD               MDI:
                                              コネクタ (EX: RJ-45)
                            MDI         MEDIUM:
                                              伝送媒体 (EX: UTP, 光ファイバ)
                    MEDIUM

      OSI 参照モデルとの対比
Ethernet frame
   8B



                  Preamble
                                 Preamble:
                                 正確には Preamble '1010'が56bit分 +
                                 SFD (Start Frame Delimiter)である
               Ethernet header   '10101011'の合計64bit (8byte).
                                 端末間の送受信タイミングの調整用
   64B~1518B




                                 FCS:
                  IP header      Ethernet frameのCRCチェックサム

                                 Inter Frame Gap:
                                 送信フレーム間のインターバルとして96 bit
                  Payload        times空ける必要がある
                 46B~1500B


                 FCS (CRC)
   12B~




               Inter Frame Gap
Media Independent Interface (MII)

Ethernetの多様な物理媒体と論理層を切り離すために用意されたレイヤ1と
レイヤ2間のインタフェース仕様
MIIを理解することで,FPGAに接続されたPHY Chipと自由にやり取りが可能
になる
Ethernetの転送速度ごとにそれぞれインタフェースの仕様が決められている
    40G以降の実際のインタフェースはIPの仕様依存



    10 Mbps   100 Mbps   1000 Mbps    10 Gbps     40 Gbps   100 Gbps

      MII       MII        GMII        XGMII      XLGMII      CGMII

    2.5 MHz   25 MHz     125 MHz     156.25 MHz   625 MHz   1.5625 GHz

     4 bit      4 bit      8 bit       64 bit      64 bit     64 bit


        転送速度ごとのMIIとその仕様 (動作周波数と信号線数)
MIIの信号一覧

            TXCLK    input    10/100 Mbps用送信clock

   送信       TXD0~3   output   送信フレームデータ

            TXEN     output   フレーム出力時に'1'

            TXER     output   送信障害通知時に'1'

            RXCLK    input    受信用Clock

            RXD0~3   input    受信フレームデータ

            RXDV     input    フレーム受信時に'1'
   受信       RXER     input    受信障害通知時に'1'

            COL      input    パケット衝突時に'1' (半二重のみ)

            CS       input    キャリアセンス時に'1' (半二重のみ)

            MDC      output   マネージメントclock
  マネージメント
            MDIO     inout    マネージメントインタフェース(送受信)
MII: timing chart
                     Ethernet Frame部のみLSB(下位4bit)->MSB(上位4bit)で送信しているのに注目




                          Data (1byte目)                       collision
                         下位 4bit   上位 4bit




 preamble                                          FCS[3:0]
            preamble + SFD              FCS[7:4]
 '0101'     '1101'
GMIIの信号一覧
            GTXCLK   input    1000 Mbps用送信Clock (125MHz)

            TXCLK    input    10/100 Mbps用送信clock

   送信       TXD0~7   output   送信フレームデータ

            TXEN     output   フレーム出力時に'1'

            TXER     output   送信障害通知時に'1'

            RXCLK    input    受信用Clock

            RXD0~7   input    受信フレームデータ

            RXDV     input    フレーム受信時に'1'
   受信       RXER     input    受信障害通知時に'1'

            COL      input    パケット衝突時に'1' (半二重のみ)

            CS       input    キャリアセンス時に'1' (半二重のみ)

            MDC      output   マネージメントclock
  マネージメント
            MDIO     inout    マネージメントインタフェース(送受信)
MDIO

# 今回のWorkshopでは使用しません

PHYの操作とステータスの取得用
   リンクのステータス取得
   転送速度の取得と選択
   全二重・半二重
   オートネゴ
   Loopback
10GbEではレジスタ数が拡張


    ST
          OP     PHYADR     REGADR   TA     DATA
   (01)
   2bit   2bit    5bit        5bit   2bit   16bit
                         MDIO フレームフォーマット
Reduced Media Independent Interface (RMII)

100M (MII)が16ポートだけでも信号線が256本必要
そこでMII/GMIIの信号線を半分したインタフェースRMII/RGMIIが一般的に利
用されている

RMIIは,動作周波数を2倍にする代わりに信号線を半分にしたインタフェー
ス
RGMIIは周波数を変えずにClockの立ち上がりと立ち下りの両エッジでデー
タ転送することで信号線数を半分にする



                   100 Mbps   1000 Mbps

                     RMII      RGMII

                   50 MHz     125 MHz

                     2 bit      4 bit
Delay measurement tool for network device
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4


FPGAでネットワークテスタを作る動機
   ショートパケット (64byte)ワイヤーレートでテストがしたい
   クロックレベルの計測 (1000BASE-Tで8ns単位)
   自作ネットワークデバイスのデバッグには必要
                                                                      FPGA



                                                     I/F: Port 0                   I/F: Port 1
                                                     IP address:                 IP address:
                                                     10.0.20.105/24           10.0.21.105/24




                                                     I/F: Port 0                     I/F: Port 1
                                                     IP address:                   IP address:
                                                     10.0.20.1/24                 10.0.21.1/24


                                    DUT: Device Under Test            DUT
Delay measurement tool for network device
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4


LatticeECP3 versa kitはPHY Chipが乗っているのでそれを利用
     PHY chip: Marvell 88E1119R
今回はDUTの正確な遅延の計測のためMAC相当の機能はIP coreを使わず
に自作




                       GMII                            DATA                   LED TX
                                   PHY chip                          RJ45
                                                                              LED RX
                      MDIO                             LEDs
    FPGA               GMII                            DATA                   LED TX
                                   PHY chip                          RJ45
                                                       LEDs                   LED RX
                      MDIO

                       FPGAでの実装部とPHYチップの関係
Delay measurement tool for network device
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4


注意点

今回の実装は10/100M Ethernetを実装しません
1000M Ethernetのみをサポートします

LatticeECP3 Versa Development Kitは,LANポートがデフォルト無効化されていま
す.
     LANポート#1はJ10(ジャンパー),LANポート#2はJ12(ジャンパー)をショートから
     オープンにすることで有効化してください
Delay measurement tool for network device
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4




                       PHYチップのピンアサイン (ユーザガイド p12より)
Tutorial 3.1: ethrecv (前半部分)
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4
受信したEthernetフレームからDIPスイッチで選択されたバイト位置のデータをLEDで表示
  module top (
    input clk
    , input rst_n
    // Ethernet PHY#1 TX
    , input phy1_125M_clk
    , input phy1_tx_clk
    , output wire phy1_rst_n = 1'b1
    , output wire phy1_gtx_clk = 1'b0
    , output wire phy1_tx_en = 1'b0
    , output wire[7:0] phy1_tx_data = 8'b0
    // Ethernet PHY#1 RX
    , input phy1_rx_clk
    , input phy1_rx_dv
    , input phy1_rx_er
    , input [7:0] phy1_rx_data
    , input phy1_col
    , input phy1_crs //carrier sense
    // Ethernet PHY#1 MII
    , output wire phy1_mii_clk = 1'b0
    , inout wire phy1_mii_data = 1'b0
    // Switch/LED
    , input [7:0] switch
    , output [7:0] led
    );
Tutorial 3.1: ethrecv (後半部分)
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4
受信したEthernetフレームからDIPスイッチで選択されたバイト位置のデータをLEDで表示
ethrecv.lpfファイルはスライドに入りきらないので,ソースコードをレポジトリから持ってきてください



  reg[10:0] counter;
  reg[7:0] rx_data[0:2047];

  assign led[7:0] = ~rx_data[switch];

  always @(posedge phy1_rx_clk) begin
    if (rst_n == 1'b0) begin
      counter <= 11'd0;
    end else begin
      if (phy1_rx_dv) begin
        rx_data[counter] <= phy1_rx_data;
        counter           <= counter + 11'd1;
      end else
        counter <= 11'd0;
    end
  end

  endmodule
Tutorial 3.2: ethsend
   source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4
reg [7:0] tx_data;
assign phy1_tx_data = tx_data;
always @(posedge phy1_125M_clk) begin
  if (reset_n == 1'b0) begin                             ARPブロードキャストパケットを定期的に送信する
    tx_data <= 11'h0;
    tx_en   <= 1'b0;                                     CRCの計算をしていないので一般的な機器ではエ
    counter <= 12'd0;                                    ラーフレームになる
  end else begin
    case (counter)
      12'h00: begin
        tx_data <= 8'h55;
        tx_en    <= 1'b1;
      end
      12'h01: tx_data <= 8'h55; // Preamble
      12'h02: tx_data <= 8'h55;
      12'h03: tx_data <= 8'h55;
      12'h04: tx_data <= 8'h55;
      12'h05: tx_data <= 8'h55;
      12'h06: tx_data <= 8'h55;
      12'h07: tx_data <= 8'hd5; // Preable + Start Frame Delimiter
      12'h08: tx_data <= 8'hff; // Destination MAC address = FF-FF-FF-FF-FF-FF-FF
      12'h09: tx_data <= 8'hff;
      ...
      12'h14: tx_data <= 8'h08; // Protocol Type = ARP (0x0806)
      12'h15: tx_data <= 8'h06;
      ...
      12'h47: tx_data <= 8'h00;
      12'h48: begin
        tx_en    <= 1'b0;
        tx_data <= 8'h00;
      end
      default: tx_data <= 8'h0;
    endcase
    counter <= counter + 12'd1;
  end
end
Tutorial 3.3: ethsendのシミューレション
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4

"Signal name"の"phy1_tx_data"がEthernet送信PHYで"55 55 D5"がプリアンプルとSFD
"FFFFFFFFFFFF"が宛先MAC、"00301BA0A48E"が送信MAC、"0806"がARPプロトコル
Tutorial 3.4: ethsend + crc
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4

CRC生成回路はopencoresの10_100_1000 Mbps tri-mode ethernet MACプロジェクトのコードを
利用[link]          assign crc_init = (counter == 12'h08);
                           wire [31:0] crc_out;
                           reg crc_rd;
                           assign crc_data_en = ~crc_rd;
                           crc_gen crc_inst (
                              .Reset(~reset_n)
                           , .Clk(phy1_125M_clk)
                           , .Init(crc_init)
                           , .Frame_data(tx_data)
                           , .Data_en(crc_data_en)
                           , .CRC_rd(crc_rd)
                           , .CRC_end()
                           , .CRC_out(crc_out)
                           );

                           always @(posedge phy1_125M_clk) begin
                           ...
                           12'h44: begin         // Frame Check Sequence
                             crc_rd <= 1'b1;
                             tx_data <= crc_out[31:24];
                           end
                             12'h45: tx_data <= crc_out[23:16];
                             12'h46: tx_data <= crc_out[15:8];
                             12'h47: tx_data <= crc_out[7:0];
                             12'h48: begin
                               tx_en   <= 1'b0;
                               crc_rd <= 1'b0;
                               tx_data <= 8'h00;
                             end
Tutorial 3.5: measure (ethsend + ethrecv)
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4

2つのLANポートを使って送信と受信を行い、間に接続したHUBやケーブルのパケット転送遅延
を測定
RFC2544
Benchmarking Methodology for Network Interconnect Devices

ネットワークデバイスの基本的な性能テスト方法をまとめたRFC
L2, L3, FWといった一般的なネットワーク機器のテストベンチの方法は大体
RFC化されている

今回作成するテスタはRFC2544を参考にしている程度
フレームサイズなど各種パラメータに困った時に参考にしています


Reference
    RFC1242 - Benchmarking Terminology for Network Interconnection Devices
    RFC5180 - IPv6 Benchmarking Methodology for Network Interconnect Devices
    RFC6201 - Device Reset Characterization
テストフレームのフォーマット


     8B
              Preamble


           Ethernet frame

            Protocol type
            ARP: 0x0806


            ARP header
     64B




                                     Magic code
                                   0xCC00CC00CC
              Payload                  48 bit

                             46B   Global counter
             FCS (CRC)                 32 bit
     12B




           Inter Frame Gap            Padding


            計測フレーム            計測パケットのペイロード
Play with the measurement device
DUT
UTP cable
    10, 20, 30, 60, 180 cm
Switching hub (1000Base-T)
    BUFFALO LSW2-GT-5NSR
Next step 1:
L3 機器を測る
現在の実装の問題点
  受信ポートであるPort 1から何もパケットを出さないため,DUTであるL3
  機器がPort 1のMAC addressを学習しない(MAC addressテーブルに載
  らない) ⇛ ルーティングされず計測できない

実装案1 (いんちきだけど実装が楽)
  予めPort 1の対向ポートのMAC Addressを調べる
  TX clockを使って1秒程度のglobal clockを作成
  global clockに合わせてARP応答パケットを出す
実装案2
  Port 1のRXでARP requestを見張りARP要求msgに応答
  ヘッダフィールド値は[TCP/IP Vol.2]などを参照
Next step 2:
IPv6 対応デバイスを測る
必要な実装内容
  FPGAにMODE機能を実装
      DIPスイッチなどでIPv4/v6モードの切り替え
  IPv6版の計測パケットを実装 (Protocol type: 0x86dd)
  NDP (Neighbor Discovery Protocol)を実装
Extra a:
PCI and PCI Express
PCI


PCI(パラレル)の性能限界
   32/64ビットのパラレル転送はすべての信号がほぼ同時に到着しなけれ
   ばならない(等長配線が必要).
   信号の到達時間には500ps-1nsくらいの差がうまれ,受信側がスキュー
   (到達タイミングのズレ)を考慮しなければならない
PCI Express
現在のI/O界のDe facto standardなbusプロトコル                       STP (1byte)
最近のFPGAではハードIPでPCI Expressが搭載
 ⇛自作PCIeデバイスは今が始め時!                                      SEQ# (2byte)


TLP (Transaction Layer Packet):                           TLPヘッダ
トランザクション層のパケット                                             (3~4DW)
DLLP (Data Link Layer Packet):
データリンク層のパケット
                                    ソフトウェア層               TLPデータ
PLP (Physical Layer Packet):
                                     (PCI互換)             (0~1024DW)
物理層のパケット

                                  トランザクション層            ECRC (0 or 1DW)

                                    データリンク層              LCRC (1DW)

                                       物理層               END (1byte)

                                  PCI Expressの3階層   PCI Expressのパケット構造
PCI Express + FPGA
FPGA+PCI Expressの代表的な構成
(Ethernetの物理層と比較してみてください)
PMAには高速なシリアルパラレル変換が可能なSERDESを利用
     Serial:2.5GHz <-> Parallel:250MHz
トランザクション層を理解すればIPを使ってデバイス開発可能


トランザクション層
                                            FPGA           PCIe
 データリンク層


                           MAC
                                                    PIPE   PHY
                                 PIPE I/F   FPGA
                                                           Chip
                                                                  PCIe
   物理層
                           PCS
                                                   代表的な構成
                           PMA                     最近は大体上の構成

            PCI Express lane
PCI Express: TLP

TLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成される
トランザクションの種類は以下の8種類 (typeフィールドで指定)
ポスト: 返信(コンプリーション)を必要とする転送要求
ノンポスト: 返信を必要としない転送要求

   トランザクションの種類           動作            データ・ペイロード

   メモリ・リード               ノンポスト         なし

   メモリ・ライト               ポスト           あり

   I/O・リード               ノンポスト         なし

   I/O・ライト               ノンポスト         あり

   コンフィグレーション・リード        ノンポスト         なし

   コンフィグレーション・ライト        ノンポスト         あり

   コンプリケーション             ノンポスト         (read時)なし/(write時)あり

   メッセージ                 ポスト           なし/あり
PCI Express: TLPヘッダ構造

TLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成される
トランザクションの種類は以下の8種類 (typeフィールドで指定)
ポスト: 返信(コンプリーション)を必要とする転送要求
ノンポスト: 返信を必要としない転送要求

    0                   1                    2                    3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |R|FMT| Type     |R| TC |     R   |T|E|AT | R |     data length    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                                                  | Last,1st DW BE|
  +                          Header (3DW)                            +
  |                                                                  |
  +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+
  |                          Header (4DW)                            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       DATA payload (0~4096 byte)                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Digest (Option)                           |
PCI Express: リンクとレーン


    物理層 (PHY)      リンク                物理層 (PHY)

                   レーン    TXP0/TXN0


                         RXP0/RXN0

                          TXP1/TXN1




                                       ポート
          ポート




                         RXP1/RXN1

                          TXP2/TXN2


                         RXP2/RXN2

                          TXPn/TXNn


                         RXPn/RXNn
(参考) シリアル通信のエンベデッド・クロック

8b/10b:
    PCIe (1.1, 2.0), Ethernet 〇〇BASE-*X*, Infiniband (SDR, DDR,
    QDR), USB 3.0, SATA
64b/66b:
    Ethernet 〇〇BASE-*R*, Infiniband FDR
128b/130b:
    PCIe 3.0
PCI/PCI Express: Debug

PCIまわりのバグ = OSクラッシュ
PCIのコーディングには1フロッピーMS-DOSが便利
   redpciコマンドでbase addressを確認
   memoryコマンドでI/OメモリマップしたFPGAのレジスタを確認

MS-DOSを使うメリット
   OSがクラッシュしても再起動が早い

詳しくは[PCIデバイス設計入門]を参照
PCI/PCI Express: Debug

REDPCI コマンド .... PCI情報を表示する
例) REDPCI /F .... PCI情報の詳細を表示する
PCI Vendor IDの一覧 [link], Device IDの一覧 [link], Device classの一覧 [link]
PCI/PCI Express: Debug

MEMORY コマンド .... 物理メモリを表示・編集する
例) MEMORY B8000 ... 物理メモリ0xB8000番地(Video RAM Area)を編集する
Tutorial 4.1: FPGAでPCI Expressを使う
 source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


 IPexpressを使ってPCIeのIPを生成,PCIコンフィグレーション空間部のみを実装
 今回はIPに用意されているWishbone I/Fを使ってPCIeにアクセス
 MS-DOSを使ってコンフィグレーション空間を確認
 PCI read/writeの記述が無いのでPCIeにアクセスするとOSがクラッシュ
 マニュアルはこちら[link]
 Portのリストはマニュアルの12から23ページのtable2-1を参照




                                                                    Transmit TLP I/F
                                                                    Receive TLP I/F
                                       PCI Express
    PCI Express lanes                                               Configuration Status
                                         IP Core
                                                                    I/F (tutorial 5.1)
                                                                      Wishbone I/F
                                                                      (tutorial 5.2)


(参考) XilinxなどではARM社のAXI4 I/F経由でIPにアクセスできます
Tutorial 4.1: FPGAでPCI Expressを使う
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


IPexpressを使ってPCIeのIPを生成
Tutorial 4.1: FPGAでPCI Expressを使う
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


IPexpressを使ってPCIeのIPを生成
Tutorial 4.1: FPGAでPCI Expressを使う
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


IPexpressを使ってPCIeのIPを生成
Tutorial 4.1: FPGAでPCI Expressを使う
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


IPexpressを使ってPCIeのIPを生成
Tutorial 4.1: FPGAでPCI Expressを使う
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


IPexpressを使ってPCIeのIPを生成
Tutorial 4.2: FPGAでPCI Expressを使う
source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5


Wishboneバス経由でPCI Express上のI/Oメモリ空間へ回路をマッピング(read only)
コードは複雑に見えますがほとんどが定型のコードです
       reg[15:0] wb_dat;
       reg wb_ack;
       always @(posedge clk_125 or negedge core_rst_n) begin
         if (!core_rst_n) begin
           wb_dat <= 16'h0;
         end else begin
           if (pcie_cyc & pcie_stb) begin
             wb_dat <= pcie_adr[15:0];
           end
         end
       end

       always @(posedge clk_125 or negedge core_rst_n) begin
         if (!core_rst_n) begin
           wb_ack <= 0;
         end else begin
           wb_ack <= pcie_cyc & pcie_stb & (~wb_ack);
         end
       end

       assign pcie_dat_i = wb_dat;
       assign pcie_ack   = wb_ack;
       assign led_out    = 14'h0;
PCI/PCI Express: DMA and SR-IOV
Direct Memory Access (DMA)
    ペリフェラルが直接メモリバスを操作して,メインメモリにアクセスする仕組み
    レイテンシが低いがスループットが高い
    Kintex-7 dev kitにDMA EngineのIPが付属

Single Root I/O Virtualization (SR-IOV)とマルチファッション
    PCI-SIGによるPCIデバイスのIO仮想化サポートのための規格
    Xilinx 7シリーズから本格対応開始
         Vertex-7 XTはPCIe Gen3のHard IPで一部機能をサポート
         Kintex-7はSoft IPで対応予定?(詳細不明)
Extra b:
HTML5 for embedded system
HTML5を使うモチーベーション
Embedded systemのフロントエンド
   フロントエンドも1から自分でやるのはしんどい
   今時のリッチなUIを使いたい
   組み込みシステム全体の検証はとても大変
      HW/SWのバグ,HWの相性や故障,ツールの仕様(バグ),etc.
      データ視覚化を用いた簡易デバック環境の構築

技術的な背景
  HTML5 websocket, canvasの登場
  Javascriptによる豊富な可視化ライブラリ
  websocketがバイナリデータのサポート
  node.jsの登場 (node-mmapなど便利モジュールもたくさん)
     c++によるシステム関数のモジュール(v8)が簡単に作成可能
PCI/PCIeデバイス向けHTML5の使い方例
FPGAのレジスタをブラウザから読み書きする
  1. FPGAの任意のregisterをPCIのI/Oメモリ空間にマッピング
  2. FPGAボードのレジスタをPCI/PCIe経由でmmap
  3. mmapした物理メモリ空間をWebsocketでブラウザに転送
  Read: ブラウザで受け取ったバイナリデータをJavascriptの変数に変換
  して表示
  Write: ブラウザ側でHTMLの入力フォームを用意して入力された値をレ
  ジスタを書き込む

ブラウザを使う利点
  Websocketを使うことで簡単に双方向通信が実現可能
  Javascriptの豊富なライブラリが使える
構成例



                 FPGA                     Host PC
      Ethernet
                                             Browser
DUT                            PCI/PCIe


                     pin ory
      Ethernet
                 m mem
                        g
                   ap
                 I/O

                                             websocket


                   user
                 registers
                                   mmap      node.js
例: テスタのUI
例: テスタのUI   PCI I/O Memory MappingしたFPGA上
            のレジスタをHTMLからread/write




                              テスタの計測結果をwebsocket経由でリア
                              ルタイムに表示 (数ms)
例: node.js
var   fs         =   require('fs');
var   wsserver   =   require('ws').Server;
var   mmap       =   require('mmap');
var   express    =   require('express')
var   D          =   require('util').debug;

var app, fd, buf, wss;
var BASE_ADDR = 0xe9000000;
var MSIZE     = 0x80;

// setup: http server
app = express.createServer();
app.use(express.static(__dirname + '/public'));
app.listen(8081);

// setup: websocket server
wss = new wsserver( {server: app} );

// setup: fd
try {
  fd = fs.openSync('/dev/mem', 'w+');
} catch (e) {
  D('cannot open: /dev/mem: ' + e);
  process.exit(1);
}

// setup: mmap
try {
  buf = mmap.map(MSIZE, mmap.PROT_READ|mmap.PROT_WRITE, mmap.MAP_SHARED, fd, BASE_ADDR);
} catch (e) {
  D('cannot mmap: ' + e);
  process.exit(1);
}
...
Extra c:
FPGA hot topics
FPGA dev kit for network device:
Xilinx Kintex-7 FPGA Connectivity Kit
発表されたばかり.10Gデバイスを自作したい人向け
Kintex-7 (28nmプロセス), SFP+ 5 port (本体1 port + FMC module 4 ports),
SFP+ module 2 units, fiber cable
価格: $2,895
FPGA dev kit for network device:
NetFPGA-1G, NetFPGA-10G
Stanford中心のネットワークデバイス特化型の総合FPGAプラットフォーム
     ツールや一般的なリファレンスデザインなどを含めたパッケージ
ACMコミュニティで時々ワークショップが行われている
NetFPGA 1G
     1G ethernet x4, 4.5MB ZBT SRAM, PCI-X, Virtex II Pro 50
NetFGPA 10G
     10G ethernet x4, 27MB QDRII SRAM, PCI Express x8, Virtex5
     *10Gは別途PCS/PMAのIPが必要
Handmade 10G device
2012年は自作10Gデバイス元年
   SFP+インタフェースを持つFPGAキットが登場
   (NetFPGA-10G, Xilinx Kintex-7, etc.)
   SFP拡張モジュール (FMC)も各ベンダ向けに出
                                          FPGA
   ている
                                                   User logic
必要なIP core                                                FIFO I/F
PCS/PMA
                                                 MAC (IP or 自作)
   10GではFPGA内でPHY機能を処理
10G MAC                                                   XGMII

   ルータやFWのような高機能機器には必要                       PCS/PMA (IP core)


                                                         Serial I/F

                                                  SFP+ module

                                                  一般的な構成
Memory (for network device)
必要に応じてメモリを選択
SRAM
   ZBT, RLDRAM, QDR, etc
最新の情報はeetimesを参照[link]

書きかけ
CAM/TCAM
module tcam (                      ...
   input clk
, input rst                        wire[depth-1:0] bits;
, input iena                       genvar i;
, input [width-1:0] idata          generate
, input [width-1:0] iprefix          for (i=0; i<width; i=i+1) begin: gen
, input [width-1:0] isearch_data       //assign bits[i] = !(data[i] ^ search[i]); // <- BCAM
, output match                         assign bits[i] = !(data[i] ^ isearch_data[i]) | !prefix[i];
);                                   end
                                   endgenerate
reg[width-1:0] data;
reg[width-1:0] prefix;             always @(posedge clk) begin
                                     if (rst)
always @(posedge clk) begin            match <= 1'b0
  if (rst) begin                     else
    data   <= {width{1'b0}};           match <= (& bits) & iena;
    prefix <= {width{1'b0}};       end
  end else begin
    if (iena) begin
      data   <= idata;
      prefix <= iprefix;
    end
  end
end

...
High-Level Synthesis (HLS) for FPGA
FPGA向けのHLS環境が少しずつ登場
   Xilinx Vivado HLS (C/C++/SystemC)
       http://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_2/ug902-vivado-
       high-level-synthesis.pdf
  Impulse C (ANSI C)
       Arista 7124FX Application Switchのdev kitに年間ライセンスが付属
  その他 (主にASIC向けだが,FPGAにも対応)
       Bluespec, LabVIEW FPGAモジュール, etc.
今後の動向
  Altera OpenCL (OpenCL)
       http://www.altera.co.jp/b/opencl.html
   Oracle JDK 9 (Java) #本当?
       http://www.oracle.com/technetwork/jp/ondemand/java/jdw-2-2-1390077-ja.pdf
Embedded CPU
FPGA Soft CPU
   Xilinx MicroBlaze, PicoBlaze
   Altera Nios, Nios II
   Lattice LatticeMico32
   OpenRISC
   LEON (SPARC V8)
組み込み向けCPU
   ARM
   Intel Atom E6シリーズ
        はぜやまさんがAtom+FPGA dev kitを持ってくるらしい
CPU+FPGA
   Xilinx Zynq (Cortex-A9 dual core 1MHz)
Reference list (1/4)
●   PCI 関係資料
     ○ "PCIデバイス設計入門-PCIバス原理からHDLによるIC設計&デバッグ手法まで", イン
         ターフェース編集部, CQ出版
●   PCI Express 関係資料
     ○ Interface 2009/1-, "連載「徹底解説 作ればわかるPCI Express」" 全22回, 内藤竜治,
         CQ出版
           ■ 図書館でInterfaceのバックナンバを複写できる
     ○ "PCI Express設計の基礎と応用", 畑山仁, CQ出版
     ○ Lattice Semiconductor, "PCI Express 2.0 x1, x4 Endpoint IP Core User’s
         Guide", http://www.latticesemi.com/documents/ipug75.pdf
     ○ Altera, "PCI Express 高性能リファレンス・デザイン", http://www.altera.co.
         jp/literature/an/an456_j.pdf
●   Ethernet 関係資料
     ○ "Ethernetのしくみとハードウェア設計技法", Interface編集部, CQ出版
     ○ IEEE-SA -IEEE Get 802 Program - 802.3: Ethernet,
         http://standards.ieee.org/about/get/802/802.3.html
Reference list (2/4)
●   Verilog-HDL 関係資料
     ○ "わかるVerilog HDL入門―文法 基礎から論理回路設計、論理合成、実装まで", 木村
         真也, CQ出版
     ○ FPGAボードで学ぶ組込みシステム開発入門 [Altera編], 小林優, 技術評論社
     ○ Xilinx "XSTユーザガイド (UG627)",
         http://japan.xilinx.com/support/documentation/sw_manuals/xilinx12_3/xst.pdf
●   Kernelとドライバまわり資料
     ○ "Linuxカーネル解析入門[増補版]", 平田豊, 工学社
     ○ "Linuxデバイスドライバプログラミング", 平田豊, ソフトバンククリエイティブ
●   TCP/IP 関係資料
     ○ "詳解TCP/IP(Vol.2) 実装", Gary R. Wright (原著), W.Richard Stevens (原著), 徳田 英
         幸 (翻訳), 戸辺 義人 (翻訳), ピアソンエデュケーション
Reference list (3/4)
●   PC-Bus 関係資料 (AXI4のおすすめ資料募集中)
     ○ CMU "18‐447 Lecture 12:Busses and I/O", James C. Hoe:
        http://users.ece.cmu.edu/~jhoe/course/ece447/S11handouts/L12.pdf
     ○ OpenRISC SoC "Wishbone B4 - WISHBONE System-on-Chip (SoC)
        InterconnectionArchitecturefor Portable IP Cores", http://cdn.opencores.
        org/downloads/wbspec_b4.pdf
●   組み込み全般
     ○ "Modern Embedded Computing: Designing Connected, Pervasive", Media-Rich
        Systems, Peter Barry, Patrick Crowley, Morgan Kaufmann
         ■ 紹介Slide (PDF): http://embedded.communities.intel.
              com/servlet/JiveServlet/previewBody/7158-102-1-2404/Modern-
              Embedded-Computing-Designing-Connected-Pervasive-Media-Rich-
              Systems.pdf
         ■ # takeiさんから頂きました
Reference list (4/4):
●   General network device
     ○ RFC1242 - Benchmarking Terminology for Network Interconnection Devices
     ○ RFC2544 - Benchmarking Methodology for Network Interconnect Devices
     ○ RFC6201 - Device Reset Characterization
●   IPv6
     ○ RFC5180 - IPv6 Benchmarking Methodology for Network Interconnect Devices
●   L2 Switch
     ○ RFC2889 - Benchmarking Methodology for LAN Switching Devices
●   Firewall
     ○ RFC3511 - Benchmarking Methodology for Firewall Performance
●   IP Multicast
     ○ RFC3918 - Methodology for IP Multicast Benchmarking
Changelog
2012/9/2
    initial
テストフレームのフォーマット
   Preamble
                                     フロントエンドからPaddingサイズを調整する
                                     ことでフレームサイズの調整が可能(最小値
 Ethernet frame                      64byte)
                                     Inter Frame Gapを変更することで,フレーム
 Protocol type                       到達タイミングの調節が可能 (推奨 12 clock,
 IPv4: 0x0800                        最小値 0 clock)
 IPv6: 0x86dd
                                     将来的にはHost PCからpcapファイルを
                                     FPGAのregisterにPCIe経由でロードして全パ
   IP header                         ラメータ変更可能を検討(Hardware版tcp
                                     replay)

  UDP header         Magic code
                   0xCC00CC00CC
                       48 bit
    Payload
                    Global counter
  FCS (CRC)             32 bit

                       Padding
Inter Frame Gap          ...

 計測フレーム           計測パケットのペイロード

Contenu connexe

En vedette

Life of an Fluentd event
Life of an Fluentd eventLife of an Fluentd event
Life of an Fluentd event
Kiyoto Tamura
 
ECAT-Penske-casestudy
ECAT-Penske-casestudyECAT-Penske-casestudy
ECAT-Penske-casestudy
Tony Dodd
 
Skinny Body Care
Skinny Body CareSkinny Body Care
Skinny Body Care
Valia Pil
 

En vedette (20)

Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
Fluentd v0.12 master guide
Fluentd v0.12 master guideFluentd v0.12 master guide
Fluentd v0.12 master guide
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境
 
Life of an Fluentd event
Life of an Fluentd eventLife of an Fluentd event
Life of an Fluentd event
 
Melendi
MelendiMelendi
Melendi
 
How To Sell Yourself As A Comedy Writer
How To Sell Yourself As A Comedy WriterHow To Sell Yourself As A Comedy Writer
How To Sell Yourself As A Comedy Writer
 
ECAT-Penske-casestudy
ECAT-Penske-casestudyECAT-Penske-casestudy
ECAT-Penske-casestudy
 
5 Tips To Making Great Vines
5 Tips To Making Great Vines5 Tips To Making Great Vines
5 Tips To Making Great Vines
 
Corrientes económicas.docx 1
Corrientes económicas.docx 1Corrientes económicas.docx 1
Corrientes económicas.docx 1
 
Dsc 8728 mooresculptvauxskycopy
Dsc 8728 mooresculptvauxskycopyDsc 8728 mooresculptvauxskycopy
Dsc 8728 mooresculptvauxskycopy
 
Bent philipson
Bent philipson Bent philipson
Bent philipson
 
1.21 - Новый стандарт положительно-энергетического дома в Германии
1.21 - Новый стандарт положительно-энергетического дома в Германии1.21 - Новый стандарт положительно-энергетического дома в Германии
1.21 - Новый стандарт положительно-энергетического дома в Германии
 
LX Design IOL Keynote
LX Design IOL KeynoteLX Design IOL Keynote
LX Design IOL Keynote
 
Sintesis informativa 25 febrero 2017
Sintesis informativa 25 febrero 2017Sintesis informativa 25 febrero 2017
Sintesis informativa 25 febrero 2017
 
Trabajo tecnología
Trabajo tecnologíaTrabajo tecnología
Trabajo tecnología
 
Naufragé volontaire
Naufragé volontaireNaufragé volontaire
Naufragé volontaire
 
Skinny Body Care
Skinny Body CareSkinny Body Care
Skinny Body Care
 
Hareand tortoise newdimension
Hareand tortoise newdimensionHareand tortoise newdimension
Hareand tortoise newdimension
 
Ilam Mottukal Girls in Talent Hunt Program- Humana People to People India
Ilam Mottukal Girls in Talent Hunt Program-  Humana People to People IndiaIlam Mottukal Girls in Talent Hunt Program-  Humana People to People India
Ilam Mottukal Girls in Talent Hunt Program- Humana People to People India
 

Similaire à FPGA workshop (2012f): Network Tester

“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
Brocade
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
Yasuhiro Ishii
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
Kiwamu Okabe
 

Similaire à FPGA workshop (2012f): Network Tester (20)

Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
 
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
“見てわかる”ファイバーチャネルSAN基礎講座(第6弾: 最終回)~困った時もこれで安心(?)、FC SANにおけるトラブルシューティングのコツとは??~
 
M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話M5Stackの拡張基板を作ってjimmyに届けた話
M5Stackの拡張基板を作ってjimmyに届けた話
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 
OpenGLプログラミング
OpenGLプログラミングOpenGLプログラミング
OpenGLプログラミング
 
Driverについて
DriverについてDriverについて
Driverについて
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
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
 
VHDL-2008が好きなんです
VHDL-2008が好きなんですVHDL-2008が好きなんです
VHDL-2008が好きなんです
 
UVLOの等価回路モデル作成方法
UVLOの等価回路モデル作成方法UVLOの等価回路モデル作成方法
UVLOの等価回路モデル作成方法
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
 
Reconf_201409
Reconf_201409Reconf_201409
Reconf_201409
 
Pdp11 on-fpga
Pdp11 on-fpgaPdp11 on-fpga
Pdp11 on-fpga
 
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスするEWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
EWD 3トレーニングコース#19 JavaScriptからGlobalストレジにアクセスする
 
RSQB Flip Flopの等価回路モデル
RSQB Flip Flopの等価回路モデルRSQB Flip Flopの等価回路モデル
RSQB Flip Flopの等価回路モデル
 
VPP事始め
VPP事始めVPP事始め
VPP事始め
 
スタートアップ機能の等価回路モデル
スタートアップ機能の等価回路モデルスタートアップ機能の等価回路モデル
スタートアップ機能の等価回路モデル
 
Internet of Things
Internet of ThingsInternet of Things
Internet of Things
 

FPGA workshop (2012f): Network Tester

  • 1. Workshop: Network Tester with FPGA WIDE CAMP Autumn 2012 (9/3 - 9/6) Yohei Kuga sora@haeena.net
  • 2. Workshop overview "Lattice社のFPGA開発キットを使って、簡単なネットワークテスタを作成しま す。FPGAの開発ツールを使ったEthernet回路設計を駆け足で体験すること で、FPGAによるネットワークデバイス開発を学びます。動くものを作成して、 実際にLANケーブルの転送遅延やリピータハブの処理遅延を計測して遊び ます。" "The purpose of this workshop is to learn the usage of a FPGA IDE and the development of network devices on FPGA. In this workshop, participants try to develop a simple network tester on Lattice's FPGA SDK and to evaluate the delay of a LAN cable or a repeater hub by developed testers." Webページより
  • 3. Main topic FPGA programming for beginners Dev kit and tools Tutorial 1: "LED" Simulation tool and testbench Tutorial 2: "Simulation" IP core Building on the command-line FPGA design for Ethernet overview, MII, RMII, timing chart, MDIO, RFC2544 Tutorial 3: "Delay measurement tool for network device" Play with the measurement device Next step {Layer2, Layer3, IPv6, throughput, frame loss rate} support
  • 4. Extra materials a. PCI and PCI Express overview, Bus (wishbone), sample code, debug, DMA and SR-IOV Tutorial 5: "How to use PCI Express IP" b. HTML5 for embedded system Blob/Arraybuffer, websocket, node.js, HTML canvas c. FPGA hot topics FPGA development kit, Handmade 10G/40G/100G device, memory, CAM/TCAM,HLS for FPGA, Embedded CPU Reference list
  • 5. Schedule 9/4 Main topic 9/5 Extra a: Main topic PCI Express
  • 6. Materials Latest slide URL http://goo.gl/8UzFx Tutorial code https://github.com/sora/fpga-workshop-2012f
  • 8. 本ワークショップの進め方 Lattice社のFPGA開発キットを使ってFPGA開発を 一通り体験します 新規プロジェクト作成 HDLプログラミング 開発環境: Lattice Diamond Lattice社のFPGA開発の統合環境 Editing, pin assign, syntax check, ピンアサイン IP catalog, logic synthesis (論理合成), FPGA configuration, etc. コンパイル RTLシミュレーション: ActiveHDL Lattice Diamondに付属 Windowsのみ コンフィグレーション 今回のFPGAの開発手順
  • 9. LatticeECP3 Versa Development Kit FPGA開発キッド Lattice LatticeECP3 1000BASE-T (2 port) PCI Express x1 I/F DDR SDRAM SERDES I/F 開発ツール Lattice Diamond 2.0 論理合成: Synplify シミュレータ: Active-HDL http://www.latticesemi.co. 価格: $99 → $299 jp/corporate/newscenter/newsletters/newsmay2011/ecp3 versadevelopmentkit.cfm ユーザガイド (手元にダウンロードしてください) PHY chip http://www.latticesemi.com/documents/EB62.pdf (Marvell 88E1119R)
  • 10. How to install Lattice Diamond for Linux # CentOS 6.3 (x86_64) # Install dependent packages using yum $ sudo rpm -ivh diamond_2_0-base-154-i386-linux.rpm $ sudo /usr/local/diamond/2.0/ispfpga/bin/lin/lmutil lmhostid # Get License file from Lattice web $ sudo mv ~/Download/license.dat /usr/local/diamond/2.0/license/ $ cd /usr/local/diamond/2.0/bin/lin $ cp -pi libftlils d2xx.so.1.0.4 libftd2xx.so.0 # Plug in the configure cable (USB) $ lsusb Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC $ sudo /sbin/rmmod ftdi_sio $ sudo /sbin/rmmod usbserial $ export bindir="/usr/local/diamond/2.0/bin/lin" $ source /usr/local/diamond/2.0/bin/lin/diamond_env $ diamond
  • 11. Tutorial 1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1 基本的なFPGA開発の流れを学ぶ LEDを点灯 DIPスイッチとLEDの連携 counter回路
  • 12. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 13. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 14. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 15. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 16. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 17. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 18. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1 led_top.v led.lpf module top ( BLOCK RESETPATHS ; output [7:0] led BLOCK ASYNCPATHS ; ); IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ; assign led = 8'b10101010; IOBUF PORT "led_1" SITE=AA21 IO_TYPE=LVCMOS33 ; endmodule IOBUF PORT "led_2" SITE=U18 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_3" SITE=U19 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_4" SITE=W19 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_5" SITE=V19 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_6" SITE=AB20 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_7" SITE=AA20 IO_TYPE=LVCMOS33 ;
  • 19. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 20. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 21. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  • 22. Tutorial 1.2: LED+DIP switch source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1 switch_top.v switch.lpf module top ( BLOCK RESETPATHS ; input [7:0] switch BLOCK ASYNCPATHS ; , output [7:0] led IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ; ); IOBUF PORT "led_1" SITE=AA21 IO_TYPE=LVCMOS33 ; assign led = switch; IOBUF PORT "led_2" SITE=U18 IO_TYPE=LVCMOS33 ; endmodule IOBUF PORT "led_3" SITE=U19 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_4" SITE=W19 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_5" SITE=V19 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_6" SITE=AB20 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_7" SITE=AA20 IO_TYPE=LVCMOS33 ; LOCATE COMP "switch_0" SITE "J7" ; LOCATE COMP "switch_1" SITE "J6" ; LOCATE COMP "switch_2" SITE "H2" ; LOCATE COMP "switch_3" SITE "H3" ; LOCATE COMP "switch_4" SITE "J3" ; LOCATE COMP "switch_5" SITE "K3" ; LOCATE COMP "switch_6" SITE "J2" ; LOCATE COMP "switch_7" SITE "J1" ;
  • 23. Tutorial 1.3: LED+counter source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1 counter_top.v counter.lpf module top ( BLOCK RESETPATHS ; input clock BLOCK ASYNCPATHS ; , input reset_n IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ; , output [7:0] led IOBUF PORT "led_1" SITE=AA21 IO_TYPE=LVCMOS33 ; ); IOBUF PORT "led_2" SITE=U18 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_3" SITE=U19 IO_TYPE=LVCMOS33 ; reg[31:0] counter = 32'd0; IOBUF PORT "led_4" SITE=W19 IO_TYPE=LVCMOS33 ; wire reset = ~reset_n; IOBUF PORT "led_5" SITE=V19 IO_TYPE=LVCMOS33 ; assign led = ~counter[31:24]; IOBUF PORT "led_6" SITE=AB20 IO_TYPE=LVCMOS33 ; IOBUF PORT "led_7" SITE=AA20 IO_TYPE=LVCMOS33 ; always @(posedge clock) begin LOCATE COMP "reset_n" SITE "A21" ; if (reset) LOCATE COMP "clock" SITE "L5" ; counter <= 32'd0; IOBUF PORT "clock" IO_TYPE=LVDS25 else DIFFRESISTOR=OFF DIFFDRIVE="NA" ; counter <= counter + 32'd1; end endmodule
  • 24. Simulation tool Active-HDL Lattice Diamond付属のシミュレータ OSSのVerilog HDLシミュレーション環境 iverilog + gtkwave GPL cver + gtkwave
  • 25. Tutorial 2: simulation source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2 counter_tb.v `timescale 1ns / 1ns module top_tb; reg clock; reg reset_n; wire[7:0] led; initial begin $dumpfile("counter.vcd"); $dumpvars(0, top_tb); end initial begin $monitor($realtime,,"ps %h %h %h ",clock,reset_n,led); end top top_tb ( .clock(clock) , .reset_n(reset_n) , .led(led) ); initial reset_n = 1'b0; initial clock = 1'b0; always #1 clock = ~clock; initial begin #10 reset_n = 1'b1; #300 $finish; end
  • 26. Tutorial 2: simulation source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2
  • 27. Tutorial 2: simulation source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2
  • 28. Tutorial 2: simulation source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2 # OSX: `brew install gplcver icarus-verilog gtkwave` # icarus verilog + gtkwave $ iverilog -o counter_sim counter_tb.v counter_top.v $ vvp counter_sim $ gtkwave counter.vcd # GPL Cver + gtkwave $ cver counter_tb.v counter_top.v $ gtkwave counter.vcd
  • 29. IP core パッケージ化された回路情報 ハードIP 予めFPGA内に組み込まれて提供されるIP ソフトIP RTLレベルで提供,またはゲートレベルに論理合成されRTLがブラック ボックス化されて提供されるIP IPの例: CPU, FIFO, FFT, SRAM I/F, PCIe I/F, Ethernet MAC, etc. http://opencores.org ではIPがOSSライセンスで提供されている Lattice DiamondではIPカタログであるIPExpressを使ってIPを使う
  • 30. How to use IPexpress DiamondからIPexpressを起動
  • 31. How to use IPexpress Project Path, File Name, Module Outputを入力してCustomize
  • 32. How to use IPexpress 各種設定を入力 (FIFOのbit幅や深さ)
  • 33. How to use IPexpress File -> Add -> Existing File
  • 34. How to use IPexpress 生成された{file name}.ipxを選択して'Add'
  • 35. How to use IPexpress IPの{file name}_tmpl.vにネット名称が記述されているので,それを基にIPを使 用する.tb_{file name}_tmpl.vなども参考になる
  • 36. Building on the Command Line GUIを使わずに論理合成する 1. {project name}.tclに作業内容を記述 2. $ diamondc {project name}.tcl > output.log Xilinx ISEでも大体同じことが可能 prj_project open "/home/sora/proj/led.ldf" prj_run Synthesis -impl led prj_run Translate -impl led prj_run Map -impl led prj_run PAR -impl led prj_run PAR -impl led -task PARTrace prj_run Export -impl led -task Bitgen prj_project close tclスクリプトの例
  • 37. FPGA design for Ethernet
  • 38. Ethernet physical layer 今回作成するネットワークテスタに必要となる物理層を中心に解説 特に今回はMIIさえわかれば大丈夫 データリンク層 MAC MAC: media access control RS: Reconciliation Sublayer RS MII: Media Independent Interface PHYの外部インタフェース MII PCS: Physical Coding Sublayer データの符号化 , AutoNeg PCS PMA: Physical Medium Attachment 物理層 PHY シリアル・パラレル変換 PMA PMD: physical medium dependent アナログ・デジタル変換 PMD MDI: コネクタ (EX: RJ-45) MDI MEDIUM: 伝送媒体 (EX: UTP, 光ファイバ) MEDIUM OSI 参照モデルとの対比
  • 39. Ethernet frame 8B Preamble Preamble: 正確には Preamble '1010'が56bit分 + SFD (Start Frame Delimiter)である Ethernet header '10101011'の合計64bit (8byte). 端末間の送受信タイミングの調整用 64B~1518B FCS: IP header Ethernet frameのCRCチェックサム Inter Frame Gap: 送信フレーム間のインターバルとして96 bit Payload times空ける必要がある 46B~1500B FCS (CRC) 12B~ Inter Frame Gap
  • 40. Media Independent Interface (MII) Ethernetの多様な物理媒体と論理層を切り離すために用意されたレイヤ1と レイヤ2間のインタフェース仕様 MIIを理解することで,FPGAに接続されたPHY Chipと自由にやり取りが可能 になる Ethernetの転送速度ごとにそれぞれインタフェースの仕様が決められている 40G以降の実際のインタフェースはIPの仕様依存 10 Mbps 100 Mbps 1000 Mbps 10 Gbps 40 Gbps 100 Gbps MII MII GMII XGMII XLGMII CGMII 2.5 MHz 25 MHz 125 MHz 156.25 MHz 625 MHz 1.5625 GHz 4 bit 4 bit 8 bit 64 bit 64 bit 64 bit 転送速度ごとのMIIとその仕様 (動作周波数と信号線数)
  • 41. MIIの信号一覧 TXCLK input 10/100 Mbps用送信clock 送信 TXD0~3 output 送信フレームデータ TXEN output フレーム出力時に'1' TXER output 送信障害通知時に'1' RXCLK input 受信用Clock RXD0~3 input 受信フレームデータ RXDV input フレーム受信時に'1' 受信 RXER input 受信障害通知時に'1' COL input パケット衝突時に'1' (半二重のみ) CS input キャリアセンス時に'1' (半二重のみ) MDC output マネージメントclock マネージメント MDIO inout マネージメントインタフェース(送受信)
  • 42. MII: timing chart Ethernet Frame部のみLSB(下位4bit)->MSB(上位4bit)で送信しているのに注目 Data (1byte目) collision 下位 4bit 上位 4bit preamble FCS[3:0] preamble + SFD FCS[7:4] '0101' '1101'
  • 43. GMIIの信号一覧 GTXCLK input 1000 Mbps用送信Clock (125MHz) TXCLK input 10/100 Mbps用送信clock 送信 TXD0~7 output 送信フレームデータ TXEN output フレーム出力時に'1' TXER output 送信障害通知時に'1' RXCLK input 受信用Clock RXD0~7 input 受信フレームデータ RXDV input フレーム受信時に'1' 受信 RXER input 受信障害通知時に'1' COL input パケット衝突時に'1' (半二重のみ) CS input キャリアセンス時に'1' (半二重のみ) MDC output マネージメントclock マネージメント MDIO inout マネージメントインタフェース(送受信)
  • 44. MDIO # 今回のWorkshopでは使用しません PHYの操作とステータスの取得用 リンクのステータス取得 転送速度の取得と選択 全二重・半二重 オートネゴ Loopback 10GbEではレジスタ数が拡張 ST OP PHYADR REGADR TA DATA (01) 2bit 2bit 5bit 5bit 2bit 16bit MDIO フレームフォーマット
  • 45. Reduced Media Independent Interface (RMII) 100M (MII)が16ポートだけでも信号線が256本必要 そこでMII/GMIIの信号線を半分したインタフェースRMII/RGMIIが一般的に利 用されている RMIIは,動作周波数を2倍にする代わりに信号線を半分にしたインタフェー ス RGMIIは周波数を変えずにClockの立ち上がりと立ち下りの両エッジでデー タ転送することで信号線数を半分にする 100 Mbps 1000 Mbps RMII RGMII 50 MHz 125 MHz 2 bit 4 bit
  • 46. Delay measurement tool for network device source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 FPGAでネットワークテスタを作る動機 ショートパケット (64byte)ワイヤーレートでテストがしたい クロックレベルの計測 (1000BASE-Tで8ns単位) 自作ネットワークデバイスのデバッグには必要 FPGA I/F: Port 0 I/F: Port 1 IP address: IP address: 10.0.20.105/24 10.0.21.105/24 I/F: Port 0 I/F: Port 1 IP address: IP address: 10.0.20.1/24 10.0.21.1/24 DUT: Device Under Test DUT
  • 47. Delay measurement tool for network device source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 LatticeECP3 versa kitはPHY Chipが乗っているのでそれを利用 PHY chip: Marvell 88E1119R 今回はDUTの正確な遅延の計測のためMAC相当の機能はIP coreを使わず に自作 GMII DATA LED TX PHY chip RJ45 LED RX MDIO LEDs FPGA GMII DATA LED TX PHY chip RJ45 LEDs LED RX MDIO FPGAでの実装部とPHYチップの関係
  • 48. Delay measurement tool for network device source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 注意点 今回の実装は10/100M Ethernetを実装しません 1000M Ethernetのみをサポートします LatticeECP3 Versa Development Kitは,LANポートがデフォルト無効化されていま す. LANポート#1はJ10(ジャンパー),LANポート#2はJ12(ジャンパー)をショートから オープンにすることで有効化してください
  • 49. Delay measurement tool for network device source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 PHYチップのピンアサイン (ユーザガイド p12より)
  • 50. Tutorial 3.1: ethrecv (前半部分) source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 受信したEthernetフレームからDIPスイッチで選択されたバイト位置のデータをLEDで表示 module top ( input clk , input rst_n // Ethernet PHY#1 TX , input phy1_125M_clk , input phy1_tx_clk , output wire phy1_rst_n = 1'b1 , output wire phy1_gtx_clk = 1'b0 , output wire phy1_tx_en = 1'b0 , output wire[7:0] phy1_tx_data = 8'b0 // Ethernet PHY#1 RX , input phy1_rx_clk , input phy1_rx_dv , input phy1_rx_er , input [7:0] phy1_rx_data , input phy1_col , input phy1_crs //carrier sense // Ethernet PHY#1 MII , output wire phy1_mii_clk = 1'b0 , inout wire phy1_mii_data = 1'b0 // Switch/LED , input [7:0] switch , output [7:0] led );
  • 51. Tutorial 3.1: ethrecv (後半部分) source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 受信したEthernetフレームからDIPスイッチで選択されたバイト位置のデータをLEDで表示 ethrecv.lpfファイルはスライドに入りきらないので,ソースコードをレポジトリから持ってきてください reg[10:0] counter; reg[7:0] rx_data[0:2047]; assign led[7:0] = ~rx_data[switch]; always @(posedge phy1_rx_clk) begin if (rst_n == 1'b0) begin counter <= 11'd0; end else begin if (phy1_rx_dv) begin rx_data[counter] <= phy1_rx_data; counter <= counter + 11'd1; end else counter <= 11'd0; end end endmodule
  • 52. Tutorial 3.2: ethsend source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 reg [7:0] tx_data; assign phy1_tx_data = tx_data; always @(posedge phy1_125M_clk) begin if (reset_n == 1'b0) begin ARPブロードキャストパケットを定期的に送信する tx_data <= 11'h0; tx_en <= 1'b0; CRCの計算をしていないので一般的な機器ではエ counter <= 12'd0; ラーフレームになる end else begin case (counter) 12'h00: begin tx_data <= 8'h55; tx_en <= 1'b1; end 12'h01: tx_data <= 8'h55; // Preamble 12'h02: tx_data <= 8'h55; 12'h03: tx_data <= 8'h55; 12'h04: tx_data <= 8'h55; 12'h05: tx_data <= 8'h55; 12'h06: tx_data <= 8'h55; 12'h07: tx_data <= 8'hd5; // Preable + Start Frame Delimiter 12'h08: tx_data <= 8'hff; // Destination MAC address = FF-FF-FF-FF-FF-FF-FF 12'h09: tx_data <= 8'hff; ... 12'h14: tx_data <= 8'h08; // Protocol Type = ARP (0x0806) 12'h15: tx_data <= 8'h06; ... 12'h47: tx_data <= 8'h00; 12'h48: begin tx_en <= 1'b0; tx_data <= 8'h00; end default: tx_data <= 8'h0; endcase counter <= counter + 12'd1; end end
  • 53. Tutorial 3.3: ethsendのシミューレション source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 "Signal name"の"phy1_tx_data"がEthernet送信PHYで"55 55 D5"がプリアンプルとSFD "FFFFFFFFFFFF"が宛先MAC、"00301BA0A48E"が送信MAC、"0806"がARPプロトコル
  • 54. Tutorial 3.4: ethsend + crc source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 CRC生成回路はopencoresの10_100_1000 Mbps tri-mode ethernet MACプロジェクトのコードを 利用[link] assign crc_init = (counter == 12'h08); wire [31:0] crc_out; reg crc_rd; assign crc_data_en = ~crc_rd; crc_gen crc_inst ( .Reset(~reset_n) , .Clk(phy1_125M_clk) , .Init(crc_init) , .Frame_data(tx_data) , .Data_en(crc_data_en) , .CRC_rd(crc_rd) , .CRC_end() , .CRC_out(crc_out) ); always @(posedge phy1_125M_clk) begin ... 12'h44: begin // Frame Check Sequence crc_rd <= 1'b1; tx_data <= crc_out[31:24]; end 12'h45: tx_data <= crc_out[23:16]; 12'h46: tx_data <= crc_out[15:8]; 12'h47: tx_data <= crc_out[7:0]; 12'h48: begin tx_en <= 1'b0; crc_rd <= 1'b0; tx_data <= 8'h00; end
  • 55. Tutorial 3.5: measure (ethsend + ethrecv) source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 2つのLANポートを使って送信と受信を行い、間に接続したHUBやケーブルのパケット転送遅延 を測定
  • 56. RFC2544 Benchmarking Methodology for Network Interconnect Devices ネットワークデバイスの基本的な性能テスト方法をまとめたRFC L2, L3, FWといった一般的なネットワーク機器のテストベンチの方法は大体 RFC化されている 今回作成するテスタはRFC2544を参考にしている程度 フレームサイズなど各種パラメータに困った時に参考にしています Reference RFC1242 - Benchmarking Terminology for Network Interconnection Devices RFC5180 - IPv6 Benchmarking Methodology for Network Interconnect Devices RFC6201 - Device Reset Characterization
  • 57. テストフレームのフォーマット 8B Preamble Ethernet frame Protocol type ARP: 0x0806 ARP header 64B Magic code 0xCC00CC00CC Payload 48 bit 46B Global counter FCS (CRC) 32 bit 12B Inter Frame Gap Padding 計測フレーム 計測パケットのペイロード
  • 58. Play with the measurement device
  • 59. DUT UTP cable 10, 20, 30, 60, 180 cm Switching hub (1000Base-T) BUFFALO LSW2-GT-5NSR
  • 60. Next step 1: L3 機器を測る 現在の実装の問題点 受信ポートであるPort 1から何もパケットを出さないため,DUTであるL3 機器がPort 1のMAC addressを学習しない(MAC addressテーブルに載 らない) ⇛ ルーティングされず計測できない 実装案1 (いんちきだけど実装が楽) 予めPort 1の対向ポートのMAC Addressを調べる TX clockを使って1秒程度のglobal clockを作成 global clockに合わせてARP応答パケットを出す 実装案2 Port 1のRXでARP requestを見張りARP要求msgに応答 ヘッダフィールド値は[TCP/IP Vol.2]などを参照
  • 61. Next step 2: IPv6 対応デバイスを測る 必要な実装内容 FPGAにMODE機能を実装 DIPスイッチなどでIPv4/v6モードの切り替え IPv6版の計測パケットを実装 (Protocol type: 0x86dd) NDP (Neighbor Discovery Protocol)を実装
  • 62. Extra a: PCI and PCI Express
  • 63. PCI PCI(パラレル)の性能限界 32/64ビットのパラレル転送はすべての信号がほぼ同時に到着しなけれ ばならない(等長配線が必要). 信号の到達時間には500ps-1nsくらいの差がうまれ,受信側がスキュー (到達タイミングのズレ)を考慮しなければならない
  • 64. PCI Express 現在のI/O界のDe facto standardなbusプロトコル STP (1byte) 最近のFPGAではハードIPでPCI Expressが搭載 ⇛自作PCIeデバイスは今が始め時! SEQ# (2byte) TLP (Transaction Layer Packet): TLPヘッダ トランザクション層のパケット (3~4DW) DLLP (Data Link Layer Packet): データリンク層のパケット ソフトウェア層 TLPデータ PLP (Physical Layer Packet): (PCI互換) (0~1024DW) 物理層のパケット トランザクション層 ECRC (0 or 1DW) データリンク層 LCRC (1DW) 物理層 END (1byte) PCI Expressの3階層 PCI Expressのパケット構造
  • 65. PCI Express + FPGA FPGA+PCI Expressの代表的な構成 (Ethernetの物理層と比較してみてください) PMAには高速なシリアルパラレル変換が可能なSERDESを利用 Serial:2.5GHz <-> Parallel:250MHz トランザクション層を理解すればIPを使ってデバイス開発可能 トランザクション層 FPGA PCIe データリンク層 MAC PIPE PHY PIPE I/F FPGA Chip PCIe 物理層 PCS 代表的な構成 PMA 最近は大体上の構成 PCI Express lane
  • 66. PCI Express: TLP TLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成される トランザクションの種類は以下の8種類 (typeフィールドで指定) ポスト: 返信(コンプリーション)を必要とする転送要求 ノンポスト: 返信を必要としない転送要求 トランザクションの種類 動作 データ・ペイロード メモリ・リード ノンポスト なし メモリ・ライト ポスト あり I/O・リード ノンポスト なし I/O・ライト ノンポスト あり コンフィグレーション・リード ノンポスト なし コンフィグレーション・ライト ノンポスト あり コンプリケーション ノンポスト (read時)なし/(write時)あり メッセージ ポスト なし/あり
  • 67. PCI Express: TLPヘッダ構造 TLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成される トランザクションの種類は以下の8種類 (typeフィールドで指定) ポスト: 返信(コンプリーション)を必要とする転送要求 ノンポスト: 返信を必要としない転送要求 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |R|FMT| Type |R| TC | R |T|E|AT | R | data length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Last,1st DW BE| + Header (3DW) + | | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+ | Header (4DW) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | DATA payload (0~4096 byte) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Digest (Option) |
  • 68. PCI Express: リンクとレーン 物理層 (PHY) リンク 物理層 (PHY) レーン TXP0/TXN0 RXP0/RXN0 TXP1/TXN1 ポート ポート RXP1/RXN1 TXP2/TXN2 RXP2/RXN2 TXPn/TXNn RXPn/RXNn
  • 69. (参考) シリアル通信のエンベデッド・クロック 8b/10b: PCIe (1.1, 2.0), Ethernet 〇〇BASE-*X*, Infiniband (SDR, DDR, QDR), USB 3.0, SATA 64b/66b: Ethernet 〇〇BASE-*R*, Infiniband FDR 128b/130b: PCIe 3.0
  • 70. PCI/PCI Express: Debug PCIまわりのバグ = OSクラッシュ PCIのコーディングには1フロッピーMS-DOSが便利 redpciコマンドでbase addressを確認 memoryコマンドでI/OメモリマップしたFPGAのレジスタを確認 MS-DOSを使うメリット OSがクラッシュしても再起動が早い 詳しくは[PCIデバイス設計入門]を参照
  • 71. PCI/PCI Express: Debug REDPCI コマンド .... PCI情報を表示する 例) REDPCI /F .... PCI情報の詳細を表示する PCI Vendor IDの一覧 [link], Device IDの一覧 [link], Device classの一覧 [link]
  • 72. PCI/PCI Express: Debug MEMORY コマンド .... 物理メモリを表示・編集する 例) MEMORY B8000 ... 物理メモリ0xB8000番地(Video RAM Area)を編集する
  • 73. Tutorial 4.1: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 IPexpressを使ってPCIeのIPを生成,PCIコンフィグレーション空間部のみを実装 今回はIPに用意されているWishbone I/Fを使ってPCIeにアクセス MS-DOSを使ってコンフィグレーション空間を確認 PCI read/writeの記述が無いのでPCIeにアクセスするとOSがクラッシュ マニュアルはこちら[link] Portのリストはマニュアルの12から23ページのtable2-1を参照 Transmit TLP I/F Receive TLP I/F PCI Express PCI Express lanes Configuration Status IP Core I/F (tutorial 5.1) Wishbone I/F (tutorial 5.2) (参考) XilinxなどではARM社のAXI4 I/F経由でIPにアクセスできます
  • 74. Tutorial 4.1: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 IPexpressを使ってPCIeのIPを生成
  • 75. Tutorial 4.1: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 IPexpressを使ってPCIeのIPを生成
  • 76. Tutorial 4.1: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 IPexpressを使ってPCIeのIPを生成
  • 77. Tutorial 4.1: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 IPexpressを使ってPCIeのIPを生成
  • 78. Tutorial 4.1: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 IPexpressを使ってPCIeのIPを生成
  • 79. Tutorial 4.2: FPGAでPCI Expressを使う source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5 Wishboneバス経由でPCI Express上のI/Oメモリ空間へ回路をマッピング(read only) コードは複雑に見えますがほとんどが定型のコードです reg[15:0] wb_dat; reg wb_ack; always @(posedge clk_125 or negedge core_rst_n) begin if (!core_rst_n) begin wb_dat <= 16'h0; end else begin if (pcie_cyc & pcie_stb) begin wb_dat <= pcie_adr[15:0]; end end end always @(posedge clk_125 or negedge core_rst_n) begin if (!core_rst_n) begin wb_ack <= 0; end else begin wb_ack <= pcie_cyc & pcie_stb & (~wb_ack); end end assign pcie_dat_i = wb_dat; assign pcie_ack = wb_ack; assign led_out = 14'h0;
  • 80. PCI/PCI Express: DMA and SR-IOV Direct Memory Access (DMA) ペリフェラルが直接メモリバスを操作して,メインメモリにアクセスする仕組み レイテンシが低いがスループットが高い Kintex-7 dev kitにDMA EngineのIPが付属 Single Root I/O Virtualization (SR-IOV)とマルチファッション PCI-SIGによるPCIデバイスのIO仮想化サポートのための規格 Xilinx 7シリーズから本格対応開始 Vertex-7 XTはPCIe Gen3のHard IPで一部機能をサポート Kintex-7はSoft IPで対応予定?(詳細不明)
  • 81. Extra b: HTML5 for embedded system
  • 82. HTML5を使うモチーベーション Embedded systemのフロントエンド フロントエンドも1から自分でやるのはしんどい 今時のリッチなUIを使いたい 組み込みシステム全体の検証はとても大変 HW/SWのバグ,HWの相性や故障,ツールの仕様(バグ),etc. データ視覚化を用いた簡易デバック環境の構築 技術的な背景 HTML5 websocket, canvasの登場 Javascriptによる豊富な可視化ライブラリ websocketがバイナリデータのサポート node.jsの登場 (node-mmapなど便利モジュールもたくさん) c++によるシステム関数のモジュール(v8)が簡単に作成可能
  • 83. PCI/PCIeデバイス向けHTML5の使い方例 FPGAのレジスタをブラウザから読み書きする 1. FPGAの任意のregisterをPCIのI/Oメモリ空間にマッピング 2. FPGAボードのレジスタをPCI/PCIe経由でmmap 3. mmapした物理メモリ空間をWebsocketでブラウザに転送 Read: ブラウザで受け取ったバイナリデータをJavascriptの変数に変換 して表示 Write: ブラウザ側でHTMLの入力フォームを用意して入力された値をレ ジスタを書き込む ブラウザを使う利点 Websocketを使うことで簡単に双方向通信が実現可能 Javascriptの豊富なライブラリが使える
  • 84. 構成例 FPGA Host PC Ethernet Browser DUT PCI/PCIe pin ory Ethernet m mem g ap I/O websocket user registers mmap node.js
  • 86. 例: テスタのUI PCI I/O Memory MappingしたFPGA上 のレジスタをHTMLからread/write テスタの計測結果をwebsocket経由でリア ルタイムに表示 (数ms)
  • 87. 例: node.js var fs = require('fs'); var wsserver = require('ws').Server; var mmap = require('mmap'); var express = require('express') var D = require('util').debug; var app, fd, buf, wss; var BASE_ADDR = 0xe9000000; var MSIZE = 0x80; // setup: http server app = express.createServer(); app.use(express.static(__dirname + '/public')); app.listen(8081); // setup: websocket server wss = new wsserver( {server: app} ); // setup: fd try { fd = fs.openSync('/dev/mem', 'w+'); } catch (e) { D('cannot open: /dev/mem: ' + e); process.exit(1); } // setup: mmap try { buf = mmap.map(MSIZE, mmap.PROT_READ|mmap.PROT_WRITE, mmap.MAP_SHARED, fd, BASE_ADDR); } catch (e) { D('cannot mmap: ' + e); process.exit(1); } ...
  • 89. FPGA dev kit for network device: Xilinx Kintex-7 FPGA Connectivity Kit 発表されたばかり.10Gデバイスを自作したい人向け Kintex-7 (28nmプロセス), SFP+ 5 port (本体1 port + FMC module 4 ports), SFP+ module 2 units, fiber cable 価格: $2,895
  • 90. FPGA dev kit for network device: NetFPGA-1G, NetFPGA-10G Stanford中心のネットワークデバイス特化型の総合FPGAプラットフォーム ツールや一般的なリファレンスデザインなどを含めたパッケージ ACMコミュニティで時々ワークショップが行われている NetFPGA 1G 1G ethernet x4, 4.5MB ZBT SRAM, PCI-X, Virtex II Pro 50 NetFGPA 10G 10G ethernet x4, 27MB QDRII SRAM, PCI Express x8, Virtex5 *10Gは別途PCS/PMAのIPが必要
  • 91. Handmade 10G device 2012年は自作10Gデバイス元年 SFP+インタフェースを持つFPGAキットが登場 (NetFPGA-10G, Xilinx Kintex-7, etc.) SFP拡張モジュール (FMC)も各ベンダ向けに出 FPGA ている User logic 必要なIP core FIFO I/F PCS/PMA MAC (IP or 自作) 10GではFPGA内でPHY機能を処理 10G MAC XGMII ルータやFWのような高機能機器には必要 PCS/PMA (IP core) Serial I/F SFP+ module 一般的な構成
  • 92. Memory (for network device) 必要に応じてメモリを選択 SRAM ZBT, RLDRAM, QDR, etc 最新の情報はeetimesを参照[link] 書きかけ
  • 93. CAM/TCAM module tcam ( ... input clk , input rst wire[depth-1:0] bits; , input iena genvar i; , input [width-1:0] idata generate , input [width-1:0] iprefix for (i=0; i<width; i=i+1) begin: gen , input [width-1:0] isearch_data //assign bits[i] = !(data[i] ^ search[i]); // <- BCAM , output match assign bits[i] = !(data[i] ^ isearch_data[i]) | !prefix[i]; ); end endgenerate reg[width-1:0] data; reg[width-1:0] prefix; always @(posedge clk) begin if (rst) always @(posedge clk) begin match <= 1'b0 if (rst) begin else data <= {width{1'b0}}; match <= (& bits) & iena; prefix <= {width{1'b0}}; end end else begin if (iena) begin data <= idata; prefix <= iprefix; end end end ...
  • 94. High-Level Synthesis (HLS) for FPGA FPGA向けのHLS環境が少しずつ登場 Xilinx Vivado HLS (C/C++/SystemC) http://www.xilinx.com/support/documentation/sw_manuals/xilinx2012_2/ug902-vivado- high-level-synthesis.pdf Impulse C (ANSI C) Arista 7124FX Application Switchのdev kitに年間ライセンスが付属 その他 (主にASIC向けだが,FPGAにも対応) Bluespec, LabVIEW FPGAモジュール, etc. 今後の動向 Altera OpenCL (OpenCL) http://www.altera.co.jp/b/opencl.html Oracle JDK 9 (Java) #本当? http://www.oracle.com/technetwork/jp/ondemand/java/jdw-2-2-1390077-ja.pdf
  • 95. Embedded CPU FPGA Soft CPU Xilinx MicroBlaze, PicoBlaze Altera Nios, Nios II Lattice LatticeMico32 OpenRISC LEON (SPARC V8) 組み込み向けCPU ARM Intel Atom E6シリーズ はぜやまさんがAtom+FPGA dev kitを持ってくるらしい CPU+FPGA Xilinx Zynq (Cortex-A9 dual core 1MHz)
  • 96. Reference list (1/4) ● PCI 関係資料 ○ "PCIデバイス設計入門-PCIバス原理からHDLによるIC設計&デバッグ手法まで", イン ターフェース編集部, CQ出版 ● PCI Express 関係資料 ○ Interface 2009/1-, "連載「徹底解説 作ればわかるPCI Express」" 全22回, 内藤竜治, CQ出版 ■ 図書館でInterfaceのバックナンバを複写できる ○ "PCI Express設計の基礎と応用", 畑山仁, CQ出版 ○ Lattice Semiconductor, "PCI Express 2.0 x1, x4 Endpoint IP Core User’s Guide", http://www.latticesemi.com/documents/ipug75.pdf ○ Altera, "PCI Express 高性能リファレンス・デザイン", http://www.altera.co. jp/literature/an/an456_j.pdf ● Ethernet 関係資料 ○ "Ethernetのしくみとハードウェア設計技法", Interface編集部, CQ出版 ○ IEEE-SA -IEEE Get 802 Program - 802.3: Ethernet, http://standards.ieee.org/about/get/802/802.3.html
  • 97. Reference list (2/4) ● Verilog-HDL 関係資料 ○ "わかるVerilog HDL入門―文法 基礎から論理回路設計、論理合成、実装まで", 木村 真也, CQ出版 ○ FPGAボードで学ぶ組込みシステム開発入門 [Altera編], 小林優, 技術評論社 ○ Xilinx "XSTユーザガイド (UG627)", http://japan.xilinx.com/support/documentation/sw_manuals/xilinx12_3/xst.pdf ● Kernelとドライバまわり資料 ○ "Linuxカーネル解析入門[増補版]", 平田豊, 工学社 ○ "Linuxデバイスドライバプログラミング", 平田豊, ソフトバンククリエイティブ ● TCP/IP 関係資料 ○ "詳解TCP/IP(Vol.2) 実装", Gary R. Wright (原著), W.Richard Stevens (原著), 徳田 英 幸 (翻訳), 戸辺 義人 (翻訳), ピアソンエデュケーション
  • 98. Reference list (3/4) ● PC-Bus 関係資料 (AXI4のおすすめ資料募集中) ○ CMU "18‐447 Lecture 12:Busses and I/O", James C. Hoe: http://users.ece.cmu.edu/~jhoe/course/ece447/S11handouts/L12.pdf ○ OpenRISC SoC "Wishbone B4 - WISHBONE System-on-Chip (SoC) InterconnectionArchitecturefor Portable IP Cores", http://cdn.opencores. org/downloads/wbspec_b4.pdf ● 組み込み全般 ○ "Modern Embedded Computing: Designing Connected, Pervasive", Media-Rich Systems, Peter Barry, Patrick Crowley, Morgan Kaufmann ■ 紹介Slide (PDF): http://embedded.communities.intel. com/servlet/JiveServlet/previewBody/7158-102-1-2404/Modern- Embedded-Computing-Designing-Connected-Pervasive-Media-Rich- Systems.pdf ■ # takeiさんから頂きました
  • 99. Reference list (4/4): ● General network device ○ RFC1242 - Benchmarking Terminology for Network Interconnection Devices ○ RFC2544 - Benchmarking Methodology for Network Interconnect Devices ○ RFC6201 - Device Reset Characterization ● IPv6 ○ RFC5180 - IPv6 Benchmarking Methodology for Network Interconnect Devices ● L2 Switch ○ RFC2889 - Benchmarking Methodology for LAN Switching Devices ● Firewall ○ RFC3511 - Benchmarking Methodology for Firewall Performance ● IP Multicast ○ RFC3918 - Methodology for IP Multicast Benchmarking
  • 100. Changelog 2012/9/2 initial
  • 101.
  • 102. テストフレームのフォーマット Preamble フロントエンドからPaddingサイズを調整する ことでフレームサイズの調整が可能(最小値 Ethernet frame 64byte) Inter Frame Gapを変更することで,フレーム Protocol type 到達タイミングの調節が可能 (推奨 12 clock, IPv4: 0x0800 最小値 0 clock) IPv6: 0x86dd 将来的にはHost PCからpcapファイルを FPGAのregisterにPCIe経由でロードして全パ IP header ラメータ変更可能を検討(Hardware版tcp replay) UDP header Magic code 0xCC00CC00CC 48 bit Payload Global counter FCS (CRC) 32 bit Padding Inter Frame Gap ... 計測フレーム 計測パケットのペイロード