All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Support for source-based routing algorithm in routers, chimnyes and
floogen
. The route is encoded in the header as aroute_t
field, and each router consumes a couple of bits to determine the output ports. In the chimney, a two-stage encoder was added to first determine the destination ID of the request, and then retrive the pre-computed route to that destination from a table. Thefloogen
configuration was extended to support the new routing algorithm, and it will also generate the necessary tables for the chimneys. - Chimneys now support multiple AXI IDs for non-atomic transactions by specifying the
MaxUniqueids
parameter. This will mitigate ordering of transactions from initially different IDs or endpoints at the expense of some complexity in themeta_buffer
which then usesid_queue
to store the meta information required to return responses. - The conversion from req/rsp with different ID widths from/to NoC has been moved from the chimneys to the
floo_meta_buffer
module. - Added virtual channel router
floo_vc_router
and correspondingfloo_vc_narrow_wide_chimney
. Currently only supports XY-Routing and mesh topologies. - Preliminary support for multiple local ports in the routers.
- Additional traffic pattern generation and visualization.
- Added option in
floogen
to define the direction ofconnections
to/from routers withdst_dir
andsrc_dir
flags. This replaces the previousid_offset
flag for that purpose. Specifying the direction of the connection is useful for mesh topologies withXYRouting
, but also for tile-based implementation, where the order of the ports matters resp. needs to be known. routers
infloogen
can no be configured withdegree
to overwrite the number of ports. This is manily useful for tile-based implementations, where all tiles should have identical routers.
floo_route_comp
now supports source-based routing, and can output both destination ID and a route to the destination.- The chimneys have an additional port
route_table_i
to receive the pre-computed routing table that is generated byfloogen
. - System address map was renamed from
AddrMap
toSam
. - The destination field in the flit header have a new type
dst_t
which is either set toroute_t
for the new source-based routing algorithm, andid_t
for all the other routing algorithms. - Bumped
idma
dependency to0.6
- Renamed
rsvd
field in flits topayload
to better reflect its purpose. - Reordered directions in
route_direction_e
to better support multiple local ports. - Moved all system related rendered parameters from the flit package to its own package in
my_system_floo_noc.sv
. This allows to use the auto-generated routing information for tile-based implementations, that are assembled by hand. - The
bidirectional
flag forconnections
infloogen
is set totrue
by default, since uni-directional links are currently not supported. - The System Address now needs to be passed as a parameter in the
chimneys
, since it is not part of the flit packages anymore.
- The generation of the unique ID has been changed resp. aligned for 2D meshes to increment Y-first and X-second. This way the address range and ID increment are consistent with each other.
- Broadcasted input
id_i
in the chimneys should not throw an error anymore in elaboration. - The
id_offset
should not be correctly applied in the system address map. Before it resulted in negative coordinates. - The
axi_ch_e
types now have an explicit bitwidth. Previously, this caused issues during elaboration since a 32-bit integer was used as a type. - Fixed a typedef in
floo_vc_arbiter
when settingNumVirtChannels
to 1, that caused issue when compiling with Verilator. - Fixes issue that the routing table was not renderred when
IdTable
was used as the routing algorithm.
- Removed all
floo_synth*
wrapper modules. They are moved to the internal PD repository, since they are not really maintained as part of the FlooNoC repository.
- Added assertions to XY routers with routing optimization enabled to catch packets that want to Y->X which is illegal in XY routing.
- The parameters
EnMgrPort
andEnSbrPort
are swapped in the chimneys to be more consistent. FlooNoC defines subordinate ports as requests that go out of the NoC to AXI subordinates (i.e. memories) that return a response, and manager ports as requests that come into the NoC from AXI managers (i.e. cores). - The
floo_narrow_wide_join
now usesaxi_riscv_atomics
to filter out atomic operations. Theatop_filter
are still there but are disabled by default.
- Synthesis wrappers now use the more generic
id_t
instead of the deprecatedxy_id_t
type as a parameter. - The specified ID offset is now also rendered for routers in
floogen
. - Fixed a template rendering issue where XY routers could not be rendered when the first direction (
EJECT
) was not defined.
- Removed
floo_synth_mesh
,floo_synth_mesh_ruche
&floo_synth_router_simple
synthesis wrappers, since they are not used anymore.
floo_narrow_wide_join
which joins a narrow and a wide AXI bus
- Wormhole routing for bursts was removed for some channels in the chimney since it is generally not necessary if the header information is sent in parallel to the payload.
- Output directory passed to
floogen
is now relative to the current working directory instead of the installation folder offloogen
. - Write ordering in the narrow-wide version was incorrect. Sending
AW
andW
beats over different channels would have allowed to arrive them out of order, if multiple managers are sending write requests to the same subordinate, which could result in interleaving of the data. This is now fixed by sendingAW
andW
beats over the same wide channel. TheAW
andW
beats are coupled together and wormhole routing prevents interleaving of the data.
- Added NoC generation framework called
floogen
. Also added documentation forfloogen
in thedocs
folder. - Added Chimney Parameters
EnMgrPort
andEnSbrPort
to properly parametrize Manager resp. Subordinate-only instances of a chimney - Added
XYRouteOpt
parameter to router to enable/disable routing optimizations when usingXYRouting
- the exported include folder of the
floo
package is moved tohw/include
. - The
LICENSE
file was updated to reflect that the project uses theSolderpad Hardware License Version 2.1
for allhw
files and theApache License 2.0
for software related files. - The directory was restructured to accomodate the new
floogen
framework. Thesrc
was renamed tohw
, which contains only SystemVerilog code. Test modules and testbenches were also moved tohw/test
andhw/tb
respectively. The same holds true for wave files, which are now located inhw/tb/wave
. - The SV packages
floo_axi_pkg
andfloo_narrow_wide_pkg
are now generated byfloogen
. The configuration files were moved to thefloogen/examples
folder, and were aligned with the newfloogen
configuration format, that is written inYAML
instead ofhjson
. - Reworked the python dependencies to use
pyproject.toml
instead ofrequirements.txt
. Furthermore, the python requirement was bumped to3.10
due tofloogen
(which makes heavy use of the newermatch
syntax) - Removed
xy_id_i
ports from AXI chimneys in favor of a genericid_i
port for bothIdTable
andXYRouting
- Changed auto-generated package configuration schema. The
header
field is replaced in favor of arouting
field that better represents the information needed for routing. XYRouting
now also supports a routing table similar to theIdTable
routing table. Before the destination was determined based on a couple of bits in the address. This however did not allow for a lot of flexibility and requires a larger addres width.
- Fixed missing backpressure in the
NoRoB
version of the reorder buffer, which could lead to overflow of counters
axi_channel_compare
was removed in favor ofaxi_chan_compare
from theaxi
repository.- Removed flit generation script
flit_gen.py
including configuration files, since this is now integrated intofloogen
(in conjunction with the--only-pkg
flag)
- Bump dependencies
- Renamed
*_flit_pkg
to*_pkg
- New naming scheme of ports: All AXI ports are now prefixed with
axi_
, all FlooNoC links are now prefixed withfloo_
- Renamed
floo_param_pkg
tofloo_test_pkg
- Renamed AXI
resp_t
structs torsp_t
- Changed configuration format to align with upcoming FlooNoC generation script
- Table based routing support in
narrow_wide_chimney
- Support for different number of inputs and outputs in
narrow_wide_router
- Add wrapper for different types of Reorder Buffers in chimneys
- Support for simple RoB-less chimneys with ID counters
- Test modules
floo_axi_rand_slave
&floo_dma_test_node
now supportaddr_width > 32
- Fixed synchronization issues for ATOP B and R responses
- Initial early public release