Summer Course Technion, Haifa, IL 2015
1
NetFPGA Summer Course
Presented by: Noa Zilberman Yury Audzevich Technion August 2 – August 6, 2015
http://NetFPGA.org
NetFPGA Summer Course Presented by: Noa Zilberman Yury Audzevich - - PowerPoint PPT Presentation
NetFPGA Summer Course Presented by: Noa Zilberman Yury Audzevich Technion August 2 August 6, 2015 http://NetFPGA.org Summer Course Technion, Haifa, IL 2015 1 Day 1 Outline The NetFPGA platform Infrastructure Introduction
Summer Course Technion, Haifa, IL 2015
1
Presented by: Noa Zilberman Yury Audzevich Technion August 2 – August 6, 2015
http://NetFPGA.org
Summer Course Technion, Haifa, IL 2015
2
– Introduction – Overview of the NetFPGA Platform
– Hardware overview
– Basic IP review
– Example I: Reference switch running on the NetFPGA
the NetFPGA
– Hardware Datapath – Interface to software: Exceptions and Host I/O
– Tree – Verification Infrastructure
Switch
– Introduction to a Crypto Switch – What is an IP core? – Getting started with a new project. – Crypto FSM
– Write and Run Simulations for Crypto Switch
Summer Course Technion, Haifa, IL 2015
3
Summer Course Technion, Haifa, IL 2015
4
A line-rate, flexible, open networking platform for teaching and research
Summer Course Technion, Haifa, IL 2015
5
NetFPGA-1G (2006) NetFPGA-1G-CML (2014) NetFPGA-10G (2010) NetFPGA SUME (2014)
Summer Course Technion, Haifa, IL 2015
6
Summer Course Technion, Haifa, IL 2015
7
FPGA
Memory 10GbE 10GbE 10GbE 10GbE
PCI-Express
CPU
Memory
PC with NetFPGA
Networking Software running on a standard PC A hardware accelerator built with Field Programmable Gate Array driving 1/10/ 100Gb/s network links
Summer Course Technion, Haifa, IL 2015
8
Summer Course Technion, Haifa, IL 2015
9
Summer Course Technion, Haifa, IL 2015
10
Summer Course Technion, Haifa, IL 2015
11
– Processes back-to-back packets
– Operating on packet headers
– And packet payloads
– Similar to open-source software
– But harder, because
Summer Course Technion, Haifa, IL 2015
12
– Drops packets with bad IP checksum – Performs Longest Prefix Matching on destination address – Forwards IPv4 packets of length 64-1500 bytes – Generates ICMP message for packets with TTL <= 1 – Defines how to handle packets with IP options or non IPv4
… and dozens more … Every feature is defined by a regression test
Summer Course Technion, Haifa, IL 2015
13
– To run the Router Kit – To build modular reference designs
Summer Course Technion, Haifa, IL 2015
14
– NetFPGA Design Flow – Directory Structure, library modules and projects – How to utilize contributed projects
– How to verify a design (Simulation and Hardware Tests) – Things to do when you get stuck
Summer Course Technion, Haifa, IL 2015
15
Summer Course Technion, Haifa, IL 2015
16
Summer Course Technion, Haifa, IL 2015
17
– 10G Support – 1G Support
Summer Course Technion, Haifa, IL 2015
18
Summer Course Technion, Haifa, IL 2015
19
Summer Course Technion, Haifa, IL 2015
20
Summer Course Technion, Haifa, IL 2015
21
Summer Course Technion, Haifa, IL 2015
22
Summer Course Technion, Haifa, IL 2015
23
Summer Course Technion, Haifa, IL 2015
24
Summer Course Technion, Haifa, IL 2015
25
Summer Course Technion, Haifa, IL 2015
26
Summer Course Technion, Haifa, IL 2015
27
NetFPGA SUME NetFPGA 10G
Virtex 7 690T -3 Virtex 5 TX240T 8 GB DDR3 SoDIMM 1800MT/s 288 MB RLDRAM-II 800MT/s 27 MB QDRII+ SRAM, 500MHz 27 MB QDRII-SRAM, 300MHz x8 PCI Express Gen. 3 x8 PCI Express Gen. 1 4 x 10Gbps Ethernet Ports 4 x 10Gbps Ethernet Ports 18 x 13.1Gb/s additional serial links 20 x 6.25Gb/s additional serial links
Summer Course Technion, Haifa, IL 2015
28
Reference Designs
AXI4 IPs Xilinx Vivado
MicroBlaze SW
PC SW GitHub, User Community
Summer Course Technion, Haifa, IL 2015
29
Summer Course Technion, Haifa, IL 2015
30
Data Data IP Hdr Eth Hdr Data IP Hdr
Data to be transmitted: IP packets: Ethernet Frames:
Data IP Hdr Data IP Hdr Eth Hdr Data IP Hdr Eth Hdr Data IP Hdr
Summer Course Technion, Haifa, IL 2015
31
Data Data IP Hdr
16
32
4 1
Options (if any) Destination Address Source Address Header Checksum Protocol TTL Fragment Offset
Flags
Fragment ID Total Packet Length T.Service
HLen
Ver 20 bytes
Summer Course Technion, Haifa, IL 2015
32
R3 A B C R1 R2 R4 D E F R5
R5 F R3 E R3 D Next Hop Destination
Summer Course Technion, Haifa, IL 2015
33
A B C R1 R2 R3 R4 D E F R5
Summer Course Technion, Haifa, IL 2015
34
Entry Destination Port 1 2 ⋮ 232 0.0.0.0 0.0.0.1 ⋮ 255.255.255.255 1 2 ⋮ 12
~ 4 billion entries Naïve approach: One entry per address Improved approach: Group entries to reduce table size
Entry Destination Port 1 2 ⋮ 50 0.0.0.0 – 127.255.255.255 128.0.0.1 – 128.255.255.255 ⋮ 248.0.0.0 – 255.255.255.255 1 2 ⋮ 12
IP address
32 bits wide → ~ 4 billion unique address
Summer Course Technion, Haifa, IL 2015
35
232-1 Entry Destination Port 1 2 3 4 5 Cambridge Oxford Europe Asia Everywhere (default) 1 2 3 4 5 All IP addresses Europe Asia Oxford Cambridge Your computer My computer
Summer Course Technion, Haifa, IL 2015
36
Entry Destination Port 1 2 3 4 5 Cambridge Oxford Europe Asia Everywhere (default) 1 2 3 4 5 Universities Continents Planet Data
To: Cambridge
Matching entries:
Most specific
Summer Course Technion, Haifa, IL 2015
37
Entry Destination Port 1 2 3 4 5 Cambridge Oxford Europe Asia Everywhere (default) 1 2 3 4 5 Universities Continents Planet Data
To: Germany
Matching entries:
Most specific
Summer Course Technion, Haifa, IL 2015
38
Entry Destination Port 1 2 3 4 5 Cambridge Oxford Europe Asia Everywhere (default) 1 2 3 4 5 Most specific Least specific
Searching FOUND
Summer Course Technion, Haifa, IL 2015
39
per-packet processing
Switching Forwarding Table Routing Table Routing Protocols Management & CLI
Software Hardware
Queuing
Summer Course Technion, Haifa, IL 2015
40
SCONE Routing Table Routing Protocols Management & CLI Output Port Lookup Forwarding Table Input Arbiter Output Queues Switching Queuing Linux Routing Table Routing Protocols Management & CLI Router Kit
OR Software Hardware
Summer Course Technion, Haifa, IL 2015
41
Summer Course Technion, Haifa, IL 2015
42
Routing Table Routing Protocols Management & CLI
Switching Forwarding Table Queuing
Reference router Java GUI
Summer Course Technion, Haifa, IL 2015
43
Summer Course Technion, Haifa, IL 2015
44
PC & NetFPGA
(NetFPGA in PC)
NetFPGA running reference router
Summer Course Technion, Haifa, IL 2015
45
Video streaming
Video client Video server
Summer Course Technion, Haifa, IL 2015
46
Video client Video server
Summer Course Technion, Haifa, IL 2015
47
Columns:
Summer Course Technion, Haifa, IL 2015
48
Summer Course Technion, Haifa, IL 2015
49
Summer Course Technion, Haifa, IL 2015
50
Summer Course Technion, Haifa, IL 2015
51
10GE RxQ 10GE RxQ 10GE RxQ 10GE RxQ DMA Input Arbiter Output Port Lookup Output Queues 10GE Tx 10GE Tx 10GE Tx 10GE Tx DMA
Summer Course Technion, Haifa, IL 2015
52
NetFPGA
AXI Lite user data path
nf0 nf1 nf2 nf3 ioctl
MAC TxQ MAC RxQ
Ports
CPU RxQ CPU TxQ MAC TxQ MAC RxQ MAC TxQ MAC RxQ 10GE Tx 10GE Rx
Summer Course Technion, Haifa, IL 2015
53
00:0a:..:0X 00:0a:..:0Y
Summer Course Technion, Haifa, IL 2015
54
Summer Course Technion, Haifa, IL 2015
55
Eth Hdr: Dst MAC, Src MAC
Payload
Length, Src port, Dst port, User defined TUSER TDATA
Summer Course Technion, Haifa, IL 2015
56
Pkt Pkt Pkt
Summer Course Technion, Haifa, IL 2015
57
Summer Course Technion, Haifa, IL 2015
58
Eth Hdr: Dst MAC= nextHop , Src MAC = port 4
Payload
Length, Src port, Dst port, User defined
1- Parse header: Src MAC, Dst MAC, Src port 2 - Lookup next hop MAC& output port 3- Learn Src MAC & Src port 4- Update output port in TUSER
TUSER TDATA
Summer Course Technion, Haifa, IL 2015
59
OQ0 OQ2 OQ4
Summer Course Technion, Haifa, IL 2015
60
Summer Course Technion, Haifa, IL 2015
61
Eth Hdr: Dst MAC , Src MAC
Payload
Length, Src port, Dst port, User defined
Summer Course Technion, Haifa, IL 2015
62
eg: rwaxi(0x7d4000000, &val);
Summer Course Technion, Haifa, IL 2015
63
PCIe Bus
notifies driver of packet arrival
and initiates DMA transfer
forwarding table sends to DMA queue
Summer Course Technion, Haifa, IL 2015
64
PCIe Bus
transfers packet via DMA
signals completion
network stack
Summer Course Technion, Haifa, IL 2015
65
PCIe Bus
signals completion
via network sockets Packet delivered to driver
and initiates DMA transfer
Summer Course Technion, Haifa, IL 2015
66
PCIe Bus
call on network socket ioctl passed to driver
performs PCIe memory read/write
Summer Course Technion, Haifa, IL 2015
67
Summer Course Technion, Haifa, IL 2015
68
Summer Course Technion, Haifa, IL 2015
69
Summer Course Technion, Haifa, IL 2015
70
and software libraries)
https://github.com/NetFPGA/NetFPGA-SUME-alpha
Summer Course Technion, Haifa, IL 2015
71
Summer Course Technion, Haifa, IL 2015
72
tcl (contains scripts used to run various tools) hdl (contains project-specific hdl code)
embedded (contains code for microblaze) host (contains code for host communication etc.)
create_ip (contains files used to configure IP cores)
Summer Course Technion, Haifa, IL 2015
73
Category IP Core(s) I/O interfaces Ethernet 10G Port PCI Express UART GPIO Output queues BRAM based Output port lookup NIC CAM based Learning switch Memory interfaces SRAM DRAM FLASH Miscellaneous FIFOs AXIS width converter
Summer Course Technion, Haifa, IL 2015
74
Summer Course Technion, Haifa, IL 2015
75
Summer Course Technion, Haifa, IL 2015
76
Summer Course Technion, Haifa, IL 2015
77
Summer Course Technion, Haifa, IL 2015
78
Summer Course Technion, Haifa, IL 2015
79
FPGA
Memory
User-space development, 4x10GE line-rate forwarding
PCI-Express
CPU
Memory
OSPF BGP
My Protocol
user kernel
Routing Table
IPv4 Router
Fwding Table Packet Buffer
“Mirror”
10GbE 10GbE 10GbE 10GbE 10GbE 10GbE 10GbE 10GbE
Summer Course Technion, Haifa, IL 2015
80
FPGA
Memory
PCI-Express
CPU
Memory
NetFPGA Driver
Java GUI Front Panel (Extensible)
PW-OSPF
In Q Mgmt IP Lookup L2 Parse L3 Parse Out Q Mgmt Verilog modules interconnected by FIFO interfaces
My Block
10GbE 10GbE 10GbE 10GbE 10GbE 10GbE 10GbE 10GbE
EDA Tools (Xilinx, Mentor, etc.)
Summer Course Technion, Haifa, IL 2015
81
FPGA
Memory
PCI-Express
CPU
Memory
NetFPGA Driver
My Design (10GE MAC is soft/replaceable)
10GbE 10GbE 10GbE 10GbE 10GbE 10GbE 10GbE 10GbE
EDA Tools (Xilinx, Mentor, etc.)
Summer Course Technion, Haifa, IL 2015
82
Platform Project Contributor 1G OpenFlow switch Stanford University Packet generator Stanford University NetFlow Probe Brno University NetThreads University of Toronto zFilter (Sp)router Ericsson Traffic Monitor University of Catania DFA UMass Lowell 10G Bluespec switch UCAM/SRI International Traffic Monitor University of Pisa NF1G legacy on NF10G Uni Pisa & Uni Cambridge High perf. DMA core University of Cambridge BERI/CHERI UCAM/SRI International OSNT UCAM/Stanford/GTech/CNRS
Summer Course Technion, Haifa, IL 2015
83
Summer Course Technion, Haifa, IL 2015
84
FPGA
Soft processors: processors in the FPGA fabric User uploads program to soft processor Easier to program software than hardware in the FPGA Could be customized at the instruction level CHERI – 64bit MIPS soft processor, BSD OS
Processor(s) DDR controller Ethernet MAC
Summer Course Technion, Haifa, IL 2015
85
100G 100G 100G
Cost: ~$5000 Non-Blocking 300Gb/s Switch
Summer Course Technion, Haifa, IL 2015
86
– Permits replacement of physical-layer – Provides high-speed expansion interfaces with standardised interfaces
Summer Course Technion, Haifa, IL 2015
87
Summer Course Technion, Haifa, IL 2015
88
N x N xN Hyper-cube
Summer Course Technion, Haifa, IL 2015
89
– (and application classifiers, and other neat network apps….)
hardware)
h/w)
e.g. Rate Control Protocol (RCP), Multipath TCP,
Well I’m not sure about you but here is a list I created:
– (and application classifiers, and other neat network apps….)
e.g. Rate Control Protocol (RCP), Multipath TCP,
– Infiniband – iSCSI – Myranet – Fiber Channel
– Hardware route-reflector – Internet exchange route accelerator
– Optical LAN (no buffers)
Summer Course Technion, Haifa, IL 2015
90
– (and application classifiers, and other neat network apps….)
e.g. Rate Control Protocol (RCP), Multipath TCP,
– Infiniband – iSCSI – Myranet – Fiber Channel
– Hardware route-reflector – Internet exchange route accelerator
– Optical LAN (no buffers)
Summer Course Technion, Haifa, IL 2015
91
Summer Course Technion, Haifa, IL 2015
92
Summer Course Technion, Haifa, IL 2015
93
XORing a value with itself always yields 0
Summer Course Technion, Haifa, IL 2015
94
(M ^ K) ^ K = M ^ (K ^ K) = M = M ^ 0 Commutativity A ^ A = 0
Summer Course Technion, Haifa, IL 2015
95
Summer Course Technion, Haifa, IL 2015
96
Note: XORing with a one-time pad of the same length of the message is secure/uncrackable. See: http://en.wikipedia.org/wiki/One-time_pad
Payload Header Key Key Key Key Key
Summer Course Technion, Haifa, IL 2015
97
Summer Course Technion, Haifa, IL 2015
98
Summer Course Technion, Haifa, IL 2015
99
Summer Course Technion, Haifa, IL 2015
100
Summer Course Technion, Haifa, IL 2015
101
TDATA
TUSER TVALID TREADY
Summer Course Technion, Haifa, IL 2015
102
Summer Course Technion, Haifa, IL 2015
103
Summer Course Technion, Haifa, IL 2015
104
Position Content [15:0] length of the packet in bytes [23:16] source port: one-hot encoded [31:24] destination port: one-hot encoded [127:32] 6 user defined slots, 16bit each
Summer Course Technion, Haifa, IL 2015
105
Summer Course Technion, Haifa, IL 2015
106
Summer Course Technion, Haifa, IL 2015
107
Summer Course Technion, Haifa, IL 2015
108
Summer Course Technion, Haifa, IL 2015
109
etc.
Summer Course Technion, Haifa, IL 2015
110
# vivado <project_root>/hw/project/<project_name>.xpr
Summer Course Technion, Haifa, IL 2015
111
Design Project Summary Flow Navigation
Summer Course Technion, Haifa, IL 2015
112
Summer Course Technion, Haifa, IL 2015
113
Address view
Summer Course Technion, Haifa, IL 2015
114
– copy an existing project as the starting point
– pre-created project (crypto_switch)
– Consists of:
Summer Course Technion, Haifa, IL 2015
115
10G RxQ 10G RxQ 10G RxQ 10G RxQ Input Arbiter Output Port Lookup Output Queues 10G TxQ 10G TxQ 10G TxQ 10G TxQ
Crypto
Summer Course Technion, Haifa, IL 2015
116
Local Shared crypto Everything else
Summer Course Technion, Haifa, IL 2015
117
Create crypto core using core template: 1. cd $NF_DESIGN_DIR/hw/local_ip 2. cp -r example_ip crypto 3. Write and edit files under crypto Folder 4. cd $NF_DESIGN_DIR/hw/ 5. vi Makefile
6. make core Notes:
alpha/tools/settings.sh
Summer Course Technion, Haifa, IL 2015
118
Module crypto #(
parameter C_M_AXIS_DATA_WIDTH = 256, parameter C_S_AXIS_DATA_WIDTH = 256, ...) ( ... ) //----------------------- regs/wires --------------------------- ... //----------------------- modules ------------------------------ ... //----------------------- logic ------------------------------ ... endmodule
Module port declaration
Summer Course Technion, Haifa, IL 2015
119
//------------------------- Modules------------------------------- fallthrough_small_fifo #( .WIDTH(...), .MAX_DEPTH_BITS(2) ) input_fifo ( .din ({fifo_out_tlast, fifo_out_tuser,..}), // Data in .wr_en (s_axis_tvalid & s_axis_tready), // Write enable .rd_en (in_fifo_rd_en), // Read the next word .dout ({s_axis_tlast, s_axis_tuser, ..}), .full (), .nearly_full(in_fifo_nearly_full), .prog_full (), .empty (in_fifo_empty), .reset (!axi_aresetn), .clk (axi_aclk) );
Packet data dumped in a FIFO. Allows some “decoupling” between input and output.
Summer Course Technion, Haifa, IL 2015
120
//------------------------- Logic------------------------------- assign s_axis_tready = !in_fifo_nearly_full; assign m_axis_tuser = fifo_out_tuser; ... always @(*) begin // Default value in_fifo_rd_en = 0; if (m_axis_tready && !in_fifo_empty) begin in_fifo_rd_en = 1; end end
Combinational logic to read data from the FIFO. (Data is output to
You’ll want to add your state in this section.
Summer Course Technion, Haifa, IL 2015
121
Summer Course Technion, Haifa, IL 2015
122
Summer Course Technion, Haifa, IL 2015
123
create_ip -name <core_name> -vendor NetFPGA -library NetFPGA -module_name <core>_ip set_property generate_synth_checkpoint false [get_files <core>_ip.xci] reset_target all [get_ips <core>_ip] generate_target all [get_ips <core>_ip]
Summer Course Technion, Haifa, IL 2015
124
Create a new project OR Open an existing project OR run a TCL script (also through tools)
Summer Course Technion, Haifa, IL 2015
125
Open block design
Diagram
Summer Course Technion, Haifa, IL 2015
126
Sub-BD Opening Sub-BD
Summer Course Technion, Haifa, IL 2015
127
Connectivity
Summer Course Technion, Haifa, IL 2015
128
Setting module parameters
Summer Course Technion, Haifa, IL 2015
129
Offset Range
Address Editor
Summer Course Technion, Haifa, IL 2015
130
Validate design
Summer Course Technion, Haifa, IL 2015
131
Summer Course Technion, Haifa, IL 2015
132
Summer Course Technion, Haifa, IL 2015
133
Registers
in_fifo_empty in_fifo_rd_en data/ctrl valid ready data/ctrl
S_AXIS M_AXIS
Summer Course Technion, Haifa, IL 2015
134
Hint: We suggest 3 states
Detect Packet’s Header
Summer Course Technion, Haifa, IL 2015
135
1. Set the key value
2. Write your state machine to modify the packet by XORing the key and the payload
with data words
3. Do not pay attention to the register infrastructure that will be explained later.
Summer Course Technion, Haifa, IL 2015
136
– targets must be declared as wires – always “happening” (ie, are concurrent)
Summer Course Technion, Haifa, IL 2015
137
– occur in next delta (‘moment’ in simulation time) – targets must be declared as regs – never clock any process other than with a clock!
Summer Course Technion, Haifa, IL 2015
138
Summer Course Technion, Haifa, IL 2015
139
Summer Course Technion, Haifa, IL 2015
140
Summer Course Technion, Haifa, IL 2015
141
– (latches ‹as opposed to flip-flops› are bad for timing closure)
Summer Course Technion, Haifa, IL 2015
142
Summer Course Technion, Haifa, IL 2015
143
Summer Course Technion, Haifa, IL 2015
144
Summer Course Technion, Haifa, IL 2015
145
Summer Course Technion, Haifa, IL 2015
146
Summer Course Technion, Haifa, IL 2015
147
Run a simulation to verify changes: 1. make sure “NF_DESIGN_DIR” variable in the tools/settings.sh file located in ~/NetFPGA-SUME-alpha points to the crypto_switch project. 2. source ~/NetFPGA-SUME-alpha/tools/settings.sh (export NF_DESIGN_DIR=~/NetFPGA-SUME- alpha/projects/crypto_switch) 3. make –C $NF_DESIGN_DIR/hw reg 4. cd ~/NetFPGA-SUME-alpha/tools/scripts 5. ./nf_test.py sim --major crypto –minor test
gui
Now we can simulate the crypto functionality
Summer Course Technion, Haifa, IL 2015
148
cd $NF_DESIGN_DIR/test/both_crypto_test vim run.py
tomorrow)
interface
has been completed (e.g., send_pkts -> barrier -> send_more_pkts)
Summer Course Technion, Haifa, IL 2015
149
The results are in…
Summer Course Technion, Haifa, IL 2015
150
Objects panel Scopes Waveform window Tcl console
Summer Course Technion, Haifa, IL 2015
151
Summer Course Technion, Haifa, IL 2015
152
When “./nf_test.py sim …..” 1 source /opt/Xilinx/Vivado/2014.4/settings64.sh 2 Edit and source NetFPGA-SUME-alpha/tools/settings.sh 3 Run “make core” under projects/crypto_switch/hw/ 4 Check that crypto_switch.tcl, crypto_switch_sim.tcl, export_registers.tcl are all up to date with your changes 5 if sim finishes but complains that each test passes 10 packets but all tests FAIL – this means your static key is different between your code and your run.py file check the log
Summer Course Technion, Haifa, IL 2015
154
change_state = m_axis_tvalid && m_axis_tready
Detect Packet’s Header Payload Second word
change_state change_state && m_axis_tlast change_state change_state && m_axis_tlast
Summer Course Technion, Haifa, IL 2015
155
Summer Course Technion, Haifa, IL 2015
156
cd ~/$NF_DESIGN_DIR/ make clean; make
Summer Course Technion, Haifa, IL 2015
157
Summer Course Technion, Haifa, IL 2015
158
Nick McKeown, Glen Gibb, Jad Naous, David Erickson,
Hartke, Neda Beheshti, Sara Bolouki, James Zeng, Jonathan Ellithorpe, Sachidanandan Sambandan, Eric Lo
NetFPGA Team at Stanford University (Past and Present): NetFPGA Team at University of Cambridge (Past and Present): Andrew Moore, David Miller, Muhammad Shahbaz, Martin Zadnik Matthew Grosvenor, Yury Audzevich, Neelakandan Manihatty-Bojan, Georgina Kalogeridou, Jong Hun Han, Noa Zilberman, Gianni Antichi, Charalampos Rotsos, Marco Forconesi, Jinyun Zhang, Bjoern Zeeb All Community members (including but not limited to): Paul Rodman, Kumar Sanghvi, Wojciech A. Koszek, Yahsar Ganjali, Martin Labrecque, Jeff Shafer, Eric Keller , Tatsuya Yabe, Bilal Anwer, Yashar Ganjali, Martin Labrecque, Lisa Donatini, Sergio Lopez-Buedo Kees Vissers, Michaela Blott, Shep Siegel, Cathal McCabe
Summer Course Technion, Haifa, IL 2015
159
Disclaimer: Any opinions, findings, conclusions, or recommendations expressed in these materials do not necessarily reflect the views of the National Science Foundation or of any other sponsors supporting this project. This effort is also sponsored by the Defense Advanced Research Projects Agency (DARPA) and the Air Force Research Laboratory (AFRL), under contract FA8750-11-C-0249. This material is approved for public release, distribution unlimited. The views expressed are those of the authors and do not reflect the official policy or position of the Department of Defense or the U.S. Government.