FPGA workshop (2012f): Network Tester

102
Workshop: Network Tester with FPGA WIDE CAMP Autumn 2012 (9/3 - 9/6) Yohei Kuga [email protected]

Transcript of FPGA workshop (2012f): Network Tester

Page 1: FPGA workshop (2012f): Network Tester

Workshop: Network Tester with FPGA

WIDE CAMP Autumn 2012 (9/3 - 9/6)

Yohei [email protected]

Page 2: FPGA workshop (2012f): Network Tester

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ページより

Page 3: FPGA workshop (2012f): Network Tester

Main topic

FPGA programming for beginnersDev kit and toolsTutorial 1: "LED"Simulation tool and testbenchTutorial 2: "Simulation"IP coreBuilding on the command-line

FPGA design for Ethernetoverview, MII, RMII, timing chart, MDIO, RFC2544Tutorial 3: "Delay measurement tool for network device"

Play with the measurement deviceNext step

{Layer2, Layer3, IPv6, throughput, frame loss rate} support

Page 4: FPGA workshop (2012f): Network Tester

Extra materials

a. PCI and PCI Expressoverview, Bus (wishbone), sample code, debug, DMA and SR-IOVTutorial 5: "How to use PCI Express IP"

b. HTML5 for embedded systemBlob/Arraybuffer, websocket, node.js, HTML canvas

c. FPGA hot topicsFPGA development kit, Handmade 10G/40G/100G device, memory, CAM/TCAM,HLS for FPGA, Embedded CPU

Reference list

Page 5: FPGA workshop (2012f): Network Tester

Schedule

Main topic

9/4

9/5Extra a:

PCI ExpressMain topic

Page 6: FPGA workshop (2012f): Network Tester

Materials

Latest slide URLhttp://goo.gl/8UzFx

Tutorial codehttps://github.com/sora/fpga-workshop-2012f

Page 7: FPGA workshop (2012f): Network Tester

FPGA programming for beginners

Page 8: FPGA workshop (2012f): Network Tester

本ワークショップの進め方

Lattice社のFPGA開発キットを使ってFPGA開発を一通り体験します

開発環境: Lattice Diamond

Lattice社のFPGA開発の統合環境

Editing, pin assign, syntax check,IP catalog, logic synthesis (論理合成), FPGA configuration, etc.

RTLシミュレーション: ActiveHDL

Lattice Diamondに付属

Windowsのみ

新規プロジェクト作成

HDLプログラミング

ピンアサイン

コンパイル

コンフィグレーション

今回のFPGAの開発手順

Page 9: FPGA workshop (2012f): Network Tester

LatticeECP3 Versa Development Kit

FPGA開発キッド

Lattice LatticeECP31000BASE-T (2 port)PCI Express x1 I/FDDR SDRAMSERDES I/F

開発ツール

Lattice Diamond 2.0論理合成: Synplify

シミュレータ: Active-HDL

価格: $99 → $299

ユーザガイド (手元にダウンロードしてください)

http://www.latticesemi.com/documents/EB62.pdf

http://www.latticesemi.co.jp/corporate/newscenter/newsletters/newsmay2011/ecp3versadevelopmentkit.cfm

PHY chip(Marvell

88E1119R)

Page 10: FPGA workshop (2012f): Network Tester

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

Page 11: FPGA workshop (2012f): Network Tester

Tutorial 1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

基本的なFPGA開発の流れを学ぶ

LEDを点灯

DIPスイッチとLEDの連携

counter回路

Page 12: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 13: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 14: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 15: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 16: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 17: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 18: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

module top (

output [7:0] led

);

assign led = 8'b10101010;

endmodule

BLOCK RESETPATHS ;

BLOCK ASYNCPATHS ;

IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ;

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 ;

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 ;

led_top.v led.lpf

Page 19: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 20: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 21: FPGA workshop (2012f): Network Tester

Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

Page 22: FPGA workshop (2012f): Network Tester

Tutorial 1.2: LED+DIP switchsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

module top (

input [7:0] switch

, output [7:0] led

);

assign led = switch;

endmodule

BLOCK RESETPATHS ;

BLOCK ASYNCPATHS ;

IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ;

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 ;

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" ;

switch_top.v switch.lpf

Page 23: FPGA workshop (2012f): Network Tester

Tutorial 1.3: LED+countersource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1

module top (

input clock

, input reset_n

, output [7:0] led

);

reg[31:0] counter = 32'd0;

wire reset = ~reset_n;

assign led = ~counter[31:24];

always @(posedge clock) begin

if (reset)

counter <= 32'd0;

else

counter <= counter + 32'd1;

end

endmodule

BLOCK RESETPATHS ;

BLOCK ASYNCPATHS ;

IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ;

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 ;

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 "reset_n" SITE "A21" ;

LOCATE COMP "clock" SITE "L5" ;

IOBUF PORT "clock" IO_TYPE=LVDS25

DIFFRESISTOR=OFF DIFFDRIVE="NA" ;

counter_top.v counter.lpf

Page 24: FPGA workshop (2012f): Network Tester

Simulation tool

Active-HDLLattice Diamond付属のシミュレータ

OSSのVerilog HDLシミュレーション環境

iverilog + gtkwaveGPL cver + gtkwave

Page 25: FPGA workshop (2012f): Network Tester

Tutorial 2: simulationsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2

`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

endmodule

counter_tb.v

Page 26: FPGA workshop (2012f): Network Tester

Tutorial 2: simulationsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2

Page 27: FPGA workshop (2012f): Network Tester

Tutorial 2: simulationsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2

Page 28: FPGA workshop (2012f): Network Tester

Tutorial 2: simulationsource 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

Page 29: FPGA workshop (2012f): Network Tester

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を使う

Page 30: FPGA workshop (2012f): Network Tester

How to use IPexpress

DiamondからIPexpressを起動

Page 31: FPGA workshop (2012f): Network Tester

How to use IPexpress

Project Path, File Name, Module Outputを入力してCustomize

Page 32: FPGA workshop (2012f): Network Tester

How to use IPexpress

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

Page 33: FPGA workshop (2012f): Network Tester

How to use IPexpress

File -> Add -> Existing File

Page 34: FPGA workshop (2012f): Network Tester

How to use IPexpress

生成された{file name}.ipxを選択して'Add'

Page 35: FPGA workshop (2012f): Network Tester

How to use IPexpress

IPの{file name}_tmpl.vにネット名称が記述されているので,それを基にIPを使用する.tb_{file name}_tmpl.vなども参考になる

Page 36: FPGA workshop (2012f): Network Tester

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 ledprj_run Translate -impl ledprj_run Map -impl ledprj_run PAR -impl ledprj_run PAR -impl led -task PARTraceprj_run Export -impl led -task Bitgenprj_project close

tclスクリプトの例

Page 37: FPGA workshop (2012f): Network Tester

FPGA design for Ethernet

Page 38: FPGA workshop (2012f): Network Tester

Ethernet physical layer

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

MAC

RS

PCS

PMA

PMD

MEDIUM

MII

MDI

物理層

データリンク層

OSI 参照モデルとの対比

MAC: media access controlRS: Reconciliation SublayerMII: Media Independent Interface

PHYの外部インタフェースPCS: Physical Coding Sublayer

データの符号化 , AutoNegPMA: Physical Medium Attachment

シリアル・パラレル変換PMD: physical medium dependent

アナログ・デジタル変換MDI:

コネクタ (EX: RJ-45)MEDIUM:

伝送媒体 (EX: UTP, 光ファイバ)

PH

Y

Page 39: FPGA workshop (2012f): Network Tester

Ethernet frame

Preamble

Ethernet header

IP header

Payload46B~1500B

FCS (CRC)

Inter Frame Gap

64B

~151

8B8B

12B

~

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

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

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

Page 40: FPGA workshop (2012f): Network Tester

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とその仕様 (動作周波数と信号線数)

Page 41: FPGA workshop (2012f): Network Tester

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 マネージメントインタフェース(送受信)

Page 42: FPGA workshop (2012f): Network Tester

MII: timing chart

preamble '0101' preamble + SFD

'1101'

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

FCS[3:0]FCS[7:4]

collision

Ethernet Frame部のみLSB(下位4bit)->MSB(上位4bit)で送信しているのに注目

Page 43: FPGA workshop (2012f): Network Tester

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 マネージメントインタフェース(送受信)

Page 44: FPGA workshop (2012f): Network Tester

MDIO

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

PHYの操作とステータスの取得用

リンクのステータス取得

転送速度の取得と選択

全二重・半二重

オートネゴ

Loopback10GbEではレジスタ数が拡張

ST(01) OP PHYADR REGADR TA DATA

2bit 2bit 5bit 5bit 2bit 16bit

MDIO フレームフォーマット

Page 45: FPGA workshop (2012f): Network Tester

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

Page 46: FPGA workshop (2012f): Network Tester

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

FPGAでネットワークテスタを作る動機

ショートパケット (64byte)ワイヤーレートでテストがしたい

クロックレベルの計測 (1000BASE-Tで8ns単位)

自作ネットワークデバイスのデバッグには必要

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

I/F: Port 1IP address:

10.0.21.105/24

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

I/F: Port 1IP address:

10.0.21.1/24

DUT

FPGA

DUT: Device Under Test

Page 47: FPGA workshop (2012f): Network Tester

Delay measurement tool for network devicesource 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を使わずに自作

FPGAPHY chip

PHY chip

RJ45

RJ45

LED TXGMII

MDIO

GMII

MDIO LEDs

DATA

LEDs LED RX

LED TXLED RX

FPGAでの実装部とPHYチップの関係

DATA

Page 48: FPGA workshop (2012f): Network Tester

Delay measurement tool for network devicesource 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(ジャンパー)をショートから

オープンにすることで有効化してください

Page 49: FPGA workshop (2012f): Network Tester

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

PHYチップのピンアサイン (ユーザガイド p12より)

Page 50: FPGA workshop (2012f): Network Tester

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

);

Page 51: FPGA workshop (2012f): Network Tester

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

Page 52: FPGA workshop (2012f): Network Tester

Tutorial 3.2: ethsendsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4

ARPブロードキャストパケットを定期的に送信する

CRCの計算をしていないので一般的な機器ではエラーフレームになる

reg [7:0] tx_data;

assign phy1_tx_data = tx_data;

always @(posedge phy1_125M_clk) begin

if (reset_n == 1'b0) begin

tx_data <= 11'h0;

tx_en <= 1'b0;

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

Page 53: FPGA workshop (2012f): Network Tester

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プロトコル

Page 54: FPGA workshop (2012f): Network Tester

Tutorial 3.4: ethsend + crcsource 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

...

Page 55: FPGA workshop (2012f): Network Tester

Tutorial 3.5: measure (ethsend + ethrecv)source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4

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

Page 56: FPGA workshop (2012f): Network Tester

RFC2544Benchmarking Methodology for Network Interconnect Devices

ネットワークデバイスの基本的な性能テスト方法をまとめたRFC

L2, L3, FWといった一般的なネットワーク機器のテストベンチの方法は大体RFC化されている

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

ReferenceRFC1242 - Benchmarking Terminology for Network Interconnection DevicesRFC5180 - IPv6 Benchmarking Methodology for Network Interconnect DevicesRFC6201 - Device Reset Characterization

Page 57: FPGA workshop (2012f): Network Tester

テストフレームのフォーマット

Preamble

Ethernet frame

Protocol typeARP: 0x0806

ARP header

Payload

FCS (CRC)

Inter Frame Gap

Magic code0xCC00CC00CC

48 bit

Global counter32 bit

Padding

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

64B

8B12

B

46B

Page 58: FPGA workshop (2012f): Network Tester

Play with the measurement device

Page 59: FPGA workshop (2012f): Network Tester

DUT

UTP cable10, 20, 30, 60, 180 cm

Switching hub (1000Base-T)BUFFALO LSW2-GT-5NSR

Page 60: FPGA workshop (2012f): Network Tester

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]などを参照

Page 61: FPGA workshop (2012f): Network Tester

必要な実装内容

FPGAにMODE機能を実装

DIPスイッチなどでIPv4/v6モードの切り替え

IPv6版の計測パケットを実装 (Protocol type: 0x86dd)NDP (Neighbor Discovery Protocol)を実装

Next step 2:IPv6 対応デバイスを測る

Page 62: FPGA workshop (2012f): Network Tester

Extra a:PCI and PCI Express

Page 63: FPGA workshop (2012f): Network Tester

PCI

PCI(パラレル)の性能限界

32/64ビットのパラレル転送はすべての信号がほぼ同時に到着しなければならない(等長配線が必要).信号の到達時間には500ps-1nsくらいの差がうまれ,受信側がスキュー(到達タイミングのズレ)を考慮しなければならない

Page 64: FPGA workshop (2012f): Network Tester

PCI Express

現在のI/O界のDe facto standardなbusプロトコル最近のFPGAではハードIPでPCI Expressが搭載

⇛自作PCIeデバイスは今が始め時!

TLP (Transaction Layer Packet):トランザクション層のパケット

DLLP (Data Link Layer Packet):データリンク層のパケット

PLP (Physical Layer Packet):物理層のパケット

STP (1byte)

SEQ# (2byte)

TLPヘッダ(3~4DW)

TLPデータ(0~1024DW)

LCRC (1DW)

END (1byte)

PCI Expressのパケット構造

トランザクション層

データリンク層

物理層

PCI Expressの3階層

ECRC (0 or 1DW)

ソフトウェア層 (PCI互換)

Page 65: FPGA workshop (2012f): Network Tester

PCI Express + FPGAFPGA+PCI Expressの代表的な構成

(Ethernetの物理層と比較してみてください)

PMAには高速なシリアルパラレル変換が可能なSERDESを利用

Serial:2.5GHz <-> Parallel:250MHzトランザクション層を理解すればIPを使ってデバイス開発可能

PCS

PMA

PIPE I/F

PCI Express lane

MAC

物理層

データリンク層

トランザクション層

FPGA

FPGA PHYChip

PCIe

PCIe

代表的な構成最近は大体上の構成

PIPE

Page 66: FPGA workshop (2012f): Network Tester

PCI Express: TLP

TLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成される

トランザクションの種類は以下の8種類 (typeフィールドで指定)

ポスト: 返信(コンプリーション)を必要とする転送要求

ノンポスト: 返信を必要としない転送要求

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

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

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

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

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

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

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

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

メッセージ ポスト なし/あり

Page 67: FPGA workshop (2012f): Network Tester

PCI Express: TLPヘッダ構造

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) |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

TLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成される

トランザクションの種類は以下の8種類 (typeフィールドで指定)

ポスト: 返信(コンプリーション)を必要とする転送要求

ノンポスト: 返信を必要としない転送要求

Page 68: FPGA workshop (2012f): Network Tester

PCI Express: リンクとレーン

ポー

トポ

ート

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

レーン

TXPn/TXNn

RXPn/RXNn

TXP2/TXN2

RXP2/RXN2

TXP1/TXN1

RXP1/RXN1

TXP0/TXN0

RXP0/RXN0

Page 69: FPGA workshop (2012f): Network Tester

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

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

Page 70: FPGA workshop (2012f): Network Tester

PCI/PCI Express: Debug

PCIまわりのバグ = OSクラッシュ

PCIのコーディングには1フロッピーMS-DOSが便利

redpciコマンドでbase addressを確認

memoryコマンドでI/OメモリマップしたFPGAのレジスタを確認

MS-DOSを使うメリット

OSがクラッシュしても再起動が早い

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

Page 71: FPGA workshop (2012f): Network Tester

PCI/PCI Express: Debug

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

Page 72: FPGA workshop (2012f): Network Tester

PCI/PCI Express: Debug

MEMORY コマンド .... 物理メモリを表示・編集する例) MEMORY B8000 ... 物理メモリ0xB8000番地(Video RAM Area)を編集する

Page 73: FPGA workshop (2012f): Network Tester

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を参照

PCI ExpressIP CorePCI Express lanes

Transmit TLP I/F

Configuration StatusI/F (tutorial 5.1)

Wishbone I/F(tutorial 5.2)

(参考) XilinxなどではARM社のAXI4 I/F経由でIPにアクセスできます

Receive TLP I/F

Page 74: FPGA workshop (2012f): Network Tester

Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5

IPexpressを使ってPCIeのIPを生成

Page 75: FPGA workshop (2012f): Network Tester

Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5

IPexpressを使ってPCIeのIPを生成

Page 76: FPGA workshop (2012f): Network Tester

Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5

IPexpressを使ってPCIeのIPを生成

Page 77: FPGA workshop (2012f): Network Tester

Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5

IPexpressを使ってPCIeのIPを生成

Page 78: FPGA workshop (2012f): Network Tester

Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5

IPexpressを使ってPCIeのIPを生成

Page 79: FPGA workshop (2012f): Network Tester

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;

Page 80: FPGA workshop (2012f): Network Tester

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で対応予定?(詳細不明)

Page 81: FPGA workshop (2012f): Network Tester

Extra b:HTML5 for embedded system

Page 82: FPGA workshop (2012f): Network Tester

HTML5を使うモチーベーション

Embedded systemのフロントエンド

フロントエンドも1から自分でやるのはしんどい今時のリッチなUIを使いたい組み込みシステム全体の検証はとても大変

HW/SWのバグ,HWの相性や故障,ツールの仕様(バグ),etc.

データ視覚化を用いた簡易デバック環境の構築

技術的な背景

HTML5 websocket, canvasの登場

Javascriptによる豊富な可視化ライブラリ

websocketがバイナリデータのサポート

node.jsの登場 (node-mmapなど便利モジュールもたくさん)

c++によるシステム関数のモジュール(v8)が簡単に作成可能

Page 83: FPGA workshop (2012f): Network Tester

PCI/PCIeデバイス向けHTML5の使い方例

FPGAのレジスタをブラウザから読み書きする

1. FPGAの任意のregisterをPCIのI/Oメモリ空間にマッピング

2. FPGAボードのレジスタをPCI/PCIe経由でmmap

3. mmapした物理メモリ空間をWebsocketでブラウザに転送

Read: ブラウザで受け取ったバイナリデータをJavascriptの変数に変換して表示

Write: ブラウザ側でHTMLの入力フォームを用意して入力された値をレジスタを書き込む

ブラウザを使う利点

Websocketを使うことで簡単に双方向通信が実現可能

Javascriptの豊富なライブラリが使える

Page 84: FPGA workshop (2012f): Network Tester

構成例

FPGA Host PC

DUTEthernet

EthernetPCI/PCIe

user registers

I/O m

emor

y

mappin

g

node.js

Browser

websocket

mmap

Page 85: FPGA workshop (2012f): Network Tester

例: テスタのUI

Page 86: FPGA workshop (2012f): Network Tester

例: テスタのUIPCI I/O Memory MappingしたFPGA上のレジスタをHTMLからread/write

テスタの計測結果をwebsocket経由でリアルタイムに表示 (数ms)

Page 87: FPGA workshop (2012f): Network Tester

例: node.jsvar 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);

}

...

Page 88: FPGA workshop (2012f): Network Tester

Extra c: FPGA hot topics

Page 89: FPGA workshop (2012f): Network Tester

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

Page 90: FPGA workshop (2012f): Network Tester

FPGA dev kit for network device:NetFPGA-1G, NetFPGA-10G

Stanford中心のネットワークデバイス特化型の総合FPGAプラットフォーム

ツールや一般的なリファレンスデザインなどを含めたパッケージ

ACMコミュニティで時々ワークショップが行われている

NetFPGA 1G1G ethernet x4, 4.5MB ZBT SRAM, PCI-X, Virtex II Pro 50

NetFGPA 10G10G ethernet x4, 27MB QDRII SRAM, PCI Express x8, Virtex5*10Gは別途PCS/PMAのIPが必要

Page 91: FPGA workshop (2012f): Network Tester

FPGA

Handmade 10G device

2012年は自作10Gデバイス元年

SFP+インタフェースを持つFPGAキットが登場 (NetFPGA-10G, Xilinx Kintex-7, etc.)SFP拡張モジュール (FMC)も各ベンダ向けに出ている

必要なIP core

PCS/PMA10GではFPGA内でPHY機能を処理

10G MACルータやFWのような高機能機器には必要

SFP+ module

MAC (IP or 自作)

一般的な構成

Serial I/F

XGMII

User logic

PCS/PMA (IP core)

FIFO I/F

Page 92: FPGA workshop (2012f): Network Tester

Memory (for network device)

必要に応じてメモリを選択

SRAMZBT, RLDRAM, QDR, etc

最新の情報はeetimesを参照[link]

書きかけ

Page 93: FPGA workshop (2012f): Network Tester

CAM/TCAMmodule tcam (

input clk

, input rst

, input iena

, input [width-1:0] idata

, input [width-1:0] iprefix

, input [width-1:0] isearch_data

, output match

);

reg[width-1:0] data;

reg[width-1:0] prefix;

always @(posedge clk) begin

if (rst) begin

data <= {width{1'b0}};

prefix <= {width{1'b0}};

end else begin

if (iena) begin

data <= idata;

prefix <= iprefix;

end

end

end

...

...

wire[depth-1:0] bits;

genvar i;

generate

for (i=0; i<width; i=i+1) begin: gen

//assign bits[i] = !(data[i] ^ search[i]); // <- BCAM

assign bits[i] = !(data[i] ^ isearch_data[i]) | !prefix[i];

end

endgenerate

always @(posedge clk) begin

if (rst)

match <= 1'b0

else

match <= (& bits) & iena;

end

Page 94: FPGA workshop (2012f): Network Tester

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

Page 95: FPGA workshop (2012f): Network Tester

Embedded CPU

FPGA Soft CPUXilinx MicroBlaze, PicoBlazeAltera Nios, Nios IILattice LatticeMico32OpenRISCLEON (SPARC V8)

組み込み向けCPU

ARMIntel Atom E6シリーズ

はぜやまさんがAtom+FPGA dev kitを持ってくるらしい

CPU+FPGAXilinx Zynq (Cortex-A9 dual core 1MHz)

Page 96: FPGA workshop (2012f): Network Tester

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

Page 97: FPGA workshop (2012f): Network Tester

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 (原著), 徳田 英

幸 (翻訳), 戸辺 義人 (翻訳), ピアソンエデュケーション

Page 98: FPGA workshop (2012f): Network Tester

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さんから頂きました

Page 99: FPGA workshop (2012f): Network Tester

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

Page 100: FPGA workshop (2012f): Network Tester

Changelog

2012/9/2initial

Page 101: FPGA workshop (2012f): Network Tester
Page 102: FPGA workshop (2012f): Network Tester

テストフレームのフォーマット

Preamble

Ethernet frame

Protocol typeIPv4: 0x0800IPv6: 0x86dd

IP header

UDP header

Payload

FCS (CRC)

Inter Frame Gap

Magic code0xCC00CC00CC

48 bit

Global counter32 bit

Padding...

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

フロントエンドからPaddingサイズを調整することでフレームサイズの調整が可能(最小値 64byte)Inter Frame Gapを変更することで,フレーム到達タイミングの調節が可能 (推奨 12 clock, 最小値 0 clock)

将来的にはHost PCからpcapファイルをFPGAのregisterにPCIe経由でロードして全パラメータ変更可能を検討(Hardware版tcp replay)