{"id":13773296,"url":"https://github.com/esa-tu-darmstadt/tapasco","last_synced_at":"2025-05-11T05:34:36.094Z","repository":{"id":35222091,"uuid":"165844818","full_name":"esa-tu-darmstadt/tapasco","owner":"esa-tu-darmstadt","description":"The Task Parallel System Composer (TaPaSCo)","archived":false,"fork":false,"pushed_at":"2024-04-11T21:02:24.000Z","size":109321,"stargazers_count":94,"open_issues_count":57,"forks_count":24,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-04-13T03:10:45.135Z","etag":null,"topics":["fpga","fpga-soc","hardware","hardware-acceleration"],"latest_commit_sha":null,"homepage":"","language":"Verilog","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/esa-tu-darmstadt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-01-15T12:10:16.000Z","updated_at":"2024-04-15T08:48:54.827Z","dependencies_parsed_at":"2023-02-14T00:16:08.970Z","dependency_job_id":"e2655a0d-32df-41ce-af70-c4d72d5b8c4e","html_url":"https://github.com/esa-tu-darmstadt/tapasco","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa-tu-darmstadt%2Ftapasco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa-tu-darmstadt%2Ftapasco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa-tu-darmstadt%2Ftapasco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/esa-tu-darmstadt%2Ftapasco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/esa-tu-darmstadt","download_url":"https://codeload.github.com/esa-tu-darmstadt/tapasco/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253523690,"owners_count":21921815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fpga","fpga-soc","hardware","hardware-acceleration"],"created_at":"2024-08-03T17:01:13.964Z","updated_at":"2025-05-11T05:34:31.079Z","avatar_url":"https://github.com/esa-tu-darmstadt.png","language":"Verilog","funding_links":[],"categories":["Circuit Compilers","Verilog"],"sub_categories":[],"readme":"The Task Parallel System Composer (TaPaSCo)\n===========================================\n![Tapasco logo](misc/icon/tapasco_icon.png)\n\nMaster 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)\nDev 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)\n\nIntroduction\n-------------------\n\nSpecialized 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.\n\nThe 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.\n\nTaPaSCo can support developers in all steps of the development process of heterogeneous systems:\n\n* 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.\n\n* 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.\n    \nNext 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.\n\nWe 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.\n\nSupported FPGA devices\n----------------------\n\n* Zynq-based: PYNQ-Z1, ZC706, ZedBoard, Ultra96V2, ZCU102\n* PCIe cards: VC709, NetFPGA-SUME, VCU108, VCU118, VCU1525, Alveo U250, Alveo U280, BittWare XUP-VVH, PRO DESIGN HAWK, VCK5000\n\n\nSystem Requirements\n-------------------\nTaPaSCo is known to work in this environment:\n\n*   Intel x86_64 arch\n*   Linux kernel 4.4+\n*   CentOS 8, Fedora 30+, Ubuntu 16.04+\n*   Fedora 24/25 does not support debug mode due to GCC bug\n*   Bash Shell 4.2.x+\n\nOther setups likely work as well, but are untested.\n\nPrerequisites for Toolflow\n-------------\nTo use TaPaSCo, you'll need working installations of\n\n*   Vivado Design Suite 2017.4 or newer\n*   Java SDK 8 - 11\n*   git\n*   python3\n*   GCC newer than 5.x.x for C++11 support\n*   *OPTIONAL:* Local Installation of gradle 5.0+, if you do not want to use the included wrapper.\n\nIf you want to use the High-Level Synthesis flow for generating custom IP\ncores, you will also need:\n\n*   Vivado HLS 2017.4+ _or_ Vitis HLS 2020.2+\n\nCheck that at least the following are in your `$PATH`:\n\n*   `vivado` - If not source `path/to/vivado/settings64.sh`\n*   `git`\n*   `bash`\n*   \\[`vivado_hls`,`vitis_hls`\\] - Since Vivado 2018.1 this is included in `vivado`\n\nWhen using *Ubuntu*, ensure that the following packages are installed:\n\n* unzip\n* zip\n* git\n* findutils\n* curl\n* default-jdk\n\n```\napt-get -y install unzip git zip findutils curl default-jdk\n```\n\nWhen using *Fedora*, ensure that the following packages are installed:\n\n* which\n* java-openjdk\n* findutils\n\n```\ndnf -y install which java-openjdk findutils\n```\n\nPrerequisites for Simulation\n----------------------------\n* Vivado Design Suite 2021 or newer\n* Questa Simulator 2021 or newer\n* python3\n* pip3\n\n\nTaPaSCo-Toolflow Setup\n----------------------\n\nUsing the prebuilt packages, the setup of TaPaSCo is very easy:\n\n1.  Create or open a folder, which you would like to use as your TaPaSCo workspace.\n    Within this folder, run the TaPaSCo-Initialization-Script which is located in\n    `/opt/tapasco/tapasco-init-toolflow.sh`. This will setup your current folder as `TAPASCO_WORK_DIR`.\n    It will also create the file `tapasco-setup.sh` within your current directory. \n2.\tSource `tapasco-setup.sh`.\n\nIf you want to use a specific (pre-release) version or branch, you can do the following:\n\n1.  Clone TaPaSCo: `git clone https://github.com/esa-tu-darmstadt/tapasco.git`\n2.  _Optionally_ Checkout a corresponding branch: `git checkout \u003cBRANCH\u003e`\n3.  Create or open a folder, which you would like to use as your TaPaSCo workspace.\n    Within this folder, run the TaPaSCo-Initialization-Script `tapasco-init.sh` which is located in the root-folder \n    of your cloned repo. This will setup your current folder as `TAPASCO_WORK_DIR`.\n    It will also create the file `tapasco-setup.sh` within your workdir.\n4.  Source `tapasco-setup.sh` to setup the TaPaSCo-Environment.\n5.  Build the TaPaSCo-Toolflow using `tapasco-build-toolflow`.\n\nWhenever you want to use TaPaSCo in the future, just source the corresponding workspace using the `tapasco-setup.sh`.\nThis also allows you to have multiple independent TaPaSCo-Workspaces.\n\nPrerequisites for compiling the runtime\n-------------\n\n*Ubuntu*:\n```\napt-get -y install build-essential linux-headers-generic python3 cmake libelf-dev git rpm protobuf-compiler\n```\n\n*Fedora*:\n```\ndnf -y install kernel-devel make gcc gcc-c++ elfutils-libelf-devel cmake python3 libatomic git rpm-build protobuf-compiler\n```\n\n*Arch*:\n```\npacman -S linux-headers make gcc libelf libatomic_ops cmake python3 git protobuf\n```\n\n*Rust*:\n\nThe 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]:\n```\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o /tmp/rustup.sh \u0026\u0026 sh /tmp/rustup.sh -y\nsource ~/.cargo/env\n```\n\nTaPaSCo-Runtime Setup\n---------------------\n\nIf you want to use a specific (pre-release) version or branch, you can do the following:\n\n1.  Clone TaPaSCo: `git clone https://github.com/esa-tu-darmstadt/tapasco.git`\n2.  _Optionally_ Checkout a corresponding branch: `git checkout \u003cBRANCH\u003e`\n3.  Create or open a folder, which you would like to use as your TaPaSCo workspace.\n    Within this folder, run the TaPaSCo-Initialization-Script `tapasco-init.sh` which is located in the root-folder \n    of your cloned repo. This will setup your current folder as `TAPASCO_WORK_DIR`.\n    It will also create the file `tapasco-setup.sh` within your workdir.\n4.  Source `tapasco-setup.sh` to setup the TaPaSCo-Environment.\n5.  Build the TaPaSCo-Toolflow using `tapasco-build-libs`.\n6.  _Optionally_ If you want to use the simulation features build the Toolflow using `tapasco-build-libs -s`. Currently the only supported simulator is Questa.\n\nAll of this is not necessary when using the prebuilt packages. In that case, the corresponding libraries and files are installed as usual for your OS. Simulation support is currently not available with prebuilt packages.\n\nGetting Started - Build a TaPaSCo design\n----------------------------------------\n1.  Import your kernels\n    *   HDL flow: `tapasco import path/to/ZIP as \u003cID\u003e -p \u003cPLATFORM\u003e` will import the corresponding ZIP file as a new HDL-based core. The Kernel-ID is set from \u003cID\u003e and the optional flag `-p \u003cPLATFORM\u003e` determines for which platform the kernel will be available. If it is omitted, it will be made available for all platforms which may take a lot of time.\n    *   HLS flow: `tapasco hls \u003cKERNEL\u003e -p \u003cPLATFORM\u003e` will perform hls according to the `kernel.json`. The resulting HLS-based core will be made available for the platform given by `-p \u003cPLATFORM\u003e`. Again, `-p` can be omitted. HLS-Kernels are generally located in `$TAPASCO_WORKDIR/kernel`. If you want to add kernels you can create either symlink or copy them into the folder. Additionally, the folder can be temporarily changed using the optional `--kernelDir path/to/kernels` flag like this: `tapasco --kernelDir path/to/kernels hls \u003cKERNEL\u003e -p \u003cPLATFORM\u003e`\n2.  Create a composition: `tapasco compose [\u003cKERNEL\u003e x \u003cCOUNT\u003e] @ \u003cNUM\u003e MHz -p \u003cPLATFORM\u003e`\n3.  Load the bitstream: `tapasco-load-bitstream \u003cBITSTREAM\u003e`\n4.  Implement your host software\n    *   C API\n    *   C++ API\n\nYou can get more information about commands with `tapasco --help` and the corresponding subpages with `tapasco --help \u003cTOPIC\u003e`\n\n\nGetting Started - Build a Software-Interface\n--------------------------------------------\n1.  Design your Accelerator using HLS/HDL according to the previous section.\n2.  Load your bitstream: `tapasco-load-bitstream my-design.bit --reload-driver`. To do this, you have to source `vivado` and `tapasco-setup.sh`.\n3.  Write a C/C++ executable that interfaces with your design accordingly. To get a better understanding of this, you might want to refer to the collection of examples and the corresponding README which is located in `$TAPASCO_HOME/runtime/examples`\n4.  Build and Compile your Software.\n\nGetting Started - Build a Boot Image\n--------------------------------------------\nThis repository provides a script to generate boot images for some common AMD Xilinx rSoC boards.\nRefer to the dedicated [README](toolflow/boot) for more information.\n\nUsing the Simulation\n--------------------\n1.  Design the Accelerator using HLS/HDL for the platform `sim`.\n2.  The TaPaSCo-Toolflow will generate a ZIP-file in place of a bitstream.\n3.  Load the design and start the simulation with `tapasco-start-sim path/to/zip`\n    - After being started, the simulation can be stopped using `CTRL-C`\n    - Consequent simulations of that design can be started simply using `tapasco-start-sim`\n    - New designs need to be loaded again by following step `3`.\n    - The currently used Questa-Simulator offers the option to interact with the simulation via a GUI. To start the simulation in GUI-mode the flag `--gui` needs to be used.\n    - To speedup datatransfers to the simulated design the flag `--unsafe-sim` can be used. Using this flag, the simulation will allow multiple write requests to be scheduled by the host software disabling the possibility to match errors in the simulator to the coresponding write-request in the host software.\n4.  By default the simulation listens on port 4040 for incoming connections of the TaPaSCo-Runtime. Before starting your software-interface, make sure that it can connect to the simulation. You can specify that port in the runtime by setting the environment variable `SIM_PORT` and by using the flag `--sim-port` with the `tapasco-start-sim` command.\n    - If simulation and your software-interface are running on the same host, there shouldn't be an issue\n    - If simulation and software-interface are running on different host, port 4040 can be forwarded via ssh using `ssh -L 4040:localhost:4040 simulation-host` on the host, where the software-interface should run.\n5.  Run your Software\n    - Make sure to select the correct TaPaSCo kernel-device in your software when instantiating the `Tapasco` Class/Structure.\n\n\nAcknowledgements\n----------------\nTaPaSCo is based on [ThreadPoolComposer][1], which was developed by us as part\nof the [REPARA project][2], a _Framework Seven (FP7) funded project by the\nEuropean Union_.\n\nWe would also like to thank [Bluespec, Inc.][3] for making their _Bluespec\nSystemVerilog (BSV)_ tools available to us and their permission to distribute\nthe Verilog code generated by the _Bluespec Compiler (bsc)_.\n\n[1]: https://git.esa.informatik.tu-darmstadt.de/REPARA/threadpoolcomposer.git\n[2]: http://repara-project.eu/\n[3]: http://bluespec.com/\n[4]: https://rustup.rs\n\nPublications\n------------\n\nA List of publications about TaPaSCo or TaPaSCo-related research can be found [here](https://github.com/esa-tu-darmstadt/tapasco/wiki/Publications).\n\nIf you want to cite TaPaSCo, please use the following information:\n\n[Heinz2021a] Heinz, Carsten, Jaco Hofmann, Jens Korinth, Lukas Sommer, Lukas Weber, and Andreas Koch. 2021. **The\nTapasco Open-Source Toolflow.** In *Journal of Signal Processing Systems*.\n\nReleases\n----------------\n\nWe provided pre-compiled packages for many popular Linux distributions. All packages are build for the x86_64 variant.\n    \n| Distribution | Kernel Driver | Kernel Driver (Debug) | Runtime | Runtime (Debug) | Toolflow |\n|:-------------|:-------------:|:---------------------:|:-------:|:---------------:|:--------:|\n| Ubuntu 18.04 | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_ubuntu_18_04) | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_ubuntu_18_04_debug) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.deb?job=build_tapasco_ubuntu_18_04) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.deb?job=build_tapasco_ubuntu_18_04_debug) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/toolflow/scala/build/distributions/tapasco_2024-01_amd64.deb?job=build_scala_tapasco_ubuntu_18_04) |\n| Ubuntu 20.04 | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_ubuntu_20_04) | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_ubuntu_20_04_debug) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.deb?job=build_tapasco_ubuntu_20_04) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.deb?job=build_tapasco_ubuntu_20_04_debug) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/toolflow/scala/build/distributions/tapasco_2024-01_amd64.deb?job=build_scala_tapasco_ubuntu_20_04) |\n| Ubuntu 22.04 | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_ubuntu_22_04) | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_ubuntu_22_04_debug) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.deb?job=build_tapasco_ubuntu_22_04) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.deb?job=build_tapasco_ubuntu_22_04_debug) | [DEB](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/toolflow/scala/build/distributions/tapasco_2024-01_amd64.deb?job=build_scala_tapasco_ubuntu_22_04) |\n| Rocky Linux 8 | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_rockylinux_8) | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_rockylinux_8_debug) | [RPM](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.rpm?job=build_tapasco_rockylinux_8) | [RPM](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.rpm?job=build_tapasco_rockylinux_8_debug) | [RPM](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/toolflow/scala/build/distributions/tapasco-2024-01.x86_64.rpm?job=build_scala_tapasco_rockylinux_8) |\n| Fedora 36 | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_fedora_36) | [Download](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/runtime/kernel/tlkm.ko?job=build_kernel_fedora_36_debug) | [RPM](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.rpm?job=build_tapasco_fedora_36) | [RPM](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/build/tapasco-2024.1.0-Linux.rpm?job=build_tapasco_fedora_36_debug) | [RPM](https://git.esa.informatik.tu-darmstadt.de/tapasco/tapasco/-/jobs/artifacts/master/raw/toolflow/scala/build/distributions/tapasco-2024-01.x86_64.rpm?job=build_scala_tapasco_fedora_36) |\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesa-tu-darmstadt%2Ftapasco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fesa-tu-darmstadt%2Ftapasco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fesa-tu-darmstadt%2Ftapasco/lists"}