floonoc

A Fast, Low-Overhead On-chip Network

https://github.com/pulp-platform/floonoc

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 3 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.0%) to scientific vocabulary
Last synced: 6 months ago · JSON representation ·

Repository

A Fast, Low-Overhead On-chip Network

Basic Info
  • Host: GitHub
  • Owner: pulp-platform
  • License: apache-2.0
  • Language: SystemVerilog
  • Default Branch: main
  • Homepage:
  • Size: 35.2 MB
Statistics
  • Stars: 213
  • Watchers: 9
  • Forks: 39
  • Open Issues: 25
  • Releases: 9
Created over 2 years ago · Last pushed 8 months ago
Metadata Files
Readme Changelog License Citation

README.md

Logo # FlooNoC: A Fast, Low-Overhead On-chip Network

Logo

This repository provides modules for the FlooNoC, a Network-on-Chip (NoC) which is part of the PULP (Parallel Ultra-Low Power) Platform. The repository includes Network Interface IPs (named chimneys), Routers and further NoC components to build a complete NoC. FlooNoC mainly supports AXI4+ATOPs, but can be easily extended to other On-Chip protocols. Arbitrary topologies are supported with several routing algorithms. FlooNoC is designed to be scalable and modular, and can be easily extended with new components. Additionally, FlooNoC provides a generation framework for creating customized NoC configurations.

[![CI status](https://github.com/pulp-platform/FlooNoC/actions/workflows/gitlab-ci.yml/badge.svg?branch=main)](https://github.com/pulp-platform/FlooNoC/actions/workflows/gitlab-ci.yml?query=branch%3Amain) [![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/pulp-platform/FlooNoC?color=blue&label=current&sort=semver)](CHANGELOG.md) [![License](https://img.shields.io/badge/license-Apache--2.0-green)](LICENSE-APACHE) [![License](https://img.shields.io/badge/license-SHL--0.51-green)](LICENSE-SHL) [![Static Badge](https://img.shields.io/badge/IEEE_TVLSI-blue?style=flat&label=DOI&color=00629b)](https://doi.org/10.1109/TVLSI.2025.3527225) [![Static Badge](https://img.shields.io/badge/2409.17606-blue?style=flat&label=arXiv&color=b31b1b)](https://arxiv.org/abs/2409.17606) [Design Principles](#-design-principles) • [Getting started](#-getting-started) • [List of IPs](#-list-of-ips) • [Generation](#%EF%B8%8F-generation) • [License](#-license)

💡 Design Principles

Our NoC design is grounded in the following key principles:

  1. Full AXI4 Support: Our design fully supports AXI4+ATOPs from AXI5 as outlined here, particularly multiple outstanding burst transactions. It utilizes low-complexity routers and a decoupled link-level protocol to ensure scalability, thereby enabling tolerance to high-latency off-chip accesses.
  2. Decoupled Links and Networks: We use a link-level protocol that is decoupled from the network-level protocol. This allows us to move the complexity of the network-level protocol into the network interfaces, while deploying low-complexity routers in the network, that enable better scalability.
  3. Wide Physical Channels: We incorporate wide physical channels in order to meet the high-bandwidth requirements at network endpoints without being constrained by the operating frequency. This is in contrast to the traditional narrow link approach. Further, the NoC avoids any kind of serialization and sends entire messages in a single flit including header and tail information.
  4. Separation of traffic: Our design acknowledges the diversity in traffic patterns, as it decouples links and networks to handle wide, high-bandwidth, burst-based traffic and narrow, latency-sensitive traffic with separate physical channels.
  5. Modularity: Our design principles also emphasize modularity. We have developed a set of IPs that can be instantiated together to build a NoC. This approach not only promotes reusability but also facilitates flexibility in designing custom NoCs to cater to a variety of specific system requirements.

🔮 Origin of the name

The names of the IPs are inspired by the Harry Potter universe, where the Floo Network is a magical transportation system. The Network interfaces are named after the fireplaces and chimneys used to access the Floo Network.

In use for centuries, the Floo Network, while somewhat uncomfortable, has many advantages. Firstly, unlike broomsticks, the Network can be used without fear of breaking the International Statute of Secrecy. Secondly, unlike Apparition, there is little to no danger of serious injury. Thirdly, it can be used to transport children, the elderly and the infirm."

🔐 License

All code checked into this repository is made available under a permissive license. All software sources are licensed under the Apache License 2.0 (see LICENSE-APACHE), and all hardware sources in the hw folder are licensed under the Solderpad Hardware License 0.51 (see LICENSE-SHL).

📚 Publication

If you use FlooNoC in your research, please cite the following paper:

FlooNoC: A 645 Gbps/link 0.15 pJ/B/hop Open-Source NoC with Wide Physical Links and End-to-End AXI4 Parallel Multi-Stream Support

``` @ARTICLE{10848526, author={Fischer, Tim and Rogenmoser, Michael and Benz, Thomas and Gürkaynak, Frank K. and Benini, Luca}, journal={IEEE Transactions on Very Large Scale Integration (VLSI) Systems}, title={FlooNoC: A 645-Gb/s/link 0.15-pJ/B/hop Open-Source NoC With Wide Physical Links and End-to-End AXI4 Parallel Multistream Support}, year={2025}, volume={33}, number={4}, pages={1094-1107}, keywords={Bandwidth;Very large scale integration;Data transfer;Routing;Complexity theory;Scalability;Nickel;Memory management;Engines;Europe;Advanced extensible interface (AXI);network interface (NI);network-on-chip (NoC);physical design;very large scale integration}, doi={10.1109/TVLSI.2025.3527225}}

```

⭐ Getting Started

Pre-requisites

FlooNoC uses bender to manage its dependencies and to automatically generate compilation scripts. Further Python >= 3.10 is required to install the generation framework.

Simulation

Currently, we do not provide any open-source simulation setup. Internally, the FlooNoC was tested using QuestaSim, which can be launched with the following command:

```sh

Compile the sources

make compile-sim

Run the simulation

make run-sim-batch TBDUT=tbfloo_dut ```

or in the GUI, with prepared waveforms:

```sh

Compile the sources

make compile-sim

Run the simulation

make run-sim TBDUT=tbfloodut `` By replacingtbfloo_dut` with the name of the testbench you want to simulate.

🧰 List of IPs

This repository includes the following NoC IPs:

  1. Routers: A collection of different NoC router designs with varying features such as virtual channels, input/output buffering, and adaptive routing algorithms.
  2. Network Interfaces (NIs): A set of NoC network interfaces for connecting IPs to the NoC.
  3. Common IPs A set of IPs used by the NoC IPs, such as FIFOs, Cuts and arbiters.
  4. Verification IPs (VIPs): A set of VIPs to verify the correct functionality of the NoC IPs.
  5. Testbenches: A set of testbenches to evaluate the performance of the NoC IPs, including throughput, latency.

Routers

| Name | Description | Doc | | --- | --- | --- | | floo_router | A simple router with configurable number of ports, physical and virtual channels, and input/output buffers | | | floonwrouter | Wrapper of a multi-link router for narrow and wide links | |

Network Interfaces

| Name | Description | Doc | | --- | --- | --- | | flooaxichimney | A bidirectional network interface for connecting AXI4 Buses to the NoC | | | floonwchimney | A bidirectional network interface for connecting narrow & wide AXI Buses to the multi-link NoC | |

Common IPs

| Name | Description | Doc | | --- | --- | --- | | floo_fifo | A FIFO buffer with configurable depth | | | floo_cut | Elastic buffers for cuting timing paths | | | floo_cdc | A Clock-Domain-Crossing (CDC) module implemented with a gray-counter based FIFO. | | | floowormholearbiter | A wormhole arbiter | | | floovcarbiter | A virtual channel arbiter | | | flooroutecomp | A helper module to compute the packet destination | | | floo_rob | A table-based Reorder Buffer | | | floosimplerob | A simplistic low-complexity Reorder Buffer | | | floorobwrapper | A wrapper of all available types of RoBs including RoB-less version | | | floonwjoin | A mux for joining a narrow and wide AXI bus a single wide bus | |

Verification IPs

| Name | Description | Doc | | --- | --- | --- | | axibwmonitor | A AXI4 Bus Monitor for measuring the throughput and latency of the AXI4 Bus | | | axireordercompare | A AXI4 Bus Monitor for verifying the order of AXI transactions with the same ID | | | flooaxirand_slave | A AXI4 Bus Multi-Slave generating random AXI respones with configurable response time | | | flooaxitest_node | A AXI4 Bus Master-Slave Node for generating random AXI transactions | | | floodmatest_node | An endpoint node with a DMA master port and a Simulation Memory Slave port | | | floohbmmodel | A very simple model of the HBM memory controller with configurable delay | |

🛠️ Generation

FlooNoC comes with a generation framework called floogen. It allows to create complex network configurations with a simple configuration file.

Capabilities

floogen has a graph-based internal representation of the network configuration. This allows to easily add new features and capabilities to the generation framework. The following list shows the a couple of the current capabilities of floogen:

  • Validation: The configuration is validated before the generation to ensure that the configuration is valid. For instance, the configuration is checked for invalid user input, overlapping address ranges
  • Routing: XY-Routing and ID-Table routing are supported. floogen automatically generates the routing tables for the routers, as well as the address map for the network interfaces.
  • Package Generation: floogen automatically generates a SystemVerilog package with all the needed types and constants for the network configuration.
  • Top Module Generation: floogen automatically generates a top module that contains all router and network interfaces. The interfaces of the top module are AXI4 interfaces for all the enpdoints specified in the configuration.

Example

The following example shows the configuration for a simple mesh topology with 4x4 routers and 4x4 chimneys with XY-Routing.

```yaml name: example_system description: "Example of a configuration file"

routing: routealgo: "XY" useid_table: true

protocols: - name: "axiin" type: "AXI4" datawidth: 64 addrwidth: 32 idwidth: 3 userwidth: 1 - name: "axiout" type: "AXI4" datawidth: 64 addrwidth: 32 idwidth: 3 userwidth: 1

endpoints: - name: "cluster" array: [4, 4] addrrange: base: 0x10000000 size: 0x00040000 mgrportprotocol: - "axiin" sbrportprotocol: - "axi_out"

routers: - name: "router" array: [4, 4]

connections: - src: "cluster" dst: "router" srcrange: - [0, 3] - [0, 3] dstrange: - [0, 3] - [0, 3] bidirectional: true ```

Usage

To install floogen run the following command:

sh pip install .

which allows you to use floogen with the following command:

sh floogen -c <config_file> -o <output_dir>

Configuration

The example configuration above shows the basic structure of a configuration file. A more detailed description of the configuration file can be found in the documentation.

Owner

  • Name: pulp-platform
  • Login: pulp-platform
  • Kind: organization

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: >-
  FlooNoC: A Multi-Tb/s Wide NoC for Heterogeneous AXI4
  Traffic
message: >-
  If you use FlooNoC in your work, please cite it using the
  metadata from this file.
type: software
authors:
  - given-names: Tim
    family-names: Fischer
    email: fischeti@iis.ee.ethz.ch
    affiliation: ETH Zurich
    orcid: 'https://orcid.org/0009-0007-9700-1286'
  - given-names: Michael
    family-names: Rogenmoser
    email: michaero@iis.ee.ethz.ch
    affiliation: ETH Zurich
    orcid: 'https://orcid.org/0000-0003-4622-4862'
  - given-names: Matheus
    family-names: Cavalcante
    email: matheusd@iis.ee.ethz.ch
    affiliation: ETH Zurich
    orcid: 'https://orcid.org/0000-0001-9199-1708'
  - given-names: Frank
    family-names: Gurkaynak
    email: kgf@iis.ee.ethz.ch
    affiliation: ETH Zurich
    orcid: 'https://orcid.org/0000-0002-8476-554X'
  - given-names: Luca
    family-names: Benini
    email: lbenini@iis.ee.ethz.ch
    affiliation: ETH Zurich
    orcid: 'https://orcid.org/0000-0001-8068-3806'
identifiers:
  - type: url
    value: "https://ieeexplore.ieee.org/document/10225380"
  - type: doi
    value: 10.1109/MDAT.2023.3306720
preferred-citation:
  type: article
  title: >-
    FlooNoC: A Multi-Tb/s Wide NoC for Heterogeneous AXI4
    Traffic
  authors:
    - given-names: Tim
      family-names: Fischer
      email: fischeti@iis.ee.ethz.ch
      affiliation: ETH Zurich
      orcid: 'https://orcid.org/0009-0007-9700-1286'
    - given-names: Michael
      family-names: Rogenmoser
      email: michaero@iis.ee.ethz.ch
      affiliation: ETH Zurich
      orcid: 'https://orcid.org/0000-0003-4622-4862'
    - given-names: Matheus
      family-names: Cavalcante
      email: matheusd@iis.ee.ethz.ch
      affiliation: ETH Zurich
      orcid: 'https://orcid.org/0000-0001-9199-1708'
    - given-names: Frank
      family-names: Gurkaynak
      email: kgf@iis.ee.ethz.ch
      affiliation: ETH Zurich
      orcid: 'https://orcid.org/0000-0002-8476-554X'
    - given-names: Luca
      family-names: Benini
      email: lbenini@iis.ee.ethz.ch
      affiliation: ETH Zurich
      orcid: 'https://orcid.org/0000-0001-8068-3806'
  doi: "10.1109/MDAT.2023.3306720"
repository-code: 'https://github.com/pulp-platform/FlooNoC'
abstract: >-
  This article introduces an open-source, low-latency
  Network-on-Chip (NoC) designed to tackle bandwidth
  challenges faced by traditional narrow and serialized
  NoCs. The authors demonstrate the effectiveness of wide
  channels by integrating a 5 × 5 router and links within a
  9-core compute cluster using 12-nm FinFet technology.
keywords:
  - Bandwidth
  - Protocols
  - Scalability
  - Network-on-Chip
  - Routing
  - Network Interfaces
license: SHL-0.51

GitHub Events

Total
  • Create event: 28
  • Release event: 2
  • Issues event: 35
  • Watch event: 80
  • Delete event: 20
  • Issue comment event: 56
  • Push event: 116
  • Pull request review event: 27
  • Pull request review comment event: 22
  • Pull request event: 50
  • Fork event: 17
Last Year
  • Create event: 28
  • Release event: 2
  • Issues event: 35
  • Watch event: 80
  • Delete event: 20
  • Issue comment event: 56
  • Push event: 116
  • Pull request review event: 27
  • Pull request review comment event: 22
  • Pull request event: 50
  • Fork event: 17

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 20
  • Total pull requests: 25
  • Average time to close issues: 2 months
  • Average time to close pull requests: 9 days
  • Total issue authors: 10
  • Total pull request authors: 10
  • Average comments per issue: 0.55
  • Average comments per pull request: 0.24
  • Merged pull requests: 16
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 18
  • Pull requests: 25
  • Average time to close issues: 7 days
  • Average time to close pull requests: 9 days
  • Issue authors: 10
  • Pull request authors: 10
  • Average comments per issue: 0.44
  • Average comments per pull request: 0.24
  • Merged pull requests: 16
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • mubashir913 (12)
  • tayyabshaikh (9)
  • pkushiwang (3)
  • HamasWaqar (2)
  • thatdanish (2)
  • NorrisChina (2)
  • L3CT0RLI (2)
  • makotolagano (2)
  • skang2004 (1)
  • xuyizhao (1)
  • solomatnikov (1)
  • Abdul-muheet-ghani (1)
  • cwy051731 (1)
  • vineelasain (1)
  • davidliu2024 (1)
Pull Request Authors
  • fischeti (47)
  • Lura518 (4)
  • Aquaticfuller (2)
  • rehankarthikchandralal (1)
  • Konste11ation (1)
  • micprog (1)
  • liyinrong (1)
  • gbellocchi (1)
  • yvantor (1)
  • MingruiYuan (1)
  • alenad95 (1)
  • colluca (1)
  • yichao-zh (1)
  • pkushiwang (1)
Top Labels
Issue Labels
Pull Request Labels

Dependencies

.github/workflows/gitlab-ci.yml actions
  • pulp-platform/pulp-actions/gitlab-ci v2 composite
.github/workflows/lint.yml actions
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
  • chipsalliance/verible-linter-action main composite
  • pulp-platform/pulp-actions/bender-install v2 composite
  • pulp-platform/pulp-actions/bender-up-to-date v2 composite
  • pulp-platform/pulp-actions/lint-license v2 composite
requirements.txt pypi
  • hjson *
  • jsonref *
  • mako *