From 2528708c15a189c216250b65f95877fce27273aa Mon Sep 17 00:00:00 2001 From: Howard Mao Date: Mon, 16 Mar 2020 13:59:06 -0700 Subject: [PATCH] add documentation on ring network and system bus --- docs/Customization/Memory-Hierarchy.rst | 14 ++++++++++++++ docs/Generators/TestChipIP.rst | 16 +++++++++++++++- .../src/main/scala/config/RocketConfigs.scala | 2 ++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/Customization/Memory-Hierarchy.rst b/docs/Customization/Memory-Hierarchy.rst index 6c924ceb..733e70c6 100644 --- a/docs/Customization/Memory-Hierarchy.rst +++ b/docs/Customization/Memory-Hierarchy.rst @@ -38,6 +38,20 @@ Note that these configurations fully remove the L2 cache and mbus. This configuration fully removes the L2 cache and memory bus by setting the number of channels and number of banks to 0. +The System Bus +-------------- + +The system bus is the TileLink network that sits between the tiles and the L2 +agents and MMIO peripherals. Ordinarily, it is a fully-connected crossbar, +but TestChipIP provides a version that uses a ring network instead. This can +be useful when taping out larger systems. To use the ring network system +bus, simply add the ``WithRingSystemBus`` config fragment to your configuration. + +.. literalinclude:: ../../generators/chipyard/src/main/scala/config/RocketConfigs.scala + :language: scala + :start-after: DOC include start: RingSystemBusRocket + :end-before: DOC include end: RingSystemBusRocket + The SiFive L2 Cache ------------------- diff --git a/docs/Generators/TestChipIP.rst b/docs/Generators/TestChipIP.rst index f85636b1..31f9ce53 100644 --- a/docs/Generators/TestChipIP.rst +++ b/docs/Generators/TestChipIP.rst @@ -3,7 +3,8 @@ Test Chip IP Chipyard includes a Test Chip IP library which provides various hardware widgets that may be useful when designing SoCs. This includes a :ref:`Serial Adapter`, -:ref:`Block Device Controller`, :ref:`TileLink SERDES`, :ref:`TileLink Switcher`, and :ref:`UART Adapter`. +:ref:`Block Device Controller`, :ref:`TileLink SERDES`, :ref:`TileLink Switcher`, +:ref:`TileLink Ring Network`, and :ref:`UART Adapter`. Serial Adapter -------------- @@ -60,6 +61,19 @@ the select signal once TileLink messages have begun sending. For an example of how to use the switcher, take a look at the ``SwitcherTest`` unit test in the `Test Chip IP unit tests `_. +TileLink Ring Network +--------------------- + +TestChipIP provides a TLRingNetwork generator that has a similar interface +to the TLXbar provided by RocketChip, but uses ring networks internally rather +than crossbars. This can be useful for chips with very wide TileLink networks +(many cores and L2 banks) that can sacrifice cross-section bandwidth to relieve +wire routing congestion. Documentation on how to use the ring network can be +found in :ref:`The System Bus`. The implementation itself can be found +`here `_, +and may serve as an example of how to implement your own TileLink network with +a different topology. + UART Adapter ------------ diff --git a/generators/chipyard/src/main/scala/config/RocketConfigs.scala b/generators/chipyard/src/main/scala/config/RocketConfigs.scala index 954c531b..e25680ca 100644 --- a/generators/chipyard/src/main/scala/config/RocketConfigs.scala +++ b/generators/chipyard/src/main/scala/config/RocketConfigs.scala @@ -364,6 +364,7 @@ class ScratchpadRocketConfig extends Config( new freechips.rocketchip.system.BaseConfig) // DOC include end: scratchpadrocket +// DOC include start: RingSystemBusRocket class RingSystemBusRocketConfig extends Config( new chipyard.iobinders.WithUARTAdapter ++ new chipyard.iobinders.WithTieOffInterrupts ++ @@ -382,3 +383,4 @@ class RingSystemBusRocketConfig extends Config( new freechips.rocketchip.subsystem.WithNExtTopInterrupts(0) ++ new freechips.rocketchip.subsystem.WithNBigCores(1) ++ new freechips.rocketchip.system.BaseConfig) +// DOC include end: RingSystemBusRocket