Skip to content

docs: Extend documentation + deploy with mkdocs #70

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 52 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
434ba30
py: Add `docs` dependencies
fischeti Sep 6, 2024
1a7a482
doc: Add initial doc flow
fischeti Sep 6, 2024
0615443
py: Remove unused dependencies
fischeti Sep 6, 2024
9885306
py: Add `dev` dependencies
fischeti Sep 6, 2024
0f02d95
REVERT: publish on feature branch
fischeti Sep 6, 2024
c93724c
ci: Correct python version
fischeti Sep 6, 2024
c001335
gh-pages: Try with lower case URL
fischeti Sep 9, 2024
e7dd262
Revert "gh-pages: Try with lower case URL"
fischeti Sep 9, 2024
6c46eb7
docs: Rename `gs.md` to `getting_started.md`
fischeti Sep 9, 2024
2363720
docs: Update README
fischeti Sep 9, 2024
993deb9
docs: Initial `index.md` file
fischeti Sep 9, 2024
876d925
docs: Add repository structure
fischeti Sep 9, 2024
4799c30
docs: Initial `docs` directory structure
fischeti Sep 9, 2024
6bb79fe
docs: Add custom color and stylesheet
fischeti Sep 9, 2024
c191c84
docs: Use custom logo and favicon
fischeti Sep 9, 2024
79ef115
docs: Use sticky tabs
fischeti Sep 9, 2024
cc9eb95
docs: Use instant navigation
fischeti Sep 9, 2024
ae622fd
docs: Remove unused options
fischeti Sep 9, 2024
7f619a4
docs: Make dedicated "Getting Started" tab
fischeti Sep 9, 2024
71e3908
docs: Add Changelog
fischeti Sep 9, 2024
0ae2905
docs: Try the `social` plugin
fischeti Sep 9, 2024
fae5ded
docs: Show revision date and authors
fischeti Sep 9, 2024
20900a9
docs: Add `site_url`
fischeti Sep 9, 2024
77aeb50
docs: Remove unused config
fischeti Sep 9, 2024
f63765a
docs: Fetch entire history
fischeti Sep 9, 2024
2937d2f
docs: Make license linter happy
fischeti Sep 9, 2024
2924a2e
docs: Update getting started guide
fischeti Sep 10, 2024
b854b41
docs: Don't use code commiters plugin anymore
fischeti Sep 10, 2024
34ca68a
docs: Use tabbed for code
fischeti Sep 10, 2024
d8ae319
make: Use `vsim` executable by default
fischeti Sep 10, 2024
d08dc47
docs: Update getting started
fischeti Sep 11, 2024
f7c7aa8
docs: Add quick links to Home
fischeti Sep 11, 2024
ab2dc7e
docs(theme): Don't use automatic dark/lite theme
fischeti Sep 11, 2024
7e850ad
docs(hw): Extend structure
fischeti Sep 11, 2024
a527aa3
docs(hw): Add overview
fischeti Sep 11, 2024
0ea48ca
docs(hw): Start with link documentation
fischeti Sep 12, 2024
8031f4b
docs(gs): Fix license box
fischeti Sep 14, 2024
86d8e33
docs(hw): Rename to flits and add link page
fischeti Sep 14, 2024
d6b73ad
ci: Uncomment `main` branch trigger
fischeti Sep 14, 2024
49ca46f
docs(hw): Channels & Links update
fischeti Sep 16, 2024
48ae842
docs(hw): Small update for flit table
fischeti Sep 16, 2024
d0b8971
docs(hw): Update channel and links
fischeti Sep 18, 2024
2541e13
docs(hw): Update links section
fischeti Sep 28, 2024
6d2ff04
docs(general): Add empty `CONTRIBUTING.md`
fischeti Sep 28, 2024
900b100
docs(hw): Write route algos section
fischeti Sep 28, 2024
097d2a7
docs(hw): Update chimney section
fischeti Oct 22, 2024
8698533
doc(hw): Update ID handling
fischeti Mar 29, 2025
ed0ed72
docs(hw): Update chimney configuration section
fischeti Mar 29, 2025
1d1813a
pyproject.toml: Remove duplicate dependencies
fischeti Mar 29, 2025
f62c1b5
docs(links): Update arXiV paper link
fischeti Mar 29, 2025
b1e5dfc
docs(gs): Fix small error
fischeti Mar 29, 2025
7503cb7
docs(floogen): Start floogen documentation
fischeti Mar 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/publish-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Copyright 2024 ETH Zurich and University of Bologna.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Author: Tim Fischer <[email protected]>

name: publish-docs

on:
push:
branches:
- main
workflow_dispatch:

jobs:

deploy:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
cache: pip
- name: Install Python requirements
run: pip install .[docs]
- name: Deploy Documentation
run: mkdocs gh-deploy --force
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ run-sim-batch: run-vsim-batch
############

BENDER ?= bender
VSIM ?= questa-2023.4 vsim
VSIM ?= vsim
SPYGLASS ?= sg_shell
VERIBLE_FMT ?= verible-verilog-format
VCS ?= vcs-2022.06 vcs
Expand Down
19 changes: 12 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<img src="docs/img/pulp_logo_icon.svg" alt="Logo" width="100" align="right">
</a>

This repository provides modules for the FlooNoC, a Network-on-Chip (NoC) which is part of the [PULP (Parallel Ultra-Low Power) Platform](https://pulp-platform.org/). The repository includes Network Interface IPs (named chimneys), Routers and further NoC components to build a complete NoC. FlooNoC mainly supports [AXI4+ATOPs](https://github.com/pulp-platform/axi/tree/master), 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.
_FlooNoC_, is a Network-on-Chip (NoC) research project, which is part of the [PULP (Parallel Ultra-Low Power) Platform](https://pulp-platform.org/). The main idea behind _FlooNoC_ is to provide a scalable high-performance NoC for non-coherent systems. _FlooNoC_ was mainly designed to interface with [AXI4+ATOPs](https://github.com/pulp-platform/axi/tree/master), but can easily be extended to other On-Chip protocols. _FlooNoC_ already provides network interface IPs (named chimneys) for AXI4 protocol, which converts to a custom-link level protocol that provides significantly better scalability than AXI4. _FlooNoC_ also includes protocol-agnostic routers based on the custom link-level protocol to transport payloads. Finally, _FlooNoC_ also include additional NoC components to assemble a complete NoC in a modular fashion. _FlooNoC_ is also highly flexible and supports a wide variety of topologies and routing algorithms. A Network generation framework called _FlooGen_ makes it possible to easily generate entire networks based on a simple configuration file.

<div align="center">

Expand All @@ -29,13 +29,18 @@ This repository provides modules for the FlooNoC, a Network-on-Chip (NoC) which

## 💡 Design Principles

Our NoC design is grounded in the following key principles:
_FlooNoC_ design is based on the following key principles:

1. **Full AXI4 Support**: _FlooNoC_ fully supports AXI4+ATOPs from AXI5 as outlined [here](https://github.com/pulp-platform/axi/tree/master), providing a high-bandwidth and latency-tolerant solution. _FlooNoC_ achieves this with full support for bursts and multiple outstanding transactions.

1. **Decoupled Links and Networks**: _FlooNoC_ uses 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 than multi-layer AXI networks.

1. **Wide Physical Channels**: _FlooNoC_ uses wide physical channels to meet the high-bandwidth requirements at network endpoints without being constrained by the operating frequency. In contrast to traditional NoCs which use serialization with header and tail flits to transport a message, _FlooNoC_ avoids any kind of serialization and sends entire messages in a single flit including header and tail information.

1. **Separation of traffic**: _FlooNoC_ addresses diverse types of traffic that can occur in non-coherent systems, by decoupling multiple links to handle wide, high-bandwidth, burst-based traffic and narrow, latency-sensitive traffic with separate physical channels.

1. **Modularity:** The _FlooNoC_ architecture is designed with modularity in mind. It includes 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.

1. **Full AXI4 Support**: Our design fully supports AXI4+ATOPs from AXI5 as outlined [here](https://github.com/pulp-platform/axi/tree/master), 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.
1. **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.
1. **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.
1. **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.
1. **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

Expand Down
1 change: 1 addition & 0 deletions docs/Apache-License.md
3 changes: 3 additions & 0 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Guide to Contributing

TODO
1 change: 1 addition & 0 deletions docs/SHL-License.md
1 change: 1 addition & 0 deletions docs/changelog.md
Empty file added docs/floogen/cli.md
Empty file.
Empty file added docs/floogen/connections.md
Empty file.
Empty file added docs/floogen/endpoints.md
Empty file.
Empty file added docs/floogen/known_issues.md
Empty file.
70 changes: 70 additions & 0 deletions docs/floogen/overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Overview

_FlooNoC_ comes with a generation framework called _FlooGen_. It allows to create complex network configurations with a high-level configuration file.

## How it works

Internally _FlooGen_ has a graph-based representation of the network based on the configuration file that is given as an input by the user. Thanks to this, _FlooGen_ is capable of performing the following things:

- **Validation**: The configuration given by the user is validated to ensure that the input is valid and does not contain any accidental mistakes. For instance, _FlooGen_ automatically checks for overlapping address ranges, or router ports that are assigned multpile times.

- **Routing**: Based on the connectivity graph of the network, _FlooGen_ is able to derive all required routing related information such as routing tables and the system address map which is used by routers and network interfaces.

- **Package Generation**: _FlooGen_ automatically generates a SystemVerilog package with all the needed AXI and flit types, which additionally includes all the routing information.

- **Top Module Generation**: _FlooGen_ can also generate a top module that instantiates all router and network interfaces. The interfaces of the top module are AXI4 interfaces for all the enpdoints specified in the configuration.

## Exmaple configuration

Below is an example of a configuration for a simple 4x4 mesh network, which will be explained in more detail in the next sections:

```yaml
name: axi_mesh
description: "AXI mesh configuration with XY routing for FlooGen"
network_type: "axi"

routing:
route_algo: "XY"
use_id_table: true

protocols:
- name: "axi_in"
protocol: "AXI4"
data_width: 64
addr_width: 48
id_width: 4
user_width: 1
- name: "axi_out"
protocol: "AXI4"
data_width: 64
addr_width: 48
id_width: 2
user_width: 1

endpoints:
- name: "cluster"
array: [4, 4]
addr_range:
base: 0x0000_0000_0000
size: 0x0000_0001_0000
mgr_port_protocol:
- "axi_in"
sbr_port_protocol:
- "axi_out"

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

connections:
- src: "cluster"
dst: "router"
src_range:
- [0, 3]
- [0, 3]
dst_range:
- [0, 3]
- [0, 3]
dst_dir: "Eject"
```
Empty file added docs/floogen/protocols.md
Empty file.
Empty file added docs/floogen/routers.md
Empty file.
Empty file added docs/floogen/routing.md
Empty file.
93 changes: 93 additions & 0 deletions docs/getting_started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Getting Started

## Prerequisites

### Bender

_FlooNoC_ uses [Bender](https://github.com/pulp-platform/bender) for hardware IPs and dependency management. Bender is available through Cargo or as pre-compiled binaries for Linux, macOS, and Windows:

=== "Cargo"

```bash
cargo install bender
```

=== "Precompiled"

```bash
curl --proto '=https' --tlsv1.2 https://pulp-platform.github.io/bender/init -sSf | sh
```

Make sure that the Bender binary directory is in your `PATH`, or set the `BENDER` environment variable to the path of the Bender binary.

### Python

Some parts of _FlooNoC_ including the _FlooGen_ generator are written in Python. The required Python version is 3.10 or higher. You can install Python from the [official website](https://www.python.org/downloads/).

### Simulation Tools

Currently, we don't provide any open-source simulation setup such as Verilator. _FlooNoC_ was internally tested and verified with QuestaSim-2023.4. To run the RTL simulations you need to have QuestaSim installed. By default, _FlooNoC_ uses the `vsim` command to run the simulations, which can be overridden by setting the `VSIM` environment variable.

## Installation

Clone the repository from GitHub:

```bash
git clone https://github.com/pulp-platform/FlooNoC.git
```
Install the python dependencies and _FlooGen_:

```bash
pip install .
```

## Usage

### Running the Testbenches

Now you can compile and run the testbenches with the following command:

```bash
make compile-sim
make run-sim VSIM_TB_DUT=tb_floo_dut
```
where you replace `tb_floo_dut` with the testbench that you want to simulate.

### Generating a _FlooNoC_ Network

To generate a _FlooNoC_ network using the _FlooGen_ generator, you can use the following command:

```bash
floogen -c examples/floo_dut.yaml -o generated
```

## Optional dependencies

For the development on _FlooGen_, it is recommended to install the `dev` dependencies for python linting and testing:

=== "bash"

```bash
pip install .[dev]
```

=== "zsh"

```zsh
pip install .\[dev\]

```
For documentation generation, you can install the `docs` dependencies:

=== "bash"

```bash
pip install .[docs]
```

=== "zsh"

```zsh
pip install .\[docs\]

```
Loading
Loading