Merge remote-tracking branch 'origin/main' into clusters
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -142,3 +142,6 @@
|
|||||||
[submodule "tools/install-circt"]
|
[submodule "tools/install-circt"]
|
||||||
path = tools/install-circt
|
path = tools/install-circt
|
||||||
url = https://github.com/circt/install-circt/
|
url = https://github.com/circt/install-circt/
|
||||||
|
[submodule "toolchains/riscv-tools/riscv-spike-devices"]
|
||||||
|
path = toolchains/riscv-tools/riscv-spike-devices
|
||||||
|
url = https://github.com/ucb-bar/spike-devices.git
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ EXTRA_SIM_CXXFLAGS ?=
|
|||||||
EXTRA_SIM_LDFLAGS ?=
|
EXTRA_SIM_LDFLAGS ?=
|
||||||
EXTRA_SIM_SOURCES ?=
|
EXTRA_SIM_SOURCES ?=
|
||||||
EXTRA_SIM_REQS ?=
|
EXTRA_SIM_REQS ?=
|
||||||
ENABLE_CUSTOM_FIRRTL_PASS += $(ENABLE_YOSYS_FLOW)
|
|
||||||
|
|
||||||
ifneq ($(ASPECTS), )
|
ifneq ($(ASPECTS), )
|
||||||
comma = ,
|
comma = ,
|
||||||
|
|||||||
@@ -50,3 +50,24 @@ Spike-as-a-Tile can be configured with custom IPC, commit logging, and other beh
|
|||||||
* ``+spike-fast-clint``: Enables fast-forwarding through WFI stalls by generating fake timer interrupts
|
* ``+spike-fast-clint``: Enables fast-forwarding through WFI stalls by generating fake timer interrupts
|
||||||
* ``+spike-debug``: Enables debug Spike logging
|
* ``+spike-debug``: Enables debug Spike logging
|
||||||
* ``+spike-verbose``: Enables Spike commit-log generation
|
* ``+spike-verbose``: Enables Spike commit-log generation
|
||||||
|
|
||||||
|
Adding a new spike device model
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
Spike comes with a few functional device models such as UART, CLINT, and PLIC.
|
||||||
|
However, you may want to add custom device models into Spike such as a block device.
|
||||||
|
Example devices are in the ``toolchains/riscv-tools/riscv-spike-devices`` directory.
|
||||||
|
These devices are compiled as a shared library that can be dynamically linked to Spike.
|
||||||
|
|
||||||
|
To compile these plugins, run ``make`` inside ``toolchains/riscv-tools/riscv-spike-devices``. This will generate a ``libspikedevices.so``.
|
||||||
|
|
||||||
|
To hook up a block device to spike and provide a default image to initialize the block device, run
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
|
spike --extlib=libspikedevices.so --device="iceblk,img=<path to Linux image>" <path to kernel binary>
|
||||||
|
|
||||||
|
.
|
||||||
|
|
||||||
|
The ``--device`` option consists of the device name and arguments.
|
||||||
|
In the above example ``iceblk`` is the device name and ``img=<path to Linux image>`` is the argument passed on to the plugin device.
|
||||||
|
|||||||
@@ -123,8 +123,7 @@ The ``buildfile`` make target has dependencies on both (1) the Verilog that is e
|
|||||||
and (2) the mapping of memory instances in the design to SRAM macros;
|
and (2) the mapping of memory instances in the design to SRAM macros;
|
||||||
all files related to these two steps reside in the ``generated-src/chipyard.harness.TestHarness.TinyRocketConfig-ChipTop`` directory.
|
all files related to these two steps reside in the ``generated-src/chipyard.harness.TestHarness.TinyRocketConfig-ChipTop`` directory.
|
||||||
Note that the files in ``generated-src`` vary for each tool/technology flow.
|
Note that the files in ``generated-src`` vary for each tool/technology flow.
|
||||||
This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows
|
This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows, so these flows should be run in separate
|
||||||
(due to the ``ENABLE_YOSYS_FLOW`` flag present for the OpenROAD flow), so these flows should be run in separate
|
|
||||||
chipyard installations. If the wrong sources are generated, simply run ``make buildfile -B`` to rebuild all targets correctly.
|
chipyard installations. If the wrong sources are generated, simply run ``make buildfile -B`` to rebuild all targets correctly.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ Prerequisites
|
|||||||
* OpenROAD flow tools (NOTE: tutorial may break with different tool versions):
|
* OpenROAD flow tools (NOTE: tutorial may break with different tool versions):
|
||||||
|
|
||||||
* **Yosys 0.27+3** (synthesis), install `using conda <https://anaconda.org/litex-hub/yosys>`__ or `from source <https://yosyshq.net/yosys/download.html>`__
|
* **Yosys 0.27+3** (synthesis), install `using conda <https://anaconda.org/litex-hub/yosys>`__ or `from source <https://yosyshq.net/yosys/download.html>`__
|
||||||
* **OpenROAD v2.0-7070-g0264023b6** (place-and-route), install `using conda <https://anaconda.org/litex-hub/openroad>`__ (note that GUI is disabled in conda package) or
|
* **OpenROAD v2.0-7070-g0264023b6** (place-and-route), install `using conda <https://anaconda.org/litex-hub/openroad>`__ (note that GUI is disabled in conda package) or
|
||||||
`from source <https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/docs/user/Build.md>`__ (git hash: 0264023b6c2a8ae803b8d440478d657387277d93)
|
`from source <https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/docs/user/Build.md>`__ (git hash: 0264023b6c2a8ae803b8d440478d657387277d93)
|
||||||
* **KLayout 0.28.5** (DEF to GDSII conversion, DRC), install `using conda <https://anaconda.org/litex-hub/klayout>`__ or `from source <https://www.klayout.de/build.html>`__
|
* **KLayout 0.28.5** (DEF to GDSII conversion, DRC), install `using conda <https://anaconda.org/litex-hub/klayout>`__ or `from source <https://www.klayout.de/build.html>`__
|
||||||
* **Magic 8.3.376** (DRC), install `using conda <https://anaconda.org/litex-hub/magic>`__ or `from source <http://www.opencircuitdesign.com/magic/install.html>`__
|
* **Magic 8.3.376** (DRC), install `using conda <https://anaconda.org/litex-hub/magic>`__ or `from source <http://www.opencircuitdesign.com/magic/install.html>`__
|
||||||
@@ -161,8 +161,7 @@ The ``buildfile`` make target has dependencies on both (1) the Verilog that is e
|
|||||||
and (2) the mapping of memory instances in the design to SRAM macros;
|
and (2) the mapping of memory instances in the design to SRAM macros;
|
||||||
all files related to these two steps reside in the ``generated-src/chipyard.harness.TestHarness.TinyRocketConfig-ChipTop`` directory.
|
all files related to these two steps reside in the ``generated-src/chipyard.harness.TestHarness.TinyRocketConfig-ChipTop`` directory.
|
||||||
Note that the files in ``generated-src`` vary for each tool/technology flow.
|
Note that the files in ``generated-src`` vary for each tool/technology flow.
|
||||||
This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows
|
This especially applies to the Sky130 Commercial vs OpenROAD tutorial flows, so these flows should be run in separate
|
||||||
(due to the ``ENABLE_YOSYS_FLOW`` flag, explained below), so these flows should be run in separate
|
|
||||||
chipyard installations. If the wrong sources are generated, simply run ``make buildfile -B`` to rebuild all targets correctly.
|
chipyard installations. If the wrong sources are generated, simply run ``make buildfile -B`` to rebuild all targets correctly.
|
||||||
|
|
||||||
|
|
||||||
@@ -175,7 +174,6 @@ which will cause additional variables to be set in ``tutorial.mk``, a few of whi
|
|||||||
* ``DESIGN_CONF`` and ``EXTRA_CONFS`` allow for additonal design-specific overrides of the Hammer IR in ``example-sky130.yml``
|
* ``DESIGN_CONF`` and ``EXTRA_CONFS`` allow for additonal design-specific overrides of the Hammer IR in ``example-sky130.yml``
|
||||||
* ``VLSI_OBJ_DIR=build-sky130-openroad`` gives the build directory a unique name to allow running multiple flows in the same repo. Note that for the rest of the tutorial we will still refer to this directory in file paths as ``build``, again for brevity.
|
* ``VLSI_OBJ_DIR=build-sky130-openroad`` gives the build directory a unique name to allow running multiple flows in the same repo. Note that for the rest of the tutorial we will still refer to this directory in file paths as ``build``, again for brevity.
|
||||||
* ``VLSI_TOP`` is by default ``ChipTop``, which is the name of the top-level Verilog module generated in the Chipyard SoC configs. By instead setting ``VLSI_TOP=Rocket``, we can use the Rocket core as the top-level module for the VLSI flow, which consists only of a single RISC-V core (and no caches, peripherals, buses, etc). This is useful to run through this tutorial quickly, and does not rely on any SRAMs.
|
* ``VLSI_TOP`` is by default ``ChipTop``, which is the name of the top-level Verilog module generated in the Chipyard SoC configs. By instead setting ``VLSI_TOP=Rocket``, we can use the Rocket core as the top-level module for the VLSI flow, which consists only of a single RISC-V core (and no caches, peripherals, buses, etc). This is useful to run through this tutorial quickly, and does not rely on any SRAMs.
|
||||||
* ``ENABLE_YOSYS_FLOW = 1`` is required for synthesis through Yosys. This reverts to the Scala FIRRTL Compiler so that unsupported multidimensional arrays are not generated in the Verilog.
|
|
||||||
|
|
||||||
Running the VLSI Flow
|
Running the VLSI Flow
|
||||||
---------------------
|
---------------------
|
||||||
@@ -275,7 +273,7 @@ This is because Magic and Netgen, as of the writing of this tutorial, do not hav
|
|||||||
so to view the DRC/LVS results for debugging you must launch the tool interactively, then run DRC/LVS checks,
|
so to view the DRC/LVS results for debugging you must launch the tool interactively, then run DRC/LVS checks,
|
||||||
which is done by the ``generated-scripts/view_[drc|lvs]`` scripts. This is not the case for KLayout, which does have a loadable database format.
|
which is done by the ``generated-scripts/view_[drc|lvs]`` scripts. This is not the case for KLayout, which does have a loadable database format.
|
||||||
|
|
||||||
Below is the window you should see when loading the KLayout DRC results interactively. Note that most of these DRC errors are
|
Below is the window you should see when loading the KLayout DRC results interactively. Note that most of these DRC errors are
|
||||||
from special rules relating to Sky130 SRAMs, which have been verified separately. In the future the KLayout tool plugin should blackbox these
|
from special rules relating to Sky130 SRAMs, which have been verified separately. In the future the KLayout tool plugin should blackbox these
|
||||||
SRAM macros by default, but this feature does not exist yet.
|
SRAM macros by default, but this feature does not exist yet.
|
||||||
|
|
||||||
|
|||||||
@@ -447,18 +447,6 @@ chipyard_simif_t::chipyard_simif_t(size_t icache_ways,
|
|||||||
use_stq(false),
|
use_stq(false),
|
||||||
htif(nullptr),
|
htif(nullptr),
|
||||||
fast_clint(false),
|
fast_clint(false),
|
||||||
cfg(std::make_pair(0, 0),
|
|
||||||
nullptr,
|
|
||||||
isastr,
|
|
||||||
"MSU",
|
|
||||||
"vlen:128,elen:64",
|
|
||||||
false,
|
|
||||||
endianness_little,
|
|
||||||
pmpregions,
|
|
||||||
std::vector<mem_cfg_t>(),
|
|
||||||
std::vector<size_t>(),
|
|
||||||
false,
|
|
||||||
0),
|
|
||||||
accessed_tofrom_host(false),
|
accessed_tofrom_host(false),
|
||||||
icache_ways(icache_ways),
|
icache_ways(icache_ways),
|
||||||
icache_sets(icache_sets),
|
icache_sets(icache_sets),
|
||||||
@@ -470,6 +458,19 @@ chipyard_simif_t::chipyard_simif_t(size_t icache_ways,
|
|||||||
mmio_inflight(false)
|
mmio_inflight(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
cfg.initrd_bounds = std::make_pair(0, 0);
|
||||||
|
cfg.bootargs = nullptr;
|
||||||
|
cfg.isa = isastr;
|
||||||
|
cfg.priv = "MSU";
|
||||||
|
cfg.varch = "vlen:128,elen:64";
|
||||||
|
cfg.misaligned = false;
|
||||||
|
cfg.endianness = endianness_little;
|
||||||
|
cfg.pmpregions = pmpregions;
|
||||||
|
cfg.mem_layout = std::vector<mem_cfg_t>();
|
||||||
|
cfg.hartids = std::vector<size_t>();
|
||||||
|
cfg.explicit_hartids = false;
|
||||||
|
cfg.trigger_count = 0;
|
||||||
|
|
||||||
icache.resize(icache_ways);
|
icache.resize(icache_ways);
|
||||||
for (auto &w : icache) {
|
for (auto &w : icache) {
|
||||||
w.resize(icache_sets);
|
w.resize(icache_sets);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import freechips.rocketchip.subsystem.{SBUS, MBUS}
|
|||||||
|
|
||||||
import constellation.channel._
|
import constellation.channel._
|
||||||
import constellation.routing._
|
import constellation.routing._
|
||||||
|
import constellation.router._
|
||||||
import constellation.topology._
|
import constellation.topology._
|
||||||
import constellation.noc._
|
import constellation.noc._
|
||||||
import constellation.soc.{GlobalNoCParams}
|
import constellation.soc.{GlobalNoCParams}
|
||||||
@@ -62,19 +63,19 @@ import scala.collection.immutable.ListMap
|
|||||||
*/
|
*/
|
||||||
// DOC include start: MultiNoCConfig
|
// DOC include start: MultiNoCConfig
|
||||||
class MultiNoCConfig extends Config(
|
class MultiNoCConfig extends Config(
|
||||||
new constellation.soc.WithCbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithCbusNoC(constellation.protocol.SimpleTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"serial-tl" -> 0),
|
"serial-tl" -> 0),
|
||||||
outNodeMapping = ListMap(
|
outNodeMapping = ListMap(
|
||||||
"error" -> 1, "l2[0]" -> 2, "pbus" -> 3, "plic" -> 4,
|
"error" -> 1, "ctrls[0]" -> 2, "pbus" -> 3, "plic" -> 4,
|
||||||
"clint" -> 5, "dmInner" -> 6, "bootrom" -> 7, "clock" -> 8)),
|
"clint" -> 5, "dmInner" -> 6, "bootrom" -> 7, "clock" -> 8)),
|
||||||
NoCParams(
|
NoCParams(
|
||||||
topology = TerminalRouter(BidirectionalLine(9)),
|
topology = TerminalRouter(BidirectionalLine(9)),
|
||||||
channelParamGen = (a, b) => UserChannelParams(Seq.fill(5) { UserVirtualChannelParams(4) }),
|
channelParamGen = (a, b) => UserChannelParams(Seq.fill(5) { UserVirtualChannelParams(4) }),
|
||||||
routingRelation = NonblockingVirtualSubnetworksRouting(TerminalRouterRouting(BidirectionalLineRouting()), 5, 1))
|
routingRelation = NonblockingVirtualSubnetworksRouting(TerminalRouterRouting(BidirectionalLineRouting()), 5, 1))
|
||||||
)) ++
|
)) ++
|
||||||
new constellation.soc.WithMbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithMbusNoC(constellation.protocol.SimpleTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"L2 InclusiveCache[0]" -> 1, "L2 InclusiveCache[1]" -> 2,
|
"L2 InclusiveCache[0]" -> 1, "L2 InclusiveCache[1]" -> 2,
|
||||||
@@ -87,7 +88,7 @@ class MultiNoCConfig extends Config(
|
|||||||
channelParamGen = (a, b) => UserChannelParams(Seq.fill(10) { UserVirtualChannelParams(4) }),
|
channelParamGen = (a, b) => UserChannelParams(Seq.fill(10) { UserVirtualChannelParams(4) }),
|
||||||
routingRelation = BlockingVirtualSubnetworksRouting(TerminalRouterRouting(BidirectionalTorus1DShortestRouting()), 5, 2))
|
routingRelation = BlockingVirtualSubnetworksRouting(TerminalRouterRouting(BidirectionalTorus1DShortestRouting()), 5, 2))
|
||||||
)) ++
|
)) ++
|
||||||
new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithSbusNoC(constellation.protocol.SimpleTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"Core 0" -> 1, "Core 1" -> 2, "Core 2" -> 4 , "Core 3" -> 7,
|
"Core 0" -> 1, "Core 1" -> 2, "Core 2" -> 4 , "Core 3" -> 7,
|
||||||
@@ -162,15 +163,15 @@ class SharedNoCConfig extends Config(
|
|||||||
BidirectionalLineRouting()))), 10, 2)
|
BidirectionalLineRouting()))), 10, 2)
|
||||||
)
|
)
|
||||||
)) ++
|
)) ++
|
||||||
new constellation.soc.WithMbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithMbusNoC(constellation.protocol.GlobalTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"Cache[0]" -> 0, "Cache[1]" -> 2, "Cache[2]" -> 8, "Cache[3]" -> 6),
|
"Cache[0]" -> 0, "Cache[1]" -> 2, "Cache[2]" -> 8, "Cache[3]" -> 6),
|
||||||
outNodeMapping = ListMap(
|
outNodeMapping = ListMap(
|
||||||
"system[0]" -> 3, "system[1]" -> 5,
|
"system[0]" -> 3, "system[1]" -> 5,
|
||||||
"serdesser" -> 9))
|
"serdesser" -> 9))
|
||||||
), true) ++
|
)) ++
|
||||||
new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithSbusNoC(constellation.protocol.GlobalTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"serial-tl" -> 9, "Core 0" -> 2,
|
"serial-tl" -> 9, "Core 0" -> 2,
|
||||||
@@ -179,7 +180,7 @@ class SharedNoCConfig extends Config(
|
|||||||
outNodeMapping = ListMap(
|
outNodeMapping = ListMap(
|
||||||
"system[0]" -> 0, "system[1]" -> 2, "system[2]" -> 8, "system[3]" -> 6,
|
"system[0]" -> 0, "system[1]" -> 2, "system[2]" -> 8, "system[3]" -> 6,
|
||||||
"pbus" -> 4))
|
"pbus" -> 4))
|
||||||
), true) ++
|
)) ++
|
||||||
new freechips.rocketchip.subsystem.WithNBigCores(8) ++
|
new freechips.rocketchip.subsystem.WithNBigCores(8) ++
|
||||||
new freechips.rocketchip.subsystem.WithNBanks(4) ++
|
new freechips.rocketchip.subsystem.WithNBanks(4) ++
|
||||||
new freechips.rocketchip.subsystem.WithNMemoryChannels(2) ++
|
new freechips.rocketchip.subsystem.WithNMemoryChannels(2) ++
|
||||||
@@ -187,8 +188,9 @@ class SharedNoCConfig extends Config(
|
|||||||
)
|
)
|
||||||
// DOC include end: SharedNoCConfig
|
// DOC include end: SharedNoCConfig
|
||||||
|
|
||||||
|
// This Config implements a simple ring interconnect for the system bus
|
||||||
class SbusRingNoCConfig extends Config(
|
class SbusRingNoCConfig extends Config(
|
||||||
new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithSbusNoC(constellation.protocol.SplitACDxBETLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"Core 0" -> 0,
|
"Core 0" -> 0,
|
||||||
@@ -206,12 +208,60 @@ class SbusRingNoCConfig extends Config(
|
|||||||
"system[2]" -> 11,
|
"system[2]" -> 11,
|
||||||
"system[3]" -> 12,
|
"system[3]" -> 12,
|
||||||
"pbus" -> 8)), // TSI is on the pbus, so serial-tl and pbus should be on the same node
|
"pbus" -> 8)), // TSI is on the pbus, so serial-tl and pbus should be on the same node
|
||||||
NoCParams(
|
acdNoCParams = NoCParams(
|
||||||
topology = UnidirectionalTorus1D(13),
|
topology = UnidirectionalTorus1D(13),
|
||||||
channelParamGen = (a, b) => UserChannelParams(Seq.fill(10) { UserVirtualChannelParams(4) }),
|
channelParamGen = (a, b) => UserChannelParams(Seq.fill(6) { UserVirtualChannelParams(4) }),
|
||||||
routingRelation = NonblockingVirtualSubnetworksRouting(UnidirectionalTorus1DDatelineRouting(), 5, 2))
|
routingRelation = NonblockingVirtualSubnetworksRouting(UnidirectionalTorus1DDatelineRouting(), 3, 2)),
|
||||||
|
beNoCParams = NoCParams(
|
||||||
|
topology = UnidirectionalTorus1D(13),
|
||||||
|
channelParamGen = (a, b) => UserChannelParams(Seq.fill(4) { UserVirtualChannelParams(1) }),
|
||||||
|
routingRelation = NonblockingVirtualSubnetworksRouting(UnidirectionalTorus1DDatelineRouting(), 2, 2))
|
||||||
)) ++
|
)) ++
|
||||||
new freechips.rocketchip.subsystem.WithNBigCores(8) ++
|
new freechips.rocketchip.subsystem.WithNBigCores(8) ++
|
||||||
new freechips.rocketchip.subsystem.WithNBanks(4) ++
|
new freechips.rocketchip.subsystem.WithNBanks(4) ++
|
||||||
new chipyard.config.AbstractConfig
|
new chipyard.config.AbstractConfig
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// This config integrates a mesh interconnect for the system bus, and divides the system bus
|
||||||
|
// tilelink messages across two isolated interconnects
|
||||||
|
class SbusMeshNoCConfig extends Config(
|
||||||
|
new constellation.soc.WithSbusNoC(constellation.protocol.SplitACDxBETLNoCParams(
|
||||||
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
|
inNodeMapping = ListMap(
|
||||||
|
"Core 0 " -> 0,
|
||||||
|
"Core 1 " -> 1,
|
||||||
|
"Core 2 " -> 2,
|
||||||
|
"Core 3 " -> 3,
|
||||||
|
"Core 4 " -> 4,
|
||||||
|
"Core 5 " -> 7,
|
||||||
|
"Core 6 " -> 8,
|
||||||
|
"Core 7 " -> 11,
|
||||||
|
"Core 8 " -> 12,
|
||||||
|
"Core 9 " -> 13,
|
||||||
|
"Core 10 " -> 14,
|
||||||
|
"Core 11 " -> 15,
|
||||||
|
"serial-tl" -> 0),
|
||||||
|
outNodeMapping = ListMap(
|
||||||
|
"system[0]" -> 5,
|
||||||
|
"system[1]" -> 6,
|
||||||
|
"system[2]" -> 9,
|
||||||
|
"system[3]" -> 10,
|
||||||
|
"pbus" -> 0)), // TSI is on the pbus, so serial-tl and pbus should be on the same node
|
||||||
|
acdNoCParams = NoCParams(
|
||||||
|
topology = Mesh2D(4, 4),
|
||||||
|
channelParamGen = (a, b) => UserChannelParams(Seq.fill(3) { UserVirtualChannelParams(3) }, unifiedBuffer = false),
|
||||||
|
routerParams = (i) => UserRouterParams(combineRCVA=true, combineSAST=true),
|
||||||
|
routingRelation = NonblockingVirtualSubnetworksRouting(Mesh2DDimensionOrderedRouting(), 3, 1)),
|
||||||
|
beNoCParams = NoCParams(
|
||||||
|
topology = Mesh2D(4, 4),
|
||||||
|
channelParamGen = (a, b) => UserChannelParams(Seq.fill(2) { UserVirtualChannelParams(3) }, unifiedBuffer = false),
|
||||||
|
routerParams = (i) => UserRouterParams(combineRCVA=true, combineSAST=true),
|
||||||
|
routingRelation = NonblockingVirtualSubnetworksRouting(Mesh2DDimensionOrderedRouting(), 2, 1)),
|
||||||
|
beDivision = 4
|
||||||
|
)) ++
|
||||||
|
new freechips.rocketchip.subsystem.WithNBigCores(12) ++
|
||||||
|
new freechips.rocketchip.subsystem.WithNBanks(4) ++
|
||||||
|
new chipyard.config.WithSystemBusWidth(128) ++
|
||||||
|
new chipyard.config.AbstractConfig
|
||||||
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -90,14 +90,14 @@ class TutorialNoCConfig extends Config(
|
|||||||
// The inNodeMapping and outNodeMapping values are the physical identifiers of
|
// The inNodeMapping and outNodeMapping values are the physical identifiers of
|
||||||
// routers on the topology to map the agents to. Try changing these to any
|
// routers on the topology to map the agents to. Try changing these to any
|
||||||
// value within the range [0, topology.nNodes)
|
// value within the range [0, topology.nNodes)
|
||||||
new constellation.soc.WithPbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithPbusNoC(constellation.protocol.GlobalTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap("Core" -> 7),
|
inNodeMapping = ListMap("Core" -> 7),
|
||||||
outNodeMapping = ListMap(
|
outNodeMapping = ListMap(
|
||||||
"pbus" -> 8, "uart" -> 9, "control" -> 10, "gcd" -> 11,
|
"pbus" -> 8, "uart" -> 9, "control" -> 10, "gcd" -> 11,
|
||||||
"writeQueue[0]" -> 0, "writeQueue[1]" -> 1, "tailChain[0]" -> 2))
|
"writeQueue[0]" -> 0, "writeQueue[1]" -> 1, "tailChain[0]" -> 2))
|
||||||
), true) ++
|
)) ++
|
||||||
new constellation.soc.WithSbusNoC(constellation.protocol.TLNoCParams(
|
new constellation.soc.WithSbusNoC(constellation.protocol.GlobalTLNoCParams(
|
||||||
constellation.protocol.DiplomaticNetworkNodeMapping(
|
constellation.protocol.DiplomaticNetworkNodeMapping(
|
||||||
inNodeMapping = ListMap(
|
inNodeMapping = ListMap(
|
||||||
"Core 0" -> 0, "Core 1" -> 1,
|
"Core 0" -> 0, "Core 1" -> 1,
|
||||||
@@ -105,7 +105,7 @@ class TutorialNoCConfig extends Config(
|
|||||||
outNodeMapping = ListMap(
|
outNodeMapping = ListMap(
|
||||||
"system[0]" -> 3, "system[1]" -> 4, "system[2]" -> 5, "system[3]" -> 6,
|
"system[0]" -> 3, "system[1]" -> 4, "system[2]" -> 5, "system[3]" -> 6,
|
||||||
"pbus" -> 7))
|
"pbus" -> 7))
|
||||||
), true) ++
|
)) ++
|
||||||
new chipyard.example.WithGCD ++
|
new chipyard.example.WithGCD ++
|
||||||
new chipyard.harness.WithLoopbackNIC ++
|
new chipyard.harness.WithLoopbackNIC ++
|
||||||
new icenet.WithIceNIC ++
|
new icenet.WithIceNIC ++
|
||||||
|
|||||||
Submodule generators/constellation updated: 03ed9e4ecd...3632183fd1
Submodule generators/testchipip updated: 55f24d588f...4ba69e66e8
@@ -125,4 +125,10 @@ cd generators/testchipip/uart_tsi
|
|||||||
make
|
make
|
||||||
cp uart_tsi $RISCV/bin
|
cp uart_tsi $RISCV/bin
|
||||||
|
|
||||||
|
echo '==> Installing spike-devices'
|
||||||
|
cd $RDIR
|
||||||
|
git submodule update --init toolchains/riscv-tools/riscv-spike-devices
|
||||||
|
cd toolchains/riscv-tools/riscv-spike-devices
|
||||||
|
make install
|
||||||
|
|
||||||
echo "Extra Toolchain Utilities/Tests Build Complete!"
|
echo "Extra Toolchain Utilities/Tests Build Complete!"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Replace text in a file given a key identifying a block to replace.
|
# Replace text in a file given a key identifying a block to replace.
|
||||||
# If the file doesn't exist, create it.
|
# If the file doesn't exist, create it.
|
||||||
|
|||||||
Submodule toolchains/riscv-tools/riscv-isa-sim updated: 5a499ef718...4d8651be94
1
toolchains/riscv-tools/riscv-spike-devices
Submodule
1
toolchains/riscv-tools/riscv-spike-devices
Submodule
Submodule toolchains/riscv-tools/riscv-spike-devices added at 8b4836db0b
@@ -22,27 +22,16 @@ vlsi.inputs.placement_constraints:
|
|||||||
bottom: 10
|
bottom: 10
|
||||||
|
|
||||||
# Place SRAM memory instances
|
# Place SRAM memory instances
|
||||||
# SRAM paths and configurations are slightly different due to ENABLE_YOSYS_FLOW flag
|
# data cache
|
||||||
# data cache
|
- path: "RocketTile/dcache/data/data_arrays_0/data_arrays_0_ext/mem_0_0"
|
||||||
- path: "RocketTile/dcache/data/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0"
|
|
||||||
type: hardmacro
|
type: hardmacro
|
||||||
x: 50
|
x: 50
|
||||||
y: 50
|
y: 50
|
||||||
orientation: r90
|
orientation: r90
|
||||||
- path: "RocketTile/dcache/data/data_arrays_0_1/data_arrays_0_0_ext/mem_0_0"
|
- path: "RocketTile/dcache/data/data_arrays_0/data_arrays_0_ext/mem_1_0"
|
||||||
type: hardmacro
|
type: hardmacro
|
||||||
x: 50
|
x: 50
|
||||||
y: 450
|
y: 800
|
||||||
orientation: r90
|
|
||||||
- path: "RocketTile/dcache/data/data_arrays_0_2/data_arrays_0_0_ext/mem_0_0"
|
|
||||||
type: hardmacro
|
|
||||||
x: 50
|
|
||||||
y: 850
|
|
||||||
orientation: r90
|
|
||||||
- path: "RocketTile/dcache/data/data_arrays_0_3/data_arrays_0_0_ext/mem_0_0"
|
|
||||||
type: hardmacro
|
|
||||||
x: 50
|
|
||||||
y: 1250
|
|
||||||
orientation: r90
|
orientation: r90
|
||||||
|
|
||||||
# tag array
|
# tag array
|
||||||
@@ -53,7 +42,7 @@ vlsi.inputs.placement_constraints:
|
|||||||
orientation: r90
|
orientation: r90
|
||||||
|
|
||||||
# instruction cache
|
# instruction cache
|
||||||
- path: "RocketTile/frontend/icache/data_arrays_0_0/data_arrays_0_0_0_ext/mem_0_0"
|
- path: "RocketTile/frontend/icache/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0"
|
||||||
type: hardmacro
|
type: hardmacro
|
||||||
x: 50
|
x: 50
|
||||||
y: 2100
|
y: 2100
|
||||||
|
|||||||
@@ -54,8 +54,6 @@ vlsi.inputs.placement_constraints:
|
|||||||
bottom: 10
|
bottom: 10
|
||||||
|
|
||||||
# Place SRAM memory instances
|
# Place SRAM memory instances
|
||||||
# SRAM paths and configurations are slightly different due to ENABLE_YOSYS_FLOW flag
|
|
||||||
# data cache
|
|
||||||
- path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/dcache/data/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0"
|
- path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/dcache/data/data_arrays_0_0/data_arrays_0_0_ext/mem_0_0"
|
||||||
type: hardmacro
|
type: hardmacro
|
||||||
x: 50
|
x: 50
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ vlsi.inputs.placement_constraints:
|
|||||||
x: 50
|
x: 50
|
||||||
y: 50
|
y: 50
|
||||||
orientation: r90
|
orientation: r90
|
||||||
|
- path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/dcache/data/data_arrays_0/data_arrays_0_ext/mem_1_0"
|
||||||
|
type: hardmacro
|
||||||
|
x: 50
|
||||||
|
y: 800
|
||||||
|
orientation: r90
|
||||||
|
|
||||||
# tag array
|
# tag array
|
||||||
- path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/frontend/icache/tag_array_0/tag_array_0_ext/mem_0_0"
|
- path: "ChipTop/system/tile_prci_domain/tile_reset_domain_tile/frontend/icache/tag_array_0/tag_array_0_ext/mem_0_0"
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ ifeq ($(tutorial),sky130-openroad)
|
|||||||
example-designs/sky130-openroad-rockettile.yml, )
|
example-designs/sky130-openroad-rockettile.yml, )
|
||||||
VLSI_OBJ_DIR ?= build-sky130-openroad
|
VLSI_OBJ_DIR ?= build-sky130-openroad
|
||||||
INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONFS) $(EXTRA_CONFS)
|
INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONFS) $(EXTRA_CONFS)
|
||||||
# Yosys compatibility for CIRCT-generated Verilog, at the expense of elaboration time.
|
# Yosys compatibility for CIRCT-generated Verilog
|
||||||
ENABLE_YOSYS_FLOW = 1
|
ENABLE_YOSYS_FLOW = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user