FPGA workshop (2012f): Network Tester

3,693 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,693
On SlideShare
0
From Embeds
0
Number of Embeds
111
Actions
Shares
0
Downloads
36
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

FPGA workshop (2012f): Network Tester

  1. 1. Workshop: Network Tester with FPGA WIDE CAMP Autumn 2012 (9/3 - 9/6) Yohei Kuga sora@haeena.net
  2. 2. Workshop overview"Lattice社のFPGA開発キットを使って、簡単なネットワークテスタを作成します。FPGAの開発ツールを使ったEthernet回路設計を駆け足で体験することで、FPGAによるネットワークデバイス開発を学びます。動くものを作成して、実際にLANケーブルの転送遅延やリピータハブの処理遅延を計測して遊びます。""The purpose of this workshop is to learn the usage of a FPGA IDE andthe development of network devices on FPGA. In this workshop,participants try to develop a simple network tester on Lattices FPGASDK and to evaluate the delay of a LAN cable or a repeater hub bydeveloped testers." Webページより
  3. 3. Main topicFPGA programming for beginners Dev kit and tools Tutorial 1: "LED" Simulation tool and testbench Tutorial 2: "Simulation" IP core Building on the command-lineFPGA design for Ethernet overview, MII, RMII, timing chart, MDIO, RFC2544 Tutorial 3: "Delay measurement tool for network device"Play with the measurement deviceNext step {Layer2, Layer3, IPv6, throughput, frame loss rate} support
  4. 4. Extra materialsa. 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 canvasc. FPGA hot topics FPGA development kit, Handmade 10G/40G/100G device, memory, CAM/TCAM,HLS for FPGA, Embedded CPUReference list
  5. 5. Schedule 9/4 Main topic 9/5 Extra a: Main topic PCI Express
  6. 6. MaterialsLatest slide URL http://goo.gl/8UzFxTutorial code https://github.com/sora/fpga-workshop-2012f
  7. 7. FPGA programming for beginners
  8. 8. 本ワークショップの進め方Lattice社のFPGA開発キットを使ってFPGA開発を一通り体験します 新規プロジェクト作成 HDLプログラミング開発環境: Lattice DiamondLattice社のFPGA開発の統合環境 Editing, pin assign, syntax check, ピンアサイン IP catalog, logic synthesis (論理合成), FPGA configuration, etc. コンパイルRTLシミュレーション: ActiveHDL Lattice Diamondに付属 Windowsのみ コンフィグレーション 今回のFPGAの開発手順
  9. 9. LatticeECP3 Versa Development KitFPGA開発キッド 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. 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)$ lsusbBus 001 Device 002: ID 0403:6010 Future Technology DevicesInternational, 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. 11. Tutorial 1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1基本的なFPGA開発の流れを学ぶ LEDを点灯 DIPスイッチとLEDの連携 counter回路
  12. 12. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  13. 13. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  14. 14. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  15. 15. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  16. 16. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  17. 17. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  18. 18. Tutorial 1.1: LED source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1led_top.v led.lpfmodule top ( BLOCK RESETPATHS ; output [7:0] led BLOCK ASYNCPATHS ;); IOBUF PORT "led_0" SITE=Y20 IO_TYPE=LVCMOS33 ;assign led = 8b10101010; 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. 19. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  20. 20. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  21. 21. Tutorial 1.1: LEDsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1
  22. 22. Tutorial 1.2: LED+DIP switch source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1switch_top.v switch.lpfmodule 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. 23. Tutorial 1.3: LED+counter source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-1counter_top.v counter.lpfmodule 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 = 32d0; 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 <= 32d0; IOBUF PORT "clock" IO_TYPE=LVDS25 else DIFFRESISTOR=OFF DIFFDRIVE="NA" ; counter <= counter + 32d1;endendmodule
  24. 24. Simulation toolActive-HDL Lattice Diamond付属のシミュレータOSSのVerilog HDLシミュレーション環境 iverilog + gtkwave GPL cver + gtkwave
  25. 25. Tutorial 2: simulation source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2counter_tb.v`timescale 1ns / 1nsmodule top_tb;reg clock;reg reset_n;wire[7:0] led;initial begin $dumpfile("counter.vcd"); $dumpvars(0, top_tb);endinitial begin $monitor($realtime,,"ps %h %h %h ",clock,reset_n,led);endtop top_tb ( .clock(clock), .reset_n(reset_n), .led(led));initial reset_n = 1b0;initial clock = 1b0;always #1 clock = ~clock;initial begin #10 reset_n = 1b1; #300 $finish;end
  26. 26. Tutorial 2: simulationsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2
  27. 27. Tutorial 2: simulationsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-2
  28. 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. 29. IP coreパッケージ化された回路情報ハードIP 予めFPGA内に組み込まれて提供されるIPソフトIP RTLレベルで提供,またはゲートレベルに論理合成されRTLがブラック ボックス化されて提供されるIPIPの例: CPU, FIFO, FFT, SRAM I/F, PCIe I/F, Ethernet MAC, etc.http://opencores.org ではIPがOSSライセンスで提供されているLattice DiamondではIPカタログであるIPExpressを使ってIPを使う
  30. 30. How to use IPexpressDiamondからIPexpressを起動
  31. 31. How to use IPexpressProject Path, File Name, Module Outputを入力してCustomize
  32. 32. How to use IPexpress各種設定を入力 (FIFOのbit幅や深さ)
  33. 33. How to use IPexpressFile -> Add -> Existing File
  34. 34. How to use IPexpress生成された{file name}.ipxを選択してAdd
  35. 35. How to use IPexpressIPの{file name}_tmpl.vにネット名称が記述されているので,それを基にIPを使用する.tb_{file name}_tmpl.vなども参考になる
  36. 36. Building on the Command LineGUIを使わずに論理合成する1. {project name}.tclに作業内容を記述2. $ diamondc {project name}.tcl > output.logXilinx 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. 37. FPGA design for Ethernet
  38. 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. 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. 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. 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. 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. 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. 44. MDIO# 今回のWorkshopでは使用しませんPHYの操作とステータスの取得用 リンクのステータス取得 転送速度の取得と選択 全二重・半二重 オートネゴ Loopback10GbEではレジスタ数が拡張 ST OP PHYADR REGADR TA DATA (01) 2bit 2bit 5bit 5bit 2bit 16bit MDIO フレームフォーマット
  45. 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. 46. Delay measurement tool for network devicesource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4FPGAでネットワークテスタを作る動機 ショートパケット (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. 47. Delay measurement tool for network devicesource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4LatticeECP3 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. 48. 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(ジャンパー)をショートから オープンにすることで有効化してください
  49. 49. Delay measurement tool for network devicesource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4 PHYチップのピンアサイン (ユーザガイド p12より)
  50. 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 = 1b1 , output wire phy1_gtx_clk = 1b0 , output wire phy1_tx_en = 1b0 , output wire[7:0] phy1_tx_data = 8b0 // 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 = 1b0 , inout wire phy1_mii_data = 1b0 // Switch/LED , input [7:0] switch , output [7:0] led );
  51. 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 == 1b0) begin counter <= 11d0; end else begin if (phy1_rx_dv) begin rx_data[counter] <= phy1_rx_data; counter <= counter + 11d1; end else counter <= 11d0; end end endmodule
  52. 52. Tutorial 3.2: ethsend source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4reg [7:0] tx_data;assign phy1_tx_data = tx_data;always @(posedge phy1_125M_clk) begin if (reset_n == 1b0) begin ARPブロードキャストパケットを定期的に送信する tx_data <= 11h0; tx_en <= 1b0; CRCの計算をしていないので一般的な機器ではエ counter <= 12d0; ラーフレームになる end else begin case (counter) 12h00: begin tx_data <= 8h55; tx_en <= 1b1; end 12h01: tx_data <= 8h55; // Preamble 12h02: tx_data <= 8h55; 12h03: tx_data <= 8h55; 12h04: tx_data <= 8h55; 12h05: tx_data <= 8h55; 12h06: tx_data <= 8h55; 12h07: tx_data <= 8hd5; // Preable + Start Frame Delimiter 12h08: tx_data <= 8hff; // Destination MAC address = FF-FF-FF-FF-FF-FF-FF 12h09: tx_data <= 8hff; ... 12h14: tx_data <= 8h08; // Protocol Type = ARP (0x0806) 12h15: tx_data <= 8h06; ... 12h47: tx_data <= 8h00; 12h48: begin tx_en <= 1b0; tx_data <= 8h00; end default: tx_data <= 8h0; endcase counter <= counter + 12d1; endend
  53. 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. 54. Tutorial 3.4: ethsend + crcsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-4CRC生成回路はopencoresの10_100_1000 Mbps tri-mode ethernet MACプロジェクトのコードを利用[link] assign crc_init = (counter == 12h08); 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 ... 12h44: begin // Frame Check Sequence crc_rd <= 1b1; tx_data <= crc_out[31:24]; end 12h45: tx_data <= crc_out[23:16]; 12h46: tx_data <= crc_out[15:8]; 12h47: tx_data <= crc_out[7:0]; 12h48: begin tx_en <= 1b0; crc_rd <= 1b0; tx_data <= 8h00; end
  55. 55. Tutorial 3.5: measure (ethsend + ethrecv)source code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-42つのLANポートを使って送信と受信を行い、間に接続したHUBやケーブルのパケット転送遅延を測定
  56. 56. RFC2544Benchmarking Methodology for Network Interconnect Devicesネットワークデバイスの基本的な性能テスト方法をまとめたRFCL2, 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. 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. 58. Play with the measurement device
  59. 59. DUTUTP cable 10, 20, 30, 60, 180 cmSwitching hub (1000Base-T) BUFFALO LSW2-GT-5NSR
  60. 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. 61. Next step 2:IPv6 対応デバイスを測る必要な実装内容 FPGAにMODE機能を実装 DIPスイッチなどでIPv4/v6モードの切り替え IPv6版の計測パケットを実装 (Protocol type: 0x86dd) NDP (Neighbor Discovery Protocol)を実装
  62. 62. Extra a:PCI and PCI Express
  63. 63. PCIPCI(パラレル)の性能限界 32/64ビットのパラレル転送はすべての信号がほぼ同時に到着しなけれ ばならない(等長配線が必要). 信号の到達時間には500ps-1nsくらいの差がうまれ,受信側がスキュー (到達タイミングのズレ)を考慮しなければならない
  64. 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. 65. PCI Express + FPGAFPGA+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. 66. PCI Express: TLPTLPパケットはTLPヘッダ部(3 or 4WD)+TLPデータ部(0~4096バイト)で構成されるトランザクションの種類は以下の8種類 (typeフィールドで指定)ポスト: 返信(コンプリーション)を必要とする転送要求ノンポスト: 返信を必要としない転送要求 トランザクションの種類 動作 データ・ペイロード メモリ・リード ノンポスト なし メモリ・ライト ポスト あり I/O・リード ノンポスト なし I/O・ライト ノンポスト あり コンフィグレーション・リード ノンポスト なし コンフィグレーション・ライト ノンポスト あり コンプリケーション ノンポスト (read時)なし/(write時)あり メッセージ ポスト なし/あり
  67. 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. 68. PCI Express: リンクとレーン 物理層 (PHY) リンク 物理層 (PHY) レーン TXP0/TXN0 RXP0/RXN0 TXP1/TXN1 ポート ポート RXP1/RXN1 TXP2/TXN2 RXP2/RXN2 TXPn/TXNn RXPn/RXNn
  69. 69. (参考) シリアル通信のエンベデッド・クロック8b/10b: PCIe (1.1, 2.0), Ethernet 〇〇BASE-*X*, Infiniband (SDR, DDR, QDR), USB 3.0, SATA64b/66b: Ethernet 〇〇BASE-*R*, Infiniband FDR128b/130b: PCIe 3.0
  70. 70. PCI/PCI Express: DebugPCIまわりのバグ = OSクラッシュPCIのコーディングには1フロッピーMS-DOSが便利 redpciコマンドでbase addressを確認 memoryコマンドでI/OメモリマップしたFPGAのレジスタを確認MS-DOSを使うメリット OSがクラッシュしても再起動が早い詳しくは[PCIデバイス設計入門]を参照
  71. 71. PCI/PCI Express: DebugREDPCI コマンド .... PCI情報を表示する例) REDPCI /F .... PCI情報の詳細を表示するPCI Vendor IDの一覧 [link], Device IDの一覧 [link], Device classの一覧 [link]
  72. 72. PCI/PCI Express: DebugMEMORY コマンド .... 物理メモリを表示・編集する例) MEMORY B8000 ... 物理メモリ0xB8000番地(Video RAM Area)を編集する
  73. 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. 74. Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5IPexpressを使ってPCIeのIPを生成
  75. 75. Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5IPexpressを使ってPCIeのIPを生成
  76. 76. Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5IPexpressを使ってPCIeのIPを生成
  77. 77. Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5IPexpressを使ってPCIeのIPを生成
  78. 78. Tutorial 4.1: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5IPexpressを使ってPCIeのIPを生成
  79. 79. Tutorial 4.2: FPGAでPCI Expressを使うsource code: https://github.com/sora/fpga-workshop-2012f/tree/master/tutorial-5Wishboneバス経由で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 <= 16h0; 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 = 14h0;
  80. 80. PCI/PCI Express: DMA and SR-IOVDirect 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. 81. Extra b:HTML5 for embedded system
  82. 82. HTML5を使うモチーベーションEmbedded systemのフロントエンド フロントエンドも1から自分でやるのはしんどい 今時のリッチなUIを使いたい 組み込みシステム全体の検証はとても大変 HW/SWのバグ,HWの相性や故障,ツールの仕様(バグ),etc. データ視覚化を用いた簡易デバック環境の構築技術的な背景 HTML5 websocket, canvasの登場 Javascriptによる豊富な可視化ライブラリ websocketがバイナリデータのサポート node.jsの登場 (node-mmapなど便利モジュールもたくさん) c++によるシステム関数のモジュール(v8)が簡単に作成可能
  83. 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. 84. 構成例 FPGA Host PC Ethernet BrowserDUT PCI/PCIe pin ory Ethernet m mem g ap I/O websocket user registers mmap node.js
  85. 85. 例: テスタのUI
  86. 86. 例: テスタのUI PCI I/O Memory MappingしたFPGA上 のレジスタをHTMLからread/write テスタの計測結果をwebsocket経由でリア ルタイムに表示 (数ms)
  87. 87. 例: 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 serverapp = express.createServer();app.use(express.static(__dirname + /public));app.listen(8081);// setup: websocket serverwss = new wsserver( {server: app} );// setup: fdtry { fd = fs.openSync(/dev/mem, w+);} catch (e) { D(cannot open: /dev/mem: + e); process.exit(1);}// setup: mmaptry { 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);}...
  88. 88. Extra c:FPGA hot topics
  89. 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. 90. FPGA dev kit for network device:NetFPGA-1G, NetFPGA-10GStanford中心のネットワークデバイス特化型の総合FPGAプラットフォーム ツールや一般的なリファレンスデザインなどを含めたパッケージACMコミュニティで時々ワークショップが行われているNetFPGA 1G 1G ethernet x4, 4.5MB ZBT SRAM, PCI-X, Virtex II Pro 50NetFGPA 10G 10G ethernet x4, 27MB QDRII SRAM, PCI Express x8, Virtex5 *10Gは別途PCS/PMAのIPが必要
  91. 91. Handmade 10G device2012年は自作10Gデバイス元年 SFP+インタフェースを持つFPGAキットが登場 (NetFPGA-10G, Xilinx Kintex-7, etc.) SFP拡張モジュール (FMC)も各ベンダ向けに出 FPGA ている User logic必要なIP core FIFO I/FPCS/PMA MAC (IP or 自作) 10GではFPGA内でPHY機能を処理10G MAC XGMII ルータやFWのような高機能機器には必要 PCS/PMA (IP core) Serial I/F SFP+ module 一般的な構成
  92. 92. Memory (for network device)必要に応じてメモリを選択SRAM ZBT, RLDRAM, QDR, etc最新の情報はeetimesを参照[link]書きかけ
  93. 93. CAM/TCAMmodule 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 endgeneratereg[width-1:0] data;reg[width-1:0] prefix; always @(posedge clk) begin if (rst)always @(posedge clk) begin match <= 1b0 if (rst) begin else data <= {width{1b0}}; match <= (& bits) & iena; prefix <= {width{1b0}}; end end else begin if (iena) begin data <= idata; prefix <= iprefix; end endend...
  94. 94. High-Level Synthesis (HLS) for FPGAFPGA向けの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. 95. Embedded CPUFPGA 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. 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. 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. 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. 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. 100. Changelog2012/9/2 initial
  101. 101. テストフレームのフォーマット 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 PaddingInter Frame Gap ... 計測フレーム 計測パケットのペイロード

×