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.