Skip to content

Commit

Permalink
Release 2020.10
Browse files Browse the repository at this point in the history
The main change in TaPaSCo 2020.10 is the new runtime. It is completely re-engineered in Rust and comes with many improvements like better error handling and multithreading support. This change requires the rust compiler as a prerequisite (please get a recent version via https://rustup.rs/).

Other changes included in the release are:
* Standardized feature to connect PEs to network ports for supported platforms (VC709, ZC706, XUP-VVH, NetFPGA-SUME)
* The addition of the Alveo U280 data center card as a supported card
* Support for Vivado 2020.1 and CentOS 8

This release closes 12 [issues](https://github.com/esa-tu-darmstadt/tapasco/issues?q=is%3Aissue+milestone%3A2020.10+is%3Aclosed) closed in over 260 commits.
  • Loading branch information
cahz committed Nov 3, 2020
2 parents fb28934 + b97572b commit 37c913b
Show file tree
Hide file tree
Showing 301 changed files with 12,192 additions and 23,484 deletions.
112 changes: 105 additions & 7 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,16 @@ build_kernel_arm64v8_debug:
paths:
- runtime/kernel/tlkm.ko

build_kernel_centos_8:
image: centos:8
extends: .build_kernel_fedora

build_kernel_centos_8_debug:
image: centos:8
variables:
MODE: "all"
extends: .build_kernel_fedora

build_kernel_fedora_30:
image: fedora:30
extends: .build_kernel_fedora
Expand All @@ -240,22 +250,37 @@ build_kernel_fedora_31_debug:
variables:
MODE: "release"
TARGET: ""
PACKAGE_TYPE: "ZIP"
dependencies: []
tags:
- Normal
script:
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh && sh /tmp/rustup.sh -y
- source ~/.cargo/env
- ./tapasco-init.sh && source tapasco-setup.sh
- tapasco-build-libs --mode=$MODE --target=$TARGET --skip_driver
- cd build* && make package
- cd build* && cpack -G $PACKAGE_TYPE

.build_tapasco_fedora:
variables:
PACKAGE_TYPE: "RPM"
before_script:
- dnf -y install kernel-devel make gcc gcc-c++ elfutils-libelf-devel cmake ncurses-devel python3 libatomic git rpm-build
- dnf -y install kernel-devel make gcc gcc-c++ elfutils-libelf-devel cmake ncurses-devel python3 libatomic git rpm-build curl
artifacts:
paths:
- build/tapasco-*-Linux.rpm
extends: .build_tapasco

build_tapasco_centos_8:
image: centos:8
extends: .build_tapasco_fedora

build_tapasco_centos_8_debug:
variables:
MODE: "debug"
image: centos:8
extends: .build_tapasco_fedora

build_tapasco_fedora_30:
image: fedora:30
extends: .build_tapasco_fedora
Expand All @@ -277,8 +302,10 @@ build_tapasco_fedora_31_debug:
extends: .build_tapasco_fedora

.build_tapasco_ubuntu:
variables:
PACKAGE_TYPE: "DEB"
before_script:
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev libncurses-dev git rpm
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev libncurses-dev git curl
artifacts:
paths:
- build/tapasco-*-Linux.deb
Expand All @@ -297,15 +324,15 @@ build_tapasco_ubuntu_16_04_cross:
TARGET: "zynq"
image: ubuntu:xenial
before_script:
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev libncurses-dev git rpm gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake curl libelf-dev libncurses-dev git gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
extends: .build_tapasco_ubuntu

build_tapasco_ubuntu_16_04_clang:
variables:
TARGET: "clang"
image: ubuntu:xenial
before_script:
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev libncurses-dev git rpm clang
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake curl libelf-dev libncurses-dev git clang
extends: .build_tapasco_ubuntu

build_tapasco_ubuntu_16_04_debug:
Expand All @@ -324,6 +351,14 @@ build_tapasco_arm32v7_debug:
variables:
MODE: "debug"
image: arm32v7/ubuntu:16.04
before_script:
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev libncurses-dev git rpm curl
- curl http://launchpadlibrarian.net/332033977/libprotobuf10_3.0.0-9ubuntu5_armhf.deb -o /tmp/libprotobuf.deb
- curl http://launchpadlibrarian.net/332033978/libprotoc10_3.0.0-9ubuntu5_armhf.deb -o /tmp/libprotoc.deb
- curl http://launchpadlibrarian.net/332033979/protobuf-compiler_3.0.0-9ubuntu5_armhf.deb -o /tmp/protobuf.deb
- dpkg -i /tmp/libprotobuf.deb
- dpkg -i /tmp/libprotoc.deb
- dpkg -i /tmp/protobuf.deb
extends: .build_tapasco_ubuntu

build_tapasco_arm64v8_debug:
Expand All @@ -338,7 +373,7 @@ build_tapasco_ubuntu_16_04_cross_debug:
TARGET: "zynq"
image: ubuntu:xenial
before_script:
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev libncurses-dev git rpm gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
- apt-get -y update && apt-get -y install build-essential linux-headers-generic python3 cmake curl libelf-dev libncurses-dev git rpm gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
extends: .build_tapasco_ubuntu

tapasco_compose_ubuntu:
Expand Down Expand Up @@ -371,6 +406,7 @@ tapasco_compose_ubuntu:
XILINX_VIVADO: "/opt/cad/xilinx/vivado/Vivado/${VIVADO_VERSION}"
XILINXD_LICENSE_FILE: "/opt/cad/keys/xilinx"
PLATFORM: "pynq"
FLAGS: ""
tags:
- CAD
- High
Expand All @@ -388,7 +424,7 @@ tapasco_compose_ubuntu:
- /opt/tapasco/tapasco-init-toolflow.sh
- source tapasco-setup-toolflow.sh
- tapasco hls counter -p $PLATFORM --skipEvaluation
- tapasco -v --maxThreads 3 compose [counter x 3] @ 100 MHz -p $PLATFORM
- tapasco -v --maxThreads 3 compose [counter x 3] @ 100 MHz -p $PLATFORM $FLAGS

tapasco_compose_17_4:
variables:
Expand Down Expand Up @@ -420,8 +456,70 @@ tapasco_compose_19_2:
VIVADO_VERSION: "2019.2"
extends: .tapasco_compose

tapasco_compose_20_1:
variables:
VIVADO_VERSION: "2020.1"
XILINX_VIVADO: "/opt/cad/xilinx/vitis/Vivado/${VIVADO_VERSION}"
extends: .tapasco_compose

tapasco_compose_pcie:
variables:
VIVADO_VERSION: "2018.3"
PLATFORM: "vc709"
extends: .tapasco_compose

# do runs without for synthesis for all other plattforms
.tapasco_compose_no_synth:
variables:
FLAGS: "--skipSynthesis"
extends: .tapasco_compose

tapasco_compose_AU250:
variables:
PLATFORM: "AU250"
extends: .tapasco_compose_no_synth

tapasco_compose_netfpga_sume:
variables:
PLATFORM: "netfpga_sume"
extends: .tapasco_compose_no_synth

tapasco_compose_ultra96v2:
variables:
PLATFORM: "ultra96v2"
extends: .tapasco_compose_no_synth

tapasco_compose_vcu108:
variables:
PLATFORM: "vcu108"
extends: .tapasco_compose_no_synth

tapasco_compose_vcu118:
variables:
PLATFORM: "vcu118"
extends: .tapasco_compose_no_synth

tapasco_compose_vcu1525:
variables:
PLATFORM: "vcu1525"
extends: .tapasco_compose_no_synth

tapasco_compose_xupvvh:
variables:
PLATFORM: "xupvvh"
extends: .tapasco_compose_no_synth

tapasco_compose_zc706:
variables:
PLATFORM: "zc706"
extends: .tapasco_compose_no_synth

tapasco_compose_zcu102:
variables:
PLATFORM: "zcu102"
extends: .tapasco_compose_no_synth

tapasco_compose_zedboard:
variables:
PLATFORM: "zedboard"
extends: .tapasco_compose_no_synth
38 changes: 32 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,31 @@ The Task Parallel System Composer (TaPaSCo)
Master Branch Status: [![pipeline status](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/badges/master/pipeline.svg)](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/commits/master)
Dev Branch Status: [![pipeline status](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/badges/develop/pipeline.svg)](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/commits/develop)

Introduction
-------------------

Specialized accelerators in a heterogeneous system play a vital role in providing enough compute power for current and upcoming computational tasks. Field-programmable gate arrays (FPGA) are an established platform for such custom and highly specialized accelerators. However, an accelerator implementation alone is only part of the way to a usable system. In order to be used as a specialized co-processor in a heterogeneous setup, the accelerator still needs to be integrated into the overall system and requires a connection to the host (typically a software-programmable CPU) and often also external memory.

The open-source TaPaSCo (Task-Parallel System Composer) framework was created to serve exactly this purpose: The fast integration of FPGA-based accelerators into heterogeneous compute platforms or systems-on-chip (SoC) and their connection to relevant components on the FPGA board.

TaPaSCo can support developers in all steps of the development process of heterogeneous systems:

* TaPaSCo Toolflow: from cores resulting from High-Level Synthesis or cores manually written in an HDL, a complete FPGA-design can be created. TaPaSCo will automatically connect all processing elements to the memory- and host-interface and generate a complete bitstream.

* TaPaSCo Runtime API: allows to interface with accelerator from software and supports operations such as transferring data to the FPGA memory, pass values to accelerator cores and control the execution of the processing elements.

Next to the setup and usage instructions in this README, you can find additional information about TaPaSCo in the [tutorial videos](https://github.com/esa-tu-darmstadt/tapasco/wiki/Talks-and-Tutorials) and the [scientific publications](https://github.com/esa-tu-darmstadt/tapasco/wiki/Publications) describing and using TaPaSCo.

We welcome contributions from anyone interested in this field, check the [contributor's guide](https://github.com/esa-tu-darmstadt/tapasco/wiki/Contributor's-Guide) for more information.


System Requirements
-------------------
TaPaSCo is known to work in this environment:

* Intel x86_64 arch
* Linux kernel 4.4+
* Fedora 30+, Ubuntu 16.04+
* CentOS 8, Fedora 30+, Ubuntu 16.04+
* Fedora 24/25 does not support debug mode due to GCC bug
* Bash Shell 4.2.x+

Expand All @@ -24,9 +42,8 @@ To use TaPaSCo, you'll need working installations of
* Vivado Design Suite 2017.4 or newer
* Java SDK 8 - 11
* git
* python
* python3
* GCC newer than 5.x.x for C++11 support
* *OPTIONAL:* libncurses for the tapasco-debug application
* *OPTIONAL:* Local Installation of gradle 5.0+, if you do not want to use the included wrapper.

If you want to use the High-Level Synthesis flow for generating custom IP
Expand Down Expand Up @@ -90,17 +107,25 @@ If you want to use a specific (pre-release) version or branch, you can do the fo
Whenever you want to use TaPaSCo in the future, just source the corresponding workspace using the `tapasco-setup.sh`.
This also allows you to have multiple independent TaPaSCo-Workspaces.

Prerequisites for the Runtime
Prerequisites for compiling the runtime
-------------

*Ubuntu*:
```
apt-get -y install build-essential linux-headers-generic python cmake libelf-dev libncurses-dev git rpm
apt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev git rpm
```

*Fedora*:
```
dnf -y install kernel-devel make gcc gcc-c++ elfutils-libelf-devel cmake ncurses-devel python libatomic git rpm-build
dnf -y install kernel-devel make gcc gcc-c++ elfutils-libelf-devel cmake python3 libatomic git rpm-build
```

*Rust*:

The runtime uses Rust and requires a recent version of it. The versions provided by most distributions is too old. We recommend the official way of installing Rust through [rustup][4]:
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh && sh /tmp/rustup.sh -y
source ~/.cargo/env
```

TaPaSCo-Runtime Setup
Expand Down Expand Up @@ -155,6 +180,7 @@ the Verilog code generated by the _Bluespec Compiler (bsc)_.
[1]: https://git.esa.informatik.tu-darmstadt.de/REPARA/threadpoolcomposer.git
[2]: http://repara-project.eu/
[3]: http://bluespec.com/
[4]: https://rustup.rs

Publications
------------
Expand Down
106 changes: 106 additions & 0 deletions misc/documentation/sfpplus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
SFPPLUS in TaPaSCo
===================

A number of platforms in TaPaSCo provide the SFP+-feature which allows to send/recieve network packets.
The following will describe the general configuration format.
The information, which platforms are supported, as well as platform specific information (like the number of available SPF+ Ports),
can be found [here](tapasco-features.md).

## Configuration format

The configuration format is split into two parts:
1. The [Port Definition](#port-definition)
2. The [Connections of PEs](#pe-connections) to ports


### Port Definition

Here you can specify a list of ports. Each port has four properties:
- The name of the port: Used to reference the port when specifiying the connections
- The mode of the port: How PEs are connected to the port ([singular](#singular-mode), [roundrobin](#roundrobin-mode), [broadcast](#broadcast-mode))
- The physical port number: Depends on the platform, see [TaPaSCo Features](tapasco-features.md)
- Where the clock synchronization should occur: Either the synchronization is done via AXI-Stream interconnects (`ic_sync: true`).
Alternatively the synchronization can be handled by the PE (`ic_sync: false`). In the latter case the PE must have a separate
clock/reset-pair for each AXI-Stream interface.

Example:

```
SFPPLUS {
"Ports": [
{
"name": "port_A",
"mode": "singular",
"physical_port": "0",
"ic_sync": false
},
{
"name": "port_B",
"mode": "roundrobin",
"physical_port": "1",
"ic_sync": true
}
],
...
}
```

#### Singular Mode

In this mode each Port can only have one sending AXIS-Interface and one recieving AXIS-Interface connected. They are directly connected to the port.

#### Roundrobin Mode

In this mode the packets recieved on the port are distributed to all connected AXIS-Interface round-robin: The first recieved packet is forwarded
to the first AXIS-Interface, the second packet to the second AXIS-Interface and so on...

#### Broadcast Mode

In this mode all recieved packets are forwarded to all connected AXIS-Interfaces.

### PE Connections

Here you first define groups of PEs and then for each group how their AXIS-Interfaces are mapped to the ports.
A group of PE is defined by the ID of the PE-Type and a number. Each PE in your composition may only be used
in one of these groups. Each group defines mappings from their AXIS-Interfaces to ports.
A mapping consists of
- the name of the interface
- the direction: `rx` for recieving packets and `tx` for sending packets
- the port name ([see](#port-definition))

Example:

```
SFPPLUS {
...
"PEs": [
{
"ID": "PE1",
"Count": "1",
"mappings": [
{
"interface": "sfp_axis_0_rx",
"direction": "rx",
"port": "port_A"
},
{
"interface": "sfp_axis_0_tx",
"direction": "tx",
"port": "port_A"
}
]
},
{
"ID": "PE2",
"Count": "4",
"mappings": [
{
"interface": "sfp_axis_0_rx",
"direction": "rx",
"port": "port_B"
}
]
}
]
}
```
Loading

0 comments on commit 37c913b

Please sign in to comment.