{"id":13649170,"url":"https://github.com/hpcn-uam/Limago","last_synced_at":"2025-04-22T12:33:49.212Z","repository":{"id":70424607,"uuid":"206827464","full_name":"hpcn-uam/Limago","owner":"hpcn-uam","description":"Limago: an FPGA-based Open-source 100 GbE TCP/IP Stack","archived":true,"fork":false,"pushed_at":"2021-09-11T14:21:55.000Z","size":1232,"stargazers_count":120,"open_issues_count":5,"forks_count":45,"subscribers_count":22,"default_branch":"master","last_synced_at":"2024-08-03T01:39:34.293Z","etag":null,"topics":["100gbe","alveo-u200","alveo-u280","fpga","hls","network-stack","tcp","vcu118","vivado"],"latest_commit_sha":null,"homepage":"","language":"Tcl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hpcn-uam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-09-06T15:50:58.000Z","updated_at":"2024-06-18T11:10:37.000Z","dependencies_parsed_at":"2023-02-23T02:00:10.409Z","dependency_job_id":null,"html_url":"https://github.com/hpcn-uam/Limago","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcn-uam%2FLimago","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcn-uam%2FLimago/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcn-uam%2FLimago/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpcn-uam%2FLimago/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hpcn-uam","download_url":"https://codeload.github.com/hpcn-uam/Limago/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223896472,"owners_count":17221441,"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":["100gbe","alveo-u200","alveo-u280","fpga","hls","network-stack","tcp","vcu118","vivado"],"created_at":"2024-08-02T01:04:49.121Z","updated_at":"2024-11-09T23:31:06.511Z","avatar_url":"https://github.com/hpcn-uam.png","language":"Tcl","funding_links":[],"categories":["Tcl"],"sub_categories":[],"readme":"# Limago 100GbE Ethernet framework with TCP/IP support\n\n**This repository is no longer active, we refer you to https://github.com/fpgasystems/fpga-network-stack**\n\n## Introduction\n\nThis repository puts together all the necessary pieces to generate Limago.\n\nMake sure you are using `Vivado 2018.3 IP Build 2404404`. It seems to be a bug in Vivado 2018.3.1 IP Build 2486929 that produces combinational loops in the synthesized HLS. \n\n*Before generating any project check each submodule's README.md to verify that everything is set properly*\n\n## Supported Boards\n\nSo far [VCU118](https://www.xilinx.com/products/boards-and-kits/vcu118.html#hardware), [Alveo U200](https://www.xilinx.com/products/boards-and-kits/alveo/u200.html#specifications) and [Alveo U280](https://www.xilinx.com/products/boards-and-kits/alveo/u280.html#specifications) are supported. \n\n- Please check [README.md](submodules/cmac/README.md) of the CMAC wrapper to verify clock frequency for VCU118.\n- The clock Frequency of the Alveo U200 can be configured using two pins, and the project already supports it.\n\u003e **_NOTE:_**  Please double check that pin D32 is driven to `0` before programming Alveo U280 [AR# 72926](https://www.xilinx.com/support/answers/72926.html)\n\n## Cloning the repository\n\nIn order to clone this repository you need `git lfs` installed. \n\nThis repository uses submodules and `git lfs`, check [Installing Git Large File Storage](https://help.github.com/en/articles/installing-git-large-file-storage) to install it.\n\n```\ngit clone git@github.com:hpcn-uam/Limago.git --recursive\n```\n\n## How to build the projects\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to show\u003c/summary\u003e\n\nThe process is fully automated.\n\n1. The first part consist on generating the necessary IP-Cores\n    \n    ```sh\n    make ips\n    ```\n\n1. Generate Vivado Project.\n\n    a. Check available projects\n    ```sh\n    make help\n    ```\n\n    b. Create Project\n    ```sh\n    make create_prj_vcu118-fns-single-toe-iperf\n    ```\n\n    Once the project is create you can open it. The projects are created under the folder `projects/\u003cproject_name\u003e`\n\n    For instance, you can open the project with Vivado:\n\n    ```sh\n    vivado projects/vcu118-fns-single-toe-iperf/vcu118-fns-single-toe-iperf.xpr\n    ```\n\n1. Implement a project \n\n    You can either launch it manually from the GUI or using the following command:\n\n    ```sh\n    make implement_prj_vcu118-fns-single-toe-iperf\n    ```\n\n    *It is suggested to close the GUI when launching this command.*\n\n\u003c/details\u003e\n\n## How to test if the design works\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to show\u003c/summary\u003e\n\n### Check Physical Link\n\nOnce the FPGA has been programmed you can check if the link is up using the VIO (vio\\_cmac\\_synq\\_0) within `Interfaces` hierarchy , the signal `cmac_sync_0_cmac_aligned_sync` must value '1'. \n\n![vioLink](images/vioLink.jpg)\n \nIf the board is attached through PCIe, the link can be checked using the `cmac_stats` program within the [Software](Software/) folder. In order to perform this, after programming the FPGA a host reboot is mandatory so as to enumerate the PCIe devices to detect the XDMA (PCIe rescan has not been tested). Check [README.md](Software/README.md) to download and install the driver. Execute `cmac_stats` and you will get the stats of the CMAC and the Tx and Rx status.\n\n![cmacStats](images/cmacStats.jpg)\n\n### Check Network Link\n\nBy default Limago IP address is 192.168.0.5, network mask 255.255.255.0 and its MAC address is 00:0a:35:02:9d:e5\n\nOnce you have configured your HOST with a proper IP address in the same subnetwork as Limago you can use `arping` and `ping` to reach Limago.\n\n```sh\narping -I \u003cinterface_name\u003e 192.168.0.5\nping 192.168.0.5\n```\n\n![arping](images/arping.png)\n\n![ping](images/ping.png)\n\n### Check application\n\n#### Echo application\n\nThis section describes how to test the echo application, valid for the project(s): `vcu118-fns-single-toe-echo` \n\nIn this case the Limago only echoes the payload of the connection to the port 15000, therefore you can use `telnet` or `ncat` to test it.\n\n![echoing](images/echo.gif)\n\n#### Iperf2 application\n\nThis section describes how to test the `iperf` (version 2) application, valid for the project(s): `vcu118-fns-single-toe-iperf` and `alveou200-fns-single-toe-iperf`\n\nIn this case, the FPGA can work both as a client and as a server. Make sure that you have installed `iperf` (version 2) in the server machine.\n\n- FPGA as a server, which means the FPGA just gets data. By default the FPGA is listening to the range of ports between 5000 to 5063, therefore you can target any of those ports. Run the following code in the server with the NIC connected to Limago.\n\n```sh\niperf -c 192.168.0.5 -t 10 -i 1 -p 5011 --mss 1408 -e\n```\n\n![hwServer](images/iperfClient.png)\n\n- FPGA as a client, which means Limago opens the TCP connection and sends the data. Therefore, the HOST machine needs to communicate with Limago using the XDMA driver. Run the following code in the HOST machine attached to the FPGA: \n\nFirst of all, the server machine must run `iperf` (version 2) a as server `iperf -s -i 1`. After that, you you can run the iperf application from the FPGA as a client.\n\n```sh\nsudo ./bin/hw_iperf2 -c \u003cserver_ip_address\u003e -t 10 -p 5001 -e\n```\n\n![hwClient](images/iperfServer.png)\n\n\u003c/details\u003e\n\n## Citation\nIf you use [Limago](https://ieeexplore.ieee.org/document/8891991), the [TCP/IP stack](https://github.com/hpcn-uam/100G-fpga-network-stack-core) or the [checksum computation](https://github.com/hpcn-uam/efficient_checksum-offload-engine) in your project please cite one of the following papers accordingly and/or link to the GitHub repository:\n\n```\n@inproceedings{sutter2018fpga,\n    title={{FPGA-based TCP/IP Checksum Offloading Engine for 100 Gbps Networks}},\n    author={Sutter, Gustavo and Ruiz, Mario and L{\\'o}pez-Buedo, Sergio and Alonso, Gustavo},\n    booktitle={2018 International Conference on ReConFigurable Computing and FPGAs (ReConFig)},\n    year={2018},\n    organization={IEEE},\n    doi={10.1109/RECONFIG.2018.8641729},\n    ISSN={2640-0472},\n    month={Dec},\n}\n@INPROCEEDINGS{ruiz2019tcp, \n    title={{Limago: an FPGA-based Open-source 100~GbE TCP/IP Stack}}, \n    author={Ruiz, Mario and Sidler, David and Sutter, Gustavo and Alonso, Gustavo and L{\\'o}pez-Buedo, Sergio},\n    booktitle={{2019 29th International Conference on Field Programmable Logic and Applications (FPL)}}, \n    year={2019},\n    month={Sep},\n    pages={286-292}, \n    organization={IEEE},\n    doi={10.1109/FPL.2019.00053},\n    ISSN={1946-147X}, \n}\n```\n\n# Acknowledgments\n\nThis is a collaborative project between: \n- HPCN group of the  Universidad Autónoma de Madrid. [web](http://www.hpcn-uam.es/)\n- The spin-off Naudit HPCN. [web](http://www.naudit.es/en/)\n- Systems Group of ETH Zürich University. [web](https://www.systems.ethz.ch/)\n\nSo far these people have contributed to Limago\n- José Fernando Zazo josefernando.zazo@naudit.es\n- Mario Ruiz mario.ruiz@uam.es\n- David Sidler david.sidler@inf.ethz.ch\n- Gustavo Sutter gustavo.sutter@uam.es\n- Gustavo Alonso alonso@inf.ethz.ch\n- Sergio López-Buedo sergio.lopez-buedo@uam.es\n\n## License\n\nThis project is a collaboration between the Systems Group of ETH Zürich, Switzerland and HPCN Group of UAM, Spain. Furthermore, the starting point of this implementation is the [Scalable 10Gbps TCP/IP Stack Architecture for Reconfigurable Hardware](https://ieeexplore.ieee.org/abstract/document/7160037) by Sidler, D et al. The original implementation can be found in their [github](https://github.com/fpgasystems/fpga-network-stack).\n\nFor this project we keep the BSD 3-Clause License\n\n```\nBSD 3-Clause License\n\nCopyright (c) 2019, \nHPCN Group, UAM Spain (hpcn-uam.es)\nSystems Group, ETH Zurich (systems.ethz.ch)\nAll rights reserved.\n\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhpcn-uam%2FLimago","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhpcn-uam%2FLimago","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhpcn-uam%2FLimago/lists"}