All Projects → agalimberti → NoCRouter

agalimberti / NoCRouter

Licence: MIT License
RTL Network-on-Chip Router Design in SystemVerilog by Andrea Galimberti, Filippo Testa and Alberto Zeni

Programming Languages

SystemVerilog
227 projects

Projects that are alternatives of or similar to NoCRouter

tnoc
Network on Chip Implementation written in SytemVerilog
Stars: ✭ 91 (+133.33%)
Mutual labels:  noc, network-on-chip
TG799VAC-XTREME-17.2-MINT
My personal unique wiki for hacking the router firmware used by (Telia)TG799vac Xtream v17.2-MINT delivered from Technicolor
Stars: ✭ 71 (+82.05%)
Mutual labels:  router
wolfpacs
WolfPACS is an DICOM load balancer written in Erlang.
Stars: ✭ 1 (-97.44%)
Mutual labels:  router
froute
Type safe and flexible router for React
Stars: ✭ 31 (-20.51%)
Mutual labels:  router
chomex
Chrome Extension Messaging Routing Kit / Promisify Chrome Messaging / LocalStorage Object Mapper
Stars: ✭ 41 (+5.13%)
Mutual labels:  router
VueStudy
Vue.js学习系列示例代码及教程
Stars: ✭ 80 (+105.13%)
Mutual labels:  router
radvd
radvd | Official repository: https://github.com/radvd-project/radvd
Stars: ✭ 138 (+253.85%)
Mutual labels:  router
routedux
A router that maps urls to redux actions and vice-versa
Stars: ✭ 19 (-51.28%)
Mutual labels:  router
ROS Scripts
Scripts for RouterOS (MikroTik devices)
Stars: ✭ 81 (+107.69%)
Mutual labels:  router
TutoAsus
Tutorial on how to setup a nginx reverse proxy on Asus router with Merlin firmware, and get Let's Encrypt certificate with acme.sh.
Stars: ✭ 35 (-10.26%)
Mutual labels:  router
nuxt-interpolation
Nuxt.js module as directive for binding every link to catch the click event, and if it's a relative link router will push.
Stars: ✭ 38 (-2.56%)
Mutual labels:  router
universal-router
↩️ Router for every occasions
Stars: ✭ 64 (+64.1%)
Mutual labels:  router
trail
Routing library for the Scala platform
Stars: ✭ 76 (+94.87%)
Mutual labels:  router
highway
Highway - A Modern Javascript Transitions Manager
Stars: ✭ 1,349 (+3358.97%)
Mutual labels:  router
backbone.base-router
A better starting point for building a new Backbone Router.
Stars: ✭ 49 (+25.64%)
Mutual labels:  router
react-native-boilerplate
Ready-made structure of your next React Native application within a few minutes.
Stars: ✭ 36 (-7.69%)
Mutual labels:  router
MinecraftNOC
DevJam 2020: In-game NOC boards
Stars: ✭ 27 (-30.77%)
Mutual labels:  noc
dodgr
Distances on Directed Graphs in R
Stars: ✭ 106 (+171.79%)
Mutual labels:  router
crizmas-mvc
raulsebastianmihaila.github.io/crizmas-mvc-docs/
Stars: ✭ 12 (-69.23%)
Mutual labels:  router
oas2
OpenAPI 2.0 (aka Swagger) utils for Golang.
Stars: ✭ 19 (-51.28%)
Mutual labels:  router

NoCRouter - RTL Router Design in SystemVerilog

Summary

We developed a Network-on-Chip interconnection module with a 2D mesh topology, enabling the connection of computing nodes either in a direct or indirect network.

The routers allocate data at flit granularity, implementing a wormhole switching architecture further optimized by the presence of multiple virtual channels per input, avoiding the Head of Line blocking issue and thus allowing an higher average throughput to the network.

Packet routing is driven by the Dimension Order Routing algorithm, independently computed by each router belonging to the mesh.

Flow control is implemented in the switching activity management, which is controlled by a per-router switch allocation unit, and uses the On/Off algorithm, easy to implement but efficient enough for a medium level of traffic in the network.

Design and implementation

The Network-on-Chip router has been developed following a bottom-up approach, for easier testing purposes, as simple, lower-level modules were implemented and tested before moving on to higher-level modules.

A strong emphasis has been put on simplifying the connections between the submodules of the router, thus the interface construct provided by SystemVerilog has been widely adopted.
This helps in decoupling the functional part of the modules from their I/O specification, making the connections and interactions between them easier to understand even from the source code.

For each virtual channel at each port, a single-bit error output is implemented to signal to the external environment the detection of errors (e.g., inconsistencies in the signals between allocators and input ports, or ill-formed packets).
This allows verifying that the interconnection network works correctly, with respect to the most critical corner cases, also when deployed in a real-life scenario.

Verification

The verification phase has not been approached from a complete functional testing point of view, as developing a complete testbench for the whole developed system would have required a disproportionate effort with respect to the desired quality level.
Instead, testing properly chosen corner cases has been deemed enough for the verification purposes of this project, thus all the router submodule and the router and mesh modules are each tested in their own testbench module.

In particular, each testbench contains the module to be tested (DUT) and the necessary logic to both steer the input signals of the DUT and check its output signals, and verifies the correctness of the DUT output signals by checking them against the expected output values inside a scoreboard structure.

Testing of single modules and of multiple modules interacting with each other has been performed with a bottom-up approach, alongside the development phase, both by manually analyzing the VCD waveforms produced by simulations in the Vivado environment and by means of testbenches self-evaluating the results of the same simulations.
All tests have been executed in the Vivado HL WebPack 2016.4 IDE on Linux machines.

For further information, refer to the project documentation.

The project was carried out by Andrea Galimberti (@agalimberti), Filippo Testa (@f-testa) and Alberto Zeni (@albertozeni) in the Embedded Systems course at Politecnico di Milano, A.Y. 2016/2017.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].