REF OpenFlowSwitch HWFT - myazzurro/msr-wiki GitHub Wiki

###Intro
The OpenFlowSwitch(HWFT, with Hardware Flow Table) reference design provides a set of board-specific projects.
This design achieves a hardware accelerated OpenFlow switch, using multiple stages of FPGA-implemented hardware flow tables, which are cascaded with software flow tables inside the vSwitch running in the CPU.

Demo runs at Linux level.

###Features

Feature Description
Network STD. IEEE 802.3, IEEE 802.3u, IEEE 802.3ab
Physical Layer 1. 1000/100/10Mbps Copper RJ45
2. support Auto MDIX, support Auto Neg.
DataLink Layer 1. RGMII(ONS45 ONS20)/SGMII(ONS30)
2. support Promiscuous Mode (default promiscuous)
3. support MDIO management to all PHYs
Switch Method Mixed (Store-and-Forward in software, cut-through in FPGA)
Switch Rate Line rate, FPGA internal BW is 8Gbps
OpenFlow v1.3
Flow Table Multiple, pipelined, default 64, max 3 impl. by FPGA
Meter Table Supported
Match Fields L2-L4 fields
QoS WRR queuing
Metadata Supported
VLAN Support tag-remove/add/modify

###Project List

Board Project
ONetSwitch20 ons20-app52-ref_ofshw
ONetSwitch30 ons30-app52-ref_ofshw
ONetSwitch45 ons45-app52-ref_ofshw

###Pre-Built Images

  • For quick start demo.
File ONetSwitch20 ONetSwitch30 ONetSwitch45
boot.bin Download Download Download
devicetree Download Download Download
kernel Download Download Download
rootfs (EXT) Download Download Download
sw-lib Download Download Download
sw-app Download Download Download
  • For image assembling.
File ONetSwitch20 ONetSwitch30 ONetSwitch45
system.bit Download Download Download
dt source Download Download Download
fsbl Download Download Download
u-boot (FAT) Download Download Download
u-boot (EXT) Download Download Download
rootfs (FAT) Download Download Download
  • Additional init./config. script.
File ONetSwitch20 ONetSwitch30 ONetSwitch45
script Download Download Download

###Block Diagram

  • System level
    HW FT = Hardware-implemented Flow Table
    SW FT = Software-implemented Flow Table
    We allow n stages of logical flow tables to be mapped into m stages of physical flow tables, in order to get better flexibility. The physical FTs can be either software-implemented or hardware-implemented.
    When implementing HW FTs, the hardware abstraction layer translates the software logic into the values of hardware registers.

  • FPGA Diagram

###Design Outline

More details coming soon..

####Core Design

More details coming soon..

Notice the difference of priority level between software linked list and hardware TCAM.

###Address Map
####Base Address
For Zynq PS address map, please refer to Appx. B of Xilinx UG585.
For MAC and DMA register offset and description, please refer to Xilinx PG138 and Xilinx PG021.

ONS20/30/45 BaseAddr Notes
axi_dma0 0x40400000
axi_ethernet0 0x43c00000 eth1, MDIO master
axi_ethernet1 0x43c40000 eth2
axi_ethernet2 0x43c80000 eth3
axi_ethernet3 0x43cc0000 eth4
packet_pipeline 0x48000000 range to 0x48ffffff

####Register Map

####Register Description

####Sample Configurations

###Demo
This is a demo without any controller in the scenario. Here's another page showing how to run with RYU applications.

  • Prepare the images in SD/TF card, following the instructions here.
  • Setup the topo like below.

  • Without connecting to any controller, manually send entries to enable the bidirectional communication between the two PCs.
*** example ***

zynq> <ofsoftswitch-path>/utilities/dpctl tcp:127.0.0.1:6632 flow-mod cmd=add,table=0,prio=1 in_port=1 apply:output=2
zynq> <ofsoftswitch-path>/utilities/dpctl tcp:127.0.0.1:6632 flow-mod cmd=add,table=0,prio=0 in_port=2 apply:output=1

  • Ping each other, should get the response.