Releases: pulp-platform/FlooNoC
Releases · pulp-platform/FlooNoC
v0.6.1
Added
FlooGen
- New query feature in FlooGen to be able to query the objects of the internal representation of the networks. For instance, the following command returns the number of endpoints defined in a 2D array instantiation:
floogen -c config.yml --query "endpoints.some_ep.num"(#119) - New CLI flags
--verible-fmt-binand--verible-fmt-argsto define specific verible binary and additional arguments. (#120)
Changed
FlooGen
- The error of not finding a
verible-verilog-formatbinary in thePATHhas been downgraded to a warning, which can be disabled entirely with the--no-formatflag. (#120)
v0.6.0
Added
Hardware
- The
floo_pkgwas extended with helper functions to calculate the size of AXI payloads and mapping of AXI to Floo Channels. (#65) - Multiple configuration structs were introduced to enable a more flexible and non-verbose configuration of the FlooNoC modules. (#65)
- The
AxiCfgdescribes all the necessary parameters needed for the type definitions of a bidirectional AXI interface - The
RouteCfgdescribes all the necessary routing information parameters required by the chimneys. - The
ChimneyCfgdescribes all other parameters for the data path of the chimney (e.g. Mgr/Sbr port enable, number of oustanding transactions, RoB types & sizes, etc.)
- The
- The
floo_test_pkgnow defines default configurations for all the new configuration structs that are used by the testbenches. (#65) - Add
floo_axi_routermodule, which is a wrapper similar to thefloo_nw_routerbut for single-AXI configurations, and can be used in conjunction withfloo_axi_chimney. (#69) floo_nw_joinnow also allows to convert to a narrow AXI interface, which is useful for accessing peripherals for instance.- The atomic adapter in
floo_nw_joincan now be disabled withEnAtopAdapter.
FlooGen
- The
data_widthanduser_widthfields forprotocolsare now also validated to be compatible with each other. (#65) - All the various
*Cfg's is now rendered by FlooGen, either in the*_noc_pkgor in the*_nocmodule itself. (#65) - Added support for single-AXI configuration networks. (#69)
- Support for negative increments when specifying a
src_rangeordst_rangein theconnectionsschema. (#77) - Add support for multiple non-contiguous address ranges for endpoints. (#80)
- Added a
sam_idx_eenum in the package, which allows to directly index into the system address map. (#111)
Changed
Hardware
- The
floo_narrow_wide_*modules and the corresponding testbenches were renamed tofloo_nw_*to be more concise. (#65) - The flit type definitions are now implemented as SystemVerilog macros in
typedef.svh. (#65) - The parametrization of the chimney modules has changed dramatically. They now use the newly introduced
*Cfg's from thefloo_pkg. In the narrow-wide chimneys, both datapaths now have their own configs (i.e.*CfgNand*CfgW), to reduce the verbosity of the module instantiation. (#65) - The payload field name in each
*_chan_ttype previously had its own name. This was unified topayloadsince*_chan_talready determines the type of the payload. (#65) - The input and output buffer FIFO depth of the routers were renamed to
InFifoDepthandOutFifoDepthto be more consistent (previouslyChannelFifoDepthandOutputFifoDepth). (#65) - The narrow-wide router wrapper now also requires the
AxiCfgstructs to redefine the link types internally. (#65) - The
ReorderBufferSizeparameters was shortened toRoBSize. (#65) - All testbenches were adapted to all changes. (#65)
- All verification IPs were adapted to the new configuration structs. (#65)
- Added default spill registers for outgoing AW requests in the chimneys. This is necessary since AXI allows to wait for AW and W to be valid before asserting the ready. AW and W beats are sent over the same channel, so this might lead to deadlocks otherwise. (#89)
FlooGen
- The link typedefs are now renderd with the macros in
typedef.svhinstead of rendering them in pure SystemVerilog. (#65) - The template files were renamed to use the more concise
nwnaming scheme. (#65) - The generated modules and packages of FlooGen are now named
floo_*_nocresp.floo_*_noc_pkgwhich is more consistent since all other modules have thefloo_*prefix. (#65) - The
protocolsschema was adapted a bit to be more intuitive. (#65)- The
typefield was renamed toprotocol, which currently only acceptsAXI4. A newtypefield now is used by FlooGen to now where to attach the protocol in the network interface. Currently, FlooGen only supports the narrow-wide AXI configuration, hence onlynarrow|wideis allowed astypevalues. - The
directionfield in theprotocolschema is no longer required, since the direction is determined when specifyingmgr_port_protocolandsbr_port_protocol. - The
namefield must be unique now, since it is used bymgr_port_protocolandsbr_port_protocolto reference the exact protocol. - All examples were adapted to reflect those changes.
- The
- A FlooGen configuration file now requires a
network_typefield, to determine the type of network to generate. The options areaxifor single-AXI networks andnarrow-widefor the narrow-wide AXI configurations. (#69) - The system address map
Samis now sorted correctly and can be indexed withep_id_evalues. (#72) id_offsetwas renamed toxy_id_offset, since this is now only applicable inXYRoutingnetworks. An ID offset does not make sense for other types of routing algorithms. The use ofid_offsetis anyway not recommended anymore, since the direction of the connections can be specified in theconnectionsschema. (#72)- Endpoint names in the
ep_id_eenum, which are created as 2D arrays now have clearer naming scheme by prefixing them withXandY. (#90) - The package and the top-module of the generated network are now seperated into its own modules
floo_*_noc.svandfloo_*_noc_pkg.sv. (#110) - The
--only-pkgand-only-topflags were added to the FlooGen CLI to omit the generation of the package resp. the top-module. (#110) - If
--outdirresp.-ois not specified FlooGen will print the generated files to stdout instead of writing them to a file. (#110)
Fixed
- A bug in the calcuation of the RoB offset in
floo_robwas fixed. Previously, the allocation and the write process used the same counter in bursts for offset calculation, which resulted in wrong offsets. (#65) - Routers with
XYRoutingdo now use the globalid_offset, which was previously not accounted for (or had to be specified manually). (#72) - Fixed elaboration errors in the chimneys that occured. (#75)
- Fixed Synopsys DC elaboration error due to concatenation in
id_iport connection of chimneys and routers. (#103) - Undriven signals in
floo_meta_bufferifAtopSupportis disabled. (#89)
Removed
Hardware
- As the flit type definitions were moved to
typedef.svh, the auto-generatedfloo_*_pkgpackages were removed from the repository. Furthermore, all the (global) imports of those packages in the modules were replaced by parameters. (#65) - The testbench
tb_floo_nw_chimneywas removed since it was neither used nor maintained anymore. (#65) - The
IdIsPortrouting algorithm was removed since it can only be used for routes over a single router. The same functionality can be achieved with theSourceRoutingalgorithm. (#65) - The
dma_meshtestbench was removed in favor ofnw_meshandaxi_meshwhich use generated networks with FlooGen. (#72)
FlooGen
- The package generation was removed from FlooGen since it is now handled by the
typedef.svhfile. Further, the--only-pkgand--pkg-outdirflags were removed from the FlooGen CLI. (#65) - The calculation of link sizes and AXI to Floo channel mapping was removed from the FlooGen configuration file. This is now handled by the
floo_pkghelper functions. (#65)
v0.5.0
Added
- Support for source-based routing algorithm in routers, chimnyes and
floogen. The route is encoded in the header as aroute_tfield, 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. Thefloogenconfiguration 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
MaxUniqueidsparameter. This will mitigate ordering of transactions from initially different IDs or endpoints at the expense of some complexity in themeta_bufferwhich then usesid_queueto 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_buffermodule. - Added virtual channel router
floo_vc_routerand 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
floogento define the direction ofconnectionsto/from routers withdst_dirandsrc_dirflags. This replaces the previousid_offsetflag 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. routersinfloogencan no be configured withdegreeto overwrite the number of ports. This is manily useful for tile-based implementations, where all tiles should have identical routers.
Changed
floo_route_compnow supports source-based routing, and can output both destination ID and a route to the destination.- The chimneys have an additional port
route_table_ito receive the pre-computed routing table that is generated byfloogen. - System address map was renamed from
AddrMaptoSam. - The destination field in the flit header have a new type
dst_twhich is either set toroute_tfor the new source-based routing algorithm, andid_tfor all the other routing algorithms. - Bumped
idmadependency to0.6 - Renamed
rsvdfield in flits topayloadto better reflect its purpose. - Reordered directions in
route_direction_eto 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
bidirectionalflag forconnectionsinfloogenis set totrueby 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.
Fixed
- 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_iin the chimneys should not throw an error anymore in elaboration. - The
id_offsetshould not be correctly applied in the system address map. Before it resulted in negative coordinates. - The
axi_ch_etypes 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_arbiterwhen settingNumVirtChannelsto 1, that caused issue when compiling with Verilator. - Fixes issue that the routing table was not renderred when
IdTablewas used as the routing algorithm.
Removed
- 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.
v0.4.0
Added
- Added assertions to XY routers with routing optimization enabled to catch packets that want to Y->X which is illegal in XY routing.
Changed
- The parameters
EnMgrPortandEnSbrPortare 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_joinnow usesaxi_riscv_atomicsto filter out atomic operations. Theatop_filterare still there but are disabled by default.
Fixed
- Synthesis wrappers now use the more generic
id_tinstead of the deprecatedxy_id_ttype 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
- Removed
floo_synth_mesh,floo_synth_mesh_ruche&floo_synth_router_simplesynthesis wrappers, since they are not used anymore.
v0.3.1
Added
floo_narrow_wide_joinwhich joins a narrow and a wide AXI bus
Changed
- 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.
Fixed
- Output directory passed to
floogenis now relative to the current working directory instead of the installation folder offloogen. - Write ordering in the narrow-wide version was incorrect. Sending
AWandWbeats 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 sendingAWandWbeats over the same wide channel. TheAWandWbeats are coupled together and wormhole routing prevents interleaving of the data.
v0.3.0
Added
- Added NoC generation framework called
floogen. Also added documentation forfloogenin thedocsfolder. - Added Chimney Parameters
EnMgrPortandEnSbrPortto properly parametrize Manager resp. Subordinate-only instances of a chimney - Added
XYRouteOptparameter to router to enable/disable routing optimizations when usingXYRouting
Changed
- the exported include folder of the
floopackage is moved tohw/include. - The
LICENSEfile was updated to reflect that the project uses theSolderpad Hardware License Version 2.1for allhwfiles and theApache License 2.0for software related files. - The directory was restructured to accomodate the new
floogenframework. Thesrcwas renamed tohw, which contains only SystemVerilog code. Test modules and testbenches were also moved tohw/testandhw/tbrespectively. The same holds true for wave files, which are now located inhw/tb/wave. - The SV packages
floo_axi_pkgandfloo_narrow_wide_pkgare now generated byfloogen. The configuration files were moved to thefloogen/examplesfolder, and were aligned with the newfloogenconfiguration format, that is written inYAMLinstead ofhjson. - Reworked the python dependencies to use
pyproject.tomlinstead ofrequirements.txt. Furthermore, the python requirement was bumped to3.10due tofloogen(which makes heavy use of the newermatchsyntax) - Removed
xy_id_iports from AXI chimneys in favor of a genericid_iport for bothIdTableandXYRouting - Changed auto-generated package configuration schema. The
headerfield is replaced in favor of aroutingfield that better represents the information needed for routing. XYRoutingnow also supports a routing table similar to theIdTablerouting 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
- Fixed missing backpressure in the
NoRoBversion of the reorder buffer, which could lead to overflow of counters
Removed
axi_channel_comparewas removed in favor ofaxi_chan_comparefrom theaxirepository.- Removed flit generation script
flit_gen.pyincluding configuration files, since this is now integrated intofloogen(in conjunction with the--only-pkgflag)
v0.2.1
v0.2.0
Changed
- Renamed
*_flit_pkgto*_pkg - New naming scheme of ports: All AXI ports are now prefixed with
axi_, all FlooNoC links are now prefixed withfloo_ - Renamed
floo_param_pkgtofloo_test_pkg - Renamed AXI
resp_tstructs torsp_t - Changed configuration format to align with upcoming FlooNoC generation script
Added
- 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
Fixed
- Test modules
floo_axi_rand_slave&floo_dma_test_nodenow supportaddr_width > 32 - Fixed synchronization issues for ATOP B and R responses